From d528ce757c7d07e7d2e6f2f65ad48efc85ec4e50 Mon Sep 17 00:00:00 2001 From: Fabio Berger Date: Tue, 3 Jul 2018 22:58:17 +0200 Subject: Replace use of web3 w/ web3wrapper in subproviders and rename injectedWeb3 to signer subprovider for clarity --- packages/subproviders/package.json | 2 +- packages/subproviders/src/index.ts | 2 +- .../subproviders/src/subproviders/injected_web3.ts | 57 ----------------- packages/subproviders/src/subproviders/signer.ts | 74 ++++++++++++++++++++++ .../ts/containers/subproviders_documentation.ts | 3 + 5 files changed, 79 insertions(+), 59 deletions(-) delete mode 100644 packages/subproviders/src/subproviders/injected_web3.ts create mode 100644 packages/subproviders/src/subproviders/signer.ts diff --git a/packages/subproviders/package.json b/packages/subproviders/package.json index a3ff31f53..2d939f7b4 100644 --- a/packages/subproviders/package.json +++ b/packages/subproviders/package.json @@ -42,6 +42,7 @@ "dependencies": { "@0xproject/assert": "^0.2.12", "@0xproject/types": "^0.8.1", + "@0xproject/web3-wrapper": "^0.7.1", "@0xproject/typescript-typings": "^0.4.2", "@0xproject/utils": "^0.7.1", "@ledgerhq/hw-app-eth": "^4.3.0", @@ -55,7 +56,6 @@ "hdkey": "^0.7.1", "lodash": "^4.17.4", "semaphore-async-await": "^1.5.1", - "web3": "^0.20.0", "web3-provider-engine": "14.0.6" }, "devDependencies": { diff --git a/packages/subproviders/src/index.ts b/packages/subproviders/src/index.ts index 9194c1341..8575cd07d 100644 --- a/packages/subproviders/src/index.ts +++ b/packages/subproviders/src/index.ts @@ -7,7 +7,7 @@ import { LedgerEthereumClient } from './types'; export { prependSubprovider } from './utils/subprovider_utils'; export { EmptyWalletSubprovider } from './subproviders/empty_wallet_subprovider'; export { FakeGasEstimateSubprovider } from './subproviders/fake_gas_estimate_subprovider'; -export { InjectedWeb3Subprovider } from './subproviders/injected_web3'; +export { SignerSubprovider } from './subproviders/signer'; export { RedundantSubprovider } from './subproviders/redundant_subprovider'; export { LedgerSubprovider } from './subproviders/ledger'; export { GanacheSubprovider } from './subproviders/ganache'; diff --git a/packages/subproviders/src/subproviders/injected_web3.ts b/packages/subproviders/src/subproviders/injected_web3.ts deleted file mode 100644 index 2691dec53..000000000 --- a/packages/subproviders/src/subproviders/injected_web3.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { JSONRPCRequestPayload, Provider } from 'ethereum-types'; -import * as Web3 from 'web3'; - -import { Callback, ErrorCallback } from '../types'; - -import { Subprovider } from './subprovider'; - -/** - * This class implements the [web3-provider-engine](https://github.com/MetaMask/provider-engine) - * subprovider interface. It forwards JSON RPC requests involving user accounts (getAccounts, - * sendTransaction, etc...) to the provider instance supplied at instantiation. All other requests - * are passed onwards for subsequent subproviders to handle. - */ -export class InjectedWeb3Subprovider extends Subprovider { - private _injectedWeb3: Web3; - /** - * Instantiates a new InjectedWeb3Subprovider - * @param provider Web3 provider that should handle all user account related requests - */ - constructor(provider: Provider) { - super(); - this._injectedWeb3 = new Web3(provider); - } - /** - * This method conforms to the web3-provider-engine interface. - * It is called internally by the ProviderEngine when it is this subproviders - * turn to handle a JSON RPC request. - * @param payload JSON RPC payload - * @param next Callback to call if this subprovider decides not to handle the request - * @param end Callback to call if subprovider handled the request and wants to pass back the request. - */ - // tslint:disable-next-line:prefer-function-over-method async-suffix - public async handleRequest(payload: JSONRPCRequestPayload, next: Callback, end: ErrorCallback): Promise { - switch (payload.method) { - case 'web3_clientVersion': - this._injectedWeb3.version.getNode(end); - return; - case 'eth_accounts': - this._injectedWeb3.eth.getAccounts(end); - return; - - case 'eth_sendTransaction': - const [txParams] = payload.params; - this._injectedWeb3.eth.sendTransaction(txParams, end); - return; - - case 'eth_sign': - const [address, message] = payload.params; - this._injectedWeb3.eth.sign(address, message, end); - return; - - default: - next(); - return; - } - } -} diff --git a/packages/subproviders/src/subproviders/signer.ts b/packages/subproviders/src/subproviders/signer.ts new file mode 100644 index 000000000..65b1f2635 --- /dev/null +++ b/packages/subproviders/src/subproviders/signer.ts @@ -0,0 +1,74 @@ +import { Web3Wrapper } from '@0project/web3-wrapper'; +import { JSONRPCRequestPayload, Provider } from 'ethereum-types'; + +import { Callback, ErrorCallback } from '../types'; + +import { Subprovider } from './subprovider'; + +/** + * This class implements the [web3-provider-engine](https://github.com/MetaMask/provider-engine) + * subprovider interface. It forwards JSON RPC requests involving the domain of a signer (getAccounts, + * sendTransaction, signMessage etc...) to the provider instance supplied at instantiation. All other requests + * are passed onwards for subsequent subproviders to handle. + */ +export class SignerSubprovider extends Subprovider { + private _SignerWrapper: Web3Wrapper; + /** + * Instantiates a new SignerSubprovider + * @param provider Web3 provider that should handle all user account related requests + */ + constructor(provider: Provider) { + super(); + this._SignerWrapper = new Web3Wrapper(provider); + } + /** + * This method conforms to the web3-provider-engine interface. + * It is called internally by the ProviderEngine when it is this subproviders + * turn to handle a JSON RPC request. + * @param payload JSON RPC payload + * @param next Callback to call if this subprovider decides not to handle the request + * @param end Callback to call if subprovider handled the request and wants to pass back the request. + */ + // tslint:disable-next-line:prefer-function-over-method async-suffix + public async handleRequest(payload: JSONRPCRequestPayload, next: Callback, end: ErrorCallback): Promise { + switch (payload.method) { + case 'web3_clientVersion': + try { + const nodeVersion = await this._SignerWrapper.getNodeVersionAsync(); + end(null, nodeVersion); + } catch (err) { + end(err); + } + return; + case 'eth_accounts': + try { + const accounts = await this._SignerWrapper.getAvailableAddressesAsync(); + end(null, accounts); + } catch (err) { + end(err); + } + return; + case 'eth_sendTransaction': + const [txParams] = payload.params; + try { + const txHash = await this._SignerWrapper.sendTransactionAsync(txParams); + end(null, txHash); + } catch (err) { + end(err); + } + return; + case 'eth_sign': + const [address, message] = payload.params; + try { + const signature = await this._SignerWrapper.signMessageAsync(address, message); + end(null, signature); + } catch (err) { + end(err); + } + return; + default: + next(); + return; + } + } +} diff --git a/packages/website/ts/containers/subproviders_documentation.ts b/packages/website/ts/containers/subproviders_documentation.ts index 6d4230e53..567f6a37e 100644 --- a/packages/website/ts/containers/subproviders_documentation.ts +++ b/packages/website/ts/containers/subproviders_documentation.ts @@ -25,6 +25,7 @@ const docSections = { emptyWalletSubprovider: 'emptyWalletSubprovider', fakeGasEstimateSubprovider: 'fakeGasEstimateSubprovider', injectedWeb3Subprovider: 'injectedWeb3Subprovider', + signerSubprovider: 'signerSubprovider', redundantRPCSubprovider: 'redundantRPCSubprovider', ganacheSubprovider: 'ganacheSubprovider', nonceTrackerSubprovider: 'nonceTrackerSubprovider', @@ -50,6 +51,7 @@ const docsInfoConfig: DocsInfoConfig = { ['emptyWallet-subprovider']: [docSections.emptyWalletSubprovider], ['fakeGasEstimate-subprovider']: [docSections.fakeGasEstimateSubprovider], ['injectedWeb3-subprovider']: [docSections.injectedWeb3Subprovider], + ['signer-subprovider']: [docSections.signerSubprovider], ['redundantRPC-subprovider']: [docSections.redundantRPCSubprovider], ['ganache-subprovider']: [docSections.ganacheSubprovider], ['nonceTracker-subprovider']: [docSections.nonceTrackerSubprovider], @@ -69,6 +71,7 @@ const docsInfoConfig: DocsInfoConfig = { [docSections.emptyWalletSubprovider]: ['"subproviders/src/subproviders/empty_wallet_subprovider"'], [docSections.fakeGasEstimateSubprovider]: ['"subproviders/src/subproviders/fake_gas_estimate_subprovider"'], [docSections.injectedWeb3Subprovider]: ['"subproviders/src/subproviders/injected_web3"'], + [docSections.signerSubprovider]: ['"subproviders/src/subproviders/signer"'], [docSections.redundantRPCSubprovider]: ['"subproviders/src/subproviders/redundant_rpc"'], [docSections.ganacheSubprovider]: ['"subproviders/src/subproviders/ganache"'], [docSections.nonceTrackerSubprovider]: ['"subproviders/src/subproviders/nonce_tracker"'], -- cgit v1.2.3 From 547cf4bef3f2c18a26fb9fada96bd92e7988687f Mon Sep 17 00:00:00 2001 From: Fabio Berger Date: Tue, 3 Jul 2018 23:11:49 +0200 Subject: Refactor testnet-faucet to use web3Wrapper instead of web3 directly --- packages/testnet-faucets/package.json | 2 +- packages/testnet-faucets/src/ts/dispense_asset_tasks.ts | 13 ++++++------- packages/testnet-faucets/src/ts/handler.ts | 17 ++++++----------- 3 files changed, 13 insertions(+), 19 deletions(-) diff --git a/packages/testnet-faucets/package.json b/packages/testnet-faucets/package.json index 0ec62f097..5acd4ae35 100644 --- a/packages/testnet-faucets/package.json +++ b/packages/testnet-faucets/package.json @@ -20,6 +20,7 @@ "dependencies": { "0x.js": "^0.38.0", "@0xproject/subproviders": "^0.10.4", + "@0xproject/web3-wrapper": "^0.7.1", "@0xproject/typescript-typings": "^0.4.1", "@0xproject/utils": "^0.7.1", "body-parser": "^1.17.1", @@ -28,7 +29,6 @@ "express": "^4.15.2", "lodash": "^4.17.4", "rollbar": "^0.6.5", - "web3": "^0.20.0", "web3-provider-engine": "14.0.6" }, "devDependencies": { diff --git a/packages/testnet-faucets/src/ts/dispense_asset_tasks.ts b/packages/testnet-faucets/src/ts/dispense_asset_tasks.ts index 41b6c90cd..6e41ddae3 100644 --- a/packages/testnet-faucets/src/ts/dispense_asset_tasks.ts +++ b/packages/testnet-faucets/src/ts/dispense_asset_tasks.ts @@ -1,7 +1,7 @@ import { ZeroEx } from '0x.js'; import { BigNumber, logUtils, promisify } from '@0xproject/utils'; +import { Web3Wrapper } from '@0xproject/web3-wrapper'; import * as _ from 'lodash'; -import * as Web3 from 'web3'; import { configs } from './configs'; @@ -13,22 +13,21 @@ const DISPENSE_MAX_AMOUNT_ETHER = 2; type AsyncTask = () => Promise; export const dispenseAssetTasks = { - dispenseEtherTask(recipientAddress: string, web3: Web3): AsyncTask { + dispenseEtherTask(recipientAddress: string, web3Wrapper: Web3Wrapper): AsyncTask { return async () => { logUtils.log(`Processing ETH ${recipientAddress}`); - const userBalance = await promisify(web3.eth.getBalance)(recipientAddress); - const maxAmountInWei = new BigNumber(web3.toWei(DISPENSE_MAX_AMOUNT_ETHER, 'ether')); + const userBalance = await web3Wrapper.getBalanceInWeiAsync(recipientAddress); + const maxAmountInWei = Web3Wrapper.toWei(new BigNumber(DISPENSE_MAX_AMOUNT_ETHER)); if (userBalance.greaterThanOrEqualTo(maxAmountInWei)) { logUtils.log( `User exceeded ETH balance maximum (${maxAmountInWei}) ${recipientAddress} ${userBalance} `, ); return; } - const sendTransactionAsync = promisify(web3.eth.sendTransaction); - const txHash = await sendTransactionAsync({ + const txHash = await web3Wrapper.sendTransactionAsync({ from: configs.DISPENSER_ADDRESS, to: recipientAddress, - value: web3.toWei(DISPENSE_AMOUNT_ETHER, 'ether'), + value: Web3Wrapper.toWei(new BigNumber(DISPENSE_AMOUNT_ETHER)), }); logUtils.log(`Sent ${DISPENSE_AMOUNT_ETHER} ETH to ${recipientAddress} tx: ${txHash}`); }; diff --git a/packages/testnet-faucets/src/ts/handler.ts b/packages/testnet-faucets/src/ts/handler.ts index 3a60d396c..6d26691d6 100644 --- a/packages/testnet-faucets/src/ts/handler.ts +++ b/packages/testnet-faucets/src/ts/handler.ts @@ -1,15 +1,10 @@ import { Order, ZeroEx } from '0x.js'; import { BigNumber, logUtils } from '@0xproject/utils'; +import { Web3Wrapper } from '@0xproject/web3-wrapper'; import { Provider } from 'ethereum-types'; import * as express from 'express'; import * as _ from 'lodash'; -import * as Web3 from 'web3'; -// HACK: web3 injects XMLHttpRequest into the global scope and ProviderEngine checks XMLHttpRequest -// to know whether it is running in a browser or node environment. We need it to be undefined since -// we are not running in a browser env. -// Filed issue: https://github.com/ethereum/web3.js/issues/844 -(global as any).XMLHttpRequest = undefined; import { NonceTrackerSubprovider, PrivateKeyWalletSubprovider } from '@0xproject/subproviders'; import ProviderEngine = require('web3-provider-engine'); import RpcSubprovider = require('web3-provider-engine/subproviders/rpc'); @@ -22,7 +17,7 @@ import { rpcUrls } from './rpc_urls'; interface NetworkConfig { dispatchQueue: DispatchQueue; - web3: Web3; + web3Wrapper: Web3Wrapper; zeroEx: ZeroEx; } @@ -58,15 +53,15 @@ export class Handler { constructor() { _.forIn(rpcUrls, (rpcUrl: string, networkId: string) => { const providerObj = Handler._createProviderEngine(rpcUrl); - const web3 = new Web3(providerObj); + const web3Wrapper = new Web3Wrapper(providerObj); const zeroExConfig = { networkId: +networkId, }; - const zeroEx = new ZeroEx(web3.currentProvider, zeroExConfig); + const zeroEx = new ZeroEx(providerObj, zeroExConfig); const dispatchQueue = new DispatchQueue(); this._networkConfigByNetworkId[networkId] = { dispatchQueue, - web3, + web3Wrapper, zeroEx, }; }); @@ -106,7 +101,7 @@ export class Handler { let dispenserTask; switch (requestedAssetType) { case RequestedAssetType.ETH: - dispenserTask = dispenseAssetTasks.dispenseEtherTask(recipient, networkConfig.web3); + dispenserTask = dispenseAssetTasks.dispenseEtherTask(recipient, networkConfig.web3Wrapper); break; case RequestedAssetType.WETH: case RequestedAssetType.ZRX: -- cgit v1.2.3 From cce2fb40a130edfd5116d74b294b5e8062751ffb Mon Sep 17 00:00:00 2001 From: Fabio Berger Date: Tue, 3 Jul 2018 23:11:59 +0200 Subject: Fix import --- packages/subproviders/src/subproviders/signer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/subproviders/src/subproviders/signer.ts b/packages/subproviders/src/subproviders/signer.ts index 65b1f2635..e436c7855 100644 --- a/packages/subproviders/src/subproviders/signer.ts +++ b/packages/subproviders/src/subproviders/signer.ts @@ -1,4 +1,4 @@ -import { Web3Wrapper } from '@0project/web3-wrapper'; +import { Web3Wrapper } from '@0xproject/web3-wrapper'; import { JSONRPCRequestPayload, Provider } from 'ethereum-types'; import { Callback, ErrorCallback } from '../types'; -- cgit v1.2.3 From d09711363951f7ae25b3b3d5e091df7a420caf9f Mon Sep 17 00:00:00 2001 From: Fabio Berger Date: Tue, 3 Jul 2018 23:34:51 +0200 Subject: Remove dep on Web3 in Website. Introduced InjectedWeb3 type. --- packages/website/package.json | 1 - packages/website/ts/blockchain.ts | 24 +++++++++++++++++------- packages/website/ts/types.ts | 9 +++++++++ packages/website/ts/utils/analytics.ts | 11 ++++++----- 4 files changed, 32 insertions(+), 13 deletions(-) diff --git a/packages/website/package.json b/packages/website/package.json index 1bfc385b5..a5768a60b 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -58,7 +58,6 @@ "styled-components": "^3.3.0", "thenby": "^1.2.3", "truffle-contract": "2.0.1", - "web3": "^0.20.0", "web3-provider-engine": "14.0.6", "whatwg-fetch": "^2.0.3", "xml-js": "^1.6.4" diff --git a/packages/website/ts/blockchain.ts b/packages/website/ts/blockchain.ts index b59306974..a93ec9331 100644 --- a/packages/website/ts/blockchain.ts +++ b/packages/website/ts/blockchain.ts @@ -46,6 +46,7 @@ import { Fill, InjectedProviderObservable, InjectedProviderUpdate, + InjectedWeb3, Order as PortalOrder, Providers, ProviderType, @@ -59,7 +60,6 @@ import { configs } from 'ts/utils/configs'; import { constants } from 'ts/utils/constants'; import { errorReporter } from 'ts/utils/error_reporter'; import { utils } from 'ts/utils/utils'; -import Web3 = require('web3'); import ProviderEngine = require('web3-provider-engine'); import FilterSubprovider = require('web3-provider-engine/subproviders/filters'); import RpcSubprovider = require('web3-provider-engine/subproviders/rpc'); @@ -97,8 +97,18 @@ export class Blockchain { } return providerNameIfExists; } - private static _getInjectedWeb3(): any { - return (window as any).web3; + private static _getInjectedWeb3(): InjectedWeb3 { + const injectedWeb3IfExists = (window as any).web3; + // Our core assumptions about the injected web3 object is that it has the following + // properties and methods. + if ( + !_.isUndefined(injectedWeb3IfExists.version) && + !_.isUndefined(injectedWeb3IfExists.version.getNetwork) && + !_.isUndefined(injectedWeb3IfExists.currentProvider) + ) { + return undefined; + } + return injectedWeb3IfExists; } private static async _getInjectedWeb3ProviderNetworkIdIfExistsAsync(): Promise { // Hack: We need to know the networkId the injectedWeb3 is connected to (if it is defined) in @@ -119,7 +129,7 @@ export class Blockchain { return networkIdIfExists; } private static async _getProviderAsync( - injectedWeb3: Web3, + injectedWeb3: InjectedWeb3, networkIdIfExists: number, shouldUserLedgerProvider: boolean = false, ): Promise<[Provider, LedgerSubprovider | undefined]> { @@ -834,10 +844,10 @@ export class Blockchain { this._dispatcher.updateNetworkId(networkId); await this._rehydrateStoreWithContractEventsAsync(); } - private _updateProviderName(injectedWeb3: Web3): void { - const doesInjectedWeb3Exist = !_.isUndefined(injectedWeb3); + private _updateProviderName(injectedWeb3IfExists: InjectedWeb3): void { + const doesInjectedWeb3Exist = !_.isUndefined(injectedWeb3IfExists); const providerName = doesInjectedWeb3Exist - ? Blockchain._getNameGivenProvider(injectedWeb3.currentProvider) + ? Blockchain._getNameGivenProvider(injectedWeb3IfExists.currentProvider) : constants.PROVIDER_NAME_PUBLIC; this._dispatcher.updateInjectedProviderName(providerName); } diff --git a/packages/website/ts/types.ts b/packages/website/ts/types.ts index 2e4cf84d0..1239958df 100644 --- a/packages/website/ts/types.ts +++ b/packages/website/ts/types.ts @@ -1,5 +1,6 @@ import { ECSignature } from '@0xproject/types'; import { BigNumber } from '@0xproject/utils'; +import { Provider } from 'ethereum-types'; import * as React from 'react'; export enum Side { @@ -573,4 +574,12 @@ export enum AccountState { Loading = 'Loading', Locked = 'Locked', } + +// Minimal interface expected for an injected web3 object +export interface InjectedWeb3 { + currentProvider: Provider; + version: { + getNetwork(cd: (err: Error, networkId: string) => void): void; + }; +} // tslint:disable:max-file-line-count diff --git a/packages/website/ts/utils/analytics.ts b/packages/website/ts/utils/analytics.ts index 928e45bc3..f4bfa083f 100644 --- a/packages/website/ts/utils/analytics.ts +++ b/packages/website/ts/utils/analytics.ts @@ -1,8 +1,8 @@ import * as _ from 'lodash'; import * as ReactGA from 'react-ga'; +import { InjectedWeb3 } from 'ts/types'; import { configs } from 'ts/utils/configs'; import { utils } from 'ts/utils/utils'; -import * as Web3 from 'web3'; export const analytics = { init(): void { @@ -16,11 +16,12 @@ export const analytics = { value, }); }, - async logProviderAsync(web3IfExists: Web3): Promise { + async logProviderAsync(web3IfExists: InjectedWeb3): Promise { await utils.onPageLoadAsync(); - const providerType = !_.isUndefined(web3IfExists) - ? utils.getProviderType(web3IfExists.currentProvider) - : 'NONE'; + const providerType = + !_.isUndefined(web3IfExists) && !_.isUndefined(web3IfExists.currentProvider) + ? utils.getProviderType(web3IfExists.currentProvider) + : 'NONE'; ReactGA.ga('set', 'dimension1', providerType); }, }; -- cgit v1.2.3 From a5653337c1e52cfe95befbbf3924f97cb462846f Mon Sep 17 00:00:00 2001 From: Fabio Berger Date: Tue, 3 Jul 2018 23:36:14 +0200 Subject: Remove unused imported Web3.js --- packages/contracts/package.json | 3 +-- packages/dev-utils/package.json | 1 - packages/sol-compiler/package.json | 1 - packages/utils/package.json | 1 - 4 files changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/contracts/package.json b/packages/contracts/package.json index 01f2320d0..448871c23 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -85,7 +85,6 @@ "ethereumjs-abi": "^0.6.4", "ethereumjs-util": "^5.1.1", "ethers": "3.0.22", - "lodash": "^4.17.4", - "web3": "^0.20.0" + "lodash": "^4.17.4" } } diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index ebb2aeb41..15f8d6ab0 100644 --- a/packages/dev-utils/package.json +++ b/packages/dev-utils/package.json @@ -52,7 +52,6 @@ "@0xproject/typescript-typings": "^0.4.1", "@0xproject/web3-wrapper": "^0.7.1", "lodash": "^4.17.4", - "web3": "^0.20.0", "web3-provider-engine": "14.0.6" }, "publishConfig": { diff --git a/packages/sol-compiler/package.json b/packages/sol-compiler/package.json index 2c1fa41b3..d5a2e6e77 100644 --- a/packages/sol-compiler/package.json +++ b/packages/sol-compiler/package.json @@ -93,7 +93,6 @@ "require-from-string": "^2.0.1", "semver": "^5.5.0", "solc": "^0.4.23", - "web3": "^0.20.0", "web3-eth-abi": "^1.0.0-beta.24", "yargs": "^10.0.3" }, diff --git a/packages/utils/package.json b/packages/utils/package.json index f10594de5..f08586b4d 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -43,7 +43,6 @@ "ethers": "3.0.22", "js-sha3": "^0.7.0", "lodash": "^4.17.4", - "web3": "^0.20.0" }, "publishConfig": { "access": "public" -- cgit v1.2.3 From 2b4bb579d47037fa8c8a2c858bc467ccd8eed3b0 Mon Sep 17 00:00:00 2001 From: Fabio Berger Date: Tue, 3 Jul 2018 23:57:19 +0200 Subject: Rename subprovider in blockchain.ts --- packages/website/ts/blockchain.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/website/ts/blockchain.ts b/packages/website/ts/blockchain.ts index a93ec9331..8f1b33aeb 100644 --- a/packages/website/ts/blockchain.ts +++ b/packages/website/ts/blockchain.ts @@ -12,10 +12,10 @@ import { import { isValidOrderHash, signOrderHashAsync } from '@0xproject/order-utils'; import { EtherscanLinkSuffixes, utils as sharedUtils } from '@0xproject/react-shared'; import { - InjectedWeb3Subprovider, ledgerEthereumBrowserClientFactoryAsync, LedgerSubprovider, RedundantSubprovider, + SignerSubprovider, Subprovider, } from '@0xproject/subproviders'; import { @@ -163,7 +163,7 @@ export class Blockchain { // We catch all requests involving a users account and send it to the injectedWeb3 // instance. All other requests go to the public hosted node. const provider = new ProviderEngine(); - provider.addProvider(new InjectedWeb3Subprovider(injectedWeb3.currentProvider)); + provider.addProvider(new SignerSubprovider(injectedWeb3.currentProvider)); provider.addProvider(new FilterSubprovider()); const rpcSubproviders = _.map(publicNodeUrlsIfExistsForNetworkId, publicNodeUrl => { return new RpcSubprovider({ -- cgit v1.2.3 From a7902eca1f6e6e89c6dd81c1705dc313433d2a2e Mon Sep 17 00:00:00 2001 From: Fabio Berger Date: Tue, 3 Jul 2018 23:57:33 +0200 Subject: Fix package.json --- packages/utils/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/utils/package.json b/packages/utils/package.json index f08586b4d..0ba7a7ba4 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -42,7 +42,7 @@ "bignumber.js": "~4.1.0", "ethers": "3.0.22", "js-sha3": "^0.7.0", - "lodash": "^4.17.4", + "lodash": "^4.17.4" }, "publishConfig": { "access": "public" -- cgit v1.2.3 From 54c0b7b261277e8fe1a221a9aa21dbd5364e4ba6 Mon Sep 17 00:00:00 2001 From: Fabio Berger Date: Wed, 4 Jul 2018 00:13:36 +0200 Subject: Fix type --- packages/website/ts/types.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/website/ts/types.ts b/packages/website/ts/types.ts index 1239958df..b241a34bc 100644 --- a/packages/website/ts/types.ts +++ b/packages/website/ts/types.ts @@ -575,9 +575,13 @@ export enum AccountState { Locked = 'Locked', } +export interface MetamaskProvider extends Provider { + publicConfigStore: InjectedProviderObservable; +} + // Minimal interface expected for an injected web3 object export interface InjectedWeb3 { - currentProvider: Provider; + currentProvider: MetamaskProvider; version: { getNetwork(cd: (err: Error, networkId: string) => void): void; }; -- cgit v1.2.3 From f5cd1ac82eeaef97cb668ff6d622407f54ac165a Mon Sep 17 00:00:00 2001 From: Fabio Berger Date: Wed, 4 Jul 2018 00:18:09 +0200 Subject: Fix linter --- packages/testnet-faucets/src/ts/dispense_asset_tasks.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/testnet-faucets/src/ts/dispense_asset_tasks.ts b/packages/testnet-faucets/src/ts/dispense_asset_tasks.ts index 6e41ddae3..3af5ca747 100644 --- a/packages/testnet-faucets/src/ts/dispense_asset_tasks.ts +++ b/packages/testnet-faucets/src/ts/dispense_asset_tasks.ts @@ -1,5 +1,5 @@ import { ZeroEx } from '0x.js'; -import { BigNumber, logUtils, promisify } from '@0xproject/utils'; +import { BigNumber, logUtils } from '@0xproject/utils'; import { Web3Wrapper } from '@0xproject/web3-wrapper'; import * as _ from 'lodash'; -- cgit v1.2.3 From 6aa4984fed55be7ba4fe0caf0f994a11bccdc155 Mon Sep 17 00:00:00 2001 From: Fabio Berger Date: Wed, 4 Jul 2018 00:22:21 +0200 Subject: Fix instance variable name --- packages/subproviders/src/subproviders/signer.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/subproviders/src/subproviders/signer.ts b/packages/subproviders/src/subproviders/signer.ts index e436c7855..08a9daceb 100644 --- a/packages/subproviders/src/subproviders/signer.ts +++ b/packages/subproviders/src/subproviders/signer.ts @@ -12,14 +12,14 @@ import { Subprovider } from './subprovider'; * are passed onwards for subsequent subproviders to handle. */ export class SignerSubprovider extends Subprovider { - private _SignerWrapper: Web3Wrapper; + private _web3Wrapper: Web3Wrapper; /** * Instantiates a new SignerSubprovider * @param provider Web3 provider that should handle all user account related requests */ constructor(provider: Provider) { super(); - this._SignerWrapper = new Web3Wrapper(provider); + this._web3Wrapper = new Web3Wrapper(provider); } /** * This method conforms to the web3-provider-engine interface. @@ -34,7 +34,7 @@ export class SignerSubprovider extends Subprovider { switch (payload.method) { case 'web3_clientVersion': try { - const nodeVersion = await this._SignerWrapper.getNodeVersionAsync(); + const nodeVersion = await this._web3Wrapper.getNodeVersionAsync(); end(null, nodeVersion); } catch (err) { end(err); @@ -42,7 +42,7 @@ export class SignerSubprovider extends Subprovider { return; case 'eth_accounts': try { - const accounts = await this._SignerWrapper.getAvailableAddressesAsync(); + const accounts = await this._web3Wrapper.getAvailableAddressesAsync(); end(null, accounts); } catch (err) { end(err); @@ -51,7 +51,7 @@ export class SignerSubprovider extends Subprovider { case 'eth_sendTransaction': const [txParams] = payload.params; try { - const txHash = await this._SignerWrapper.sendTransactionAsync(txParams); + const txHash = await this._web3Wrapper.sendTransactionAsync(txParams); end(null, txHash); } catch (err) { end(err); @@ -60,7 +60,7 @@ export class SignerSubprovider extends Subprovider { case 'eth_sign': const [address, message] = payload.params; try { - const signature = await this._SignerWrapper.signMessageAsync(address, message); + const signature = await this._web3Wrapper.signMessageAsync(address, message); end(null, signature); } catch (err) { end(err); -- cgit v1.2.3 From 5f2c303bd8ce983533863b54e14856b39b578035 Mon Sep 17 00:00:00 2001 From: Fabio Berger Date: Wed, 4 Jul 2018 00:23:40 +0200 Subject: Remove hack since latest web3-provider-engine fixed underlying issue --- packages/dev-utils/src/web3_factory.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/packages/dev-utils/src/web3_factory.ts b/packages/dev-utils/src/web3_factory.ts index 47eef4cbd..362a6c3c6 100644 --- a/packages/dev-utils/src/web3_factory.ts +++ b/packages/dev-utils/src/web3_factory.ts @@ -1,8 +1,3 @@ -// HACK: web3 injects XMLHttpRequest into the global scope and ProviderEngine checks XMLHttpRequest -// to know whether it is running in a browser or node environment. We need it to be undefined since -// we are not running in a browser env. -// Filed issue: https://github.com/ethereum/web3.js/issues/844 -(global as any).XMLHttpRequest = undefined; import ProviderEngine = require('web3-provider-engine'); import RpcSubprovider = require('web3-provider-engine/subproviders/rpc'); -- cgit v1.2.3 From f4109034656fa826e25d0d4ba8a9d5e676f6c786 Mon Sep 17 00:00:00 2001 From: Fabio Berger Date: Wed, 4 Jul 2018 00:29:29 +0200 Subject: Rename to InjectedProvider and make publicConfigStore optional --- packages/website/ts/types.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/website/ts/types.ts b/packages/website/ts/types.ts index b241a34bc..be33f130c 100644 --- a/packages/website/ts/types.ts +++ b/packages/website/ts/types.ts @@ -575,13 +575,13 @@ export enum AccountState { Locked = 'Locked', } -export interface MetamaskProvider extends Provider { - publicConfigStore: InjectedProviderObservable; +export interface InjectedProvider extends Provider { + publicConfigStore?: InjectedProviderObservable; } // Minimal interface expected for an injected web3 object export interface InjectedWeb3 { - currentProvider: MetamaskProvider; + currentProvider: InjectedProvider; version: { getNetwork(cd: (err: Error, networkId: string) => void): void; }; -- cgit v1.2.3 From 9db0bc262ba85d7dc3b104a0c1c81f85e985acfb Mon Sep 17 00:00:00 2001 From: Fabio Berger Date: Wed, 4 Jul 2018 00:36:57 +0200 Subject: Fix conditional --- packages/website/ts/blockchain.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/website/ts/blockchain.ts b/packages/website/ts/blockchain.ts index 8f1b33aeb..eb2cba268 100644 --- a/packages/website/ts/blockchain.ts +++ b/packages/website/ts/blockchain.ts @@ -102,9 +102,9 @@ export class Blockchain { // Our core assumptions about the injected web3 object is that it has the following // properties and methods. if ( - !_.isUndefined(injectedWeb3IfExists.version) && - !_.isUndefined(injectedWeb3IfExists.version.getNetwork) && - !_.isUndefined(injectedWeb3IfExists.currentProvider) + _.isUndefined(injectedWeb3IfExists.version) || + _.isUndefined(injectedWeb3IfExists.version.getNetwork) || + _.isUndefined(injectedWeb3IfExists.currentProvider) ) { return undefined; } @@ -787,6 +787,7 @@ export class Blockchain { const networkIdIfExists = await Blockchain._getInjectedWeb3ProviderNetworkIdIfExistsAsync(); this.networkId = !_.isUndefined(networkIdIfExists) ? networkIdIfExists : constants.NETWORK_ID_MAINNET; const injectedWeb3IfExists = Blockchain._getInjectedWeb3(); + console.log(injectedWeb3IfExists); if (!_.isUndefined(injectedWeb3IfExists) && !_.isUndefined(injectedWeb3IfExists.currentProvider)) { const injectedProviderObservable = injectedWeb3IfExists.currentProvider.publicConfigStore; if (!_.isUndefined(injectedProviderObservable) && _.isUndefined(this._injectedProviderObservable)) { -- cgit v1.2.3 From 0d56daf7ab71031edfa5145704a9a9b746fd80cf Mon Sep 17 00:00:00 2001 From: Fabio Berger Date: Wed, 4 Jul 2018 00:37:39 +0200 Subject: remove console.log --- packages/website/ts/blockchain.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/website/ts/blockchain.ts b/packages/website/ts/blockchain.ts index eb2cba268..6a92403f2 100644 --- a/packages/website/ts/blockchain.ts +++ b/packages/website/ts/blockchain.ts @@ -787,7 +787,6 @@ export class Blockchain { const networkIdIfExists = await Blockchain._getInjectedWeb3ProviderNetworkIdIfExistsAsync(); this.networkId = !_.isUndefined(networkIdIfExists) ? networkIdIfExists : constants.NETWORK_ID_MAINNET; const injectedWeb3IfExists = Blockchain._getInjectedWeb3(); - console.log(injectedWeb3IfExists); if (!_.isUndefined(injectedWeb3IfExists) && !_.isUndefined(injectedWeb3IfExists.currentProvider)) { const injectedProviderObservable = injectedWeb3IfExists.currentProvider.publicConfigStore; if (!_.isUndefined(injectedProviderObservable) && _.isUndefined(this._injectedProviderObservable)) { -- cgit v1.2.3 From 8ff17ff9603f6b574e76f5ef160fe59c3afb2a86 Mon Sep 17 00:00:00 2001 From: Fabio Berger Date: Wed, 4 Jul 2018 00:41:19 +0200 Subject: improve comment --- packages/website/ts/types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/ts/types.ts b/packages/website/ts/types.ts index be33f130c..512167ed1 100644 --- a/packages/website/ts/types.ts +++ b/packages/website/ts/types.ts @@ -579,7 +579,7 @@ export interface InjectedProvider extends Provider { publicConfigStore?: InjectedProviderObservable; } -// Minimal interface expected for an injected web3 object +// Minimal expected interface for an injected web3 object export interface InjectedWeb3 { currentProvider: InjectedProvider; version: { -- cgit v1.2.3 From 4e783fba57bbd3d389ab52679ca8763bfa03cbf3 Mon Sep 17 00:00:00 2001 From: Fabio Berger Date: Wed, 4 Jul 2018 16:34:03 +0200 Subject: Add missing undefined check --- packages/website/ts/blockchain.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/website/ts/blockchain.ts b/packages/website/ts/blockchain.ts index 6a92403f2..cc2afa28a 100644 --- a/packages/website/ts/blockchain.ts +++ b/packages/website/ts/blockchain.ts @@ -102,6 +102,7 @@ export class Blockchain { // Our core assumptions about the injected web3 object is that it has the following // properties and methods. if ( + _.isUndefined(injectedWeb3IfExists) || _.isUndefined(injectedWeb3IfExists.version) || _.isUndefined(injectedWeb3IfExists.version.getNetwork) || _.isUndefined(injectedWeb3IfExists.currentProvider) -- cgit v1.2.3