aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLeonid <logvinov.leon@gmail.com>2017-12-09 00:10:05 +0800
committerGitHub <noreply@github.com>2017-12-09 00:10:05 +0800
commitf109d132e400583f0985a01854a4bc9c12ead883 (patch)
treeb0db651ef7aba234ba6b07ff05695a366db734f8
parent72ced622d7fddac4d17b7814f45aeea01db23959 (diff)
parente0d79bd332a3f8a9cad5147f33b2bfaf49e6a5c7 (diff)
downloaddexon-sol-tools-f109d132e400583f0985a01854a4bc9c12ead883.tar
dexon-sol-tools-f109d132e400583f0985a01854a4bc9c12ead883.tar.gz
dexon-sol-tools-f109d132e400583f0985a01854a4bc9c12ead883.tar.bz2
dexon-sol-tools-f109d132e400583f0985a01854a4bc9c12ead883.tar.lz
dexon-sol-tools-f109d132e400583f0985a01854a4bc9c12ead883.tar.xz
dexon-sol-tools-f109d132e400583f0985a01854a4bc9c12ead883.tar.zst
dexon-sol-tools-f109d132e400583f0985a01854a4bc9c12ead883.zip
Merge pull request #253 from 0xProject/feature/web3-wrapper
Refactor web3Wrapper to a separate package
-rw-r--r--.circleci/config.yml2
-rw-r--r--package.json3
-rw-r--r--packages/0x.js/package.json7
-rw-r--r--packages/0x.js/src/0x.ts15
-rw-r--r--packages/0x.js/src/contract_wrappers/contract_wrapper.ts37
-rw-r--r--packages/0x.js/src/contract_wrappers/ether_token_wrapper.ts7
-rw-r--r--packages/0x.js/src/contract_wrappers/exchange_wrapper.ts6
-rw-r--r--packages/0x.js/src/contract_wrappers/generated/ether_token.ts2
-rw-r--r--packages/0x.js/src/contract_wrappers/generated/exchange.ts2
-rw-r--r--packages/0x.js/src/contract_wrappers/generated/token.ts2
-rw-r--r--packages/0x.js/src/contract_wrappers/generated/token_registry.ts2
-rw-r--r--packages/0x.js/src/contract_wrappers/generated/token_transfer_proxy.ts2
-rw-r--r--packages/0x.js/src/contract_wrappers/token_registry_wrapper.ts6
-rw-r--r--packages/0x.js/src/contract_wrappers/token_transfer_proxy_wrapper.ts6
-rw-r--r--packages/0x.js/src/contract_wrappers/token_wrapper.ts6
-rw-r--r--packages/0x.js/src/order_watcher/event_watcher.ts2
-rw-r--r--packages/0x.js/src/order_watcher/order_state_watcher.ts2
-rw-r--r--packages/0x.js/src/utils/assert.ts2
-rw-r--r--packages/0x.js/test/event_watcher_test.ts4
-rw-r--r--packages/0x.js/test/expiration_watcher_test.ts2
-rw-r--r--packages/0x.js/test/order_state_watcher_test.ts2
-rw-r--r--packages/0x.js/test/token_wrapper_test.ts6
-rw-r--r--packages/abi-gen-templates/contract.mustache2
-rw-r--r--packages/abi-gen-templates/package.json2
-rw-r--r--packages/abi-gen/package.json4
-rw-r--r--packages/abi-gen/tsconfig.json2
-rw-r--r--packages/contracts/deploy/cli.ts28
-rw-r--r--packages/contracts/deploy/migrations/migrate.ts2
-rw-r--r--packages/contracts/deploy/src/compiler.ts2
-rw-r--r--packages/contracts/deploy/src/deployer.ts9
-rw-r--r--packages/contracts/deploy/src/utils/contract.ts2
-rw-r--r--packages/contracts/deploy/src/utils/fs_wrapper.ts12
-rw-r--r--packages/contracts/deploy/src/utils/network.ts15
-rw-r--r--packages/contracts/deploy/src/utils/types.ts3
-rw-r--r--packages/contracts/deploy/src/utils/web3_wrapper.ts132
-rw-r--r--packages/contracts/deploy/test/deploy_test.ts2
-rw-r--r--packages/contracts/deploy/test/util/constants.ts4
-rw-r--r--packages/contracts/globals.d.ts6
-rw-r--r--packages/contracts/package.json6
-rw-r--r--packages/contracts/test/ts/ether_token.ts6
-rw-r--r--packages/contracts/test/ts/multi_sig_with_time_lock.ts6
-rw-r--r--packages/contracts/util/order.ts4
-rw-r--r--packages/json-schemas/package.json4
-rw-r--r--packages/json-schemas/src/globals.d.ts6
-rw-r--r--packages/json-schemas/test/schema_test.ts2
-rw-r--r--packages/monorepo-scripts/package.json2
-rw-r--r--packages/types/README.md10
-rw-r--r--packages/types/package.json32
-rw-r--r--packages/types/src/index.ts23
-rw-r--r--packages/types/tsconfig.json16
-rw-r--r--packages/types/tslint.json5
-rw-r--r--packages/utils/README.md10
-rw-r--r--packages/utils/package.json33
-rw-r--r--packages/utils/src/index.ts1
-rw-r--r--packages/utils/src/promisify.ts (renamed from packages/0x.js/src/utils/promisify.ts)0
-rw-r--r--packages/utils/tsconfig.json15
-rw-r--r--packages/utils/tslint.json5
-rw-r--r--packages/web3-wrapper/README.md10
-rw-r--r--packages/web3-wrapper/package.json37
-rw-r--r--packages/web3-wrapper/src/index.ts (renamed from packages/0x.js/src/web3_wrapper.ts)64
-rw-r--r--packages/web3-wrapper/tsconfig.json16
-rw-r--r--packages/web3-wrapper/tslint.json5
-rw-r--r--packages/website/package.json1
-rw-r--r--packages/website/ts/blockchain.ts6
-rw-r--r--packages/website/ts/components/ui/lifecycle_raised_button.tsx2
-rw-r--r--packages/website/ts/globals.d.ts1
-rw-r--r--packages/website/ts/subproviders/redundant_rpc_subprovider.ts2
-rw-r--r--packages/website/ts/web3_wrapper.ts18
-rw-r--r--scripts/postpublish_utils.js2
-rw-r--r--yarn.lock12
70 files changed, 399 insertions, 315 deletions
diff --git a/.circleci/config.yml b/.circleci/config.yml
index 9a39dd33c..fa3388ad5 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -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
diff --git a/package.json b/package.json
index 091ae1069..dcaf34eba 100644
--- a/package.json
+++ b/package.json
@@ -16,7 +16,6 @@
"lerna": "^2.5.1",
"async-child-process": "^1.1.1",
"semver-sort": "^0.0.4",
- "publish-release": "0xproject/publish-release",
- "es6-promisify": "^5.0.0"
+ "publish-release": "0xproject/publish-release"
}
}
diff --git a/packages/0x.js/package.json b/packages/0x.js/package.json
index 8f8376a75..4468bae09 100644
--- a/packages/0x.js/package.json
+++ b/packages/0x.js/package.json
@@ -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",
@@ -88,6 +89,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",
diff --git a/packages/0x.js/src/0x.ts b/packages/0x.js/src/0x.ts
index 0616b3078..935e4ac1a 100644
--- a/packages/0x.js/src/0x.ts
+++ b/packages/0x.js/src/0x.ts
@@ -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,
);
diff --git a/packages/0x.js/src/contract_wrappers/contract_wrapper.ts b/packages/0x.js/src/contract_wrappers/contract_wrapper.ts
index 5e5a38f8c..d56b8632d 100644
--- a/packages/0x.js/src/contract_wrappers/contract_wrapper.ts
+++ b/packages/0x.js/src/contract_wrappers/contract_wrapper.ts
@@ -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);
}
diff --git a/packages/0x.js/src/contract_wrappers/ether_token_wrapper.ts b/packages/0x.js/src/contract_wrappers/ether_token_wrapper.ts
index 26025f6f9..896cfde3d 100644
--- a/packages/0x.js/src/contract_wrappers/ether_token_wrapper.ts
+++ b/packages/0x.js/src/contract_wrappers/ether_token_wrapper.ts
@@ -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;
}
diff --git a/packages/0x.js/src/contract_wrappers/exchange_wrapper.ts b/packages/0x.js/src/contract_wrappers/exchange_wrapper.ts
index aaf6256a3..1e9865395 100644
--- a/packages/0x.js/src/contract_wrappers/exchange_wrapper.ts
+++ b/packages/0x.js/src/contract_wrappers/exchange_wrapper.ts
@@ -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;
diff --git a/packages/0x.js/src/contract_wrappers/generated/ether_token.ts b/packages/0x.js/src/contract_wrappers/generated/ether_token.ts
index eed5e4686..ce3f9f527 100644
--- a/packages/0x.js/src/contract_wrappers/generated/ether_token.ts
+++ b/packages/0x.js/src/contract_wrappers/generated/ether_token.ts
@@ -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';
diff --git a/packages/0x.js/src/contract_wrappers/generated/exchange.ts b/packages/0x.js/src/contract_wrappers/generated/exchange.ts
index 8c25ca014..e06ed960c 100644
--- a/packages/0x.js/src/contract_wrappers/generated/exchange.ts
+++ b/packages/0x.js/src/contract_wrappers/generated/exchange.ts
@@ -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';
diff --git a/packages/0x.js/src/contract_wrappers/generated/token.ts b/packages/0x.js/src/contract_wrappers/generated/token.ts
index 30b06292f..83a4ead34 100644
--- a/packages/0x.js/src/contract_wrappers/generated/token.ts
+++ b/packages/0x.js/src/contract_wrappers/generated/token.ts
@@ -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';
diff --git a/packages/0x.js/src/contract_wrappers/generated/token_registry.ts b/packages/0x.js/src/contract_wrappers/generated/token_registry.ts
index 6aacc4336..5d9ad9016 100644
--- a/packages/0x.js/src/contract_wrappers/generated/token_registry.ts
+++ b/packages/0x.js/src/contract_wrappers/generated/token_registry.ts
@@ -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';
diff --git a/packages/0x.js/src/contract_wrappers/generated/token_transfer_proxy.ts b/packages/0x.js/src/contract_wrappers/generated/token_transfer_proxy.ts
index 50f1c8f25..fd50a5894 100644
--- a/packages/0x.js/src/contract_wrappers/generated/token_transfer_proxy.ts
+++ b/packages/0x.js/src/contract_wrappers/generated/token_transfer_proxy.ts
@@ -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';
diff --git a/packages/0x.js/src/contract_wrappers/token_registry_wrapper.ts b/packages/0x.js/src/contract_wrappers/token_registry_wrapper.ts
index 27ecb8bde..064b826d8 100644
--- a/packages/0x.js/src/contract_wrappers/token_registry_wrapper.ts
+++ b/packages/0x.js/src/contract_wrappers/token_registry_wrapper.ts
@@ -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;
}
/**
diff --git a/packages/0x.js/src/contract_wrappers/token_transfer_proxy_wrapper.ts b/packages/0x.js/src/contract_wrappers/token_transfer_proxy_wrapper.ts
index edc702672..1a16e3540 100644
--- a/packages/0x.js/src/contract_wrappers/token_transfer_proxy_wrapper.ts
+++ b/packages/0x.js/src/contract_wrappers/token_transfer_proxy_wrapper.ts
@@ -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;
}
/**
diff --git a/packages/0x.js/src/contract_wrappers/token_wrapper.ts b/packages/0x.js/src/contract_wrappers/token_wrapper.ts
index 630ab6e3b..684f291a5 100644
--- a/packages/0x.js/src/contract_wrappers/token_wrapper.ts
+++ b/packages/0x.js/src/contract_wrappers/token_wrapper.ts
@@ -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;
}
diff --git a/packages/0x.js/src/order_watcher/event_watcher.ts b/packages/0x.js/src/order_watcher/event_watcher.ts
index 831f19da5..d5b30d567 100644
--- a/packages/0x.js/src/order_watcher/event_watcher.ts
+++ b/packages/0x.js/src/order_watcher/event_watcher.ts
@@ -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;
diff --git a/packages/0x.js/src/order_watcher/order_state_watcher.ts b/packages/0x.js/src/order_watcher/order_state_watcher.ts
index 1ce111708..08f52d6e1 100644
--- a/packages/0x.js/src/order_watcher/order_state_watcher.ts
+++ b/packages/0x.js/src/order_watcher/order_state_watcher.ts
@@ -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';
diff --git a/packages/0x.js/src/utils/assert.ts b/packages/0x.js/src/utils/assert.ts
index 3cff9d2cf..4cf6caf77 100644
--- a/packages/0x.js/src/utils/assert.ts
+++ b/packages/0x.js/src/utils/assert.ts
@@ -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;
diff --git a/packages/0x.js/test/event_watcher_test.ts b/packages/0x.js/test/event_watcher_test.ts
index f27a7da2c..3d92c62a3 100644
--- a/packages/0x.js/test/event_watcher_test.ts
+++ b/packages/0x.js/test/event_watcher_test.ts
@@ -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(() => {
diff --git a/packages/0x.js/test/expiration_watcher_test.ts b/packages/0x.js/test/expiration_watcher_test.ts
index c60b5dc6c..d4581259d 100644
--- a/packages/0x.js/test/expiration_watcher_test.ts
+++ b/packages/0x.js/test/expiration_watcher_test.ts
@@ -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';
diff --git a/packages/0x.js/test/order_state_watcher_test.ts b/packages/0x.js/test/order_state_watcher_test.ts
index 1e5bc1a35..b5968dc24 100644
--- a/packages/0x.js/test/order_state_watcher_test.ts
+++ b/packages/0x.js/test/order_state_watcher_test.ts
@@ -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';
diff --git a/packages/0x.js/test/token_wrapper_test.ts b/packages/0x.js/test/token_wrapper_test.ts
index 421bd0a8c..ae6016869 100644
--- a/packages/0x.js/test/token_wrapper_test.ts
+++ b/packages/0x.js/test/token_wrapper_test.ts
@@ -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);
diff --git a/packages/abi-gen-templates/contract.mustache b/packages/abi-gen-templates/contract.mustache
index 27783fb6e..ec06df507 100644
--- a/packages/abi-gen-templates/contract.mustache
+++ b/packages/abi-gen-templates/contract.mustache
@@ -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';
diff --git a/packages/abi-gen-templates/package.json b/packages/abi-gen-templates/package.json
index 104013c05..e45da3bf1 100644
--- a/packages/abi-gen-templates/package.json
+++ b/packages/abi-gen-templates/package.json
@@ -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",
diff --git a/packages/abi-gen/package.json b/packages/abi-gen/package.json
index defe4a621..0d61891e0 100644
--- a/packages/abi-gen/package.json
+++ b/packages/abi-gen/package.json
@@ -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",
diff --git a/packages/abi-gen/tsconfig.json b/packages/abi-gen/tsconfig.json
index 2a3667890..695f2a47e 100644
--- a/packages/abi-gen/tsconfig.json
+++ b/packages/abi-gen/tsconfig.json
@@ -12,6 +12,6 @@
"include": [
"./src/**/*",
"./test/**/*",
- "../../node_modules/web3-typescript-typings/index.d.ts",
+ "../../node_modules/web3-typescript-typings/index.d.ts"
]
}
diff --git a/packages/contracts/deploy/cli.ts b/packages/contracts/deploy/cli.ts
index 73a43b247..423523e21 100644
--- a/packages/contracts/deploy/cli.ts
+++ b/packages/contracts/deploy/cli.ts
@@ -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;
diff --git a/packages/contracts/deploy/migrations/migrate.ts b/packages/contracts/deploy/migrations/migrate.ts
index ea91febe4..c3d38875e 100644
--- a/packages/contracts/deploy/migrations/migrate.ts
+++ b/packages/contracts/deploy/migrations/migrate.ts
@@ -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 = {
diff --git a/packages/contracts/deploy/src/compiler.ts b/packages/contracts/deploy/src/compiler.ts
index 70b88b514..8a44e94a3 100644
--- a/packages/contracts/deploy/src/compiler.ts
+++ b/packages/contracts/deploy/src/compiler.ts
@@ -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';
diff --git a/packages/contracts/deploy/src/deployer.ts b/packages/contracts/deploy/src/deployer.ts
index 48d175a42..4c8018ecc 100644
--- a/packages/contracts/deploy/src/deployer.ts
+++ b/packages/contracts/deploy/src/deployer.ts
@@ -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;
diff --git a/packages/contracts/deploy/src/utils/contract.ts b/packages/contracts/deploy/src/utils/contract.ts
index e9c49c9f1..7b6098cea 100644
--- a/packages/contracts/deploy/src/utils/contract.ts
+++ b/packages/contracts/deploy/src/utils/contract.ts
@@ -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';
diff --git a/packages/contracts/deploy/src/utils/fs_wrapper.ts b/packages/contracts/deploy/src/utils/fs_wrapper.ts
index 6b4fd625c..90785d0dd 100644
--- a/packages/contracts/deploy/src/utils/fs_wrapper.ts
+++ b/packages/contracts/deploy/src/utils/fs_wrapper.ts
@@ -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),
};
diff --git a/packages/contracts/deploy/src/utils/network.ts b/packages/contracts/deploy/src/utils/network.ts
deleted file mode 100644
index 74123e6a5..000000000
--- a/packages/contracts/deploy/src/utils/network.ts
+++ /dev/null
@@ -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;
- },
-};
diff --git a/packages/contracts/deploy/src/utils/types.ts b/packages/contracts/deploy/src/utils/types.ts
index 855f1e849..f6b9de6e9 100644
--- a/packages/contracts/deploy/src/utils/types.ts
+++ b/packages/contracts/deploy/src/utils/types.ts
@@ -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 {
diff --git a/packages/contracts/deploy/src/utils/web3_wrapper.ts b/packages/contracts/deploy/src/utils/web3_wrapper.ts
deleted file mode 100644
index 0209da26d..000000000
--- a/packages/contracts/deploy/src/utils/web3_wrapper.ts
+++ /dev/null
@@ -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;
- }
-}
diff --git a/packages/contracts/deploy/test/deploy_test.ts b/packages/contracts/deploy/test/deploy_test.ts
index 28cbd4586..7e7b98f90 100644
--- a/packages/contracts/deploy/test/deploy_test.ts
+++ b/packages/contracts/deploy/test/deploy_test.ts
@@ -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,
diff --git a/packages/contracts/deploy/test/util/constants.ts b/packages/contracts/deploy/test/util/constants.ts
index 226c5a205..a2de44b63 100644
--- a/packages/contracts/deploy/test/util/constants.ts
+++ b/packages/contracts/deploy/test/util/constants.ts
@@ -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',
diff --git a/packages/contracts/globals.d.ts b/packages/contracts/globals.d.ts
index 8bc5b5c3f..df53e9372 100644
--- a/packages/contracts/globals.d.ts
+++ b/packages/contracts/globals.d.ts
@@ -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;
-
diff --git a/packages/contracts/package.json b/packages/contracts/package.json
index efa2d94c6..92a9da53e 100644
--- a/packages/contracts/package.json
+++ b/packages/contracts/package.json
@@ -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",
diff --git a/packages/contracts/test/ts/ether_token.ts b/packages/contracts/test/ts/ether_token.ts
index 857371578..dbb4d2ee6 100644
--- a/packages/contracts/test/ts/ether_token.ts
+++ b/packages/contracts/test/ts/ether_token.ts
@@ -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;
};
diff --git a/packages/contracts/test/ts/multi_sig_with_time_lock.ts b/packages/contracts/test/ts/multi_sig_with_time_lock.ts
index 6ab3014ab..6dd4dc3b2 100644
--- a/packages/contracts/test/ts/multi_sig_with_time_lock.ts
+++ b/packages/contracts/test/ts/multi_sig_with_time_lock.ts
@@ -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));
diff --git a/packages/contracts/util/order.ts b/packages/contracts/util/order.ts
index 8e3822188..ec5362b66 100644
--- a/packages/contracts/util/order.ts
+++ b/packages/contracts/util/order.ts
@@ -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,
diff --git a/packages/json-schemas/package.json b/packages/json-schemas/package.json
index 0181e4dd4..52deb2254 100644
--- a/packages/json-schemas/package.json
+++ b/packages/json-schemas/package.json
@@ -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",
diff --git a/packages/json-schemas/src/globals.d.ts b/packages/json-schemas/src/globals.d.ts
index 157705f57..91ed2021e 100644
--- a/packages/json-schemas/src/globals.d.ts
+++ b/packages/json-schemas/src/globals.d.ts
@@ -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;
-}
diff --git a/packages/json-schemas/test/schema_test.ts b/packages/json-schemas/test/schema_test.ts
index 758ccac61..8a2f9407d 100644
--- a/packages/json-schemas/test/schema_test.ts
+++ b/packages/json-schemas/test/schema_test.ts
@@ -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';
diff --git a/packages/monorepo-scripts/package.json b/packages/monorepo-scripts/package.json
index 3c49429e9..ebd3c60ea 100644
--- a/packages/monorepo-scripts/package.json
+++ b/packages/monorepo-scripts/package.json
@@ -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": {
diff --git a/packages/types/README.md b/packages/types/README.md
new file mode 100644
index 000000000..d4d48b1fe
--- /dev/null
+++ b/packages/types/README.md
@@ -0,0 +1,10 @@
+0x types
+------
+
+TS types shared across 0x projects and packages
+
+## Install
+
+```bash
+yarn add -D @0xproject/types
+```
diff --git a/packages/types/package.json b/packages/types/package.json
new file mode 100644
index 000000000..f55be284e
--- /dev/null
+++ b/packages/types/package.json
@@ -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"
+ }
+}
diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts
new file mode 100644
index 000000000..8d69af63d
--- /dev/null
+++ b/packages/types/src/index.ts
@@ -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[];
+}
diff --git a/packages/types/tsconfig.json b/packages/types/tsconfig.json
new file mode 100644
index 000000000..de186cfc4
--- /dev/null
+++ b/packages/types/tsconfig.json
@@ -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"
+ ]
+}
diff --git a/packages/types/tslint.json b/packages/types/tslint.json
new file mode 100644
index 000000000..a07795151
--- /dev/null
+++ b/packages/types/tslint.json
@@ -0,0 +1,5 @@
+{
+ "extends": [
+ "@0xproject/tslint-config"
+ ]
+}
diff --git a/packages/utils/README.md b/packages/utils/README.md
new file mode 100644
index 000000000..5191e0350
--- /dev/null
+++ b/packages/utils/README.md
@@ -0,0 +1,10 @@
+utils
+------
+
+Utils to be shared across 0x projects and packages
+
+## Install
+
+```bash
+yarn add @0xproject/utils
+```
diff --git a/packages/utils/package.json b/packages/utils/package.json
new file mode 100644
index 000000000..f49a95f28
--- /dev/null
+++ b/packages/utils/package.json
@@ -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"
+ }
+}
diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts
new file mode 100644
index 000000000..a61f04ad2
--- /dev/null
+++ b/packages/utils/src/index.ts
@@ -0,0 +1 @@
+export {promisify} from './promisify';
diff --git a/packages/0x.js/src/utils/promisify.ts b/packages/utils/src/promisify.ts
index c114cf32f..c114cf32f 100644
--- a/packages/0x.js/src/utils/promisify.ts
+++ b/packages/utils/src/promisify.ts
diff --git a/packages/utils/tsconfig.json b/packages/utils/tsconfig.json
new file mode 100644
index 000000000..111df6d3b
--- /dev/null
+++ b/packages/utils/tsconfig.json
@@ -0,0 +1,15 @@
+{
+ "compilerOptions": {
+ "module": "commonjs",
+ "target": "es5",
+ "lib": [ "es2017", "dom"],
+ "outDir": "lib",
+ "sourceMap": true,
+ "declaration": true,
+ "noImplicitAny": true,
+ "strictNullChecks": true
+ },
+ "include": [
+ "./src/**/*"
+ ]
+}
diff --git a/packages/utils/tslint.json b/packages/utils/tslint.json
new file mode 100644
index 000000000..a07795151
--- /dev/null
+++ b/packages/utils/tslint.json
@@ -0,0 +1,5 @@
+{
+ "extends": [
+ "@0xproject/tslint-config"
+ ]
+}
diff --git a/packages/web3-wrapper/README.md b/packages/web3-wrapper/README.md
new file mode 100644
index 000000000..0df8c6333
--- /dev/null
+++ b/packages/web3-wrapper/README.md
@@ -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
+```
diff --git a/packages/web3-wrapper/package.json b/packages/web3-wrapper/package.json
new file mode 100644
index 000000000..4eea7ed31
--- /dev/null
+++ b/packages/web3-wrapper/package.json
@@ -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"
+ }
+}
diff --git a/packages/0x.js/src/web3_wrapper.ts b/packages/web3-wrapper/src/index.ts
index 6a6b4e760..7df24e9a5 100644
--- a/packages/0x.js/src/web3_wrapper.ts
+++ b/packages/web3-wrapper/src/index.ts
@@ -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);
diff --git a/packages/web3-wrapper/tsconfig.json b/packages/web3-wrapper/tsconfig.json
new file mode 100644
index 000000000..de186cfc4
--- /dev/null
+++ b/packages/web3-wrapper/tsconfig.json
@@ -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"
+ ]
+}
diff --git a/packages/web3-wrapper/tslint.json b/packages/web3-wrapper/tslint.json
new file mode 100644
index 000000000..a07795151
--- /dev/null
+++ b/packages/web3-wrapper/tslint.json
@@ -0,0 +1,5 @@
+{
+ "extends": [
+ "@0xproject/tslint-config"
+ ]
+}
diff --git a/packages/website/package.json b/packages/website/package.json
index 68e9e8f47..fdc5de5d7 100644
--- a/packages/website/package.json
+++ b/packages/website/package.json
@@ -27,7 +27,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",
diff --git a/packages/website/ts/blockchain.ts b/packages/website/ts/blockchain.ts
index aea4f863c..24205802d 100644
--- a/packages/website/ts/blockchain.ts
+++ b/packages/website/ts/blockchain.ts
@@ -16,9 +16,9 @@ import {
ZeroEx,
ZeroExError,
} from '0x.js';
+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';
@@ -65,7 +65,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;
@@ -624,7 +624,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
}
diff --git a/packages/website/ts/components/ui/lifecycle_raised_button.tsx b/packages/website/ts/components/ui/lifecycle_raised_button.tsx
index 338a3bf76..cba94ca8c 100644
--- a/packages/website/ts/components/ui/lifecycle_raised_button.tsx
+++ b/packages/website/ts/components/ui/lifecycle_raised_button.tsx
@@ -20,7 +20,7 @@ interface LifeCycleRaisedButtonProps {
labelReady: React.ReactNode|string;
labelLoading: React.ReactNode|string;
labelComplete: React.ReactNode|string;
- onClickAsyncFn: () => boolean;
+ onClickAsyncFn: () => Promise<boolean>;
backgroundColor?: string;
labelColor?: string;
}
diff --git a/packages/website/ts/globals.d.ts b/packages/website/ts/globals.d.ts
index c5b94dc45..7bbbb3a98 100644
--- a/packages/website/ts/globals.d.ts
+++ b/packages/website/ts/globals.d.ts
@@ -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';
diff --git a/packages/website/ts/subproviders/redundant_rpc_subprovider.ts b/packages/website/ts/subproviders/redundant_rpc_subprovider.ts
index 8dffd4437..d540e6e7b 100644
--- a/packages/website/ts/subproviders/redundant_rpc_subprovider.ts
+++ b/packages/website/ts/subproviders/redundant_rpc_subprovider.ts
@@ -1,4 +1,4 @@
-import promisify = require('es6-promisify');
+import {promisify} from '@0xproject/utils';
import * as _ from 'lodash';
import {JSONRPCPayload} from 'ts/types';
import RpcSubprovider = require('web3-provider-engine/subproviders/rpc');
diff --git a/packages/website/ts/web3_wrapper.ts b/packages/website/ts/web3_wrapper.ts
index c43436c7e..b713f8a33 100644
--- a/packages/website/ts/web3_wrapper.ts
+++ b/packages/website/ts/web3_wrapper.ts
@@ -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() {
diff --git a/scripts/postpublish_utils.js b/scripts/postpublish_utils.js
index e2c23ee14..e9563a51c 100644
--- a/scripts/postpublish_utils.js
+++ b/scripts/postpublish_utils.js
@@ -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);
diff --git a/yarn.lock b/yarn.lock
index a232f3318..7adc2837b 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -102,6 +102,10 @@
version "4.6.2"
resolved "https://registry.yarnpkg.com/@types/history/-/history-4.6.2.tgz#12cfaba693ba20f114ed5765467ff25fdf67ddb0"
+"@types/isomorphic-fetch@^0.0.34":
+ version "0.0.34"
+ resolved "https://registry.yarnpkg.com/@types/isomorphic-fetch/-/isomorphic-fetch-0.0.34.tgz#3c3483e606c041378438e951464f00e4e60706d6"
+
"@types/jsonschema@^1.1.1":
version "1.1.1"
resolved "https://registry.yarnpkg.com/@types/jsonschema/-/jsonschema-1.1.1.tgz#08703dfe074010e8e829123111594af731f57b1a"
@@ -163,7 +167,7 @@
dependencies:
moment "*"
-"@types/node@*", "@types/node@^8.0.1":
+"@types/node@*":
version "8.0.51"
resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.51.tgz#b31d716fb8d58eeb95c068a039b9b6292817d5fb"
@@ -1277,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"
@@ -5617,7 +5625,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: