Merge branch 'development' into feature/addSubproviders
* development: Update README.md Inline network module Stop supporting different file extensions in abi-gen Refactor networkId out of web3Wrapper Update connect types in preperation for publishing Fix CI command Address feedback Refactor web3Wrapper to a separate package # Conflicts: # package.json # packages/website/ts/blockchain.ts
This commit is contained in:
commit
af8d24d0eb
@ -19,7 +19,7 @@ jobs:
|
||||
- run: wget https://s3.amazonaws.com/testrpc-shapshots/${CONTRACTS_COMMIT_HASH}.zip
|
||||
- run: unzip ${CONTRACTS_COMMIT_HASH}.zip -d testrpc_snapshot
|
||||
- run: node ./node_modules/lerna/bin/lerna.js bootstrap
|
||||
- run: yarn lerna:run bootstrap
|
||||
- run: yarn lerna:run build
|
||||
- run:
|
||||
name: testrpc
|
||||
command: npm run testrpc -- --db testrpc_snapshot
|
||||
|
@ -17,7 +17,6 @@
|
||||
"async-child-process": "^1.1.1",
|
||||
"semver-sort": "^0.0.4",
|
||||
"publish-release": "0xproject/publish-release",
|
||||
"es6-promisify": "^5.0.0",
|
||||
"ethereumjs-testrpc": "6.0.3"
|
||||
}
|
||||
}
|
||||
|
@ -46,8 +46,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@0xproject/tslint-config": "^0.2.0",
|
||||
"abi-gen": "^0.0.0",
|
||||
"abi-gen-templates": "^0.0.0",
|
||||
"@0xproject/types": "^0.0.1",
|
||||
"@types/bintrees": "^1.0.2",
|
||||
"@types/jsonschema": "^1.1.1",
|
||||
"@types/lodash": "^4.14.86",
|
||||
@ -55,6 +54,8 @@
|
||||
"@types/node": "^8.0.53",
|
||||
"@types/sinon": "^2.2.2",
|
||||
"@types/uuid": "^3.4.2",
|
||||
"abi-gen": "^0.0.1",
|
||||
"abi-gen-templates": "^0.0.1",
|
||||
"awesome-typescript-loader": "^3.1.3",
|
||||
"chai": "^4.0.1",
|
||||
"chai-as-promised": "^7.1.0",
|
||||
@ -87,6 +88,8 @@
|
||||
"dependencies": {
|
||||
"@0xproject/assert": "^0.0.6",
|
||||
"@0xproject/json-schemas": "^0.6.9",
|
||||
"@0xproject/utils": "^0.0.1",
|
||||
"@0xproject/web3-wrapper": "^0.0.1",
|
||||
"bignumber.js": "~4.1.0",
|
||||
"bintrees": "^1.0.2",
|
||||
"bn.js": "^4.11.8",
|
||||
|
@ -1,4 +1,5 @@
|
||||
import {schemas, SchemaValidator} from '@0xproject/json-schemas';
|
||||
import {Web3Wrapper} from '@0xproject/web3-wrapper';
|
||||
import BigNumber from 'bignumber.js';
|
||||
import * as ethUtil from 'ethereumjs-util';
|
||||
import * as _ from 'lodash';
|
||||
@ -29,7 +30,6 @@ import {intervalUtils} from './utils/interval_utils';
|
||||
import {OrderStateUtils} from './utils/order_state_utils';
|
||||
import {signatureUtils} from './utils/signature_utils';
|
||||
import {utils} from './utils/utils';
|
||||
import {Web3Wrapper} from './web3_wrapper';
|
||||
|
||||
// Customize our BigNumber instances
|
||||
bigNumberConfigs.configure();
|
||||
@ -179,24 +179,31 @@ export class ZeroEx {
|
||||
const defaults = {
|
||||
gasPrice: config.gasPrice,
|
||||
};
|
||||
this._web3Wrapper = new Web3Wrapper(provider, config.networkId, defaults);
|
||||
this._web3Wrapper = new Web3Wrapper(provider, defaults);
|
||||
this.proxy = new TokenTransferProxyWrapper(
|
||||
this._web3Wrapper,
|
||||
config.networkId,
|
||||
config.tokenTransferProxyContractAddress,
|
||||
);
|
||||
this.token = new TokenWrapper(
|
||||
this._web3Wrapper,
|
||||
config.networkId,
|
||||
this._abiDecoder,
|
||||
this.proxy,
|
||||
);
|
||||
this.exchange = new ExchangeWrapper(
|
||||
this._web3Wrapper,
|
||||
config.networkId,
|
||||
this._abiDecoder,
|
||||
this.token,
|
||||
config.exchangeContractAddress,
|
||||
);
|
||||
this.tokenRegistry = new TokenRegistryWrapper(this._web3Wrapper, config.tokenRegistryContractAddress);
|
||||
this.etherToken = new EtherTokenWrapper(this._web3Wrapper, this.token, config.etherTokenContractAddress);
|
||||
this.tokenRegistry = new TokenRegistryWrapper(
|
||||
this._web3Wrapper, config.networkId, config.tokenRegistryContractAddress,
|
||||
);
|
||||
this.etherToken = new EtherTokenWrapper(
|
||||
this._web3Wrapper, config.networkId, this.token, config.etherTokenContractAddress,
|
||||
);
|
||||
this.orderStateWatcher = new OrderStateWatcher(
|
||||
this._web3Wrapper, this._abiDecoder, this.token, this.exchange, config.orderWatcherConfig,
|
||||
);
|
||||
|
@ -1,3 +1,4 @@
|
||||
import {Web3Wrapper} from '@0xproject/web3-wrapper';
|
||||
import {Block, BlockAndLogStreamer} from 'ethereumjs-blockstream';
|
||||
import * as _ from 'lodash';
|
||||
import * as Web3 from 'web3';
|
||||
@ -19,10 +20,19 @@ import {AbiDecoder} from '../utils/abi_decoder';
|
||||
import {constants} from '../utils/constants';
|
||||
import {filterUtils} from '../utils/filter_utils';
|
||||
import {intervalUtils} from '../utils/interval_utils';
|
||||
import {Web3Wrapper} from '../web3_wrapper';
|
||||
|
||||
const CONTRACT_NAME_TO_NOT_FOUND_ERROR: {[contractName: string]: ZeroExError} = {
|
||||
ZRX: ZeroExError.ZRXContractDoesNotExist,
|
||||
EtherToken: ZeroExError.EtherTokenContractDoesNotExist,
|
||||
Token: ZeroExError.TokenContractDoesNotExist,
|
||||
TokenRegistry: ZeroExError.TokenRegistryContractDoesNotExist,
|
||||
TokenTransferProxy: ZeroExError.TokenTransferProxyContractDoesNotExist,
|
||||
Exchange: ZeroExError.ExchangeContractDoesNotExist,
|
||||
};
|
||||
|
||||
export class ContractWrapper {
|
||||
protected _web3Wrapper: Web3Wrapper;
|
||||
private _networkId: number;
|
||||
private _abiDecoder?: AbiDecoder;
|
||||
private _blockAndLogStreamer: BlockAndLogStreamer|undefined;
|
||||
private _blockAndLogStreamInterval: NodeJS.Timer;
|
||||
@ -30,8 +40,9 @@ export class ContractWrapper {
|
||||
private _filterCallbacks: {[filterToken: string]: EventCallback<ContractEventArgs>};
|
||||
private _onLogAddedSubscriptionToken: string|undefined;
|
||||
private _onLogRemovedSubscriptionToken: string|undefined;
|
||||
constructor(web3Wrapper: Web3Wrapper, abiDecoder?: AbiDecoder) {
|
||||
constructor(web3Wrapper: Web3Wrapper, networkId: number, abiDecoder?: AbiDecoder) {
|
||||
this._web3Wrapper = web3Wrapper;
|
||||
this._networkId = networkId;
|
||||
this._abiDecoder = abiDecoder;
|
||||
this._filters = {};
|
||||
this._filterCallbacks = {};
|
||||
@ -93,15 +104,27 @@ export class ContractWrapper {
|
||||
protected async _instantiateContractIfExistsAsync(
|
||||
artifact: Artifact, addressIfExists?: string,
|
||||
): Promise<Web3.ContractInstance> {
|
||||
const web3ContractInstance = await this._web3Wrapper.getContractInstanceFromArtifactAsync(
|
||||
artifact, addressIfExists,
|
||||
let contractAddress: string;
|
||||
if (_.isUndefined(addressIfExists)) {
|
||||
if (_.isUndefined(artifact.networks[this._networkId])) {
|
||||
throw new Error(ZeroExError.ContractNotDeployedOnNetwork);
|
||||
}
|
||||
contractAddress = artifact.networks[this._networkId].address.toLowerCase();
|
||||
} else {
|
||||
contractAddress = addressIfExists;
|
||||
}
|
||||
const doesContractExist = await this._web3Wrapper.doesContractExistAtAddressAsync(contractAddress);
|
||||
if (!doesContractExist) {
|
||||
throw new Error(CONTRACT_NAME_TO_NOT_FOUND_ERROR[artifact.contract_name]);
|
||||
}
|
||||
const contractInstance = this._web3Wrapper.getContractInstance(
|
||||
artifact.abi, contractAddress,
|
||||
);
|
||||
return web3ContractInstance;
|
||||
return contractInstance;
|
||||
}
|
||||
protected _getContractAddress(artifact: Artifact, addressIfExists?: string): string {
|
||||
if (_.isUndefined(addressIfExists)) {
|
||||
const networkId = this._web3Wrapper.getNetworkId();
|
||||
const contractAddress = artifact.networks[networkId].address;
|
||||
const contractAddress = artifact.networks[this._networkId].address;
|
||||
if (_.isUndefined(contractAddress)) {
|
||||
throw new Error(ZeroExError.ExchangeContractDoesNotExist);
|
||||
}
|
||||
|
@ -1,10 +1,10 @@
|
||||
import {Web3Wrapper} from '@0xproject/web3-wrapper';
|
||||
import BigNumber from 'bignumber.js';
|
||||
import * as _ from 'lodash';
|
||||
|
||||
import {artifacts} from '../artifacts';
|
||||
import {TransactionOpts, ZeroExError} from '../types';
|
||||
import {assert} from '../utils/assert';
|
||||
import {Web3Wrapper} from '../web3_wrapper';
|
||||
|
||||
import {ContractWrapper} from './contract_wrapper';
|
||||
import {EtherTokenContract} from './generated/ether_token';
|
||||
@ -18,8 +18,9 @@ export class EtherTokenWrapper extends ContractWrapper {
|
||||
private _etherTokenContractIfExists?: EtherTokenContract;
|
||||
private _tokenWrapper: TokenWrapper;
|
||||
private _contractAddressIfExists?: string;
|
||||
constructor(web3Wrapper: Web3Wrapper, tokenWrapper: TokenWrapper, contractAddressIfExists?: string) {
|
||||
super(web3Wrapper);
|
||||
constructor(web3Wrapper: Web3Wrapper, networkId: number, tokenWrapper: TokenWrapper,
|
||||
contractAddressIfExists?: string) {
|
||||
super(web3Wrapper, networkId);
|
||||
this._tokenWrapper = tokenWrapper;
|
||||
this._contractAddressIfExists = contractAddressIfExists;
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
import {schemas} from '@0xproject/json-schemas';
|
||||
import {Web3Wrapper} from '@0xproject/web3-wrapper';
|
||||
import BigNumber from 'bignumber.js';
|
||||
import * as _ from 'lodash';
|
||||
import * as Web3 from 'web3';
|
||||
@ -36,7 +37,6 @@ import {decorators} from '../utils/decorators';
|
||||
import {ExchangeTransferSimulator} from '../utils/exchange_transfer_simulator';
|
||||
import {OrderValidationUtils} from '../utils/order_validation_utils';
|
||||
import {utils} from '../utils/utils';
|
||||
import {Web3Wrapper} from '../web3_wrapper';
|
||||
|
||||
import {ContractWrapper} from './contract_wrapper';
|
||||
import {ExchangeContract} from './generated/exchange';
|
||||
@ -84,9 +84,9 @@ export class ExchangeWrapper extends ContractWrapper {
|
||||
];
|
||||
return [orderAddresses, orderValues];
|
||||
}
|
||||
constructor(web3Wrapper: Web3Wrapper, abiDecoder: AbiDecoder,
|
||||
constructor(web3Wrapper: Web3Wrapper, networkId: number, abiDecoder: AbiDecoder,
|
||||
tokenWrapper: TokenWrapper, contractAddressIfExists?: string) {
|
||||
super(web3Wrapper, abiDecoder);
|
||||
super(web3Wrapper, networkId, abiDecoder);
|
||||
this._tokenWrapper = tokenWrapper;
|
||||
this._orderValidationUtils = new OrderValidationUtils(tokenWrapper, this);
|
||||
this._contractAddressIfExists = contractAddressIfExists;
|
||||
|
@ -2,12 +2,12 @@
|
||||
* This file is auto-generated using abi-gen. Don't edit directly.
|
||||
* Templates can be found at https://github.com/0xProject/0x.js/tree/development/packages/abi-gen-templates.
|
||||
*/
|
||||
import {promisify} from '@0xproject/utils';
|
||||
import {BigNumber} from 'bignumber.js';
|
||||
import * as Web3 from 'web3';
|
||||
|
||||
import {TxData, TxDataPayable} from '../../types';
|
||||
import {classUtils} from '../../utils/class_utils';
|
||||
import {promisify} from '../../utils/promisify';
|
||||
|
||||
import {BaseContract} from './base_contract';
|
||||
|
||||
|
@ -2,12 +2,12 @@
|
||||
* This file is auto-generated using abi-gen. Don't edit directly.
|
||||
* Templates can be found at https://github.com/0xProject/0x.js/tree/development/packages/abi-gen-templates.
|
||||
*/
|
||||
import {promisify} from '@0xproject/utils';
|
||||
import {BigNumber} from 'bignumber.js';
|
||||
import * as Web3 from 'web3';
|
||||
|
||||
import {TxData, TxDataPayable} from '../../types';
|
||||
import {classUtils} from '../../utils/class_utils';
|
||||
import {promisify} from '../../utils/promisify';
|
||||
|
||||
import {BaseContract} from './base_contract';
|
||||
|
||||
|
@ -2,12 +2,12 @@
|
||||
* This file is auto-generated using abi-gen. Don't edit directly.
|
||||
* Templates can be found at https://github.com/0xProject/0x.js/tree/development/packages/abi-gen-templates.
|
||||
*/
|
||||
import {promisify} from '@0xproject/utils';
|
||||
import {BigNumber} from 'bignumber.js';
|
||||
import * as Web3 from 'web3';
|
||||
|
||||
import {TxData, TxDataPayable} from '../../types';
|
||||
import {classUtils} from '../../utils/class_utils';
|
||||
import {promisify} from '../../utils/promisify';
|
||||
|
||||
import {BaseContract} from './base_contract';
|
||||
|
||||
|
@ -2,12 +2,12 @@
|
||||
* This file is auto-generated using abi-gen. Don't edit directly.
|
||||
* Templates can be found at https://github.com/0xProject/0x.js/tree/development/packages/abi-gen-templates.
|
||||
*/
|
||||
import {promisify} from '@0xproject/utils';
|
||||
import {BigNumber} from 'bignumber.js';
|
||||
import * as Web3 from 'web3';
|
||||
|
||||
import {TxData, TxDataPayable} from '../../types';
|
||||
import {classUtils} from '../../utils/class_utils';
|
||||
import {promisify} from '../../utils/promisify';
|
||||
|
||||
import {BaseContract} from './base_contract';
|
||||
|
||||
|
@ -2,12 +2,12 @@
|
||||
* This file is auto-generated using abi-gen. Don't edit directly.
|
||||
* Templates can be found at https://github.com/0xProject/0x.js/tree/development/packages/abi-gen-templates.
|
||||
*/
|
||||
import {promisify} from '@0xproject/utils';
|
||||
import {BigNumber} from 'bignumber.js';
|
||||
import * as Web3 from 'web3';
|
||||
|
||||
import {TxData, TxDataPayable} from '../../types';
|
||||
import {classUtils} from '../../utils/class_utils';
|
||||
import {promisify} from '../../utils/promisify';
|
||||
|
||||
import {BaseContract} from './base_contract';
|
||||
|
||||
|
@ -1,10 +1,10 @@
|
||||
import {Web3Wrapper} from '@0xproject/web3-wrapper';
|
||||
import * as _ from 'lodash';
|
||||
|
||||
import {artifacts} from '../artifacts';
|
||||
import {Token, TokenMetadata, ZeroExError} from '../types';
|
||||
import {assert} from '../utils/assert';
|
||||
import {constants} from '../utils/constants';
|
||||
import {Web3Wrapper} from '../web3_wrapper';
|
||||
|
||||
import {ContractWrapper} from './contract_wrapper';
|
||||
import {TokenRegistryContract} from './generated/token_registry';
|
||||
@ -27,8 +27,8 @@ export class TokenRegistryWrapper extends ContractWrapper {
|
||||
};
|
||||
return token;
|
||||
}
|
||||
constructor(web3Wrapper: Web3Wrapper, contractAddressIfExists?: string) {
|
||||
super(web3Wrapper);
|
||||
constructor(web3Wrapper: Web3Wrapper, networkId: number, contractAddressIfExists?: string) {
|
||||
super(web3Wrapper, networkId);
|
||||
this._contractAddressIfExists = contractAddressIfExists;
|
||||
}
|
||||
/**
|
||||
|
@ -1,8 +1,8 @@
|
||||
import {Web3Wrapper} from '@0xproject/web3-wrapper';
|
||||
import * as _ from 'lodash';
|
||||
|
||||
import {artifacts} from '../artifacts';
|
||||
import {ZeroExError} from '../types';
|
||||
import {Web3Wrapper} from '../web3_wrapper';
|
||||
|
||||
import {ContractWrapper} from './contract_wrapper';
|
||||
import {TokenTransferProxyContract} from './generated/token_transfer_proxy';
|
||||
@ -13,8 +13,8 @@ import {TokenTransferProxyContract} from './generated/token_transfer_proxy';
|
||||
export class TokenTransferProxyWrapper extends ContractWrapper {
|
||||
private _tokenTransferProxyContractIfExists?: TokenTransferProxyContract;
|
||||
private _contractAddressIfExists?: string;
|
||||
constructor(web3Wrapper: Web3Wrapper, contractAddressIfExists?: string) {
|
||||
super(web3Wrapper);
|
||||
constructor(web3Wrapper: Web3Wrapper, networkId: number, contractAddressIfExists?: string) {
|
||||
super(web3Wrapper, networkId);
|
||||
this._contractAddressIfExists = contractAddressIfExists;
|
||||
}
|
||||
/**
|
||||
|
@ -1,4 +1,5 @@
|
||||
import {schemas} from '@0xproject/json-schemas';
|
||||
import {Web3Wrapper} from '@0xproject/web3-wrapper';
|
||||
import BigNumber from 'bignumber.js';
|
||||
import * as _ from 'lodash';
|
||||
|
||||
@ -17,7 +18,6 @@ import {
|
||||
import {AbiDecoder} from '../utils/abi_decoder';
|
||||
import {assert} from '../utils/assert';
|
||||
import {constants} from '../utils/constants';
|
||||
import {Web3Wrapper} from '../web3_wrapper';
|
||||
|
||||
import {ContractWrapper} from './contract_wrapper';
|
||||
import {TokenContract} from './generated/token';
|
||||
@ -34,9 +34,9 @@ export class TokenWrapper extends ContractWrapper {
|
||||
public UNLIMITED_ALLOWANCE_IN_BASE_UNITS = constants.UNLIMITED_ALLOWANCE_IN_BASE_UNITS;
|
||||
private _tokenContractsByAddress: {[address: string]: TokenContract};
|
||||
private _tokenTransferProxyWrapper: TokenTransferProxyWrapper;
|
||||
constructor(web3Wrapper: Web3Wrapper, abiDecoder: AbiDecoder,
|
||||
constructor(web3Wrapper: Web3Wrapper, networkId: number, abiDecoder: AbiDecoder,
|
||||
tokenTransferProxyWrapper: TokenTransferProxyWrapper) {
|
||||
super(web3Wrapper, abiDecoder);
|
||||
super(web3Wrapper, networkId, abiDecoder);
|
||||
this._tokenContractsByAddress = {};
|
||||
this._tokenTransferProxyWrapper = tokenTransferProxyWrapper;
|
||||
}
|
||||
|
@ -1,3 +1,4 @@
|
||||
import {Web3Wrapper} from '@0xproject/web3-wrapper';
|
||||
import * as _ from 'lodash';
|
||||
import * as Web3 from 'web3';
|
||||
|
||||
@ -11,7 +12,6 @@ import {AbiDecoder} from '../utils/abi_decoder';
|
||||
import {assert} from '../utils/assert';
|
||||
import {intervalUtils} from '../utils/interval_utils';
|
||||
import {utils} from '../utils/utils';
|
||||
import {Web3Wrapper} from '../web3_wrapper';
|
||||
|
||||
const DEFAULT_EVENT_POLLING_INTERVAL_MS = 200;
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
import {schemas} from '@0xproject/json-schemas';
|
||||
import {Web3Wrapper} from '@0xproject/web3-wrapper';
|
||||
import * as _ from 'lodash';
|
||||
|
||||
import {ZeroEx} from '../0x';
|
||||
@ -31,7 +32,6 @@ import {assert} from '../utils/assert';
|
||||
import {intervalUtils} from '../utils/interval_utils';
|
||||
import {OrderStateUtils} from '../utils/order_state_utils';
|
||||
import {utils} from '../utils/utils';
|
||||
import {Web3Wrapper} from '../web3_wrapper';
|
||||
|
||||
import {EventWatcher} from './event_watcher';
|
||||
import {ExpirationWatcher} from './expiration_watcher';
|
||||
|
@ -1,12 +1,12 @@
|
||||
import {assert as sharedAssert} from '@0xproject/assert';
|
||||
import {Schema, SchemaValidator} from '@0xproject/json-schemas';
|
||||
import {Web3Wrapper} from '@0xproject/web3-wrapper';
|
||||
import BigNumber from 'bignumber.js';
|
||||
import * as _ from 'lodash';
|
||||
import * as Web3 from 'web3';
|
||||
|
||||
import {ECSignature} from '../types';
|
||||
import {signatureUtils} from '../utils/signature_utils';
|
||||
import {Web3Wrapper} from '../web3_wrapper';
|
||||
|
||||
const HEX_REGEX = /^0x[0-9A-F]*$/i;
|
||||
|
||||
|
@ -1,3 +1,4 @@
|
||||
import {Web3Wrapper} from '@0xproject/web3-wrapper';
|
||||
import BigNumber from 'bignumber.js';
|
||||
import * as chai from 'chai';
|
||||
import * as _ from 'lodash';
|
||||
@ -12,7 +13,6 @@ import {
|
||||
} from '../src';
|
||||
import {EventWatcher} from '../src/order_watcher/event_watcher';
|
||||
import {DoneCallback} from '../src/types';
|
||||
import {Web3Wrapper} from '../src/web3_wrapper';
|
||||
|
||||
import {chaiSetup} from './utils/chai_setup';
|
||||
import {constants} from './utils/constants';
|
||||
@ -60,7 +60,7 @@ describe('EventWatcher', () => {
|
||||
before(async () => {
|
||||
web3 = web3Factory.create();
|
||||
const pollingIntervalMs = 10;
|
||||
web3Wrapper = new Web3Wrapper(web3.currentProvider, constants.TESTRPC_NETWORK_ID);
|
||||
web3Wrapper = new Web3Wrapper(web3.currentProvider);
|
||||
eventWatcher = new EventWatcher(web3Wrapper, pollingIntervalMs);
|
||||
});
|
||||
afterEach(() => {
|
||||
|
@ -1,3 +1,4 @@
|
||||
import {Web3Wrapper} from '@0xproject/web3-wrapper';
|
||||
import BigNumber from 'bignumber.js';
|
||||
import * as chai from 'chai';
|
||||
import * as _ from 'lodash';
|
||||
@ -10,7 +11,6 @@ import {ExpirationWatcher} from '../src/order_watcher/expiration_watcher';
|
||||
import {DoneCallback, Token} from '../src/types';
|
||||
import {constants} from '../src/utils/constants';
|
||||
import {utils} from '../src/utils/utils';
|
||||
import {Web3Wrapper} from '../src/web3_wrapper';
|
||||
|
||||
import {BlockchainLifecycle} from './utils/blockchain_lifecycle';
|
||||
import {chaiSetup} from './utils/chai_setup';
|
||||
|
@ -1,3 +1,4 @@
|
||||
import {Web3Wrapper} from '@0xproject/web3-wrapper';
|
||||
import BigNumber from 'bignumber.js';
|
||||
import * as chai from 'chai';
|
||||
import * as _ from 'lodash';
|
||||
@ -19,7 +20,6 @@ import {
|
||||
} from '../src';
|
||||
import {OrderStateWatcher} from '../src/order_watcher/order_state_watcher';
|
||||
import {DoneCallback} from '../src/types';
|
||||
import {Web3Wrapper} from '../src/web3_wrapper';
|
||||
|
||||
import {BlockchainLifecycle} from './utils/blockchain_lifecycle';
|
||||
import {chaiSetup} from './utils/chai_setup';
|
||||
|
@ -1,3 +1,5 @@
|
||||
import {promisify} from '@0xproject/utils';
|
||||
import {Web3Wrapper} from '@0xproject/web3-wrapper';
|
||||
import BigNumber from 'bignumber.js';
|
||||
import * as chai from 'chai';
|
||||
import 'mocha';
|
||||
@ -18,8 +20,6 @@ import {
|
||||
ZeroExError,
|
||||
} from '../src';
|
||||
import {BlockParamLiteral, DoneCallback} from '../src/types';
|
||||
import {promisify} from '../src/utils/promisify';
|
||||
import {Web3Wrapper} from '../src/web3_wrapper';
|
||||
|
||||
import {BlockchainLifecycle} from './utils/blockchain_lifecycle';
|
||||
import {chaiSetup} from './utils/chai_setup';
|
||||
@ -46,7 +46,7 @@ describe('TokenWrapper', () => {
|
||||
before(async () => {
|
||||
web3 = web3Factory.create();
|
||||
zeroEx = new ZeroEx(web3.currentProvider, config);
|
||||
web3Wrapper = new Web3Wrapper(web3.currentProvider, config.networkId);
|
||||
web3Wrapper = new Web3Wrapper(web3.currentProvider);
|
||||
userAddresses = await zeroEx.getAvailableAddressesAsync();
|
||||
tokens = await zeroEx.tokenRegistry.getTokensAsync();
|
||||
tokenUtils = new TokenUtils(tokens);
|
||||
|
@ -2,12 +2,12 @@
|
||||
* This file is auto-generated using abi-gen. Don't edit directly.
|
||||
* Templates can be found at https://github.com/0xProject/0x.js/tree/development/packages/abi-gen-templates.
|
||||
*/
|
||||
import {promisify} from '@0xproject/utils';
|
||||
import {BigNumber} from 'bignumber.js';
|
||||
import * as Web3 from 'web3';
|
||||
|
||||
import {TxData, TxDataPayable} from '../../types';
|
||||
import {classUtils} from '../../utils/class_utils';
|
||||
import {promisify} from '../../utils/promisify';
|
||||
|
||||
import {BaseContract} from './base_contract';
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "abi-gen-templates",
|
||||
"private": true,
|
||||
"version": "0.0.0",
|
||||
"version": "0.0.1",
|
||||
"description": "Handlebars templates to generate TS contract wrappers",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
@ -1,6 +1,6 @@
|
||||
# ABI Gen
|
||||
|
||||
This package allows you to generate contract wrappers in any language from ABI files.
|
||||
This package allows you to generate TypeScript contract wrappers from ABI files.
|
||||
It's heavily inspired by [Geth abigen](https://github.com/ethereum/go-ethereum/wiki/Native-DApps:-Go-bindings-to-Ethereum-contracts) but takes a different approach.
|
||||
You can write your custom handlebars templates which will allow you to seamlessly integrate the generated code into your existing codebase with existing conventions.
|
||||
|
||||
@ -8,7 +8,7 @@ For an example of the generated [wrapper files](https://github.com/0xProject/0x.
|
||||
[Here](https://github.com/0xProject/0x.js/tree/development/packages/abi-gen-templates) are the templates used to generate those files.
|
||||
|
||||
## Instalation
|
||||
`yarn add -g abi-gen`
|
||||
`yarn add -g @0xproject/abi-gen`
|
||||
## Usage
|
||||
```
|
||||
abi-gen
|
||||
@ -18,10 +18,9 @@ Options:
|
||||
--abiGlob Glob pattern to search for ABI JSON files [string] [required]
|
||||
--templates Folder where to search for templates [string] [required]
|
||||
--output Folder where to put the output files [string] [required]
|
||||
--fileExtension The extension of the output file [string] [required]
|
||||
```
|
||||
## ABI files
|
||||
You're required to pass a [glob](https://en.wikipedia.org/wiki/Glob_(programming) template where your abi files are located.
|
||||
You're required to pass a [glob](https://en.wikipedia.org/wiki/Glob_(programming)) template where your abi files are located.
|
||||
TL;DR - here is the example from 0x.js.
|
||||
|
||||
`--abiGlob 'src/artifacts/@(Exchange|Token|TokenTransferProxy|EtherToken|TokenRegistry).json`
|
||||
@ -34,7 +33,7 @@ The best way to get started is to copy [0x.js templates](https://github.com/0xPr
|
||||
We use [handlebars](handlebarsjs.com) template engine under the hood.
|
||||
You need to have a master template called `contract.mustache`. it will be used to generate each contract wrapper. Although - you don't need and probably shouldn't write all your logic in a single template file. You can write [partial templates](http://handlebarsjs.com/partials.html) and as long as they are within a partials folder - they will be registered and available.
|
||||
## Which data/context do I get in my templates?
|
||||
For now you don't get much on top of methods abi and a contract name because it was enough for our use-case, but if you need something else - create a PR.
|
||||
[Type definition](https://github.com/0xProject/0x.js/tree/development/packages/abi-gen/src/types.ts) of what we pass to a render method.
|
||||
For now you don't get much on top of methods abi, some useful helpers and a contract name because it was enough for our use-case, but if you need something else - create a PR.
|
||||
See the [type definition](https://github.com/0xProject/0x.js/tree/development/packages/abi-gen/src/types.ts) of what we pass to the render method.
|
||||
## Output files
|
||||
Output files will be generated within an output folder with names converted to camel case and taken from abi file names. If you already have some files in that folder they will be overwritten.
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "abi-gen",
|
||||
"version": "0.0.0",
|
||||
"version": "0.0.1",
|
||||
"description": "Generate contract wrappers from ABI and handlebars templates",
|
||||
"main": "lib/index.js",
|
||||
"types": "lib/index.d.ts",
|
||||
@ -33,9 +33,9 @@
|
||||
"yargs": "^10.0.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/handlebars": "^4.0.36",
|
||||
"@0xproject/tslint-config": "^0.2.0",
|
||||
"@types/glob": "^5.0.33",
|
||||
"@types/handlebars": "^4.0.36",
|
||||
"@types/mkdirp": "^0.5.1",
|
||||
"@types/node": "^8.0.53",
|
||||
"@types/yargs": "^8.0.2",
|
||||
|
@ -33,16 +33,11 @@ const args = yargs
|
||||
type: 'string',
|
||||
demand: true,
|
||||
})
|
||||
.option('fileExtension', {
|
||||
describe: 'The extension of the output file',
|
||||
type: 'string',
|
||||
demand: true,
|
||||
})
|
||||
.argv;
|
||||
|
||||
function writeOutputFile(name: string, renderedTsCode: string): void {
|
||||
const fileName = toSnakeCase(name);
|
||||
const filePath = `${args.output}/${fileName}.${args.fileExtension}`;
|
||||
const filePath = `${args.output}/${fileName}.ts`;
|
||||
fs.writeFileSync(filePath, renderedTsCode);
|
||||
utils.log(`Created: ${chalk.bold(filePath)}`);
|
||||
}
|
||||
|
@ -12,6 +12,6 @@
|
||||
"include": [
|
||||
"./src/**/*",
|
||||
"./test/**/*",
|
||||
"../../node_modules/web3-typescript-typings/index.d.ts",
|
||||
"../../node_modules/web3-typescript-typings/index.d.ts"
|
||||
]
|
||||
}
|
||||
|
@ -3,6 +3,7 @@
|
||||
vx.x.x
|
||||
------------------------
|
||||
* Expose WebSocketOrderbookChannel and associated types to public interface (#251)
|
||||
* Remove tokenA and tokenB fields from OrdersRequest (#256)
|
||||
|
||||
v0.2.0 - _November 29, 2017_
|
||||
------------------------
|
||||
|
@ -63,7 +63,7 @@ export interface OrderbookChannelHandler {
|
||||
order: SignedOrder) => void;
|
||||
onError: (channel: OrderbookChannel, subscriptionOpts: OrderbookChannelSubscriptionOpts,
|
||||
err: Error) => void;
|
||||
onClose: (channel: OrderbookChannel) => void;
|
||||
onClose: (channel: OrderbookChannel, subscriptionOpts: OrderbookChannelSubscriptionOpts) => void;
|
||||
}
|
||||
|
||||
export type OrderbookChannelMessage =
|
||||
@ -128,8 +128,6 @@ export interface OrdersRequest {
|
||||
tokenAddress?: string;
|
||||
makerTokenAddress?: string;
|
||||
takerTokenAddress?: string;
|
||||
tokenA?: string;
|
||||
tokenB?: string;
|
||||
maker?: string;
|
||||
taker?: string;
|
||||
trader?: string;
|
||||
|
@ -62,7 +62,7 @@ export class WebSocketOrderbookChannel implements OrderbookChannel {
|
||||
handler.onError(this, subscriptionOpts, wsError);
|
||||
});
|
||||
connection.on(WebsocketConnectionEventType.Close, () => {
|
||||
handler.onClose(this);
|
||||
handler.onClose(this, subscriptionOpts);
|
||||
});
|
||||
connection.on(WebsocketConnectionEventType.Message, message => {
|
||||
this._handleWebSocketMessage(subscribeMessage.requestId, subscriptionOpts, message, handler);
|
||||
|
@ -61,12 +61,12 @@ describe('HttpClient', () => {
|
||||
const orders = await relayerClient.getOrdersAsync();
|
||||
expect(orders).to.be.deep.equal(ordersResponse);
|
||||
});
|
||||
it('gets specfic orders for request', async () => {
|
||||
it('gets specific orders for request', async () => {
|
||||
const tokenAddress = '0x323b5d4c32345ced77393b3530b1eed0f346429d';
|
||||
const ordersRequest = {
|
||||
tokenA: tokenAddress,
|
||||
tokenAddress,
|
||||
};
|
||||
const urlWithQuery = `${url}?tokenA=${tokenAddress}`;
|
||||
const urlWithQuery = `${url}?tokenAddress=${tokenAddress}`;
|
||||
fetchMock.get(urlWithQuery, ordersResponseJSON);
|
||||
const orders = await relayerClient.getOrdersAsync(ordersRequest);
|
||||
expect(orders).to.be.deep.equal(ordersResponse);
|
||||
|
@ -1,9 +1,11 @@
|
||||
import {Web3Wrapper} from '@0xproject/web3-wrapper';
|
||||
import {BigNumber} from 'bignumber.js';
|
||||
import * as _ from 'lodash';
|
||||
import * as path from 'path';
|
||||
import * as Web3 from 'web3';
|
||||
import * as yargs from 'yargs';
|
||||
|
||||
import {commands} from './src/commands';
|
||||
import {network} from './src/utils/network';
|
||||
import {
|
||||
CliOptions,
|
||||
CompilerOptions,
|
||||
@ -36,23 +38,26 @@ async function onCompileCommand(args: CliOptions): Promise<void> {
|
||||
* @param argv Instance of process.argv provided by yargs.
|
||||
*/
|
||||
async function onMigrateCommand(argv: CliOptions): Promise<void> {
|
||||
const networkIdIfExists = await network.getNetworkIdIfExistsAsync(argv.jsonrpcPort);
|
||||
const url = `http://localhost:${argv.jsonrpcPort}`;
|
||||
const web3Provider = new Web3.providers.HttpProvider(url);
|
||||
const web3Wrapper = new Web3Wrapper(web3Provider);
|
||||
const networkId = await web3Wrapper.getNetworkIdAsync();
|
||||
const compilerOpts: CompilerOptions = {
|
||||
contractsDir: argv.contractsDir,
|
||||
networkId: networkIdIfExists,
|
||||
networkId,
|
||||
optimizerEnabled: argv.shouldOptimize ? 1 : 0,
|
||||
artifactsDir: argv.artifactsDir,
|
||||
};
|
||||
await commands.compileAsync(compilerOpts);
|
||||
|
||||
const defaults = {
|
||||
gasPrice: argv.gasPrice,
|
||||
gasPrice: new BigNumber(argv.gasPrice),
|
||||
from: argv.account,
|
||||
};
|
||||
const deployerOpts: DeployerOptions = {
|
||||
const deployerOpts = {
|
||||
artifactsDir: argv.artifactsDir,
|
||||
jsonrpcPort: argv.jsonrpcPort,
|
||||
networkId: networkIdIfExists,
|
||||
networkId,
|
||||
defaults,
|
||||
};
|
||||
await commands.migrateAsync(deployerOpts);
|
||||
@ -62,23 +67,26 @@ async function onMigrateCommand(argv: CliOptions): Promise<void> {
|
||||
* @param argv Instance of process.argv provided by yargs.
|
||||
*/
|
||||
async function onDeployCommand(argv: CliOptions): Promise<void> {
|
||||
const networkIdIfExists = await network.getNetworkIdIfExistsAsync(argv.jsonrpcPort);
|
||||
const url = `http://localhost:${argv.jsonrpcPort}`;
|
||||
const web3Provider = new Web3.providers.HttpProvider(url);
|
||||
const web3Wrapper = new Web3Wrapper(web3Provider);
|
||||
const networkId = await web3Wrapper.getNetworkIdAsync();
|
||||
const compilerOpts: CompilerOptions = {
|
||||
contractsDir: argv.contractsDir,
|
||||
networkId: networkIdIfExists,
|
||||
networkId,
|
||||
optimizerEnabled: argv.shouldOptimize ? 1 : 0,
|
||||
artifactsDir: argv.artifactsDir,
|
||||
};
|
||||
await commands.compileAsync(compilerOpts);
|
||||
|
||||
const defaults = {
|
||||
gasPrice: argv.gasPrice,
|
||||
gasPrice: new BigNumber(argv.gasPrice),
|
||||
from: argv.account,
|
||||
};
|
||||
const deployerOpts: DeployerOptions = {
|
||||
artifactsDir: argv.artifactsDir,
|
||||
jsonrpcPort: argv.jsonrpcPort,
|
||||
networkId: networkIdIfExists,
|
||||
networkId,
|
||||
defaults,
|
||||
};
|
||||
const deployerArgsString = argv.args;
|
||||
|
@ -1,3 +1,4 @@
|
||||
import {Web3Wrapper} from '@0xproject/web3-wrapper';
|
||||
import {BigNumber} from 'bignumber.js';
|
||||
import * as _ from 'lodash';
|
||||
import * as Web3 from 'web3';
|
||||
@ -5,7 +6,6 @@ import * as Web3 from 'web3';
|
||||
import {Deployer} from './../src/deployer';
|
||||
import {constants} from './../src/utils/constants';
|
||||
import {Token} from './../src/utils/types';
|
||||
import {Web3Wrapper} from './../src/utils/web3_wrapper';
|
||||
import {tokenInfo} from './config/token_info';
|
||||
|
||||
export const migrator = {
|
||||
|
@ -1,4 +1,4 @@
|
||||
import promisify = require('es6-promisify');
|
||||
import {promisify} from '@0xproject/utils';
|
||||
import * as ethUtil from 'ethereumjs-util';
|
||||
import * as _ from 'lodash';
|
||||
import * as path from 'path';
|
||||
|
@ -1,4 +1,6 @@
|
||||
import promisify = require('es6-promisify');
|
||||
import {TxData} from '@0xproject/types';
|
||||
import {promisify} from '@0xproject/utils';
|
||||
import {Web3Wrapper} from '@0xproject/web3-wrapper';
|
||||
import * as _ from 'lodash';
|
||||
import * as Web3 from 'web3';
|
||||
|
||||
@ -11,7 +13,6 @@ import {
|
||||
DeployerOptions,
|
||||
} from './utils/types';
|
||||
import {utils} from './utils/utils';
|
||||
import {Web3Wrapper} from './utils/web3_wrapper';
|
||||
|
||||
// Gas added to gas estimate to make sure there is sufficient gas for deployment.
|
||||
const EXTRA_GAS = 200000;
|
||||
@ -21,7 +22,7 @@ export class Deployer {
|
||||
private artifactsDir: string;
|
||||
private jsonrpcPort: number;
|
||||
private networkId: number;
|
||||
private defaults: Partial<Web3.TxData>;
|
||||
private defaults: Partial<TxData>;
|
||||
|
||||
constructor(opts: DeployerOptions) {
|
||||
this.artifactsDir = opts.artifactsDir;
|
||||
@ -171,7 +172,7 @@ export class Deployer {
|
||||
const block = await this.web3Wrapper.getBlockAsync('latest');
|
||||
let gas: number;
|
||||
try {
|
||||
const gasEstimate: number = await this.web3Wrapper.estimateGasAsync({data});
|
||||
const gasEstimate: number = await this.web3Wrapper.estimateGasAsync(data);
|
||||
gas = Math.min(gasEstimate + EXTRA_GAS, block.gasLimit);
|
||||
} catch (err) {
|
||||
gas = block.gasLimit;
|
||||
|
@ -1,5 +1,5 @@
|
||||
import {schemas, SchemaValidator} from '@0xproject/json-schemas';
|
||||
import promisify = require('es6-promisify');
|
||||
import {promisify} from '@0xproject/utils';
|
||||
import * as _ from 'lodash';
|
||||
import * as Web3 from 'web3';
|
||||
|
||||
|
@ -1,11 +1,11 @@
|
||||
import promisify = require('es6-promisify');
|
||||
import {promisify} from '@0xproject/utils';
|
||||
import * as fs from 'fs';
|
||||
|
||||
export const fsWrapper = {
|
||||
readdirAsync: promisify(fs.readdir),
|
||||
readFileAsync: promisify(fs.readFile),
|
||||
writeFileAsync: promisify(fs.writeFile),
|
||||
mkdirAsync: promisify(fs.mkdir),
|
||||
readdirAsync: promisify<string[]>(fs.readdir),
|
||||
readFileAsync: promisify<string>(fs.readFile),
|
||||
writeFileAsync: promisify<undefined>(fs.writeFile),
|
||||
mkdirAsync: promisify<undefined>(fs.mkdir),
|
||||
doesPathExistSync: fs.existsSync,
|
||||
removeFileAsync: promisify(fs.unlink),
|
||||
removeFileAsync: promisify<undefined>(fs.unlink),
|
||||
};
|
||||
|
@ -1,15 +0,0 @@
|
||||
import promisify = require('es6-promisify');
|
||||
import * as Web3 from 'web3';
|
||||
|
||||
import {Web3Wrapper} from './web3_wrapper';
|
||||
|
||||
export const network = {
|
||||
async getNetworkIdIfExistsAsync(port: number): Promise<number> {
|
||||
const url = `http://localhost:${port}`;
|
||||
const web3Provider = new Web3.providers.HttpProvider(url);
|
||||
const defaults = {};
|
||||
const web3Wrapper = new Web3Wrapper(web3Provider, defaults);
|
||||
const networkIdIfExists = await web3Wrapper.getNetworkIdIfExistsAsync();
|
||||
return networkIdIfExists;
|
||||
},
|
||||
};
|
@ -1,3 +1,4 @@
|
||||
import {TxData} from '@0xproject/types';
|
||||
import * as Web3 from 'web3';
|
||||
|
||||
export enum AbiType {
|
||||
@ -54,7 +55,7 @@ export interface DeployerOptions {
|
||||
artifactsDir: string;
|
||||
jsonrpcPort: number;
|
||||
networkId: number;
|
||||
defaults: Partial<Web3.TxData>;
|
||||
defaults: Partial<TxData>;
|
||||
}
|
||||
|
||||
export interface ContractSources {
|
||||
|
@ -1,132 +0,0 @@
|
||||
import BigNumber from 'bignumber.js';
|
||||
import promisify = require('es6-promisify');
|
||||
import * as _ from 'lodash';
|
||||
import * as Web3 from 'web3';
|
||||
|
||||
import {Contract} from './contract';
|
||||
import {ZeroExError} from './types';
|
||||
|
||||
export class Web3Wrapper {
|
||||
private web3: Web3;
|
||||
private defaults: Partial<Web3.TxData>;
|
||||
private networkIdIfExists?: number;
|
||||
private jsonRpcRequestId: number;
|
||||
constructor(provider: Web3.Provider, defaults: Partial<Web3.TxData>) {
|
||||
this.web3 = new Web3();
|
||||
this.web3.setProvider(provider);
|
||||
this.defaults = defaults;
|
||||
this.jsonRpcRequestId = 0;
|
||||
}
|
||||
public setProvider(provider: Web3.Provider) {
|
||||
delete this.networkIdIfExists;
|
||||
this.web3.setProvider(provider);
|
||||
}
|
||||
public isAddress(address: string): boolean {
|
||||
return this.web3.isAddress(address);
|
||||
}
|
||||
public getContractFromAbi(abi: Web3.ContractAbi): Web3.Contract<Web3.ContractInstance> {
|
||||
const contract = this.web3.eth.contract(abi);
|
||||
return contract;
|
||||
}
|
||||
public async isSenderAddressAvailableAsync(senderAddress: string): Promise<boolean> {
|
||||
const addresses = await this.getAvailableAddressesAsync();
|
||||
return _.includes(addresses, senderAddress);
|
||||
}
|
||||
public async getNodeVersionAsync(): Promise<string> {
|
||||
const nodeVersion = await promisify(this.web3.version.getNode)();
|
||||
return nodeVersion;
|
||||
}
|
||||
public async getTransactionReceiptAsync(txHash: string): Promise<Web3.TransactionReceipt> {
|
||||
const transactionReceipt = await promisify(this.web3.eth.getTransactionReceipt)(txHash);
|
||||
return transactionReceipt;
|
||||
}
|
||||
public getCurrentProvider(): Web3.Provider {
|
||||
return this.web3.currentProvider;
|
||||
}
|
||||
public async getNetworkIdIfExistsAsync(): Promise<number|undefined> {
|
||||
if (!_.isUndefined(this.networkIdIfExists)) {
|
||||
return this.networkIdIfExists;
|
||||
}
|
||||
|
||||
try {
|
||||
const networkId = await this.getNetworkAsync();
|
||||
this.networkIdIfExists = Number(networkId);
|
||||
return this.networkIdIfExists;
|
||||
} catch (err) {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
public toWei(ethAmount: BigNumber): BigNumber {
|
||||
const balanceWei = this.web3.toWei(ethAmount, 'ether');
|
||||
return balanceWei;
|
||||
}
|
||||
public async getBalanceInWeiAsync(owner: string): Promise<BigNumber> {
|
||||
let balanceInWei = await promisify(this.web3.eth.getBalance)(owner);
|
||||
balanceInWei = new BigNumber(balanceInWei);
|
||||
return balanceInWei;
|
||||
}
|
||||
public async doesContractExistAtAddressAsync(address: string): Promise<boolean> {
|
||||
const code = await promisify(this.web3.eth.getCode)(address);
|
||||
// Regex matches 0x0, 0x00, 0x in order to accommodate poorly implemented clients
|
||||
const codeIsEmpty = /^0x0{0,40}$/i.test(code);
|
||||
return !codeIsEmpty;
|
||||
}
|
||||
public async signTransactionAsync(address: string, message: string): Promise<string> {
|
||||
const signData = await promisify(this.web3.eth.sign)(address, message);
|
||||
return signData;
|
||||
}
|
||||
public async getBlockAsync(blockParam: string|Web3.BlockParam): Promise<Web3.BlockWithoutTransactionData> {
|
||||
const block = await promisify(this.web3.eth.getBlock)(blockParam);
|
||||
return block;
|
||||
}
|
||||
public async getBlockTimestampAsync(blockParam: string|Web3.BlockParam): Promise<number> {
|
||||
const {timestamp} = await this.getBlockAsync(blockParam);
|
||||
return timestamp;
|
||||
}
|
||||
public async getAvailableAddressesAsync(): Promise<string[]> {
|
||||
const addresses: string[] = await promisify(this.web3.eth.getAccounts)();
|
||||
return addresses;
|
||||
}
|
||||
public async getLogsAsync(filter: Web3.FilterObject): Promise<Web3.LogEntry[]> {
|
||||
let fromBlock = filter.fromBlock;
|
||||
if (_.isNumber(fromBlock)) {
|
||||
fromBlock = this.web3.toHex(fromBlock);
|
||||
}
|
||||
let toBlock = filter.toBlock;
|
||||
if (_.isNumber(toBlock)) {
|
||||
toBlock = this.web3.toHex(toBlock);
|
||||
}
|
||||
const serializedFilter = {
|
||||
...filter,
|
||||
fromBlock,
|
||||
toBlock,
|
||||
};
|
||||
const payload = {
|
||||
jsonrpc: '2.0',
|
||||
id: this.jsonRpcRequestId++,
|
||||
method: 'eth_getLogs',
|
||||
params: [serializedFilter],
|
||||
};
|
||||
const logs = await this.sendRawPayloadAsync(payload);
|
||||
return logs;
|
||||
}
|
||||
public async estimateGasAsync(callData: Web3.CallData): Promise<number> {
|
||||
const gasEstimate = await promisify(this.web3.eth.estimateGas)(callData);
|
||||
return gasEstimate;
|
||||
}
|
||||
private getContractInstance<A extends Web3.ContractInstance>(abi: Web3.ContractAbi, address: string): A {
|
||||
const web3ContractInstance = this.web3.eth.contract(abi).at(address);
|
||||
const contractInstance = new Contract(web3ContractInstance, this.defaults) as any as A;
|
||||
return contractInstance;
|
||||
}
|
||||
private async getNetworkAsync(): Promise<number> {
|
||||
const networkId = await promisify(this.web3.version.getNetwork)();
|
||||
return networkId;
|
||||
}
|
||||
private async sendRawPayloadAsync(payload: Web3.JSONRPCRequestPayload): Promise<any> {
|
||||
const sendAsync = this.web3.currentProvider.sendAsync.bind(this.web3.currentProvider);
|
||||
const response = await promisify(sendAsync)(payload);
|
||||
const result = response.result;
|
||||
return result;
|
||||
}
|
||||
}
|
@ -19,7 +19,7 @@ const compilerOpts: CompilerOptions = {
|
||||
optimizerEnabled: constants.optimizerEnabled,
|
||||
};
|
||||
const compiler = new Compiler(compilerOpts);
|
||||
const deployerOpts: DeployerOptions = {
|
||||
const deployerOpts = {
|
||||
artifactsDir,
|
||||
networkId: constants.networkId,
|
||||
jsonrpcPort: constants.jsonrpcPort,
|
||||
|
@ -1,8 +1,10 @@
|
||||
import {BigNumber} from 'bignumber.js';
|
||||
|
||||
export const constants = {
|
||||
networkId: 0,
|
||||
jsonrpcPort: 8545,
|
||||
optimizerEnabled: 0,
|
||||
gasPrice: '20000000000',
|
||||
gasPrice: new BigNumber(20000000000),
|
||||
timeoutMs: 12000,
|
||||
zrxTokenAddress: '0xe41d2489571d322189246dafa5ebde1f4699f498',
|
||||
tokenTransferProxyAddress: '0x8da0d80f5007ef1e431dd2127178d224e32c2ef4',
|
||||
|
6
packages/contracts/globals.d.ts
vendored
6
packages/contracts/globals.d.ts
vendored
@ -27,11 +27,6 @@ declare module 'solc' {
|
||||
export function setupMethods(solcBin: any): any;
|
||||
}
|
||||
|
||||
declare module 'es6-promisify' {
|
||||
function promisify(original: any, settings?: any): ((...arg: any[]) => Promise<any>);
|
||||
export = promisify;
|
||||
}
|
||||
|
||||
declare module 'web3-eth-abi' {
|
||||
export function encodeParameters(typesArray: string[], parameters: any[]): string;
|
||||
}
|
||||
@ -39,4 +34,3 @@ declare module 'web3-eth-abi' {
|
||||
// Truffle injects the following into the global scope
|
||||
declare var artifacts: any;
|
||||
declare var contract: any;
|
||||
|
||||
|
@ -13,7 +13,7 @@
|
||||
"clean": "rm -rf ./lib",
|
||||
"migrate:truffle": "npm run build; truffle migrate",
|
||||
"migrate": "npm run build; node lib/deploy/cli.js migrate",
|
||||
"lint": "tslint --project . 'migrations/*.ts' 'test/**/*.ts' 'util/*.ts' 'deploy/**/*.ts'",
|
||||
"lint": "tslint --project . 'migrations/**/*.ts' 'test/**/*.ts' 'util/**/*.ts' 'deploy/**/*.ts'",
|
||||
"test:deployer": "npm run build; mocha lib/deploy/test/*_test.js"
|
||||
},
|
||||
"repository": {
|
||||
@ -28,6 +28,7 @@
|
||||
"homepage": "https://github.com/0xProject/0x.js/packages/contracts/README.md",
|
||||
"devDependencies": {
|
||||
"@0xproject/tslint-config": "^0.2.0",
|
||||
"@0xproject/types": "^0.0.1",
|
||||
"@types/bluebird": "^3.5.3",
|
||||
"@types/isomorphic-fetch": "^0.0.34",
|
||||
"@types/lodash": "^4.14.86",
|
||||
@ -53,11 +54,12 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"0x.js": "^0.22.6",
|
||||
"@0xproject/web3-wrapper": "^0.0.1",
|
||||
"@0xproject/json-schemas": "^0.6.9",
|
||||
"@0xproject/utils": "^0.0.1",
|
||||
"bignumber.js": "~4.1.0",
|
||||
"bluebird": "^3.5.0",
|
||||
"bn.js": "^4.11.8",
|
||||
"es6-promisify": "^5.0.0",
|
||||
"ethereumjs-abi": "^0.6.4",
|
||||
"ethereumjs-util": "^5.1.1",
|
||||
"isomorphic-fetch": "^2.2.1",
|
||||
|
@ -1,7 +1,7 @@
|
||||
import {ZeroEx, ZeroExError} from '0x.js';
|
||||
import {promisify} from '@0xproject/utils';
|
||||
import {BigNumber} from 'bignumber.js';
|
||||
import * as chai from 'chai';
|
||||
import promisify = require('es6-promisify');
|
||||
import Web3 = require('web3');
|
||||
|
||||
import {Artifacts} from '../../util/artifacts';
|
||||
@ -30,9 +30,9 @@ contract('EtherToken', (accounts: string[]) => {
|
||||
});
|
||||
});
|
||||
|
||||
const sendTransactionAsync = promisify(web3.eth.sendTransaction);
|
||||
const sendTransactionAsync = promisify<string>(web3.eth.sendTransaction);
|
||||
const getEthBalanceAsync = async (owner: string) => {
|
||||
const balanceStr = await promisify(web3.eth.getBalance)(owner);
|
||||
const balanceStr = await promisify<string>(web3.eth.getBalance)(owner);
|
||||
const balance = new BigNumber(balanceStr);
|
||||
return balance;
|
||||
};
|
||||
|
@ -1,6 +1,6 @@
|
||||
import {promisify} from '@0xproject/utils';
|
||||
import {BigNumber} from 'bignumber.js';
|
||||
import * as chai from 'chai';
|
||||
import promisify = require('es6-promisify');
|
||||
import Web3 = require('web3');
|
||||
|
||||
import * as multiSigWalletJSON from '../../build/contracts/MultiSigWalletWithTimeLock.json';
|
||||
@ -64,8 +64,8 @@ contract('MultiSigWalletWithTimeLock', (accounts: string[]) => {
|
||||
it('should set confirmation time with enough confirmations', async () => {
|
||||
const res = await multiSig.confirmTransaction(txId, {from: owners[1]});
|
||||
expect(res.logs).to.have.length(2);
|
||||
const blockNum = await promisify(web3.eth.getBlockNumber)();
|
||||
const blockInfo = await promisify(web3.eth.getBlock)(blockNum);
|
||||
const blockNum = await promisify<number>(web3.eth.getBlockNumber)();
|
||||
const blockInfo = await promisify<Web3.BlockWithoutTransactionData>(web3.eth.getBlock)(blockNum);
|
||||
const timestamp = new BigNumber(blockInfo.timestamp);
|
||||
const confirmationTimeBigNum = new BigNumber(await multiSig.confirmationTimes.call(txId));
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
import {promisify} from '@0xproject/utils';
|
||||
import {BigNumber} from 'bignumber.js';
|
||||
import promisify = require('es6-promisify');
|
||||
import ethUtil = require('ethereumjs-util');
|
||||
import * as _ from 'lodash';
|
||||
import Web3 = require('web3');
|
||||
@ -33,7 +33,7 @@ export class Order {
|
||||
}
|
||||
public async signAsync() {
|
||||
const orderHash = this.getOrderHash();
|
||||
const signature = await promisify(web3.eth.sign)(this.params.maker, orderHash);
|
||||
const signature = await promisify<string>(web3.eth.sign)(this.params.maker, orderHash);
|
||||
const {v, r, s} = ethUtil.fromRpcSig(signature);
|
||||
this.params = _.assign(this.params, {
|
||||
orderHashHex: orderHash,
|
||||
|
@ -5,7 +5,7 @@
|
||||
"main": "lib/src/index.js",
|
||||
"types": "lib/src/index.d.ts",
|
||||
"scripts": {
|
||||
"lint": "tslint --project . src/*.ts test/*.ts",
|
||||
"lint": "tslint --project . 'src/**/*.ts' 'test/**/*.ts'",
|
||||
"test": "run-s clean build run_mocha",
|
||||
"test:circleci": "yarn test",
|
||||
"run_mocha": "mocha lib/test/**/*_test.js",
|
||||
@ -23,12 +23,12 @@
|
||||
},
|
||||
"homepage": "https://github.com/0xProject/0x.js/packages/json-schemas/README.md",
|
||||
"dependencies": {
|
||||
"es6-promisify": "^5.0.0",
|
||||
"jsonschema": "^1.2.0",
|
||||
"lodash.values": "^4.3.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@0xproject/tslint-config": "^0.2.0",
|
||||
"@0xproject/utils": "^0.0.1",
|
||||
"@types/lodash.foreach": "^4.5.3",
|
||||
"@types/lodash.values": "^4.3.3",
|
||||
"@types/mocha": "^2.2.42",
|
||||
|
6
packages/json-schemas/src/globals.d.ts
vendored
6
packages/json-schemas/src/globals.d.ts
vendored
@ -1,7 +1 @@
|
||||
declare module 'dirty-chai';
|
||||
|
||||
// es6-promisify declarations
|
||||
declare function promisify(original: any, settings?: any): ((...arg: any[]) => Promise<any>);
|
||||
declare module 'es6-promisify' {
|
||||
export = promisify;
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
import {promisify} from '@0xproject/utils';
|
||||
import BigNumber from 'bignumber.js';
|
||||
import * as chai from 'chai';
|
||||
import * as dirtyChai from 'dirty-chai';
|
||||
import promisify = require('es6-promisify');
|
||||
import forEach = require('lodash.foreach');
|
||||
import 'mocha';
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0xproject/monorepo-scripts",
|
||||
"version": "0.0.0",
|
||||
"version": "0.0.1",
|
||||
"private": true,
|
||||
"description": "Helper scripts for the monorepo",
|
||||
"scripts": {
|
||||
|
@ -1,4 +1,4 @@
|
||||
import promisify = require('es6-promisify');
|
||||
import {promisify} from '@0xproject/utils';
|
||||
import * as _ from 'lodash';
|
||||
import RpcSubprovider = require('web3-provider-engine/subproviders/rpc');
|
||||
|
||||
|
10
packages/types/README.md
Normal file
10
packages/types/README.md
Normal file
@ -0,0 +1,10 @@
|
||||
0x types
|
||||
------
|
||||
|
||||
TS types shared across 0x projects and packages
|
||||
|
||||
## Install
|
||||
|
||||
```bash
|
||||
yarn add -D @0xproject/types
|
||||
```
|
32
packages/types/package.json
Normal file
32
packages/types/package.json
Normal file
@ -0,0 +1,32 @@
|
||||
{
|
||||
"name": "@0xproject/types",
|
||||
"version": "0.0.1",
|
||||
"description": "0x types",
|
||||
"main": "lib/index.js",
|
||||
"types": "lib/index.d.ts",
|
||||
"scripts": {
|
||||
"build": "tsc",
|
||||
"clean": "shx rm -rf lib",
|
||||
"lint": "tslint --project . 'src/**/*.ts'"
|
||||
},
|
||||
"license": "Apache-2.0",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/0xProject/0x.js.git"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/0xProject/0x.js/issues"
|
||||
},
|
||||
"homepage": "https://github.com/0xProject/0x.js/packages/types/README.md",
|
||||
"devDependencies": {
|
||||
"@0xproject/tslint-config": "^0.2.0",
|
||||
"bignumber.js": "^5.0.0",
|
||||
"shx": "^0.2.2",
|
||||
"tslint": "5.8.0",
|
||||
"typescript": "~2.6.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"bignumber.js": "~4.1.0",
|
||||
"web3": "^0.20.0"
|
||||
}
|
||||
}
|
23
packages/types/src/index.ts
Normal file
23
packages/types/src/index.ts
Normal file
@ -0,0 +1,23 @@
|
||||
import {BigNumber} from 'bignumber.js';
|
||||
import * as Web3 from 'web3';
|
||||
|
||||
export interface TxData {
|
||||
from?: string;
|
||||
gas?: number;
|
||||
gasPrice?: BigNumber;
|
||||
nonce?: number;
|
||||
}
|
||||
|
||||
export interface TransactionReceipt {
|
||||
blockHash: string;
|
||||
blockNumber: number;
|
||||
transactionHash: string;
|
||||
transactionIndex: number;
|
||||
from: string;
|
||||
to: string;
|
||||
status: null|0|1;
|
||||
cumulativeGasUsed: number;
|
||||
gasUsed: number;
|
||||
contractAddress: string|null;
|
||||
logs: Web3.LogEntry[];
|
||||
}
|
16
packages/types/tsconfig.json
Normal file
16
packages/types/tsconfig.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"target": "es5",
|
||||
"lib": [ "es2017", "dom"],
|
||||
"outDir": "lib",
|
||||
"sourceMap": true,
|
||||
"declaration": true,
|
||||
"noImplicitAny": true,
|
||||
"strictNullChecks": true
|
||||
},
|
||||
"include": [
|
||||
"./src/**/*",
|
||||
"../../node_modules/web3-typescript-typings/index.d.ts"
|
||||
]
|
||||
}
|
5
packages/types/tslint.json
Normal file
5
packages/types/tslint.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"extends": [
|
||||
"@0xproject/tslint-config"
|
||||
]
|
||||
}
|
10
packages/utils/README.md
Normal file
10
packages/utils/README.md
Normal file
@ -0,0 +1,10 @@
|
||||
utils
|
||||
------
|
||||
|
||||
Utils to be shared across 0x projects and packages
|
||||
|
||||
## Install
|
||||
|
||||
```bash
|
||||
yarn add @0xproject/utils
|
||||
```
|
33
packages/utils/package.json
Normal file
33
packages/utils/package.json
Normal file
@ -0,0 +1,33 @@
|
||||
{
|
||||
"name": "@0xproject/utils",
|
||||
"version": "0.0.1",
|
||||
"description": "0x TS utils",
|
||||
"main": "lib/index.js",
|
||||
"types": "lib/index.d.ts",
|
||||
"scripts": {
|
||||
"build": "tsc",
|
||||
"clean": "shx rm -rf lib",
|
||||
"lint": "tslint --project . 'src/**/*.ts'"
|
||||
},
|
||||
"license": "Apache-2.0",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/0xProject/0x.js.git"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/0xProject/0x.js/issues"
|
||||
},
|
||||
"homepage": "https://github.com/0xProject/0x.js/packages/utils/README.md",
|
||||
"devDependencies": {
|
||||
"@0xproject/tslint-config": "^0.2.0",
|
||||
"@types/lodash": "^4.14.86",
|
||||
"npm-run-all": "^4.1.2",
|
||||
"shx": "^0.2.2",
|
||||
"tslint": "5.8.0",
|
||||
"typescript": "~2.6.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"bignumber.js": "~4.1.0",
|
||||
"lodash": "^4.17.4"
|
||||
}
|
||||
}
|
1
packages/utils/src/index.ts
Normal file
1
packages/utils/src/index.ts
Normal file
@ -0,0 +1 @@
|
||||
export {promisify} from './promisify';
|
15
packages/utils/tsconfig.json
Normal file
15
packages/utils/tsconfig.json
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"target": "es5",
|
||||
"lib": [ "es2017", "dom"],
|
||||
"outDir": "lib",
|
||||
"sourceMap": true,
|
||||
"declaration": true,
|
||||
"noImplicitAny": true,
|
||||
"strictNullChecks": true
|
||||
},
|
||||
"include": [
|
||||
"./src/**/*"
|
||||
]
|
||||
}
|
5
packages/utils/tslint.json
Normal file
5
packages/utils/tslint.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"extends": [
|
||||
"@0xproject/tslint-config"
|
||||
]
|
||||
}
|
10
packages/web3-wrapper/README.md
Normal file
10
packages/web3-wrapper/README.md
Normal file
@ -0,0 +1,10 @@
|
||||
Web3 wrapper
|
||||
------
|
||||
|
||||
Wrapped version of web3 with nicer interface to be used across 0x projects and packages
|
||||
|
||||
## Install
|
||||
|
||||
```bash
|
||||
yarn add @0xproject/web3-wrapper
|
||||
```
|
37
packages/web3-wrapper/package.json
Normal file
37
packages/web3-wrapper/package.json
Normal file
@ -0,0 +1,37 @@
|
||||
{
|
||||
"name": "@0xproject/web3-wrapper",
|
||||
"version": "0.0.1",
|
||||
"description": "Wraps around web3 and gives a nicer interface",
|
||||
"main": "lib/index.js",
|
||||
"types": "lib/index.d.ts",
|
||||
"scripts": {
|
||||
"build": "tsc",
|
||||
"clean": "shx rm -rf lib",
|
||||
"lint": "tslint --project . 'src/**/*.ts'"
|
||||
},
|
||||
"license": "Apache-2.0",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/0xProject/0x.js.git"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/0xProject/0x.js/issues"
|
||||
},
|
||||
"homepage": "https://github.com/0xProject/0x.js/packages/web3-wrapper/README.md",
|
||||
"devDependencies": {
|
||||
"@0xproject/tslint-config": "^0.2.0",
|
||||
"@0xproject/types": "^0.0.1",
|
||||
"@types/lodash": "^4.14.86",
|
||||
"npm-run-all": "^4.1.2",
|
||||
"shx": "^0.2.2",
|
||||
"tslint": "5.8.0",
|
||||
"typescript": "~2.6.1",
|
||||
"web3-typescript-typings": "^0.7.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"@0xproject/utils": "^0.0.1",
|
||||
"bignumber.js": "~4.1.0",
|
||||
"lodash": "^4.17.4",
|
||||
"web3": "^0.20.0"
|
||||
}
|
||||
}
|
@ -1,10 +1,9 @@
|
||||
import {TransactionReceipt, TxData} from '@0xproject/types';
|
||||
import {promisify} from '@0xproject/utils';
|
||||
import BigNumber from 'bignumber.js';
|
||||
import * as _ from 'lodash';
|
||||
import * as Web3 from 'web3';
|
||||
|
||||
import {Artifact, ArtifactContractName, TransactionReceipt, TxData, ZeroExError} from './types';
|
||||
import {promisify} from './utils/promisify';
|
||||
|
||||
interface RawLogEntry {
|
||||
logIndex: string|null;
|
||||
transactionIndex: string|null;
|
||||
@ -16,21 +15,11 @@ interface RawLogEntry {
|
||||
topics: string[];
|
||||
}
|
||||
|
||||
const CONTRACT_NAME_TO_NOT_FOUND_ERROR: {[contractName: string]: ZeroExError} = {
|
||||
ZRX: ZeroExError.ZRXContractDoesNotExist,
|
||||
EtherToken: ZeroExError.EtherTokenContractDoesNotExist,
|
||||
Token: ZeroExError.TokenContractDoesNotExist,
|
||||
TokenRegistry: ZeroExError.TokenRegistryContractDoesNotExist,
|
||||
TokenTransferProxy: ZeroExError.TokenTransferProxyContractDoesNotExist,
|
||||
Exchange: ZeroExError.ExchangeContractDoesNotExist,
|
||||
};
|
||||
|
||||
export class Web3Wrapper {
|
||||
private web3: Web3;
|
||||
private networkId: number;
|
||||
private defaults: Partial<TxData>;
|
||||
private jsonRpcRequestId: number;
|
||||
constructor(provider: Web3.Provider, networkId: number, defaults?: Partial<TxData>) {
|
||||
constructor(provider: Web3.Provider, defaults?: Partial<TxData>) {
|
||||
if (_.isUndefined((provider as any).sendAsync)) {
|
||||
// Web3@1.0 provider doesn't support synchronous http requests,
|
||||
// so it only has an async `send` method, instead of a `send` and `sendAsync` in web3@0.x.x`
|
||||
@ -38,7 +27,6 @@ export class Web3Wrapper {
|
||||
(provider as any).sendAsync = (provider as any).send;
|
||||
}
|
||||
this.web3 = new Web3();
|
||||
this.networkId = networkId;
|
||||
this.web3.setProvider(provider);
|
||||
this.defaults = defaults || {};
|
||||
this.jsonRpcRequestId = 0;
|
||||
@ -47,7 +35,6 @@ export class Web3Wrapper {
|
||||
return this.defaults;
|
||||
}
|
||||
public setProvider(provider: Web3.Provider, networkId: number) {
|
||||
this.networkId = networkId;
|
||||
this.web3.setProvider(provider);
|
||||
}
|
||||
public isAddress(address: string): boolean {
|
||||
@ -61,6 +48,11 @@ export class Web3Wrapper {
|
||||
const nodeVersion = await promisify<string>(this.web3.version.getNode)();
|
||||
return nodeVersion;
|
||||
}
|
||||
public async getNetworkIdAsync(): Promise<number> {
|
||||
const networkIdStr = await promisify<string>(this.web3.version.getNetwork)();
|
||||
const networkId = _.parseInt(networkIdStr);
|
||||
return networkId;
|
||||
}
|
||||
public async getTransactionReceiptAsync(txHash: string): Promise<TransactionReceipt> {
|
||||
const transactionReceipt = await promisify<TransactionReceipt>(this.web3.eth.getTransactionReceipt)(txHash);
|
||||
if (!_.isNull(transactionReceipt)) {
|
||||
@ -71,37 +63,13 @@ export class Web3Wrapper {
|
||||
public getCurrentProvider(): Web3.Provider {
|
||||
return this.web3.currentProvider;
|
||||
}
|
||||
public getNetworkId(): number {
|
||||
return this.networkId;
|
||||
}
|
||||
public async getContractInstanceFromArtifactAsync(
|
||||
artifact: Artifact, address?: string,
|
||||
): Promise<Web3.ContractInstance> {
|
||||
let contractAddress: string;
|
||||
if (_.isUndefined(address)) {
|
||||
const networkId = this.getNetworkId();
|
||||
if (_.isUndefined(artifact.networks[networkId])) {
|
||||
throw new Error(ZeroExError.ContractNotDeployedOnNetwork);
|
||||
}
|
||||
contractAddress = artifact.networks[networkId].address.toLowerCase();
|
||||
} else {
|
||||
contractAddress = address;
|
||||
}
|
||||
const doesContractExist = await this.doesContractExistAtAddressAsync(contractAddress);
|
||||
if (!doesContractExist) {
|
||||
throw new Error(CONTRACT_NAME_TO_NOT_FOUND_ERROR[artifact.contract_name]);
|
||||
}
|
||||
const contractInstance = this.getContractInstance(
|
||||
artifact.abi, contractAddress,
|
||||
);
|
||||
return contractInstance;
|
||||
}
|
||||
public toWei(ethAmount: BigNumber): BigNumber {
|
||||
const balanceWei = this.web3.toWei(ethAmount, 'ether');
|
||||
return balanceWei;
|
||||
}
|
||||
public async getBalanceInWeiAsync(owner: string): Promise<BigNumber> {
|
||||
let balanceInWei = await promisify<BigNumber>(this.web3.eth.getBalance)(owner);
|
||||
// Rewrap in a new BigNumber
|
||||
balanceInWei = new BigNumber(balanceInWei);
|
||||
return balanceInWei;
|
||||
}
|
||||
@ -155,13 +123,17 @@ export class Web3Wrapper {
|
||||
const formattedLogs = _.map(rawLogs, this.formatLog.bind(this));
|
||||
return formattedLogs;
|
||||
}
|
||||
private getContractInstance(abi: Web3.ContractAbi, address: string): Web3.ContractInstance {
|
||||
const web3ContractInstance = this.web3.eth.contract(abi).at(address);
|
||||
public getContractFromAbi(abi: Web3.ContractAbi): Web3.Contract<any> {
|
||||
const web3Contract = this.web3.eth.contract(abi);
|
||||
return web3Contract;
|
||||
}
|
||||
public getContractInstance(abi: Web3.ContractAbi, address: string): Web3.ContractInstance {
|
||||
const web3ContractInstance = this.getContractFromAbi(abi).at(address);
|
||||
return web3ContractInstance;
|
||||
}
|
||||
private async getNetworkAsync(): Promise<number> {
|
||||
const networkId = await promisify<number>(this.web3.version.getNetwork)();
|
||||
return networkId;
|
||||
public async estimateGasAsync(data: string): Promise<number> {
|
||||
const gas = await promisify<number>(this.web3.eth.estimateGas)({data});
|
||||
return gas;
|
||||
}
|
||||
private async sendRawPayloadAsync<A>(payload: Web3.JSONRPCRequestPayload): Promise<A> {
|
||||
const sendAsync = this.web3.currentProvider.sendAsync.bind(this.web3.currentProvider);
|
16
packages/web3-wrapper/tsconfig.json
Normal file
16
packages/web3-wrapper/tsconfig.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"target": "es5",
|
||||
"lib": [ "es2017", "dom"],
|
||||
"outDir": "lib",
|
||||
"sourceMap": true,
|
||||
"declaration": true,
|
||||
"noImplicitAny": true,
|
||||
"strictNullChecks": true
|
||||
},
|
||||
"include": [
|
||||
"./src/**/*",
|
||||
"../../node_modules/web3-typescript-typings/index.d.ts"
|
||||
]
|
||||
}
|
5
packages/web3-wrapper/tslint.json
Normal file
5
packages/web3-wrapper/tslint.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"extends": [
|
||||
"@0xproject/tslint-config"
|
||||
]
|
||||
}
|
@ -28,7 +28,6 @@
|
||||
"dateformat": "^2.0.0",
|
||||
"deep-equal": "^1.0.1",
|
||||
"dharma-loan-frame": "^0.0.12",
|
||||
"es6-promisify": "^5.0.0",
|
||||
"ethereum-address": "^0.0.4",
|
||||
"ethereumjs-tx": "^1.3.3",
|
||||
"ethereumjs-util": "^5.1.1",
|
||||
|
@ -23,9 +23,9 @@ import {
|
||||
LedgerWalletSubprovider,
|
||||
RedundantRPCSubprovider,
|
||||
} from '@0xproject/subproviders';
|
||||
import {promisify} from '@0xproject/utils';
|
||||
import BigNumber from 'bignumber.js';
|
||||
import compareVersions = require('compare-versions');
|
||||
import promisify = require('es6-promisify');
|
||||
import ethUtil = require('ethereumjs-util');
|
||||
import findVersions = require('find-versions');
|
||||
import * as _ from 'lodash';
|
||||
@ -68,7 +68,7 @@ export class Blockchain {
|
||||
public nodeVersion: string;
|
||||
private zeroEx: ZeroEx;
|
||||
private dispatcher: Dispatcher;
|
||||
private web3Wrapper: Web3Wrapper;
|
||||
private web3Wrapper?: Web3Wrapper;
|
||||
private exchangeAddress: string;
|
||||
private tokenTransferProxy: ContractInstance;
|
||||
private tokenRegistry: ContractInstance;
|
||||
@ -631,7 +631,7 @@ export class Blockchain {
|
||||
let networkIdIfExists: number;
|
||||
if (!_.isUndefined(injectedWeb3)) {
|
||||
try {
|
||||
networkIdIfExists = _.parseInt(await promisify(injectedWeb3.version.getNetwork)());
|
||||
networkIdIfExists = _.parseInt(await promisify<string>(injectedWeb3.version.getNetwork)());
|
||||
} catch (err) {
|
||||
// Ignore error and proceed with networkId undefined
|
||||
}
|
||||
|
1
packages/website/ts/globals.d.ts
vendored
1
packages/website/ts/globals.d.ts
vendored
@ -1,6 +1,5 @@
|
||||
declare module 'react-tooltip';
|
||||
declare module 'react-router-hash-link';
|
||||
declare module 'es6-promisify';
|
||||
declare module 'truffle-contract';
|
||||
declare module 'ethereumjs-util';
|
||||
declare module 'keccak';
|
||||
|
@ -1,8 +1,8 @@
|
||||
import {promisify} from '@0xproject/utils';
|
||||
import BigNumber from 'bignumber.js';
|
||||
import promisify = require('es6-promisify');
|
||||
import * as _ from 'lodash';
|
||||
import {Dispatcher} from 'ts/redux/dispatcher';
|
||||
import Web3 = require('web3');
|
||||
import * as Web3 from 'web3';
|
||||
|
||||
export class Web3Wrapper {
|
||||
private dispatcher: Dispatcher;
|
||||
@ -28,7 +28,7 @@ export class Web3Wrapper {
|
||||
return this.web3.isAddress(address);
|
||||
}
|
||||
public async getAccountsAsync(): Promise<string[]> {
|
||||
const addresses = await promisify(this.web3.eth.getAccounts)();
|
||||
const addresses = await promisify<string[]>(this.web3.eth.getAccounts)();
|
||||
return addresses;
|
||||
}
|
||||
public async getFirstAccountIfExistsAsync() {
|
||||
@ -38,8 +38,8 @@ export class Web3Wrapper {
|
||||
}
|
||||
return (addresses)[0];
|
||||
}
|
||||
public async getNodeVersionAsync() {
|
||||
const nodeVersion = await promisify(this.web3.version.getNode)();
|
||||
public async getNodeVersionAsync(): Promise<string> {
|
||||
const nodeVersion = await promisify<string>(this.web3.version.getNode)();
|
||||
return nodeVersion;
|
||||
}
|
||||
public getProviderObj() {
|
||||
@ -54,24 +54,24 @@ export class Web3Wrapper {
|
||||
}
|
||||
}
|
||||
public async getBalanceInEthAsync(owner: string): Promise<BigNumber> {
|
||||
const balanceInWei: BigNumber = await promisify(this.web3.eth.getBalance)(owner);
|
||||
const balanceInWei: BigNumber = await promisify<BigNumber>(this.web3.eth.getBalance)(owner);
|
||||
const balanceEthOldBigNumber = this.web3.fromWei(balanceInWei, 'ether');
|
||||
const balanceEth = new BigNumber(balanceEthOldBigNumber);
|
||||
return balanceEth;
|
||||
}
|
||||
public async doesContractExistAtAddressAsync(address: string): Promise<boolean> {
|
||||
const code = await promisify(this.web3.eth.getCode)(address);
|
||||
const code = await promisify<string>(this.web3.eth.getCode)(address);
|
||||
// Regex matches 0x0, 0x00, 0x in order to accomodate poorly implemented clients
|
||||
const zeroHexAddressRegex = /^0[xX][0]*$/;
|
||||
const didFindCode = _.isNull(code.match(zeroHexAddressRegex));
|
||||
return didFindCode;
|
||||
}
|
||||
public async signTransactionAsync(address: string, message: string): Promise<string> {
|
||||
const signData = await promisify(this.web3.eth.sign)(address, message);
|
||||
const signData = await promisify<string>(this.web3.eth.sign)(address, message);
|
||||
return signData;
|
||||
}
|
||||
public async getBlockTimestampAsync(blockHash: string): Promise<number> {
|
||||
const {timestamp} = await promisify(this.web3.eth.getBlock)(blockHash);
|
||||
const {timestamp} = await promisify<Web3.BlockWithoutTransactionData>(this.web3.eth.getBlock)(blockHash);
|
||||
return timestamp;
|
||||
}
|
||||
public destroy() {
|
||||
|
@ -1,6 +1,6 @@
|
||||
const execAsync = require('async-child-process').execAsync;
|
||||
const semverSort = require('semver-sort');
|
||||
const promisify = require('es6-promisify');
|
||||
import {promisify} from '@0xproject/utils';
|
||||
const publishRelease = require('publish-release');
|
||||
|
||||
const publishReleaseAsync = promisify(publishRelease);
|
||||
|
@ -1281,6 +1281,10 @@ bignumber.js@^4.0.2, bignumber.js@^4.1.0, bignumber.js@~4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-4.1.0.tgz#db6f14067c140bd46624815a7916c92d9b6c24b1"
|
||||
|
||||
bignumber.js@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-5.0.0.tgz#fbce63f09776b3000a83185badcde525daf34833"
|
||||
|
||||
"bignumber.js@git+https://github.com/debris/bignumber.js#master":
|
||||
version "2.0.7"
|
||||
resolved "git+https://github.com/debris/bignumber.js#c7a38de919ed75e6fb6ba38051986e294b328df9"
|
||||
@ -5625,7 +5629,7 @@ normalize-url@^1.4.0:
|
||||
query-string "^4.1.0"
|
||||
sort-keys "^1.0.0"
|
||||
|
||||
npm-run-all@^4.1.2:
|
||||
npm-run-all@^4.1.1, npm-run-all@^4.1.2:
|
||||
version "4.1.2"
|
||||
resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.2.tgz#90d62d078792d20669139e718621186656cea056"
|
||||
dependencies:
|
||||
|
Loading…
x
Reference in New Issue
Block a user