From 1fa82c107706d9c938064b0e87498f633cb98795 Mon Sep 17 00:00:00 2001 From: Fabio Berger Date: Tue, 19 Feb 2019 22:34:31 -0800 Subject: [PATCH] Fix up missing Provider interfaces and refactor providerUtils.standardizeOrThrow() --- .../asset-proxy/test/utils/erc20_wrapper.ts | 7 +- .../asset-proxy/test/utils/erc721_wrapper.ts | 7 +- .../test/utils/forwarder_wrapper.ts | 6 +- .../exchange/test/utils/exchange_wrapper.ts | 6 +- .../utils/fill_order_combinatorial_utils.ts | 7 +- .../test/utils/balance_threshold_wrapper.ts | 5 +- .../test/utils/dutch_auction_test_wrapper.ts | 6 +- .../test/utils/asset_proxy_owner_wrapper.ts | 6 +- .../multisig/test/utils/multi_sig_wrapper.ts | 6 +- contracts/test-utils/src/index.ts | 1 + .../abi-gen-templates/contract.handlebars | 2 +- .../generated-wrappers/asset_proxy_owner.ts | 14 +-- .../generated-wrappers/dummy_erc20_token.ts | 14 +-- .../generated-wrappers/dummy_erc721_token.ts | 14 +-- .../src/generated-wrappers/dutch_auction.ts | 14 +-- .../src/generated-wrappers/erc20_proxy.ts | 14 +-- .../src/generated-wrappers/erc20_token.ts | 14 +-- .../src/generated-wrappers/erc721_proxy.ts | 14 +-- .../src/generated-wrappers/erc721_token.ts | 14 +-- .../src/generated-wrappers/exchange.ts | 14 +-- .../src/generated-wrappers/forwarder.ts | 14 +-- .../src/generated-wrappers/i_validator.ts | 14 +-- .../src/generated-wrappers/i_wallet.ts | 14 +-- .../generated-wrappers/multi_asset_proxy.ts | 14 +-- .../src/generated-wrappers/order_validator.ts | 14 +-- .../src/generated-wrappers/weth9.ts | 14 +-- .../src/generated-wrappers/zrx_token.ts | 14 +-- packages/asset-buyer/src/asset_buyer.ts | 4 +- packages/asset-buyer/src/index.ts | 2 +- .../src/contract_wrappers.ts | 2 +- packages/contract-wrappers/src/index.ts | 2 +- .../test/erc20_wrapper_test.ts | 3 +- .../test/erc721_wrapper_test.ts | 3 +- .../test/utils/web3_wrapper.ts | 4 +- packages/ethereum-types/src/index.ts | 25 ++++-- packages/fill-scenarios/src/fill_scenarios.ts | 3 +- packages/instant/src/index.umd.ts | 13 +-- packages/instant/src/types.ts | 4 +- packages/instant/src/util/env.ts | 8 +- packages/instant/src/util/provider_factory.ts | 14 +-- .../src/util/provider_state_factory.ts | 4 +- packages/migrations/src/index.ts | 1 - packages/migrations/src/migrate.ts | 4 +- packages/migrations/src/migrate_snapshot.ts | 4 +- packages/migrations/src/migration.ts | 7 +- packages/order-utils/package.json | 4 +- packages/order-utils/src/index.ts | 2 +- .../order-utils/src/order_validation_utils.ts | 4 +- .../order-utils/test/utils/web3_wrapper.ts | 4 +- packages/order-watcher/src/index.ts | 2 +- .../src/order_watcher/order_watcher.ts | 4 +- packages/order-watcher/src/utils/assert.ts | 6 +- .../order-watcher/test/utils/web3_wrapper.ts | 4 +- packages/sol-compiler/package.json | 4 +- packages/sol-compiler/test/util/provider.ts | 4 +- packages/sol-coverage/src/index.ts | 2 +- packages/sol-profiler/src/index.ts | 2 +- packages/sol-trace/src/index.ts | 2 +- .../src/trace_collection_subprovider.ts | 6 +- packages/subproviders/src/index.ts | 1 - .../src/subproviders/metamask_subprovider.ts | 4 +- .../src/subproviders/subprovider.ts | 7 +- packages/testnet-faucets/src/ts/handler.ts | 3 +- packages/utils/src/provider_utils.ts | 86 ++++++++++--------- packages/web3-wrapper/src/index.ts | 2 +- packages/web3-wrapper/src/web3_wrapper.ts | 19 ++-- packages/website/ts/blockchain.ts | 4 +- .../ts/pages/governance/connect_form.tsx | 8 +- .../ts/pages/governance/modal_vote.tsx | 4 +- .../website/ts/pages/governance/vote_form.tsx | 4 +- packages/website/ts/utils/utils.ts | 4 +- yarn.lock | 27 +++++- 72 files changed, 353 insertions(+), 260 deletions(-) diff --git a/contracts/asset-proxy/test/utils/erc20_wrapper.ts b/contracts/asset-proxy/test/utils/erc20_wrapper.ts index 09607e776c..447580af76 100644 --- a/contracts/asset-proxy/test/utils/erc20_wrapper.ts +++ b/contracts/asset-proxy/test/utils/erc20_wrapper.ts @@ -1,8 +1,7 @@ -import { constants, ERC20BalancesByOwner, txDefaults } from '@0x/contracts-test-utils'; +import { constants, ERC20BalancesByOwner, txDefaults, Web3ProviderEngine } from '@0x/contracts-test-utils'; import { assetDataUtils } from '@0x/order-utils'; import { BigNumber } from '@0x/utils'; import { Web3Wrapper } from '@0x/web3-wrapper'; -import { Provider } from 'ethereum-types'; import * as _ from 'lodash'; import { artifacts, DummyERC20TokenContract, ERC20ProxyContract } from '../../src'; @@ -11,7 +10,7 @@ export class ERC20Wrapper { private readonly _tokenOwnerAddresses: string[]; private readonly _contractOwnerAddress: string; private readonly _web3Wrapper: Web3Wrapper; - private readonly _provider: Provider; + private readonly _provider: Web3ProviderEngine; private readonly _dummyTokenContracts: DummyERC20TokenContract[]; private _proxyContract?: ERC20ProxyContract; private _proxyIdIfExists?: string; @@ -22,7 +21,7 @@ export class ERC20Wrapper { * @param contractOwnerAddress Desired owner of the contract * Instance of ERC20Wrapper */ - constructor(provider: Provider, tokenOwnerAddresses: string[], contractOwnerAddress: string) { + constructor(provider: Web3ProviderEngine, tokenOwnerAddresses: string[], contractOwnerAddress: string) { this._dummyTokenContracts = []; this._web3Wrapper = new Web3Wrapper(provider); this._provider = provider; diff --git a/contracts/asset-proxy/test/utils/erc721_wrapper.ts b/contracts/asset-proxy/test/utils/erc721_wrapper.ts index 92d1398a7a..d84e6ce344 100644 --- a/contracts/asset-proxy/test/utils/erc721_wrapper.ts +++ b/contracts/asset-proxy/test/utils/erc721_wrapper.ts @@ -1,8 +1,7 @@ -import { constants, ERC721TokenIdsByOwner, txDefaults } from '@0x/contracts-test-utils'; +import { constants, ERC721TokenIdsByOwner, txDefaults, Web3ProviderEngine} from '@0x/contracts-test-utils'; import { generatePseudoRandomSalt } from '@0x/order-utils'; import { BigNumber } from '@0x/utils'; import { Web3Wrapper } from '@0x/web3-wrapper'; -import { Provider } from 'ethereum-types'; import * as _ from 'lodash'; import { artifacts, DummyERC721TokenContract, ERC721ProxyContract } from '../../src'; @@ -11,12 +10,12 @@ export class ERC721Wrapper { private readonly _tokenOwnerAddresses: string[]; private readonly _contractOwnerAddress: string; private readonly _web3Wrapper: Web3Wrapper; - private readonly _provider: Provider; + private readonly _provider: Web3ProviderEngine; private readonly _dummyTokenContracts: DummyERC721TokenContract[]; private _proxyContract?: ERC721ProxyContract; private _proxyIdIfExists?: string; private _initialTokenIdsByOwner: ERC721TokenIdsByOwner = {}; - constructor(provider: Provider, tokenOwnerAddresses: string[], contractOwnerAddress: string) { + constructor(provider: Web3ProviderEngine, tokenOwnerAddresses: string[], contractOwnerAddress: string) { this._web3Wrapper = new Web3Wrapper(provider); this._provider = provider; this._dummyTokenContracts = []; diff --git a/contracts/exchange-forwarder/test/utils/forwarder_wrapper.ts b/contracts/exchange-forwarder/test/utils/forwarder_wrapper.ts index 4f9f6110a1..779a9940c9 100644 --- a/contracts/exchange-forwarder/test/utils/forwarder_wrapper.ts +++ b/contracts/exchange-forwarder/test/utils/forwarder_wrapper.ts @@ -1,8 +1,8 @@ -import { constants, formatters, LogDecoder, MarketSellOrders } from '@0x/contracts-test-utils'; +import { constants, formatters, LogDecoder, MarketSellOrders, Web3ProviderEngine } from '@0x/contracts-test-utils'; import { SignedOrder } from '@0x/types'; import { BigNumber } from '@0x/utils'; import { Web3Wrapper } from '@0x/web3-wrapper'; -import { Provider, TransactionReceiptWithDecodedLogs, TxDataPayable } from 'ethereum-types'; +import { TransactionReceiptWithDecodedLogs, TxDataPayable } from 'ethereum-types'; import * as _ from 'lodash'; import { ForwarderContract } from '../../generated-wrappers/forwarder'; @@ -55,7 +55,7 @@ export class ForwarderWrapper { const params = formatters.createMarketSellOrders(signedOrders, constants.ZERO_AMOUNT); return params; } - constructor(contractInstance: ForwarderContract, provider: Provider) { + constructor(contractInstance: ForwarderContract, provider: Web3ProviderEngine) { this._forwarderContract = contractInstance; this._web3Wrapper = new Web3Wrapper(provider); this._logDecoder = new LogDecoder(this._web3Wrapper, artifacts); diff --git a/contracts/exchange/test/utils/exchange_wrapper.ts b/contracts/exchange/test/utils/exchange_wrapper.ts index 535e3bcf21..a11af542bd 100644 --- a/contracts/exchange/test/utils/exchange_wrapper.ts +++ b/contracts/exchange/test/utils/exchange_wrapper.ts @@ -1,8 +1,8 @@ -import { FillResults, formatters, LogDecoder, OrderInfo, orderUtils } from '@0x/contracts-test-utils'; +import { FillResults, formatters, LogDecoder, OrderInfo, orderUtils, Web3ProviderEngine } from '@0x/contracts-test-utils'; import { SignedOrder, SignedZeroExTransaction } from '@0x/types'; import { AbiEncoder, BigNumber } from '@0x/utils'; import { Web3Wrapper } from '@0x/web3-wrapper'; -import { MethodAbi, Provider, TransactionReceiptWithDecodedLogs } from 'ethereum-types'; +import { MethodAbi, TransactionReceiptWithDecodedLogs, ZeroExProvider } from 'ethereum-types'; import * as _ from 'lodash'; import { artifacts, ExchangeContract } from '../../src'; @@ -13,7 +13,7 @@ export class ExchangeWrapper { private readonly _exchange: ExchangeContract; private readonly _web3Wrapper: Web3Wrapper; private readonly _logDecoder: LogDecoder; - constructor(exchangeContract: ExchangeContract, provider: Provider) { + constructor(exchangeContract: ExchangeContract, provider: Web3ProviderEngine | ZeroExProvider) { this._exchange = exchangeContract; this._web3Wrapper = new Web3Wrapper(provider); this._logDecoder = new LogDecoder(this._web3Wrapper, artifacts); diff --git a/contracts/exchange/test/utils/fill_order_combinatorial_utils.ts b/contracts/exchange/test/utils/fill_order_combinatorial_utils.ts index 00ca8a9fc2..9c356a1bac 100644 --- a/contracts/exchange/test/utils/fill_order_combinatorial_utils.ts +++ b/contracts/exchange/test/utils/fill_order_combinatorial_utils.ts @@ -15,6 +15,7 @@ import { TakerAssetFillAmountScenario, TakerScenario, TraderStateScenario, + Web3ProviderEngine, } from '@0x/contracts-test-utils'; import { assetDataUtils, @@ -28,7 +29,7 @@ import { AssetProxyId, RevertReason, SignatureType, SignedOrder } from '@0x/type import { BigNumber, errorUtils, logUtils } from '@0x/utils'; import { Web3Wrapper } from '@0x/web3-wrapper'; import * as chai from 'chai'; -import { LogWithDecodedArgs, Provider, TxData } from 'ethereum-types'; +import { LogWithDecodedArgs, TxData } from 'ethereum-types'; import * as _ from 'lodash'; import 'make-promises-safe'; @@ -59,7 +60,7 @@ export async function fillOrderCombinatorialUtilsFactoryAsync( const [ownerAddress, makerAddress, takerAddress] = userAddresses; const makerPrivateKey = constants.TESTRPC_PRIVATE_KEYS[userAddresses.indexOf(makerAddress)]; - const provider = web3Wrapper.getProvider(); + const provider = web3Wrapper.getZeroExProvider(); const erc20Wrapper = new ERC20Wrapper(provider, userAddresses, ownerAddress); const erc721Wrapper = new ERC721Wrapper(provider, userAddresses, ownerAddress); @@ -351,7 +352,7 @@ export class FillOrderCombinatorialUtils { this.testLibsContract = testLibsContract; } public async testFillOrderScenarioAsync( - provider: Provider, + provider: Web3ProviderEngine, fillScenario: FillScenario, isVerbose: boolean = false, ): Promise { diff --git a/contracts/extensions/test/utils/balance_threshold_wrapper.ts b/contracts/extensions/test/utils/balance_threshold_wrapper.ts index ab59c56889..ab5abcdcbd 100644 --- a/contracts/extensions/test/utils/balance_threshold_wrapper.ts +++ b/contracts/extensions/test/utils/balance_threshold_wrapper.ts @@ -5,11 +5,12 @@ import { OrderInfo, orderUtils, TransactionFactory, + Web3ProviderEngine, } from '@0x/contracts-test-utils'; import { SignedOrder } from '@0x/types'; import { BigNumber } from '@0x/utils'; import { Web3Wrapper } from '@0x/web3-wrapper'; -import { Provider, TransactionReceiptWithDecodedLogs } from 'ethereum-types'; +import { TransactionReceiptWithDecodedLogs } from 'ethereum-types'; import * as _ from 'lodash'; import { artifacts, BalanceThresholdFilterContract, ExchangeContract } from '../../src'; @@ -24,7 +25,7 @@ export class BalanceThresholdWrapper { balanceThresholdFilter: BalanceThresholdFilterContract, exchangeContract: ExchangeContract, signerTransactionFactory: TransactionFactory, - provider: Provider, + provider: Web3ProviderEngine, ) { this._balanceThresholdFilter = balanceThresholdFilter; this._exchange = exchangeContract; diff --git a/contracts/extensions/test/utils/dutch_auction_test_wrapper.ts b/contracts/extensions/test/utils/dutch_auction_test_wrapper.ts index 06cdc21d58..494c6a6052 100644 --- a/contracts/extensions/test/utils/dutch_auction_test_wrapper.ts +++ b/contracts/extensions/test/utils/dutch_auction_test_wrapper.ts @@ -1,7 +1,7 @@ -import { LogDecoder } from '@0x/contracts-test-utils'; +import { LogDecoder, Web3ProviderEngine } from '@0x/contracts-test-utils'; import { DutchAuctionDetails, SignedOrder } from '@0x/types'; import { Web3Wrapper } from '@0x/web3-wrapper'; -import { Provider, TransactionReceiptWithDecodedLogs } from 'ethereum-types'; +import { TransactionReceiptWithDecodedLogs } from 'ethereum-types'; import * as _ from 'lodash'; import { DutchAuctionContract } from '../../generated-wrappers/dutch_auction'; @@ -12,7 +12,7 @@ export class DutchAuctionTestWrapper { private readonly _web3Wrapper: Web3Wrapper; private readonly _logDecoder: LogDecoder; - constructor(contractInstance: DutchAuctionContract, provider: Provider) { + constructor(contractInstance: DutchAuctionContract, provider: Web3ProviderEngine) { this._dutchAuctionContract = contractInstance; this._web3Wrapper = new Web3Wrapper(provider); this._logDecoder = new LogDecoder(this._web3Wrapper, artifacts); diff --git a/contracts/multisig/test/utils/asset_proxy_owner_wrapper.ts b/contracts/multisig/test/utils/asset_proxy_owner_wrapper.ts index d5aaaf5198..13c5472edd 100644 --- a/contracts/multisig/test/utils/asset_proxy_owner_wrapper.ts +++ b/contracts/multisig/test/utils/asset_proxy_owner_wrapper.ts @@ -1,7 +1,7 @@ -import { LogDecoder } from '@0x/contracts-test-utils'; +import { LogDecoder, Web3ProviderEngine } from '@0x/contracts-test-utils'; import { BigNumber } from '@0x/utils'; import { Web3Wrapper } from '@0x/web3-wrapper'; -import { Provider, TransactionReceiptWithDecodedLogs } from 'ethereum-types'; +import { TransactionReceiptWithDecodedLogs } from 'ethereum-types'; import * as _ from 'lodash'; import { AssetProxyOwnerContract } from '../../generated-wrappers/asset_proxy_owner'; @@ -11,7 +11,7 @@ export class AssetProxyOwnerWrapper { private readonly _assetProxyOwner: AssetProxyOwnerContract; private readonly _web3Wrapper: Web3Wrapper; private readonly _logDecoder: LogDecoder; - constructor(assetproxyOwnerContract: AssetProxyOwnerContract, provider: Provider) { + constructor(assetproxyOwnerContract: AssetProxyOwnerContract, provider: Web3ProviderEngine) { this._assetProxyOwner = assetproxyOwnerContract; this._web3Wrapper = new Web3Wrapper(provider); this._logDecoder = new LogDecoder(this._web3Wrapper, artifacts); diff --git a/contracts/multisig/test/utils/multi_sig_wrapper.ts b/contracts/multisig/test/utils/multi_sig_wrapper.ts index 086143613a..225a262346 100644 --- a/contracts/multisig/test/utils/multi_sig_wrapper.ts +++ b/contracts/multisig/test/utils/multi_sig_wrapper.ts @@ -1,7 +1,7 @@ -import { LogDecoder } from '@0x/contracts-test-utils'; +import { LogDecoder, Web3ProviderEngine } from '@0x/contracts-test-utils'; import { BigNumber } from '@0x/utils'; import { Web3Wrapper } from '@0x/web3-wrapper'; -import { Provider, TransactionReceiptWithDecodedLogs } from 'ethereum-types'; +import { TransactionReceiptWithDecodedLogs } from 'ethereum-types'; import * as _ from 'lodash'; import { MultiSigWalletContract } from '../../generated-wrappers/multi_sig_wallet'; @@ -11,7 +11,7 @@ export class MultiSigWrapper { private readonly _multiSig: MultiSigWalletContract; private readonly _web3Wrapper: Web3Wrapper; private readonly _logDecoder: LogDecoder; - constructor(multiSigContract: MultiSigWalletContract, provider: Provider) { + constructor(multiSigContract: MultiSigWalletContract, provider: Web3ProviderEngine) { this._multiSig = multiSigContract; this._web3Wrapper = new Web3Wrapper(provider); this._logDecoder = new LogDecoder(this._web3Wrapper, artifacts); diff --git a/contracts/test-utils/src/index.ts b/contracts/test-utils/src/index.ts index 5ac927e475..331913af80 100644 --- a/contracts/test-utils/src/index.ts +++ b/contracts/test-utils/src/index.ts @@ -22,6 +22,7 @@ export { orderUtils } from './order_utils'; export { typeEncodingUtils } from './type_encoding_utils'; export { profiler } from './profiler'; export { coverage } from './coverage'; +export { Web3ProviderEngine } from '@0x/subproviders'; export { addressUtils } from './address_utils'; export { OrderFactory } from './order_factory'; export { bytes32Values, testCombinatoriallyWithReferenceFuncAsync, uint256Values } from './combinatorial_utils'; diff --git a/packages/abi-gen-templates/contract.handlebars b/packages/abi-gen-templates/contract.handlebars index c2dc6a4084..bb557eff55 100644 --- a/packages/abi-gen-templates/contract.handlebars +++ b/packages/abi-gen-templates/contract.handlebars @@ -86,7 +86,7 @@ export class {{contractName}}Contract extends BaseContract { return contractInstance; } constructor(abi: ContractAbi, address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { - super('{{contractName}}', abi, address, providerUtils.standardizeOrThrow(supportedProvider), txDefaults); + super('{{contractName}}', abi, address, supportedProvider, txDefaults); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', 'abi', '_web3Wrapper']); } } // tslint:disable:max-file-line-count diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/asset_proxy_owner.ts b/packages/abi-gen-wrappers/src/generated-wrappers/asset_proxy_owner.ts index cc42e7fb52..7ca1490dc2 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/asset_proxy_owner.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/asset_proxy_owner.ts @@ -2,8 +2,8 @@ // tslint:disable:no-unused-variable // tslint:disable:no-unbound-method import { BaseContract } from '@0x/base-contract'; -import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; -import { BigNumber, classUtils, logUtils } from '@0x/utils'; +import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, TxData, TxDataPayable, SupportedProvider } from 'ethereum-types'; +import { BigNumber, classUtils, logUtils, providerUtils } from '@0x/utils'; import { SimpleContractArtifact } from '@0x/types'; import { Web3Wrapper } from '@0x/web3-wrapper'; import * as ethers from 'ethers'; @@ -1419,7 +1419,7 @@ export class AssetProxyOwnerContract extends BaseContract { }; public static async deployFrom0xArtifactAsync( artifact: ContractArtifact | SimpleContractArtifact, - provider: Provider, + supportedProvider: SupportedProvider, txDefaults: Partial, _owners: string[], _assetProxyContracts: string[], @@ -1429,6 +1429,7 @@ export class AssetProxyOwnerContract extends BaseContract { if (_.isUndefined(artifact.compilerOutput)) { throw new Error('Compiler output not found in the artifact file'); } + const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; return AssetProxyOwnerContract.deployAsync(bytecode, abi, provider, txDefaults, _owners, @@ -1440,13 +1441,14 @@ _secondsTimeLocked public static async deployAsync( bytecode: string, abi: ContractAbi, - provider: Provider, + supportedProvider: SupportedProvider, txDefaults: Partial, _owners: string[], _assetProxyContracts: string[], _required: BigNumber, _secondsTimeLocked: BigNumber, ): Promise { + const provider = providerUtils.standardizeOrThrow(supportedProvider); const constructorAbi = BaseContract._lookupConstructorAbi(abi); [_owners, _assetProxyContracts, @@ -1486,8 +1488,8 @@ _secondsTimeLocked ]; return contractInstance; } - constructor(abi: ContractAbi, address: string, provider: Provider, txDefaults?: Partial) { - super('AssetProxyOwner', abi, address, provider, txDefaults); + constructor(abi: ContractAbi, address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { + super('AssetProxyOwner', abi, address, providerUtils.standardizeOrThrow(supportedProvider), txDefaults); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', 'abi', '_web3Wrapper']); } } // tslint:disable:max-file-line-count diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/dummy_erc20_token.ts b/packages/abi-gen-wrappers/src/generated-wrappers/dummy_erc20_token.ts index cab09c4d20..3ccec7e161 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/dummy_erc20_token.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/dummy_erc20_token.ts @@ -2,8 +2,8 @@ // tslint:disable:no-unused-variable // tslint:disable:no-unbound-method import { BaseContract } from '@0x/base-contract'; -import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; -import { BigNumber, classUtils, logUtils } from '@0x/utils'; +import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, TxData, TxDataPayable, SupportedProvider } from 'ethereum-types'; +import { BigNumber, classUtils, logUtils, providerUtils } from '@0x/utils'; import { SimpleContractArtifact } from '@0x/types'; import { Web3Wrapper } from '@0x/web3-wrapper'; import * as ethers from 'ethers'; @@ -753,7 +753,7 @@ export class DummyERC20TokenContract extends BaseContract { }; public static async deployFrom0xArtifactAsync( artifact: ContractArtifact | SimpleContractArtifact, - provider: Provider, + supportedProvider: SupportedProvider, txDefaults: Partial, _name: string, _symbol: string, @@ -763,6 +763,7 @@ export class DummyERC20TokenContract extends BaseContract { if (_.isUndefined(artifact.compilerOutput)) { throw new Error('Compiler output not found in the artifact file'); } + const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; return DummyERC20TokenContract.deployAsync(bytecode, abi, provider, txDefaults, _name, @@ -774,13 +775,14 @@ _totalSupply public static async deployAsync( bytecode: string, abi: ContractAbi, - provider: Provider, + supportedProvider: SupportedProvider, txDefaults: Partial, _name: string, _symbol: string, _decimals: BigNumber, _totalSupply: BigNumber, ): Promise { + const provider = providerUtils.standardizeOrThrow(supportedProvider); const constructorAbi = BaseContract._lookupConstructorAbi(abi); [_name, _symbol, @@ -820,8 +822,8 @@ _totalSupply ]; return contractInstance; } - constructor(abi: ContractAbi, address: string, provider: Provider, txDefaults?: Partial) { - super('DummyERC20Token', abi, address, provider, txDefaults); + constructor(abi: ContractAbi, address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { + super('DummyERC20Token', abi, address, providerUtils.standardizeOrThrow(supportedProvider), txDefaults); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', 'abi', '_web3Wrapper']); } } // tslint:disable:max-file-line-count diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/dummy_erc721_token.ts b/packages/abi-gen-wrappers/src/generated-wrappers/dummy_erc721_token.ts index 9cb54442b5..235ea9b3b1 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/dummy_erc721_token.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/dummy_erc721_token.ts @@ -2,8 +2,8 @@ // tslint:disable:no-unused-variable // tslint:disable:no-unbound-method import { BaseContract } from '@0x/base-contract'; -import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; -import { BigNumber, classUtils, logUtils } from '@0x/utils'; +import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, TxData, TxDataPayable, SupportedProvider } from 'ethereum-types'; +import { BigNumber, classUtils, logUtils, providerUtils } from '@0x/utils'; import { SimpleContractArtifact } from '@0x/types'; import { Web3Wrapper } from '@0x/web3-wrapper'; import * as ethers from 'ethers'; @@ -945,7 +945,7 @@ export class DummyERC721TokenContract extends BaseContract { }; public static async deployFrom0xArtifactAsync( artifact: ContractArtifact | SimpleContractArtifact, - provider: Provider, + supportedProvider: SupportedProvider, txDefaults: Partial, _name: string, _symbol: string, @@ -953,6 +953,7 @@ export class DummyERC721TokenContract extends BaseContract { if (_.isUndefined(artifact.compilerOutput)) { throw new Error('Compiler output not found in the artifact file'); } + const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; return DummyERC721TokenContract.deployAsync(bytecode, abi, provider, txDefaults, _name, @@ -962,11 +963,12 @@ _symbol public static async deployAsync( bytecode: string, abi: ContractAbi, - provider: Provider, + supportedProvider: SupportedProvider, txDefaults: Partial, _name: string, _symbol: string, ): Promise { + const provider = providerUtils.standardizeOrThrow(supportedProvider); const constructorAbi = BaseContract._lookupConstructorAbi(abi); [_name, _symbol @@ -998,8 +1000,8 @@ _symbol ]; return contractInstance; } - constructor(abi: ContractAbi, address: string, provider: Provider, txDefaults?: Partial) { - super('DummyERC721Token', abi, address, provider, txDefaults); + constructor(abi: ContractAbi, address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { + super('DummyERC721Token', abi, address, providerUtils.standardizeOrThrow(supportedProvider), txDefaults); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', 'abi', '_web3Wrapper']); } } // tslint:disable:max-file-line-count diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/dutch_auction.ts b/packages/abi-gen-wrappers/src/generated-wrappers/dutch_auction.ts index 9be95af65d..08556aaeee 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/dutch_auction.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/dutch_auction.ts @@ -2,8 +2,8 @@ // tslint:disable:no-unused-variable // tslint:disable:no-unbound-method import { BaseContract } from '@0x/base-contract'; -import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; -import { BigNumber, classUtils, logUtils } from '@0x/utils'; +import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, TxData, TxDataPayable, SupportedProvider } from 'ethereum-types'; +import { BigNumber, classUtils, logUtils, providerUtils } from '@0x/utils'; import { SimpleContractArtifact } from '@0x/types'; import { Web3Wrapper } from '@0x/web3-wrapper'; import * as ethers from 'ethers'; @@ -196,13 +196,14 @@ export class DutchAuctionContract extends BaseContract { }; public static async deployFrom0xArtifactAsync( artifact: ContractArtifact | SimpleContractArtifact, - provider: Provider, + supportedProvider: SupportedProvider, txDefaults: Partial, _exchange: string, ): Promise { if (_.isUndefined(artifact.compilerOutput)) { throw new Error('Compiler output not found in the artifact file'); } + const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; return DutchAuctionContract.deployAsync(bytecode, abi, provider, txDefaults, _exchange @@ -211,10 +212,11 @@ export class DutchAuctionContract extends BaseContract { public static async deployAsync( bytecode: string, abi: ContractAbi, - provider: Provider, + supportedProvider: SupportedProvider, txDefaults: Partial, _exchange: string, ): Promise { + const provider = providerUtils.standardizeOrThrow(supportedProvider); const constructorAbi = BaseContract._lookupConstructorAbi(abi); [_exchange ] = BaseContract._formatABIDataItemList( @@ -242,8 +244,8 @@ export class DutchAuctionContract extends BaseContract { ]; return contractInstance; } - constructor(abi: ContractAbi, address: string, provider: Provider, txDefaults?: Partial) { - super('DutchAuction', abi, address, provider, txDefaults); + constructor(abi: ContractAbi, address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { + super('DutchAuction', abi, address, providerUtils.standardizeOrThrow(supportedProvider), txDefaults); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', 'abi', '_web3Wrapper']); } } // tslint:disable:max-file-line-count diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/erc20_proxy.ts b/packages/abi-gen-wrappers/src/generated-wrappers/erc20_proxy.ts index 1d53df6b8e..c039a1e179 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/erc20_proxy.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/erc20_proxy.ts @@ -2,8 +2,8 @@ // tslint:disable:no-unused-variable // tslint:disable:no-unbound-method import { BaseContract } from '@0x/base-contract'; -import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; -import { BigNumber, classUtils, logUtils } from '@0x/utils'; +import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, TxData, TxDataPayable, SupportedProvider } from 'ethereum-types'; +import { BigNumber, classUtils, logUtils, providerUtils } from '@0x/utils'; import { SimpleContractArtifact } from '@0x/types'; import { Web3Wrapper } from '@0x/web3-wrapper'; import * as ethers from 'ethers'; @@ -483,12 +483,13 @@ export class ERC20ProxyContract extends BaseContract { }; public static async deployFrom0xArtifactAsync( artifact: ContractArtifact | SimpleContractArtifact, - provider: Provider, + supportedProvider: SupportedProvider, txDefaults: Partial, ): Promise { if (_.isUndefined(artifact.compilerOutput)) { throw new Error('Compiler output not found in the artifact file'); } + const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; return ERC20ProxyContract.deployAsync(bytecode, abi, provider, txDefaults, ); @@ -496,9 +497,10 @@ export class ERC20ProxyContract extends BaseContract { public static async deployAsync( bytecode: string, abi: ContractAbi, - provider: Provider, + supportedProvider: SupportedProvider, txDefaults: Partial, ): Promise { + const provider = providerUtils.standardizeOrThrow(supportedProvider); const constructorAbi = BaseContract._lookupConstructorAbi(abi); [] = BaseContract._formatABIDataItemList( constructorAbi.inputs, @@ -522,8 +524,8 @@ export class ERC20ProxyContract extends BaseContract { contractInstance.constructorArgs = []; return contractInstance; } - constructor(abi: ContractAbi, address: string, provider: Provider, txDefaults?: Partial) { - super('ERC20Proxy', abi, address, provider, txDefaults); + constructor(abi: ContractAbi, address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { + super('ERC20Proxy', abi, address, providerUtils.standardizeOrThrow(supportedProvider), txDefaults); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', 'abi', '_web3Wrapper']); } } // tslint:disable:max-file-line-count diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/erc20_token.ts b/packages/abi-gen-wrappers/src/generated-wrappers/erc20_token.ts index 5070111e18..8d6b527350 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/erc20_token.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/erc20_token.ts @@ -2,8 +2,8 @@ // tslint:disable:no-unused-variable // tslint:disable:no-unbound-method import { BaseContract } from '@0x/base-contract'; -import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; -import { BigNumber, classUtils, logUtils } from '@0x/utils'; +import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, TxData, TxDataPayable, SupportedProvider } from 'ethereum-types'; +import { BigNumber, classUtils, logUtils, providerUtils } from '@0x/utils'; import { SimpleContractArtifact } from '@0x/types'; import { Web3Wrapper } from '@0x/web3-wrapper'; import * as ethers from 'ethers'; @@ -386,12 +386,13 @@ export class ERC20TokenContract extends BaseContract { }; public static async deployFrom0xArtifactAsync( artifact: ContractArtifact | SimpleContractArtifact, - provider: Provider, + supportedProvider: SupportedProvider, txDefaults: Partial, ): Promise { if (_.isUndefined(artifact.compilerOutput)) { throw new Error('Compiler output not found in the artifact file'); } + const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; return ERC20TokenContract.deployAsync(bytecode, abi, provider, txDefaults, ); @@ -399,9 +400,10 @@ export class ERC20TokenContract extends BaseContract { public static async deployAsync( bytecode: string, abi: ContractAbi, - provider: Provider, + supportedProvider: SupportedProvider, txDefaults: Partial, ): Promise { + const provider = providerUtils.standardizeOrThrow(supportedProvider); const constructorAbi = BaseContract._lookupConstructorAbi(abi); [] = BaseContract._formatABIDataItemList( constructorAbi.inputs, @@ -425,8 +427,8 @@ export class ERC20TokenContract extends BaseContract { contractInstance.constructorArgs = []; return contractInstance; } - constructor(abi: ContractAbi, address: string, provider: Provider, txDefaults?: Partial) { - super('ERC20Token', abi, address, provider, txDefaults); + constructor(abi: ContractAbi, address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { + super('ERC20Token', abi, address, providerUtils.standardizeOrThrow(supportedProvider), txDefaults); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', 'abi', '_web3Wrapper']); } } // tslint:disable:max-file-line-count diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/erc721_proxy.ts b/packages/abi-gen-wrappers/src/generated-wrappers/erc721_proxy.ts index 5a9fcc7d15..e2e1ce1b8c 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/erc721_proxy.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/erc721_proxy.ts @@ -2,8 +2,8 @@ // tslint:disable:no-unused-variable // tslint:disable:no-unbound-method import { BaseContract } from '@0x/base-contract'; -import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; -import { BigNumber, classUtils, logUtils } from '@0x/utils'; +import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, TxData, TxDataPayable, SupportedProvider } from 'ethereum-types'; +import { BigNumber, classUtils, logUtils, providerUtils } from '@0x/utils'; import { SimpleContractArtifact } from '@0x/types'; import { Web3Wrapper } from '@0x/web3-wrapper'; import * as ethers from 'ethers'; @@ -483,12 +483,13 @@ export class ERC721ProxyContract extends BaseContract { }; public static async deployFrom0xArtifactAsync( artifact: ContractArtifact | SimpleContractArtifact, - provider: Provider, + supportedProvider: SupportedProvider, txDefaults: Partial, ): Promise { if (_.isUndefined(artifact.compilerOutput)) { throw new Error('Compiler output not found in the artifact file'); } + const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; return ERC721ProxyContract.deployAsync(bytecode, abi, provider, txDefaults, ); @@ -496,9 +497,10 @@ export class ERC721ProxyContract extends BaseContract { public static async deployAsync( bytecode: string, abi: ContractAbi, - provider: Provider, + supportedProvider: SupportedProvider, txDefaults: Partial, ): Promise { + const provider = providerUtils.standardizeOrThrow(supportedProvider); const constructorAbi = BaseContract._lookupConstructorAbi(abi); [] = BaseContract._formatABIDataItemList( constructorAbi.inputs, @@ -522,8 +524,8 @@ export class ERC721ProxyContract extends BaseContract { contractInstance.constructorArgs = []; return contractInstance; } - constructor(abi: ContractAbi, address: string, provider: Provider, txDefaults?: Partial) { - super('ERC721Proxy', abi, address, provider, txDefaults); + constructor(abi: ContractAbi, address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { + super('ERC721Proxy', abi, address, providerUtils.standardizeOrThrow(supportedProvider), txDefaults); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', 'abi', '_web3Wrapper']); } } // tslint:disable:max-file-line-count diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/erc721_token.ts b/packages/abi-gen-wrappers/src/generated-wrappers/erc721_token.ts index aaae2ab764..ee68f3c0e2 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/erc721_token.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/erc721_token.ts @@ -2,8 +2,8 @@ // tslint:disable:no-unused-variable // tslint:disable:no-unbound-method import { BaseContract } from '@0x/base-contract'; -import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; -import { BigNumber, classUtils, logUtils } from '@0x/utils'; +import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, TxData, TxDataPayable, SupportedProvider } from 'ethereum-types'; +import { BigNumber, classUtils, logUtils, providerUtils } from '@0x/utils'; import { SimpleContractArtifact } from '@0x/types'; import { Web3Wrapper } from '@0x/web3-wrapper'; import * as ethers from 'ethers'; @@ -621,12 +621,13 @@ export class ERC721TokenContract extends BaseContract { }; public static async deployFrom0xArtifactAsync( artifact: ContractArtifact | SimpleContractArtifact, - provider: Provider, + supportedProvider: SupportedProvider, txDefaults: Partial, ): Promise { if (_.isUndefined(artifact.compilerOutput)) { throw new Error('Compiler output not found in the artifact file'); } + const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; return ERC721TokenContract.deployAsync(bytecode, abi, provider, txDefaults, ); @@ -634,9 +635,10 @@ export class ERC721TokenContract extends BaseContract { public static async deployAsync( bytecode: string, abi: ContractAbi, - provider: Provider, + supportedProvider: SupportedProvider, txDefaults: Partial, ): Promise { + const provider = providerUtils.standardizeOrThrow(supportedProvider); const constructorAbi = BaseContract._lookupConstructorAbi(abi); [] = BaseContract._formatABIDataItemList( constructorAbi.inputs, @@ -660,8 +662,8 @@ export class ERC721TokenContract extends BaseContract { contractInstance.constructorArgs = []; return contractInstance; } - constructor(abi: ContractAbi, address: string, provider: Provider, txDefaults?: Partial) { - super('ERC721Token', abi, address, provider, txDefaults); + constructor(abi: ContractAbi, address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { + super('ERC721Token', abi, address, providerUtils.standardizeOrThrow(supportedProvider), txDefaults); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', 'abi', '_web3Wrapper']); } } // tslint:disable:max-file-line-count diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/exchange.ts b/packages/abi-gen-wrappers/src/generated-wrappers/exchange.ts index 146fa7c2af..ce86701b48 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/exchange.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/exchange.ts @@ -2,8 +2,8 @@ // tslint:disable:no-unused-variable // tslint:disable:no-unbound-method import { BaseContract } from '@0x/base-contract'; -import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; -import { BigNumber, classUtils, logUtils } from '@0x/utils'; +import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, TxData, TxDataPayable, SupportedProvider } from 'ethereum-types'; +import { BigNumber, classUtils, logUtils, providerUtils } from '@0x/utils'; import { SimpleContractArtifact } from '@0x/types'; import { Web3Wrapper } from '@0x/web3-wrapper'; import * as ethers from 'ethers'; @@ -2225,13 +2225,14 @@ export class ExchangeContract extends BaseContract { }; public static async deployFrom0xArtifactAsync( artifact: ContractArtifact | SimpleContractArtifact, - provider: Provider, + supportedProvider: SupportedProvider, txDefaults: Partial, _zrxAssetData: string, ): Promise { if (_.isUndefined(artifact.compilerOutput)) { throw new Error('Compiler output not found in the artifact file'); } + const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; return ExchangeContract.deployAsync(bytecode, abi, provider, txDefaults, _zrxAssetData @@ -2240,10 +2241,11 @@ export class ExchangeContract extends BaseContract { public static async deployAsync( bytecode: string, abi: ContractAbi, - provider: Provider, + supportedProvider: SupportedProvider, txDefaults: Partial, _zrxAssetData: string, ): Promise { + const provider = providerUtils.standardizeOrThrow(supportedProvider); const constructorAbi = BaseContract._lookupConstructorAbi(abi); [_zrxAssetData ] = BaseContract._formatABIDataItemList( @@ -2271,8 +2273,8 @@ export class ExchangeContract extends BaseContract { ]; return contractInstance; } - constructor(abi: ContractAbi, address: string, provider: Provider, txDefaults?: Partial) { - super('Exchange', abi, address, provider, txDefaults); + constructor(abi: ContractAbi, address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { + super('Exchange', abi, address, providerUtils.standardizeOrThrow(supportedProvider), txDefaults); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', 'abi', '_web3Wrapper']); } } // tslint:disable:max-file-line-count diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/forwarder.ts b/packages/abi-gen-wrappers/src/generated-wrappers/forwarder.ts index 5303207921..e420a70b46 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/forwarder.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/forwarder.ts @@ -2,8 +2,8 @@ // tslint:disable:no-unused-variable // tslint:disable:no-unbound-method import { BaseContract } from '@0x/base-contract'; -import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; -import { BigNumber, classUtils, logUtils } from '@0x/utils'; +import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, TxData, TxDataPayable, SupportedProvider } from 'ethereum-types'; +import { BigNumber, classUtils, logUtils, providerUtils } from '@0x/utils'; import { SimpleContractArtifact } from '@0x/types'; import { Web3Wrapper } from '@0x/web3-wrapper'; import * as ethers from 'ethers'; @@ -455,7 +455,7 @@ export class ForwarderContract extends BaseContract { }; public static async deployFrom0xArtifactAsync( artifact: ContractArtifact | SimpleContractArtifact, - provider: Provider, + supportedProvider: SupportedProvider, txDefaults: Partial, _exchange: string, _zrxAssetData: string, @@ -464,6 +464,7 @@ export class ForwarderContract extends BaseContract { if (_.isUndefined(artifact.compilerOutput)) { throw new Error('Compiler output not found in the artifact file'); } + const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; return ForwarderContract.deployAsync(bytecode, abi, provider, txDefaults, _exchange, @@ -474,12 +475,13 @@ _wethAssetData public static async deployAsync( bytecode: string, abi: ContractAbi, - provider: Provider, + supportedProvider: SupportedProvider, txDefaults: Partial, _exchange: string, _zrxAssetData: string, _wethAssetData: string, ): Promise { + const provider = providerUtils.standardizeOrThrow(supportedProvider); const constructorAbi = BaseContract._lookupConstructorAbi(abi); [_exchange, _zrxAssetData, @@ -515,8 +517,8 @@ _wethAssetData ]; return contractInstance; } - constructor(abi: ContractAbi, address: string, provider: Provider, txDefaults?: Partial) { - super('Forwarder', abi, address, provider, txDefaults); + constructor(abi: ContractAbi, address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { + super('Forwarder', abi, address, providerUtils.standardizeOrThrow(supportedProvider), txDefaults); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', 'abi', '_web3Wrapper']); } } // tslint:disable:max-file-line-count diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/i_validator.ts b/packages/abi-gen-wrappers/src/generated-wrappers/i_validator.ts index 6cb9f64fb3..9e77932a4c 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/i_validator.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/i_validator.ts @@ -2,8 +2,8 @@ // tslint:disable:no-unused-variable // tslint:disable:no-unbound-method import { BaseContract } from '@0x/base-contract'; -import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; -import { BigNumber, classUtils, logUtils } from '@0x/utils'; +import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, TxData, TxDataPayable, SupportedProvider } from 'ethereum-types'; +import { BigNumber, classUtils, logUtils, providerUtils } from '@0x/utils'; import { SimpleContractArtifact } from '@0x/types'; import { Web3Wrapper } from '@0x/web3-wrapper'; import * as ethers from 'ethers'; @@ -49,12 +49,13 @@ export class IValidatorContract extends BaseContract { }; public static async deployFrom0xArtifactAsync( artifact: ContractArtifact | SimpleContractArtifact, - provider: Provider, + supportedProvider: SupportedProvider, txDefaults: Partial, ): Promise { if (_.isUndefined(artifact.compilerOutput)) { throw new Error('Compiler output not found in the artifact file'); } + const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; return IValidatorContract.deployAsync(bytecode, abi, provider, txDefaults, ); @@ -62,9 +63,10 @@ export class IValidatorContract extends BaseContract { public static async deployAsync( bytecode: string, abi: ContractAbi, - provider: Provider, + supportedProvider: SupportedProvider, txDefaults: Partial, ): Promise { + const provider = providerUtils.standardizeOrThrow(supportedProvider); const constructorAbi = BaseContract._lookupConstructorAbi(abi); [] = BaseContract._formatABIDataItemList( constructorAbi.inputs, @@ -88,8 +90,8 @@ export class IValidatorContract extends BaseContract { contractInstance.constructorArgs = []; return contractInstance; } - constructor(abi: ContractAbi, address: string, provider: Provider, txDefaults?: Partial) { - super('IValidator', abi, address, provider, txDefaults); + constructor(abi: ContractAbi, address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { + super('IValidator', abi, address, providerUtils.standardizeOrThrow(supportedProvider), txDefaults); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', 'abi', '_web3Wrapper']); } } // tslint:disable:max-file-line-count diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/i_wallet.ts b/packages/abi-gen-wrappers/src/generated-wrappers/i_wallet.ts index 2185c79992..ebb330dcf5 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/i_wallet.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/i_wallet.ts @@ -2,8 +2,8 @@ // tslint:disable:no-unused-variable // tslint:disable:no-unbound-method import { BaseContract } from '@0x/base-contract'; -import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; -import { BigNumber, classUtils, logUtils } from '@0x/utils'; +import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, TxData, TxDataPayable, SupportedProvider } from 'ethereum-types'; +import { BigNumber, classUtils, logUtils, providerUtils } from '@0x/utils'; import { SimpleContractArtifact } from '@0x/types'; import { Web3Wrapper } from '@0x/web3-wrapper'; import * as ethers from 'ethers'; @@ -47,12 +47,13 @@ export class IWalletContract extends BaseContract { }; public static async deployFrom0xArtifactAsync( artifact: ContractArtifact | SimpleContractArtifact, - provider: Provider, + supportedProvider: SupportedProvider, txDefaults: Partial, ): Promise { if (_.isUndefined(artifact.compilerOutput)) { throw new Error('Compiler output not found in the artifact file'); } + const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; return IWalletContract.deployAsync(bytecode, abi, provider, txDefaults, ); @@ -60,9 +61,10 @@ export class IWalletContract extends BaseContract { public static async deployAsync( bytecode: string, abi: ContractAbi, - provider: Provider, + supportedProvider: SupportedProvider, txDefaults: Partial, ): Promise { + const provider = providerUtils.standardizeOrThrow(supportedProvider); const constructorAbi = BaseContract._lookupConstructorAbi(abi); [] = BaseContract._formatABIDataItemList( constructorAbi.inputs, @@ -86,8 +88,8 @@ export class IWalletContract extends BaseContract { contractInstance.constructorArgs = []; return contractInstance; } - constructor(abi: ContractAbi, address: string, provider: Provider, txDefaults?: Partial) { - super('IWallet', abi, address, provider, txDefaults); + constructor(abi: ContractAbi, address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { + super('IWallet', abi, address, providerUtils.standardizeOrThrow(supportedProvider), txDefaults); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', 'abi', '_web3Wrapper']); } } // tslint:disable:max-file-line-count diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/multi_asset_proxy.ts b/packages/abi-gen-wrappers/src/generated-wrappers/multi_asset_proxy.ts index 418cab6a0f..f331a8556b 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/multi_asset_proxy.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/multi_asset_proxy.ts @@ -2,8 +2,8 @@ // tslint:disable:no-unused-variable // tslint:disable:no-unbound-method import { BaseContract } from '@0x/base-contract'; -import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; -import { BigNumber, classUtils, logUtils } from '@0x/utils'; +import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, TxData, TxDataPayable, SupportedProvider } from 'ethereum-types'; +import { BigNumber, classUtils, logUtils, providerUtils } from '@0x/utils'; import { SimpleContractArtifact } from '@0x/types'; import { Web3Wrapper } from '@0x/web3-wrapper'; import * as ethers from 'ethers'; @@ -622,12 +622,13 @@ export class MultiAssetProxyContract extends BaseContract { }; public static async deployFrom0xArtifactAsync( artifact: ContractArtifact | SimpleContractArtifact, - provider: Provider, + supportedProvider: SupportedProvider, txDefaults: Partial, ): Promise { if (_.isUndefined(artifact.compilerOutput)) { throw new Error('Compiler output not found in the artifact file'); } + const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; return MultiAssetProxyContract.deployAsync(bytecode, abi, provider, txDefaults, ); @@ -635,9 +636,10 @@ export class MultiAssetProxyContract extends BaseContract { public static async deployAsync( bytecode: string, abi: ContractAbi, - provider: Provider, + supportedProvider: SupportedProvider, txDefaults: Partial, ): Promise { + const provider = providerUtils.standardizeOrThrow(supportedProvider); const constructorAbi = BaseContract._lookupConstructorAbi(abi); [] = BaseContract._formatABIDataItemList( constructorAbi.inputs, @@ -661,8 +663,8 @@ export class MultiAssetProxyContract extends BaseContract { contractInstance.constructorArgs = []; return contractInstance; } - constructor(abi: ContractAbi, address: string, provider: Provider, txDefaults?: Partial) { - super('MultiAssetProxy', abi, address, provider, txDefaults); + constructor(abi: ContractAbi, address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { + super('MultiAssetProxy', abi, address, providerUtils.standardizeOrThrow(supportedProvider), txDefaults); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', 'abi', '_web3Wrapper']); } } // tslint:disable:max-file-line-count diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/order_validator.ts b/packages/abi-gen-wrappers/src/generated-wrappers/order_validator.ts index 366b207ada..5c08a6fb7b 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/order_validator.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/order_validator.ts @@ -2,8 +2,8 @@ // tslint:disable:no-unused-variable // tslint:disable:no-unbound-method import { BaseContract } from '@0x/base-contract'; -import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; -import { BigNumber, classUtils, logUtils } from '@0x/utils'; +import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, TxData, TxDataPayable, SupportedProvider } from 'ethereum-types'; +import { BigNumber, classUtils, logUtils, providerUtils } from '@0x/utils'; import { SimpleContractArtifact } from '@0x/types'; import { Web3Wrapper } from '@0x/web3-wrapper'; import * as ethers from 'ethers'; @@ -227,7 +227,7 @@ export class OrderValidatorContract extends BaseContract { }; public static async deployFrom0xArtifactAsync( artifact: ContractArtifact | SimpleContractArtifact, - provider: Provider, + supportedProvider: SupportedProvider, txDefaults: Partial, _exchange: string, _zrxAssetData: string, @@ -235,6 +235,7 @@ export class OrderValidatorContract extends BaseContract { if (_.isUndefined(artifact.compilerOutput)) { throw new Error('Compiler output not found in the artifact file'); } + const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; return OrderValidatorContract.deployAsync(bytecode, abi, provider, txDefaults, _exchange, @@ -244,11 +245,12 @@ _zrxAssetData public static async deployAsync( bytecode: string, abi: ContractAbi, - provider: Provider, + supportedProvider: SupportedProvider, txDefaults: Partial, _exchange: string, _zrxAssetData: string, ): Promise { + const provider = providerUtils.standardizeOrThrow(supportedProvider); const constructorAbi = BaseContract._lookupConstructorAbi(abi); [_exchange, _zrxAssetData @@ -280,8 +282,8 @@ _zrxAssetData ]; return contractInstance; } - constructor(abi: ContractAbi, address: string, provider: Provider, txDefaults?: Partial) { - super('OrderValidator', abi, address, provider, txDefaults); + constructor(abi: ContractAbi, address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { + super('OrderValidator', abi, address, providerUtils.standardizeOrThrow(supportedProvider), txDefaults); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', 'abi', '_web3Wrapper']); } } // tslint:disable:max-file-line-count diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/weth9.ts b/packages/abi-gen-wrappers/src/generated-wrappers/weth9.ts index 5af169e03f..401ed43fff 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/weth9.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/weth9.ts @@ -2,8 +2,8 @@ // tslint:disable:no-unused-variable // tslint:disable:no-unbound-method import { BaseContract } from '@0x/base-contract'; -import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; -import { BigNumber, classUtils, logUtils } from '@0x/utils'; +import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, TxData, TxDataPayable, SupportedProvider } from 'ethereum-types'; +import { BigNumber, classUtils, logUtils, providerUtils } from '@0x/utils'; import { SimpleContractArtifact } from '@0x/types'; import { Web3Wrapper } from '@0x/web3-wrapper'; import * as ethers from 'ethers'; @@ -621,12 +621,13 @@ export class WETH9Contract extends BaseContract { }; public static async deployFrom0xArtifactAsync( artifact: ContractArtifact | SimpleContractArtifact, - provider: Provider, + supportedProvider: SupportedProvider, txDefaults: Partial, ): Promise { if (_.isUndefined(artifact.compilerOutput)) { throw new Error('Compiler output not found in the artifact file'); } + const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; return WETH9Contract.deployAsync(bytecode, abi, provider, txDefaults, ); @@ -634,9 +635,10 @@ export class WETH9Contract extends BaseContract { public static async deployAsync( bytecode: string, abi: ContractAbi, - provider: Provider, + supportedProvider: SupportedProvider, txDefaults: Partial, ): Promise { + const provider = providerUtils.standardizeOrThrow(supportedProvider); const constructorAbi = BaseContract._lookupConstructorAbi(abi); [] = BaseContract._formatABIDataItemList( constructorAbi.inputs, @@ -660,8 +662,8 @@ export class WETH9Contract extends BaseContract { contractInstance.constructorArgs = []; return contractInstance; } - constructor(abi: ContractAbi, address: string, provider: Provider, txDefaults?: Partial) { - super('WETH9', abi, address, provider, txDefaults); + constructor(abi: ContractAbi, address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { + super('WETH9', abi, address, providerUtils.standardizeOrThrow(supportedProvider), txDefaults); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', 'abi', '_web3Wrapper']); } } // tslint:disable:max-file-line-count diff --git a/packages/abi-gen-wrappers/src/generated-wrappers/zrx_token.ts b/packages/abi-gen-wrappers/src/generated-wrappers/zrx_token.ts index 4f5d7f4c5c..079f0836b0 100644 --- a/packages/abi-gen-wrappers/src/generated-wrappers/zrx_token.ts +++ b/packages/abi-gen-wrappers/src/generated-wrappers/zrx_token.ts @@ -2,8 +2,8 @@ // tslint:disable:no-unused-variable // tslint:disable:no-unbound-method import { BaseContract } from '@0x/base-contract'; -import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; -import { BigNumber, classUtils, logUtils } from '@0x/utils'; +import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, TxData, TxDataPayable, SupportedProvider } from 'ethereum-types'; +import { BigNumber, classUtils, logUtils, providerUtils } from '@0x/utils'; import { SimpleContractArtifact } from '@0x/types'; import { Web3Wrapper } from '@0x/web3-wrapper'; import * as ethers from 'ethers'; @@ -464,12 +464,13 @@ export class ZRXTokenContract extends BaseContract { }; public static async deployFrom0xArtifactAsync( artifact: ContractArtifact | SimpleContractArtifact, - provider: Provider, + supportedProvider: SupportedProvider, txDefaults: Partial, ): Promise { if (_.isUndefined(artifact.compilerOutput)) { throw new Error('Compiler output not found in the artifact file'); } + const provider = providerUtils.standardizeOrThrow(supportedProvider); const bytecode = artifact.compilerOutput.evm.bytecode.object; const abi = artifact.compilerOutput.abi; return ZRXTokenContract.deployAsync(bytecode, abi, provider, txDefaults, ); @@ -477,9 +478,10 @@ export class ZRXTokenContract extends BaseContract { public static async deployAsync( bytecode: string, abi: ContractAbi, - provider: Provider, + supportedProvider: SupportedProvider, txDefaults: Partial, ): Promise { + const provider = providerUtils.standardizeOrThrow(supportedProvider); const constructorAbi = BaseContract._lookupConstructorAbi(abi); [] = BaseContract._formatABIDataItemList( constructorAbi.inputs, @@ -503,8 +505,8 @@ export class ZRXTokenContract extends BaseContract { contractInstance.constructorArgs = []; return contractInstance; } - constructor(abi: ContractAbi, address: string, provider: Provider, txDefaults?: Partial) { - super('ZRXToken', abi, address, provider, txDefaults); + constructor(abi: ContractAbi, address: string, supportedProvider: SupportedProvider, txDefaults?: Partial) { + super('ZRXToken', abi, address, providerUtils.standardizeOrThrow(supportedProvider), txDefaults); classUtils.bindAll(this, ['_abiEncoderByFunctionSignature', 'address', 'abi', '_web3Wrapper']); } } // tslint:disable:max-file-line-count diff --git a/packages/asset-buyer/src/asset_buyer.ts b/packages/asset-buyer/src/asset_buyer.ts index 43782303c3..2e905177fa 100644 --- a/packages/asset-buyer/src/asset_buyer.ts +++ b/packages/asset-buyer/src/asset_buyer.ts @@ -4,7 +4,7 @@ import { SignedOrder } from '@0x/order-utils'; import { ObjectMap } from '@0x/types'; import { BigNumber, providerUtils } from '@0x/utils'; import { Web3Wrapper } from '@0x/web3-wrapper'; -import { Provider, SupportedProvider } from 'ethereum-types'; +import { SupportedProvider, ZeroExProvider } from 'ethereum-types'; import * as _ from 'lodash'; import { constants } from './constants'; @@ -34,7 +34,7 @@ interface OrdersEntry { } export class AssetBuyer { - public readonly provider: Provider; + public readonly provider: ZeroExProvider; public readonly orderProvider: OrderProvider; public readonly networkId: number; public readonly orderRefreshIntervalMs: number; diff --git a/packages/asset-buyer/src/index.ts b/packages/asset-buyer/src/index.ts index f69cfad69c..e3262bc1c6 100644 --- a/packages/asset-buyer/src/index.ts +++ b/packages/asset-buyer/src/index.ts @@ -3,7 +3,7 @@ export { JSONRPCResponsePayload, JSONRPCResponseError, JSONRPCErrorCallback, - Provider, + SupportedProvider, } from 'ethereum-types'; export { SignedOrder } from '@0x/types'; export { BigNumber } from '@0x/utils'; diff --git a/packages/contract-wrappers/src/contract_wrappers.ts b/packages/contract-wrappers/src/contract_wrappers.ts index d5095c8a7f..7be422febd 100644 --- a/packages/contract-wrappers/src/contract_wrappers.ts +++ b/packages/contract-wrappers/src/contract_wrappers.ts @@ -167,7 +167,7 @@ export class ContractWrappers { * Get the provider instance currently used by contract-wrappers * @return Web3 provider instance */ - public getProvider(): Provider { + public getProvider(): SupportedProvider { return this._web3Wrapper.getProvider(); } /** diff --git a/packages/contract-wrappers/src/index.ts b/packages/contract-wrappers/src/index.ts index 5fc400edf6..70be82ca58 100644 --- a/packages/contract-wrappers/src/index.ts +++ b/packages/contract-wrappers/src/index.ts @@ -77,7 +77,7 @@ export { BlockParamLiteral, BlockParam, ContractEventArg, - Provider, + SupportedProvider, ContractAbi, JSONRPCRequestPayload, JSONRPCResponsePayload, diff --git a/packages/contract-wrappers/test/erc20_wrapper_test.ts b/packages/contract-wrappers/test/erc20_wrapper_test.ts index 15d3a9ead3..8078c0e0b8 100644 --- a/packages/contract-wrappers/test/erc20_wrapper_test.ts +++ b/packages/contract-wrappers/test/erc20_wrapper_test.ts @@ -4,7 +4,6 @@ import { EmptyWalletSubprovider, Web3ProviderEngine } from '@0x/subproviders'; import { DoneCallback } from '@0x/types'; import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; -import { Provider } from 'ethereum-types'; import 'mocha'; import { @@ -622,7 +621,7 @@ describe('ERC20Wrapper', () => { }); // tslint:disable:max-file-line-count -function addEmptyWalletSubprovider(p: Provider): Provider { +function addEmptyWalletSubprovider(p: Web3ProviderEngine): Web3ProviderEngine { const providerEngine = new Web3ProviderEngine(); providerEngine.addProvider(new EmptyWalletSubprovider()); const currentSubproviders = (p as any)._providers; diff --git a/packages/contract-wrappers/test/erc721_wrapper_test.ts b/packages/contract-wrappers/test/erc721_wrapper_test.ts index a7f1e4c411..bbf71208de 100644 --- a/packages/contract-wrappers/test/erc721_wrapper_test.ts +++ b/packages/contract-wrappers/test/erc721_wrapper_test.ts @@ -3,7 +3,6 @@ import { EmptyWalletSubprovider, Web3ProviderEngine } from '@0x/subproviders'; import { DoneCallback } from '@0x/types'; import { BigNumber } from '@0x/utils'; import * as chai from 'chai'; -import { Provider } from 'ethereum-types'; import 'mocha'; import { @@ -454,7 +453,7 @@ describe('ERC721Wrapper', () => { }); // tslint:disable:max-file-line-count -function addEmptyWalletSubprovider(p: Provider): Provider { +function addEmptyWalletSubprovider(p: Web3ProviderEngine): Web3ProviderEngine { const providerEngine = new Web3ProviderEngine(); providerEngine.addProvider(new EmptyWalletSubprovider()); const currentSubproviders = (p as any)._providers; diff --git a/packages/contract-wrappers/test/utils/web3_wrapper.ts b/packages/contract-wrappers/test/utils/web3_wrapper.ts index 4e86ebeba2..f704897ab7 100644 --- a/packages/contract-wrappers/test/utils/web3_wrapper.ts +++ b/packages/contract-wrappers/test/utils/web3_wrapper.ts @@ -1,12 +1,12 @@ import { devConstants, web3Factory } from '@0x/dev-utils'; +import { Web3ProviderEngine } from '@0x/subproviders'; import { Web3Wrapper } from '@0x/web3-wrapper'; -import { Provider } from 'ethereum-types'; const txDefaults = { from: devConstants.TESTRPC_FIRST_ADDRESS, gas: devConstants.GAS_LIMIT, }; -const provider: Provider = web3Factory.getRpcProvider({ shouldUseInProcessGanache: true }); +const provider: Web3ProviderEngine = web3Factory.getRpcProvider({ shouldUseInProcessGanache: true }); const web3Wrapper = new Web3Wrapper(provider); export { provider, web3Wrapper, txDefaults }; diff --git a/packages/ethereum-types/src/index.ts b/packages/ethereum-types/src/index.ts index 91d3fab895..fe774fde40 100644 --- a/packages/ethereum-types/src/index.ts +++ b/packages/ethereum-types/src/index.ts @@ -6,19 +6,32 @@ export type JSONRPCErrorCallback = (err: Error | null, result?: JSONRPCResponseP * Do not create your own provider. Use an existing provider from a Web3 or ProviderEngine library * Read more about Providers in the 0x wiki. */ -export type SupportedProvider = Web3JsProvider | Provider | EIP1193Provider; +export type SupportedProvider = Web3JsProvider | GanacheProvider | EIP1193Provider | ZeroExProvider; export type Web3JsProvider = Web3JsV1Provider | Web3JsV2Provider | Web3JsV3Provider; -/** - * The interface for the provider used by @0x/web3-wrapper - */ +export interface GanacheProvider { + sendAsync(payload: JSONRPCRequestPayload, callback: JSONRPCErrorCallback): void; +} + +// Deprecated export interface Provider { sendAsync(payload: JSONRPCRequestPayload, callback: JSONRPCErrorCallback): void; } -export type GanacheProvider = Provider; -export type ProviderEngineProvider = Provider; +/** + * The interface for the provider used internally by 0x libraries + * Any property we use from any SupportedProvider should we explicitly + * add here + */ +export interface ZeroExProvider { + isZeroExProvider?: boolean; + isMetaMask?: boolean; + isParity?: boolean; + stop?: () => void; + enable?: () => Promise; + sendAsync(payload: JSONRPCRequestPayload, callback: JSONRPCErrorCallback): void; +} /** * Web3.js version 1 provider interface diff --git a/packages/fill-scenarios/src/fill_scenarios.ts b/packages/fill-scenarios/src/fill_scenarios.ts index d45621dc73..8a0d6fef9e 100644 --- a/packages/fill-scenarios/src/fill_scenarios.ts +++ b/packages/fill-scenarios/src/fill_scenarios.ts @@ -26,8 +26,7 @@ export class FillScenarios { erc20ProxyAddress: string, erc721ProxyAddress: string, ) { - const provider = providerUtils.standardizeOrThrow(supportedProvider); - this._web3Wrapper = new Web3Wrapper(provider); + this._web3Wrapper = new Web3Wrapper(supportedProvider); this._userAddresses = userAddresses; this._coinbase = userAddresses[0]; this._zrxTokenAddress = zrxTokenAddress; diff --git a/packages/instant/src/index.umd.ts b/packages/instant/src/index.umd.ts index e15bea18e8..5c9c42bd6f 100644 --- a/packages/instant/src/index.umd.ts +++ b/packages/instant/src/index.umd.ts @@ -1,7 +1,7 @@ import { AssetBuyer, BigNumber } from '@0x/asset-buyer'; import { assetDataUtils } from '@0x/order-utils'; import { providerUtils } from '@0x/utils'; -import { Provider } from 'ethereum-types'; +import { SupportedProvider, ZeroExProvider } from 'ethereum-types'; import * as _ from 'lodash'; import * as React from 'react'; import * as ReactDOM from 'react-dom'; @@ -24,7 +24,7 @@ import { util } from './util/util'; const isInstantRendered = (): boolean => !!document.getElementById(INJECTED_DIV_ID); -const validateInstantRenderConfig = (config: ZeroExInstantConfig, selector: string) => { +const validateInstantRenderConfigAsync = async (config: ZeroExInstantConfig, selector: string) => { assert.isValidOrderSource('orderSource', config.orderSource); if (!_.isUndefined(config.defaultSelectedAssetData)) { assert.isHexString('defaultSelectedAssetData', config.defaultSelectedAssetData); @@ -102,7 +102,7 @@ export const render = (config: ZeroExInstantConfig, selector: string = DEFAULT_Z : config.orderSource, }); - validateInstantRenderConfig(coercedConfig, selector); + validateInstantRenderConfigAsync(coercedConfig, selector); if (coercedConfig.shouldDisablePushToHistory) { if (!isInstantRendered()) { @@ -152,17 +152,18 @@ export const hasLiquidityForAssetDataAsync = async ( assetData: string, orderSource: OrderSource, networkId: Network = Network.Mainnet, - provider?: Provider, + supportedProvider?: SupportedProvider, ): Promise => { assert.isHexString('assetData', assetData); assert.isValidOrderSource('orderSource', orderSource); assert.isNumber('networkId', networkId); + let provider = supportedProvider; if (provider !== undefined) { - providerUtils.standardizeOrThrow(provider); + provider = providerUtils.standardizeOrThrow(provider); } - const bestProvider: Provider = provider || providerFactory.getFallbackNoSigningProvider(networkId); + const bestProvider: ZeroExProvider = provider || providerFactory.getFallbackNoSigningProvider(networkId); const assetBuyerOptions = { networkId }; diff --git a/packages/instant/src/types.ts b/packages/instant/src/types.ts index f2b29bb1aa..109ee44a5b 100644 --- a/packages/instant/src/types.ts +++ b/packages/instant/src/types.ts @@ -1,7 +1,7 @@ import { AssetBuyer, BigNumber } from '@0x/asset-buyer'; import { AssetProxyId, ObjectMap, SignedOrder } from '@0x/types'; import { Web3Wrapper } from '@0x/web3-wrapper'; -import { Provider, SupportedProvider } from 'ethereum-types'; +import { SupportedProvider, ZeroExProvider } from 'ethereum-types'; // Reusable export type Omit = Pick>; @@ -109,7 +109,7 @@ export interface AffiliateInfo { export interface ProviderState { name: string; displayName: string; - provider: Provider; + provider: ZeroExProvider; assetBuyer: AssetBuyer; web3Wrapper: Web3Wrapper; account: Account; diff --git a/packages/instant/src/util/env.ts b/packages/instant/src/util/env.ts index 7d4f836ff4..7322da25e3 100644 --- a/packages/instant/src/util/env.ts +++ b/packages/instant/src/util/env.ts @@ -1,5 +1,5 @@ import * as bowser from 'bowser'; -import { Provider } from 'ethereum-types'; +import { ZeroExProvider } from 'ethereum-types'; import * as _ from 'lodash'; import { PROVIDER_TYPE_TO_NAME } from '../constants'; @@ -41,7 +41,7 @@ export const envUtil = { return OperatingSystem.Other; } }, - getProviderType(provider: Provider): ProviderType | undefined { + getProviderType(provider: ZeroExProvider): ProviderType | undefined { const anyProvider = provider as any; if (provider.constructor.name === 'EthereumProvider') { return ProviderType.Mist; @@ -60,14 +60,14 @@ export const envUtil = { } return; }, - getProviderName(provider: Provider): string { + getProviderName(provider: ZeroExProvider): string { const providerTypeIfExists = envUtil.getProviderType(provider); if (_.isUndefined(providerTypeIfExists)) { return provider.constructor.name; } return PROVIDER_TYPE_TO_NAME[providerTypeIfExists]; }, - getProviderDisplayName(provider: Provider): string { + getProviderDisplayName(provider: ZeroExProvider): string { const providerTypeIfExists = envUtil.getProviderType(provider); if (_.isUndefined(providerTypeIfExists)) { return 'Wallet'; diff --git a/packages/instant/src/util/provider_factory.ts b/packages/instant/src/util/provider_factory.ts index 603f7674d6..1b66a9b7a7 100644 --- a/packages/instant/src/util/provider_factory.ts +++ b/packages/instant/src/util/provider_factory.ts @@ -1,23 +1,27 @@ import { EmptyWalletSubprovider, RPCSubprovider, Web3ProviderEngine } from '@0x/subproviders'; -import { Provider } from 'ethereum-types'; +import { providerUtils } from '@0x/utils'; +import { SupportedProvider, ZeroExProvider } from 'ethereum-types'; import * as _ from 'lodash'; import { BLOCK_POLLING_INTERVAL_MS, ETHEREUM_NODE_URL_BY_NETWORK } from '../constants'; import { Maybe, Network } from '../types'; export const providerFactory = { - getInjectedProviderIfExists: (): Maybe => { + getInjectedProviderIfExists: (): Maybe => { const injectedProviderIfExists = (window as any).ethereum; if (!_.isUndefined(injectedProviderIfExists)) { - return injectedProviderIfExists; + const provider = providerUtils.standardizeOrThrow(injectedProviderIfExists); + return provider; } const injectedWeb3IfExists = (window as any).web3; if (!_.isUndefined(injectedWeb3IfExists) && !_.isUndefined(injectedWeb3IfExists.currentProvider)) { - return injectedWeb3IfExists.currentProvider; + const currentProvider = injectedWeb3IfExists.currentProvider; + const provider = providerUtils.standardizeOrThrow(currentProvider); + return provider; } return undefined; }, - getFallbackNoSigningProvider: (network: Network): Provider => { + getFallbackNoSigningProvider: (network: Network): Web3ProviderEngine => { const providerEngine = new Web3ProviderEngine({ pollingInterval: BLOCK_POLLING_INTERVAL_MS, }); diff --git a/packages/instant/src/util/provider_state_factory.ts b/packages/instant/src/util/provider_state_factory.ts index 853a1214af..f57546e920 100644 --- a/packages/instant/src/util/provider_state_factory.ts +++ b/packages/instant/src/util/provider_state_factory.ts @@ -1,6 +1,6 @@ import { providerUtils } from '@0x/utils'; import { Web3Wrapper } from '@0x/web3-wrapper'; -import { Provider, SupportedProvider } from 'ethereum-types'; +import { SupportedProvider, ZeroExProvider } from 'ethereum-types'; import * as _ from 'lodash'; import { LOADING_ACCOUNT, NO_ACCOUNT } from '../constants'; @@ -40,7 +40,7 @@ export const providerStateFactory = { getInitialProviderStateFromProvider: ( orderSource: OrderSource, network: Network, - provider: Provider, + provider: ZeroExProvider, walletDisplayName?: string, ): ProviderState => { const providerState: ProviderState = { diff --git a/packages/migrations/src/index.ts b/packages/migrations/src/index.ts index 4f22c30b9a..a7290eabc6 100644 --- a/packages/migrations/src/index.ts +++ b/packages/migrations/src/index.ts @@ -1,5 +1,4 @@ export { - Provider, TxData, JSONRPCRequestPayload, JSONRPCErrorCallback, diff --git a/packages/migrations/src/migrate.ts b/packages/migrations/src/migrate.ts index d7a76d2f88..0a5fac9bfa 100644 --- a/packages/migrations/src/migrate.ts +++ b/packages/migrations/src/migrate.ts @@ -1,13 +1,13 @@ #!/usr/bin/env node import { devConstants, web3Factory } from '@0x/dev-utils'; +import { Web3ProviderEngine } from '@0x/subproviders'; import { logUtils } from '@0x/utils'; -import { Provider } from 'ethereum-types'; import { runMigrationsAsync } from './migration'; (async () => { let providerConfigs; - let provider: Provider; + let provider: Web3ProviderEngine; let txDefaults; providerConfigs = { shouldUseInProcessGanache: false }; diff --git a/packages/migrations/src/migrate_snapshot.ts b/packages/migrations/src/migrate_snapshot.ts index 13fb063daf..faf371f582 100644 --- a/packages/migrations/src/migrate_snapshot.ts +++ b/packages/migrations/src/migrate_snapshot.ts @@ -1,7 +1,7 @@ #!/usr/bin/env node import { devConstants, web3Factory } from '@0x/dev-utils'; +import { Web3ProviderEngine } from '@0x/subproviders'; import { logUtils } from '@0x/utils'; -import { Provider } from 'ethereum-types'; import * as fs from 'fs'; import * as _ from 'lodash'; import * as path from 'path'; @@ -10,7 +10,7 @@ import { runMigrationsAsync } from './migration'; (async () => { let providerConfigs; - let provider: Provider; + let provider: Web3ProviderEngine; let txDefaults; const packageJsonPath = path.join(__dirname, '..', 'package.json'); const packageJsonString = fs.readFileSync(packageJsonPath, 'utf8'); diff --git a/packages/migrations/src/migration.ts b/packages/migrations/src/migration.ts index 7668ec9238..2d73ca0113 100644 --- a/packages/migrations/src/migration.ts +++ b/packages/migrations/src/migration.ts @@ -2,9 +2,10 @@ import * as wrappers from '@0x/abi-gen-wrappers'; import { ContractAddresses } from '@0x/contract-addresses'; import * as artifacts from '@0x/contract-artifacts'; import { assetDataUtils } from '@0x/order-utils'; +import { Web3ProviderEngine } from '@0x/subproviders'; import { BigNumber } from '@0x/utils'; import { Web3Wrapper } from '@0x/web3-wrapper'; -import { Provider, TxData } from 'ethereum-types'; +import { TxData } from 'ethereum-types'; import * as _ from 'lodash'; import { erc20TokenInfo, erc721TokenInfo } from './utils/token_info'; @@ -16,7 +17,7 @@ import { erc20TokenInfo, erc721TokenInfo } from './utils/token_info'; * @param txDefaults Default transaction values to use when deploying contracts (e.g., specify the desired contract creator with the `from` parameter). * @returns The addresses of the contracts that were deployed. */ -export async function runMigrationsAsync(provider: Provider, txDefaults: TxData): Promise { +export async function runMigrationsAsync(provider: Web3ProviderEngine, txDefaults: TxData): Promise { const web3Wrapper = new Web3Wrapper(provider); // Proxies @@ -203,7 +204,7 @@ let _cachedContractAddresses: ContractAddresses; * @param txDefaults Default transaction values to use when deploying contracts (e.g., specify the desired contract creator with the `from` parameter). * @returns The addresses of the contracts that were deployed. */ -export async function runMigrationsOnceAsync(provider: Provider, txDefaults: TxData): Promise { +export async function runMigrationsOnceAsync(provider: Web3ProviderEngine, txDefaults: TxData): Promise { if (!_.isUndefined(_cachedContractAddresses)) { return _cachedContractAddresses; } diff --git a/packages/order-utils/package.json b/packages/order-utils/package.json index df0e7a38f4..30e834daa6 100644 --- a/packages/order-utils/package.json +++ b/packages/order-utils/package.json @@ -39,6 +39,7 @@ "@0x/tslint-config": "^3.0.0", "@types/bn.js": "^4.11.0", "@types/lodash": "4.14.104", + "@types/web3-provider-engine": "^14.0.0", "chai": "^4.0.1", "chai-as-promised": "^7.1.0", "chai-bignumber": "^3.0.0", @@ -50,7 +51,8 @@ "sinon": "^4.0.0", "tslint": "5.11.0", "typedoc": "0.13.0", - "typescript": "3.0.1" + "typescript": "3.0.1", + "web3-provider-engine": "^14.0.6" }, "dependencies": { "@0x/abi-gen-wrappers": "^3.0.3", diff --git a/packages/order-utils/src/index.ts b/packages/order-utils/src/index.ts index ff37d70887..f174e492ec 100644 --- a/packages/order-utils/src/index.ts +++ b/packages/order-utils/src/index.ts @@ -22,7 +22,7 @@ export { OrderFilledCancelledLazyStore } from './store/order_filled_cancelled_la export { eip712Utils } from './eip712_utils'; export { - Provider, + SupportedProvider, JSONRPCRequestPayload, JSONRPCErrorCallback, JSONRPCResponsePayload, diff --git a/packages/order-utils/src/order_validation_utils.ts b/packages/order-utils/src/order_validation_utils.ts index 129d099db7..7fd31622eb 100644 --- a/packages/order-utils/src/order_validation_utils.ts +++ b/packages/order-utils/src/order_validation_utils.ts @@ -1,6 +1,6 @@ import { ExchangeContractErrs, RevertReason, SignedOrder } from '@0x/types'; import { BigNumber, providerUtils } from '@0x/utils'; -import { Provider, SupportedProvider } from 'ethereum-types'; +import { SupportedProvider, ZeroExProvider } from 'ethereum-types'; import * as _ from 'lodash'; import { OrderError, TradeSide, TransferType } from './types'; @@ -17,7 +17,7 @@ import { utils } from './utils'; */ export class OrderValidationUtils { private readonly _orderFilledCancelledFetcher: AbstractOrderFilledCancelledFetcher; - private readonly _provider: Provider; + private readonly _provider: ZeroExProvider; /** * A Typescript implementation mirroring the implementation of isRoundingError in the * Exchange smart contract diff --git a/packages/order-utils/test/utils/web3_wrapper.ts b/packages/order-utils/test/utils/web3_wrapper.ts index accfcb7feb..aee7754bf4 100644 --- a/packages/order-utils/test/utils/web3_wrapper.ts +++ b/packages/order-utils/test/utils/web3_wrapper.ts @@ -1,8 +1,8 @@ import { web3Factory } from '@0x/dev-utils'; import { Web3Wrapper } from '@0x/web3-wrapper'; -import { Provider } from 'ethereum-types'; +import Web3ProviderEngine = require('web3-provider-engine'); -const provider: Provider = web3Factory.getRpcProvider({ shouldUseInProcessGanache: true }); +const provider: Web3ProviderEngine = web3Factory.getRpcProvider({ shouldUseInProcessGanache: true }); const web3Wrapper = new Web3Wrapper(provider); export { provider, web3Wrapper }; diff --git a/packages/order-watcher/src/index.ts b/packages/order-watcher/src/index.ts index 1f4e5eff10..a4ab38b233 100644 --- a/packages/order-watcher/src/index.ts +++ b/packages/order-watcher/src/index.ts @@ -19,7 +19,7 @@ export { SignedOrder } from '@0x/types'; export { JSONRPCRequestPayload, JSONRPCErrorCallback, - Provider, + SupportedProvider, JSONRPCResponsePayload, JSONRPCResponseError, } from 'ethereum-types'; diff --git a/packages/order-watcher/src/order_watcher/order_watcher.ts b/packages/order-watcher/src/order_watcher/order_watcher.ts index 628ee202e5..e68d9a372c 100644 --- a/packages/order-watcher/src/order_watcher/order_watcher.ts +++ b/packages/order-watcher/src/order_watcher/order_watcher.ts @@ -34,7 +34,7 @@ import { } from '@0x/order-utils'; import { AssetProxyId, ExchangeContractErrs, OrderState, SignedOrder, Stats } from '@0x/types'; import { errorUtils, intervalUtils, providerUtils } from '@0x/utils'; -import { BlockParamLiteral, LogEntryEvent, LogWithDecodedArgs, Provider, SupportedProvider } from 'ethereum-types'; +import { BlockParamLiteral, LogEntryEvent, LogWithDecodedArgs, SupportedProvider, ZeroExProvider } from 'ethereum-types'; import * as _ from 'lodash'; import { orderWatcherPartialConfigSchema } from '../schemas/order_watcher_partial_config_schema'; @@ -79,7 +79,7 @@ export class OrderWatcher { private readonly _orderStateByOrderHashCache: OrderStateByOrderHash = {}; private readonly _orderByOrderHash: OrderByOrderHash = {}; private readonly _eventWatcher: EventWatcher; - private readonly _provider: Provider; + private readonly _provider: ZeroExProvider; private readonly _collisionResistantAbiDecoder: CollisionResistanceAbiDecoder; private readonly _expirationWatcher: ExpirationWatcher; private readonly _orderStateUtils: OrderStateUtils; diff --git a/packages/order-watcher/src/utils/assert.ts b/packages/order-watcher/src/utils/assert.ts index ccfc7325c2..6439b2e86a 100644 --- a/packages/order-watcher/src/utils/assert.ts +++ b/packages/order-watcher/src/utils/assert.ts @@ -5,19 +5,19 @@ import { Schema } from '@0x/json-schemas'; import { ECSignature } from '@0x/types'; import { BigNumber } from '@0x/utils'; // tslint:enable:no-unused-variable -import { Provider } from 'ethereum-types'; +import { SupportedProvider } from 'ethereum-types'; import { signatureUtils } from '@0x/order-utils'; export const assert = { ...sharedAssert, async isValidSignatureAsync( - provider: Provider, + supportedProvider: SupportedProvider, orderHash: string, signature: string, signerAddress: string, ): Promise { - const isValid = await signatureUtils.isValidSignatureAsync(provider, orderHash, signature, signerAddress); + const isValid = await signatureUtils.isValidSignatureAsync(supportedProvider, orderHash, signature, signerAddress); assert.assert(isValid, `Expected order with hash '${orderHash}' to have a valid signature`); }, }; diff --git a/packages/order-watcher/test/utils/web3_wrapper.ts b/packages/order-watcher/test/utils/web3_wrapper.ts index accfcb7feb..32f8543267 100644 --- a/packages/order-watcher/test/utils/web3_wrapper.ts +++ b/packages/order-watcher/test/utils/web3_wrapper.ts @@ -1,8 +1,8 @@ import { web3Factory } from '@0x/dev-utils'; +import { Web3ProviderEngine } from '@0x/subproviders'; import { Web3Wrapper } from '@0x/web3-wrapper'; -import { Provider } from 'ethereum-types'; -const provider: Provider = web3Factory.getRpcProvider({ shouldUseInProcessGanache: true }); +const provider: Web3ProviderEngine = web3Factory.getRpcProvider({ shouldUseInProcessGanache: true }); const web3Wrapper = new Web3Wrapper(provider); export { provider, web3Wrapper }; diff --git a/packages/sol-compiler/package.json b/packages/sol-compiler/package.json index 6629c02e91..6b4f3a5729 100644 --- a/packages/sol-compiler/package.json +++ b/packages/sol-compiler/package.json @@ -49,6 +49,7 @@ "@types/pluralize": "^0.0.29", "@types/require-from-string": "^1.2.0", "@types/semver": "5.5.0", + "@types/web3-provider-engine": "^14.0.0", "chai": "^4.0.1", "chai-as-promised": "^7.1.0", "chai-bignumber": "^3.0.0", @@ -64,7 +65,8 @@ "types-bn": "^0.0.1", "typescript": "3.0.1", "web3-typescript-typings": "^0.10.2", - "zeppelin-solidity": "1.8.0" + "zeppelin-solidity": "1.8.0", + "web3-provider-engine": "^14.0.6" }, "dependencies": { "@0x/assert": "^2.0.3", diff --git a/packages/sol-compiler/test/util/provider.ts b/packages/sol-compiler/test/util/provider.ts index 4561a16990..ab706bf641 100644 --- a/packages/sol-compiler/test/util/provider.ts +++ b/packages/sol-compiler/test/util/provider.ts @@ -1,7 +1,7 @@ import { web3Factory } from '@0x/dev-utils'; -import { Provider } from 'ethereum-types'; +import Web3ProviderEngine = require('web3-provider-engine'); const providerConfigs = { shouldUseInProcessGanache: true }; -const provider: Provider = web3Factory.getRpcProvider(providerConfigs); +const provider: Web3ProviderEngine = web3Factory.getRpcProvider(providerConfigs); export { provider }; diff --git a/packages/sol-coverage/src/index.ts b/packages/sol-coverage/src/index.ts index 6a91a3966b..d0373083eb 100644 --- a/packages/sol-coverage/src/index.ts +++ b/packages/sol-coverage/src/index.ts @@ -10,7 +10,7 @@ export { export { JSONRPCRequestPayload, - Provider, + SupportedProvider, JSONRPCErrorCallback, JSONRPCResponsePayload, JSONRPCResponseError, diff --git a/packages/sol-profiler/src/index.ts b/packages/sol-profiler/src/index.ts index fcb715d2d5..aef48df6d2 100644 --- a/packages/sol-profiler/src/index.ts +++ b/packages/sol-profiler/src/index.ts @@ -12,7 +12,7 @@ export { ProfilerSubprovider } from './profiler_subprovider'; export { JSONRPCRequestPayload, - Provider, + SupportedProvider, JSONRPCErrorCallback, JSONRPCResponsePayload, JSONRPCResponseError, diff --git a/packages/sol-trace/src/index.ts b/packages/sol-trace/src/index.ts index 61b5d8cb73..22777b0b09 100644 --- a/packages/sol-trace/src/index.ts +++ b/packages/sol-trace/src/index.ts @@ -11,7 +11,7 @@ export { RevertTraceSubprovider } from './revert_trace_subprovider'; export { JSONRPCRequestPayload, - Provider, + SupportedProvider, JSONRPCErrorCallback, JSONRPCResponsePayload, JSONRPCResponseError, diff --git a/packages/sol-tracing-utils/src/trace_collection_subprovider.ts b/packages/sol-tracing-utils/src/trace_collection_subprovider.ts index 76164bd917..3dc10b33bf 100644 --- a/packages/sol-tracing-utils/src/trace_collection_subprovider.ts +++ b/packages/sol-tracing-utils/src/trace_collection_subprovider.ts @@ -1,8 +1,8 @@ import { BlockchainLifecycle } from '@0x/dev-utils'; -import { Callback, ErrorCallback, NextCallback, Subprovider } from '@0x/subproviders'; +import { Callback, ErrorCallback, NextCallback, Subprovider, Web3ProviderEngine } from '@0x/subproviders'; import { logUtils } from '@0x/utils'; import { CallDataRPC, marshaller, Web3Wrapper } from '@0x/web3-wrapper'; -import { JSONRPCRequestPayload, ProviderEngineProvider, TxData } from 'ethereum-types'; +import { JSONRPCRequestPayload, TxData } from 'ethereum-types'; import { utils } from 'ethers'; import * as _ from 'lodash'; import { Lock } from 'semaphore-async-await'; @@ -142,7 +142,7 @@ export abstract class TraceCollectionSubprovider extends Subprovider { * directly. * @param engine The ProviderEngine this subprovider is added to */ - public setEngine(engine: ProviderEngineProvider): void { + public setEngine(engine: Web3ProviderEngine): void { super.setEngine(engine); this._web3Wrapper = new Web3Wrapper(engine); } diff --git a/packages/subproviders/src/index.ts b/packages/subproviders/src/index.ts index 26095938f9..1c44907689 100644 --- a/packages/subproviders/src/index.ts +++ b/packages/subproviders/src/index.ts @@ -52,7 +52,6 @@ export { ECSignature, EIP712Object, EIP712ObjectValue, EIP712TypedData, EIP712Ty export { JSONRPCRequestPayload, - Provider, SupportedProvider, JSONRPCResponsePayload, JSONRPCErrorCallback, diff --git a/packages/subproviders/src/subproviders/metamask_subprovider.ts b/packages/subproviders/src/subproviders/metamask_subprovider.ts index c2f2daf261..bb85cf771b 100644 --- a/packages/subproviders/src/subproviders/metamask_subprovider.ts +++ b/packages/subproviders/src/subproviders/metamask_subprovider.ts @@ -1,6 +1,6 @@ import { providerUtils } from '@0x/utils'; import { marshaller, Web3Wrapper } from '@0x/web3-wrapper'; -import { JSONRPCRequestPayload, Provider, SupportedProvider } from 'ethereum-types'; +import { JSONRPCRequestPayload, SupportedProvider, ZeroExProvider } from 'ethereum-types'; import * as ethUtil from 'ethereumjs-util'; import { Callback, ErrorCallback } from '../types'; @@ -17,7 +17,7 @@ import { Subprovider } from './subprovider'; */ export class MetamaskSubprovider extends Subprovider { private readonly _web3Wrapper: Web3Wrapper; - private readonly _provider: Provider; + private readonly _provider: ZeroExProvider; /** * Instantiates a new MetamaskSubprovider * @param supportedProvider Web3 provider that should handle all user account related requests diff --git a/packages/subproviders/src/subproviders/subprovider.ts b/packages/subproviders/src/subproviders/subprovider.ts index d1112334c8..444a8786bf 100644 --- a/packages/subproviders/src/subproviders/subprovider.ts +++ b/packages/subproviders/src/subproviders/subprovider.ts @@ -1,5 +1,6 @@ import { promisify } from '@0x/utils'; -import { JSONRPCRequestPayload, JSONRPCResponsePayload, ProviderEngineProvider } from 'ethereum-types'; +import { JSONRPCRequestPayload, JSONRPCResponsePayload } from 'ethereum-types'; +import Web3ProviderEngine = require('web3-provider-engine'); import { Callback, ErrorCallback, JSONRPCRequestPayloadWithMethod } from '../types'; /** @@ -8,7 +9,7 @@ import { Callback, ErrorCallback, JSONRPCRequestPayloadWithMethod } from '../typ */ export abstract class Subprovider { // tslint:disable-next-line:underscore-private-and-protected - private engine!: ProviderEngineProvider; + private engine!: Web3ProviderEngine; protected static _createFinalPayload( payload: Partial, ): Partial { @@ -64,7 +65,7 @@ export abstract class Subprovider { * directly. * @param engine The ProviderEngine this subprovider is added to */ - public setEngine(engine: ProviderEngineProvider): void { + public setEngine(engine: Web3ProviderEngine): void { this.engine = engine; } } diff --git a/packages/testnet-faucets/src/ts/handler.ts b/packages/testnet-faucets/src/ts/handler.ts index 533e1f8b38..d524fd5a26 100644 --- a/packages/testnet-faucets/src/ts/handler.ts +++ b/packages/testnet-faucets/src/ts/handler.ts @@ -5,7 +5,6 @@ import { generatePseudoRandomSalt, Order, orderHashUtils, - Provider, RPCSubprovider, signatureUtils, SignedOrder, @@ -48,7 +47,7 @@ const ASSET_AMOUNT = new BigNumber(0.1); export class Handler { private readonly _networkConfigByNetworkId: ItemByNetworkId = {}; - private static _createProviderEngine(rpcUrl: string): Provider { + private static _createProviderEngine(rpcUrl: string): Web3ProviderEngine { if (_.isUndefined(configs.DISPENSER_PRIVATE_KEY)) { throw new Error('Dispenser Private key not found'); } diff --git a/packages/utils/src/provider_utils.ts b/packages/utils/src/provider_utils.ts index fade52e2c1..a816d3e3a5 100644 --- a/packages/utils/src/provider_utils.ts +++ b/packages/utils/src/provider_utils.ts @@ -2,8 +2,8 @@ import { EIP1193Provider, JSONRPCErrorCallback, JSONRPCRequestPayload, - Provider, SupportedProvider, + ZeroExProvider, } from 'ethereum-types'; import * as _ from 'lodash'; @@ -14,48 +14,56 @@ export const providerUtils = { * @param supportedProvider Potentially supported provider instance * @return Provider that conforms of our internal provider interface */ - standardizeOrThrow(supportedProvider: SupportedProvider): Provider { - if ((supportedProvider as EIP1193Provider).isEIP1193) { - const provider = supportedProvider as Provider; + standardizeOrThrow(supportedProvider: SupportedProvider): ZeroExProvider { + if (supportedProvider === undefined) { + throw new Error(`supportedProvider cannot be 'undefined'`); + } + const provider = { + isStandardizedProvider: true, + isMetaMask: (supportedProvider as any).isMetaMask, + isParity: (supportedProvider as any).isParity, + stop: (supportedProvider as any).stop, + enable: (supportedProvider as any).enable, + sendAsync: _.noop, // Will be replaced + }; + // Case 1: We've already converted to our ZeroExProvider so noop. + if ((supportedProvider as any).isStandardizedProvider) { + return supportedProvider as ZeroExProvider; + // Case 2: It's a compliant EIP 1193 Provider + } else if ((supportedProvider as EIP1193Provider).isEIP1193) { provider.sendAsync = (payload: JSONRPCRequestPayload, callback: JSONRPCErrorCallback) => { - const method = payload.method; - const params = payload.params; - (supportedProvider as EIP1193Provider) - .send(method, params) - .then((result: any) => { - callback(null, result); - }) - .catch((err: Error) => { - callback(err); - }); - }; - return provider; - } else if (_.isUndefined((supportedProvider as any).sendAsync)) { - // An early version of Web3@1.0 Beta provider only has an async `send` method so - // we re-assign the send method so that early Web3@1.0 Beta providers work with @0x/web3-wrapper - const provider = supportedProvider as Provider; - provider.sendAsync = (supportedProvider as any).send; + const method = payload.method; + const params = payload.params; + (supportedProvider as EIP1193Provider) + .send(method, params) + .then((result: any) => { + callback(null, result); + }) + .catch((err: Error) => { + callback(err); + }); + }; return provider; + // Case 3: The provider has a `sendAsync` method, so we use it. } else if (!_.isUndefined((supportedProvider as any).sendAsync)) { - return supportedProvider as Provider; - } else if ((supportedProvider as any).host) { - // HACK(fabio): Later Web3@1.0 Beta modified their `send` method to comply with EIP1193 but did not add the - // `isEIP1193` flag. The only common identifier across Web3.js providers is that they all have - // a `host` property, so we check for it's existence. We put this check last to make it less likely - // that this condition is hit for other providers that also expose a `host` property. - const provider = supportedProvider as Provider; + provider.sendAsync = (supportedProvider as any).sendAsync.bind(supportedProvider); + return provider; + // Case 4: The provider does not have a `sendAsync` method but does have a `send` method + // It is most likely a Web3.js provider so we remap it to `sendAsync`. We only support + // Web3.js@1.0.0-beta.38 and above. + } else if (!_.isUndefined((supportedProvider as any).send)) { provider.sendAsync = (payload: JSONRPCRequestPayload, callback: JSONRPCErrorCallback) => { - const method = payload.method; - const params = payload.params; - (supportedProvider as any) - .send(method, params) - .then((result: any) => { - callback(null, result); - }) - .catch((err: Error) => { - callback(err); - }); - }; + const method = payload.method; + const params = payload.params; + (supportedProvider as any) + .send(method, params) + .then((result: any) => { + callback(null, result); + }) + .catch((err: Error) => { + callback(err); + }); + }; return provider; } throw new Error( diff --git a/packages/web3-wrapper/src/index.ts b/packages/web3-wrapper/src/index.ts index a634084552..c8363ec3e2 100644 --- a/packages/web3-wrapper/src/index.ts +++ b/packages/web3-wrapper/src/index.ts @@ -6,7 +6,7 @@ export { AbiDecoder, DecodedCalldata } from '@0x/utils'; export { BlockParam, TxData, - Provider, + SupportedProvider, TransactionReceipt, Transaction, TraceParams, diff --git a/packages/web3-wrapper/src/web3_wrapper.ts b/packages/web3-wrapper/src/web3_wrapper.ts index a680c3fdd3..b2694556b4 100644 --- a/packages/web3-wrapper/src/web3_wrapper.ts +++ b/packages/web3-wrapper/src/web3_wrapper.ts @@ -11,7 +11,6 @@ import { JSONRPCRequestPayload, JSONRPCResponsePayload, LogEntry, - Provider, RawLogEntry, SupportedProvider, TraceParams, @@ -20,6 +19,7 @@ import { TransactionReceiptWithDecodedLogs, TransactionTrace, TxData, + ZeroExProvider, } from 'ethereum-types'; import * as _ from 'lodash'; @@ -52,7 +52,9 @@ export class Web3Wrapper { */ public isZeroExWeb3Wrapper = true; public abiDecoder: AbiDecoder; - private _provider: Provider; + private _provider: ZeroExProvider; + // Raw provider passed in. Do not use. Only here to return the unmodified provider passed in via `getProvider()` + private _supportedProvider: SupportedProvider; private readonly _txDefaults: Partial; private _jsonRpcRequestId: number; /** @@ -149,9 +151,9 @@ export class Web3Wrapper { * @return An instance of the Web3Wrapper class. */ constructor(supportedProvider: SupportedProvider, txDefaults?: Partial) { - const provider = providerUtils.standardizeOrThrow(supportedProvider); this.abiDecoder = new AbiDecoder([]); - this._provider = provider; + this._supportedProvider = supportedProvider; + this._provider = providerUtils.standardizeOrThrow(supportedProvider); this._txDefaults = txDefaults || {}; this._jsonRpcRequestId = 1; } @@ -166,7 +168,14 @@ export class Web3Wrapper { * Retrieve the Web3 provider * @return Web3 provider instance */ - public getProvider(): Provider { + public getProvider(): SupportedProvider { + return this._supportedProvider; + } + /** + * Retrieve the Web3 provider + * @return Web3 provider instance + */ + public getZeroExProvider(): ZeroExProvider { return this._provider; } /** diff --git a/packages/website/ts/blockchain.ts b/packages/website/ts/blockchain.ts index 8b1070a845..931dceda19 100644 --- a/packages/website/ts/blockchain.ts +++ b/packages/website/ts/blockchain.ts @@ -22,7 +22,7 @@ import { import { SignedOrder, Token as ZeroExToken } from '@0x/types'; import { BigNumber, intervalUtils, logUtils, providerUtils } from '@0x/utils'; import { Web3Wrapper } from '@0x/web3-wrapper'; -import { BlockParam, LogWithDecodedArgs, Provider, TransactionReceiptWithDecodedLogs } from 'ethereum-types'; +import { BlockParam, LogWithDecodedArgs, Provider, TransactionReceiptWithDecodedLogs, ZeroExProvider } from 'ethereum-types'; import * as _ from 'lodash'; import * as moment from 'moment'; import * as React from 'react'; @@ -84,7 +84,7 @@ export class Blockchain { private _defaultGasPrice: BigNumber; private _watchGasPriceIntervalId: NodeJS.Timer; private _injectedProviderIfExists?: InjectedProvider; - private static _getNameGivenProvider(provider: Provider): string { + private static _getNameGivenProvider(provider: ZeroExProvider): string { const providerType = utils.getProviderType(provider); const providerNameIfExists = providerToName[providerType]; if (_.isUndefined(providerNameIfExists)) { diff --git a/packages/website/ts/pages/governance/connect_form.tsx b/packages/website/ts/pages/governance/connect_form.tsx index be9868900c..cd19de8cc6 100644 --- a/packages/website/ts/pages/governance/connect_form.tsx +++ b/packages/website/ts/pages/governance/connect_form.tsx @@ -12,7 +12,7 @@ import { import { BigNumber } from '@0x/utils'; import { Web3Wrapper } from '@0x/web3-wrapper'; import '@reach/dialog/styles.css'; -import { Provider } from 'ethereum-types'; +import { ZeroExProvider } from 'ethereum-types'; import * as _ from 'lodash'; import * as React from 'react'; import styled from 'styled-components'; @@ -42,7 +42,7 @@ export interface WalletConnectedProps { currentBalance: BigNumber; contractWrappers?: ContractWrappers; injectedProviderIfExists?: InjectedProvider; - providerEngine?: Provider; + providerEngine?: ZeroExProvider; ledgerSubproviderIfExists?: LedgerSubprovider; isLedger?: boolean; web3Wrapper?: Web3Wrapper; @@ -97,7 +97,7 @@ export class ConnectForm extends React.Component { private _contractWrappers: ContractWrappers; private _injectedProviderIfExists?: InjectedProvider; private _web3Wrapper?: Web3Wrapper; - private _providerEngine?: Provider; + private _providerEngine?: ZeroExProvider; private _ledgerSubprovider: LedgerSubprovider; public constructor(props: Props) { super(props); @@ -365,7 +365,7 @@ export class ConnectForm extends React.Component { const shouldUserLedgerProvider = true; await this._resetOrInitializeAsync(networkId, shouldUserLedgerProvider); } - private _getNameGivenProvider(provider: Provider): string { + private _getNameGivenProvider(provider: ZeroExProvider): string { const providerType = utils.getProviderType(provider); const providerNameIfExists = providerToName[providerType]; if (_.isUndefined(providerNameIfExists)) { diff --git a/packages/website/ts/pages/governance/modal_vote.tsx b/packages/website/ts/pages/governance/modal_vote.tsx index b2514c81ad..a86b95f2f0 100644 --- a/packages/website/ts/pages/governance/modal_vote.tsx +++ b/packages/website/ts/pages/governance/modal_vote.tsx @@ -4,7 +4,7 @@ import { BigNumber } from '@0x/utils'; import { Web3Wrapper } from '@0x/web3-wrapper'; import { DialogContent, DialogOverlay } from '@reach/dialog'; import '@reach/dialog/styles.css'; -import { Provider } from 'ethereum-types'; +import { ZeroExProvider } from 'ethereum-types'; import * as React from 'react'; import styled from 'styled-components'; @@ -45,7 +45,7 @@ interface State { errors: ErrorProps; web3Wrapper?: Web3Wrapper; contractWrappers?: ContractWrappers; - providerEngine?: Provider; + providerEngine?: ZeroExProvider; web3?: any; selectedAddress?: string; } diff --git a/packages/website/ts/pages/governance/vote_form.tsx b/packages/website/ts/pages/governance/vote_form.tsx index d4c5b6bc8b..4155f37789 100644 --- a/packages/website/ts/pages/governance/vote_form.tsx +++ b/packages/website/ts/pages/governance/vote_form.tsx @@ -5,7 +5,7 @@ import { ECSignature, SignatureType } from '@0x/types'; import { BigNumber, signTypedDataUtils } from '@0x/utils'; import { Web3Wrapper } from '@0x/web3-wrapper'; import '@reach/dialog/styles.css'; -import { Provider } from 'ethereum-types'; +import { ZeroExProvider } from 'ethereum-types'; import * as ethUtil from 'ethereumjs-util'; import * as _ from 'lodash'; import * as React from 'react'; @@ -43,7 +43,7 @@ interface Props { isLedger: boolean; injectedProvider?: InjectedProvider; ledgerSubproviderIfExists?: LedgerSubprovider; - provider?: Provider; + provider?: ZeroExProvider; } interface State { diff --git a/packages/website/ts/utils/utils.ts b/packages/website/ts/utils/utils.ts index 34ce9af385..ce4567f4c4 100644 --- a/packages/website/ts/utils/utils.ts +++ b/packages/website/ts/utils/utils.ts @@ -10,7 +10,7 @@ import * as _ from 'lodash'; import * as moment from 'moment'; import * as numeral from 'numeral'; -import { Provider } from 'ethereum-types'; +import { ZeroExProvider } from 'ethereum-types'; import { AccountState, BlockchainCallErrs, @@ -301,7 +301,7 @@ export const utils = { } window.onload = () => resolve(); }), - getProviderType(provider: Provider): Providers | string { + getProviderType(provider: ZeroExProvider): Providers | string { const constructorName = provider.constructor.name; let parsedProviderName = constructorName; // https://ethereum.stackexchange.com/questions/24266/elegant-way-to-detect-current-provider-int-web3-js diff --git a/yarn.lock b/yarn.lock index 0196703863..c719324e00 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13472,6 +13472,15 @@ react-dom@^16.3.2: object-assign "^4.1.1" prop-types "^15.6.0" +react-dom@^16.4.2: + version "16.8.2" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.8.2.tgz#7c8a69545dd554d45d66442230ba04a6a0a3c3d3" + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + scheduler "^0.13.2" + react-dom@^16.5.2: version "16.5.2" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.5.2.tgz#b69ee47aa20bab5327b2b9d7c1fe2a30f2cfa9d7" @@ -13775,6 +13784,15 @@ react@^16.3.2: object-assign "^4.1.1" prop-types "^15.6.0" +react@^16.4.2: + version "16.8.2" + resolved "https://registry.yarnpkg.com/react/-/react-16.8.2.tgz#83064596feaa98d9c2857c4deae1848b542c9c0c" + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + scheduler "^0.13.2" + react@^16.5.2: version "16.5.2" resolved "https://registry.yarnpkg.com/react/-/react-16.5.2.tgz#19f6b444ed139baa45609eee6dc3d318b3895d42" @@ -14646,6 +14664,13 @@ schedule@^0.5.0: dependencies: object-assign "^4.1.1" +scheduler@^0.13.2: + version "0.13.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.2.tgz#969eaee2764a51d2e97b20a60963b2546beff8fa" + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + schema-utils@^0.4.4: version "0.4.7" resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187" @@ -17314,7 +17339,7 @@ web3-provider-engine@14.0.6: xhr "^2.2.0" xtend "^4.0.1" -web3-provider-engine@14.1.0: +web3-provider-engine@14.1.0, web3-provider-engine@^14.0.6: version "14.1.0" resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-14.1.0.tgz#91590020f8b8c1b65846321310cbfdb039090fc6" dependencies: