aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.circleci/config.yml2
-rw-r--r--package.json1
-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/README.md11
-rw-r--r--packages/abi-gen/package.json4
-rw-r--r--packages/abi-gen/src/index.ts7
-rw-r--r--packages/abi-gen/tsconfig.json2
-rw-r--r--packages/connect/CHANGELOG.md1
-rw-r--r--packages/connect/src/types.ts4
-rw-r--r--packages/connect/src/ws_orderbook_channel.ts2
-rw-r--r--packages/connect/test/http_client_test.ts6
-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/subproviders/src/subproviders/redundant_rpc.ts2
-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/globals.d.ts1
-rw-r--r--packages/website/ts/web3_wrapper.ts18
-rw-r--r--scripts/postpublish_utils.js2
-rw-r--r--yarn.lock6
75 files changed, 404 insertions, 331 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 461591004..54a2148d2 100644
--- a/package.json
+++ b/package.json
@@ -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"
}
}
diff --git a/packages/0x.js/package.json b/packages/0x.js/package.json
index afa6af827..7b267fa8e 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",
@@ -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",
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/README.md b/packages/abi-gen/README.md
index f1f8bd08f..16dd9b969 100644
--- a/packages/abi-gen/README.md
+++ b/packages/abi-gen/README.md
@@ -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.
diff --git a/packages/abi-gen/package.json b/packages/abi-gen/package.json
index c7f6133a7..9ce64f818 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/src/index.ts b/packages/abi-gen/src/index.ts
index 12b78f96f..19d289e49 100644
--- a/packages/abi-gen/src/index.ts
+++ b/packages/abi-gen/src/index.ts
@@ -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)}`);
}
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/connect/CHANGELOG.md b/packages/connect/CHANGELOG.md
index 3637ed2d1..cf507dbe6 100644
--- a/packages/connect/CHANGELOG.md
+++ b/packages/connect/CHANGELOG.md
@@ -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_
------------------------
diff --git a/packages/connect/src/types.ts b/packages/connect/src/types.ts
index 0657a1d63..d02444a3e 100644
--- a/packages/connect/src/types.ts
+++ b/packages/connect/src/types.ts
@@ -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;
diff --git a/packages/connect/src/ws_orderbook_channel.ts b/packages/connect/src/ws_orderbook_channel.ts
index 346be20c0..6687025c0 100644
--- a/packages/connect/src/ws_orderbook_channel.ts
+++ b/packages/connect/src/ws_orderbook_channel.ts
@@ -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);
diff --git a/packages/connect/test/http_client_test.ts b/packages/connect/test/http_client_test.ts
index 3d72ca185..21e7abb69 100644
--- a/packages/connect/test/http_client_test.ts
+++ b/packages/connect/test/http_client_test.ts
@@ -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);
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/subproviders/src/subproviders/redundant_rpc.ts b/packages/subproviders/src/subproviders/redundant_rpc.ts
index 6f8d0829b..80462bbfb 100644
--- a/packages/subproviders/src/subproviders/redundant_rpc.ts
+++ b/packages/subproviders/src/subproviders/redundant_rpc.ts
@@ -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');
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 ac6e61a88..9234ad601 100644
--- a/packages/website/package.json
+++ b/packages/website/package.json
@@ -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",
diff --git a/packages/website/ts/blockchain.ts b/packages/website/ts/blockchain.ts
index 809da7d4f..76640a072 100644
--- a/packages/website/ts/blockchain.ts
+++ b/packages/website/ts/blockchain.ts
@@ -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
}
diff --git a/packages/website/ts/globals.d.ts b/packages/website/ts/globals.d.ts
index 38a4b971e..b4611f583 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/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 3777c8ef2..245b67b33 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -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: