diff --git a/.circleci/config.yml b/.circleci/config.yml index 9a39dd33c0..fa3388ad52 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 4615910048..54a2148d2f 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 afa6af8277..7b267fa8ed 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 0616b30785..935e4ac1ad 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 5e5a38f8cb..d56b8632dd 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}; 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 { - 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 26025f6f94..896cfde3d7 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 aaf6256a3c..1e9865395b 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 eed5e4686a..ce3f9f5276 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 8c25ca0140..e06ed960c3 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 30b06292f2..83a4ead34e 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 6aacc43363..5d9ad9016d 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 50f1c8f253..fd50a58947 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 27ecb8bde6..064b826d88 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 edc702672a..1a16e35402 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 630ab6e3b8..684f291a53 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 831f19da50..d5b30d5679 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 1ce1117084..08f52d6e12 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 3cff9d2cf0..4cf6caf775 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 f27a7da2cb..3d92c62a37 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 c60b5dc6c8..d4581259df 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 1e5bc1a35e..b5968dc24c 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 421bd0a8cf..ae6016869d 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 27783fb6ef..ec06df507b 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 104013c05a..e45da3bf1d 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 f1f8bd08f1..16dd9b969d 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 c7f6133a7a..9ce64f8187 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 12b78f96f2..19d289e49e 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 2a36678906..695f2a47ed 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 3637ed2d11..cf507dbe6b 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 0657a1d63e..d02444a3e0 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 346be20c0a..6687025c04 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 3d72ca1855..21e7abb690 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 73a43b2472..423523e217 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 { * @param argv Instance of process.argv provided by yargs. */ async function onMigrateCommand(argv: CliOptions): Promise { - 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 { * @param argv Instance of process.argv provided by yargs. */ async function onDeployCommand(argv: CliOptions): Promise { - 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 ea91febe47..c3d38875e6 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 70b88b5142..8a44e94a3e 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 48d175a427..4c8018ecc7 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; + private defaults: Partial; 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 e9c49c9f13..7b6098ceaf 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 6b4fd625cb..90785d0dd7 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(fs.readdir), + readFileAsync: promisify(fs.readFile), + writeFileAsync: promisify(fs.writeFile), + mkdirAsync: promisify(fs.mkdir), doesPathExistSync: fs.existsSync, - removeFileAsync: promisify(fs.unlink), + removeFileAsync: promisify(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 74123e6a5c..0000000000 --- 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 { - 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 855f1e849f..f6b9de6e96 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; + defaults: Partial; } 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 0209da26d7..0000000000 --- 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; - private networkIdIfExists?: number; - private jsonRpcRequestId: number; - constructor(provider: Web3.Provider, defaults: Partial) { - 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 { - const contract = this.web3.eth.contract(abi); - return contract; - } - public async isSenderAddressAvailableAsync(senderAddress: string): Promise { - const addresses = await this.getAvailableAddressesAsync(); - return _.includes(addresses, senderAddress); - } - public async getNodeVersionAsync(): Promise { - const nodeVersion = await promisify(this.web3.version.getNode)(); - return nodeVersion; - } - public async getTransactionReceiptAsync(txHash: string): Promise { - const transactionReceipt = await promisify(this.web3.eth.getTransactionReceipt)(txHash); - return transactionReceipt; - } - public getCurrentProvider(): Web3.Provider { - return this.web3.currentProvider; - } - public async getNetworkIdIfExistsAsync(): Promise { - 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 { - let balanceInWei = await promisify(this.web3.eth.getBalance)(owner); - balanceInWei = new BigNumber(balanceInWei); - return balanceInWei; - } - public async doesContractExistAtAddressAsync(address: string): Promise { - 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 { - const signData = await promisify(this.web3.eth.sign)(address, message); - return signData; - } - public async getBlockAsync(blockParam: string|Web3.BlockParam): Promise { - const block = await promisify(this.web3.eth.getBlock)(blockParam); - return block; - } - public async getBlockTimestampAsync(blockParam: string|Web3.BlockParam): Promise { - const {timestamp} = await this.getBlockAsync(blockParam); - return timestamp; - } - public async getAvailableAddressesAsync(): Promise { - const addresses: string[] = await promisify(this.web3.eth.getAccounts)(); - return addresses; - } - public async getLogsAsync(filter: Web3.FilterObject): Promise { - 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 { - const gasEstimate = await promisify(this.web3.eth.estimateGas)(callData); - return gasEstimate; - } - private getContractInstance(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 { - const networkId = await promisify(this.web3.version.getNetwork)(); - return networkId; - } - private async sendRawPayloadAsync(payload: Web3.JSONRPCRequestPayload): Promise { - 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 28cbd45861..7e7b98f90b 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 226c5a205d..a2de44b63e 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 8bc5b5c3ff..df53e93721 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); - 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 efa2d94c6e..92a9da53e9 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 8573715787..dbb4d2ee65 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(web3.eth.sendTransaction); const getEthBalanceAsync = async (owner: string) => { - const balanceStr = await promisify(web3.eth.getBalance)(owner); + const balanceStr = await promisify(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 6ab3014abd..6dd4dc3b20 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(web3.eth.getBlockNumber)(); + const blockInfo = await promisify(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 8e38221889..ec5362b669 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(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 0181e4dd47..52deb22541 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 157705f573..91ed2021ef 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); -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 758ccac615..8a2f9407d7 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 3c49429e97..ebd3c60eae 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 6f8d0829bf..80462bbfbc 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 0000000000..d4d48b1fe5 --- /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 0000000000..f55be284e4 --- /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 0000000000..8d69af63d6 --- /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 0000000000..de186cfc4e --- /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 0000000000..a077951515 --- /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 0000000000..5191e03500 --- /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 0000000000..f49a95f288 --- /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 0000000000..a61f04ad29 --- /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 similarity index 100% rename from packages/0x.js/src/utils/promisify.ts rename to packages/utils/src/promisify.ts diff --git a/packages/utils/tsconfig.json b/packages/utils/tsconfig.json new file mode 100644 index 0000000000..111df6d3b0 --- /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 0000000000..a077951515 --- /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 0000000000..0df8c63338 --- /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 0000000000..4eea7ed318 --- /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 similarity index 75% rename from packages/0x.js/src/web3_wrapper.ts rename to packages/web3-wrapper/src/index.ts index 6a6b4e760f..7df24e9a53 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; private jsonRpcRequestId: number; - constructor(provider: Web3.Provider, networkId: number, defaults?: Partial) { + constructor(provider: Web3.Provider, defaults?: Partial) { 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(this.web3.version.getNode)(); return nodeVersion; } + public async getNetworkIdAsync(): Promise { + const networkIdStr = await promisify(this.web3.version.getNetwork)(); + const networkId = _.parseInt(networkIdStr); + return networkId; + } public async getTransactionReceiptAsync(txHash: string): Promise { const transactionReceipt = await promisify(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 { - 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 { let balanceInWei = await promisify(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 { + 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 { - const networkId = await promisify(this.web3.version.getNetwork)(); - return networkId; + public async estimateGasAsync(data: string): Promise { + const gas = await promisify(this.web3.eth.estimateGas)({data}); + return gas; } private async sendRawPayloadAsync(payload: Web3.JSONRPCRequestPayload): Promise { 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 0000000000..de186cfc4e --- /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 0000000000..a077951515 --- /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 ac6e61a88e..9234ad6011 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 809da7d4f2..76640a072a 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(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 38a4b971ee..b4611f5834 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 c43436c7e3..b713f8a334 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 { - const addresses = await promisify(this.web3.eth.getAccounts)(); + const addresses = await promisify(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 { + const nodeVersion = await promisify(this.web3.version.getNode)(); return nodeVersion; } public getProviderObj() { @@ -54,24 +54,24 @@ export class Web3Wrapper { } } public async getBalanceInEthAsync(owner: string): Promise { - const balanceInWei: BigNumber = await promisify(this.web3.eth.getBalance)(owner); + const balanceInWei: BigNumber = await promisify(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 { - const code = await promisify(this.web3.eth.getCode)(address); + const code = await promisify(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 { - const signData = await promisify(this.web3.eth.sign)(address, message); + const signData = await promisify(this.web3.eth.sign)(address, message); return signData; } public async getBlockTimestampAsync(blockHash: string): Promise { - const {timestamp} = await promisify(this.web3.eth.getBlock)(blockHash); + const {timestamp} = await promisify(this.web3.eth.getBlock)(blockHash); return timestamp; } public destroy() { diff --git a/scripts/postpublish_utils.js b/scripts/postpublish_utils.js index e2c23ee144..e9563a51ca 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 3777c8ef23..245b67b332 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: