Merge pull request #817 from 0xProject/remove-web3
Remove Web3 Dependencies (exept for in web3-wrapper)
This commit is contained in:
		@@ -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"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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": {
 | 
			
		||||
 
 | 
			
		||||
@@ -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');
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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"
 | 
			
		||||
    },
 | 
			
		||||
 
 | 
			
		||||
@@ -42,6 +42,8 @@
 | 
			
		||||
    "dependencies": {
 | 
			
		||||
        "@0xproject/assert": "^0.2.12",
 | 
			
		||||
        "@0xproject/types": "^1.0.0",
 | 
			
		||||
        "@0xproject/web3-wrapper": "^0.7.1",
 | 
			
		||||
        "@0xproject/typescript-typings": "^0.4.2",
 | 
			
		||||
        "@0xproject/utils": "^0.7.1",
 | 
			
		||||
        "@ledgerhq/hw-app-eth": "^4.3.0",
 | 
			
		||||
        "@ledgerhq/hw-transport-u2f": "^4.3.0",
 | 
			
		||||
@@ -55,7 +57,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": {
 | 
			
		||||
 
 | 
			
		||||
@@ -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';
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
import { Web3Wrapper } from '@0xproject/web3-wrapper';
 | 
			
		||||
import { JSONRPCRequestPayload, Provider } from 'ethereum-types';
 | 
			
		||||
import * as Web3 from 'web3';
 | 
			
		||||
 | 
			
		||||
import { Callback, ErrorCallback } from '../types';
 | 
			
		||||
 | 
			
		||||
@@ -7,19 +7,19 @@ 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
 | 
			
		||||
 * 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 InjectedWeb3Subprovider extends Subprovider {
 | 
			
		||||
    private _injectedWeb3: Web3;
 | 
			
		||||
export class SignerSubprovider extends Subprovider {
 | 
			
		||||
    private _web3Wrapper: Web3Wrapper;
 | 
			
		||||
    /**
 | 
			
		||||
     * Instantiates a new InjectedWeb3Subprovider
 | 
			
		||||
     * Instantiates a new SignerSubprovider
 | 
			
		||||
     * @param provider Web3 provider that should handle  all user account related requests
 | 
			
		||||
     */
 | 
			
		||||
    constructor(provider: Provider) {
 | 
			
		||||
        super();
 | 
			
		||||
        this._injectedWeb3 = new Web3(provider);
 | 
			
		||||
        this._web3Wrapper = new Web3Wrapper(provider);
 | 
			
		||||
    }
 | 
			
		||||
    /**
 | 
			
		||||
     * This method conforms to the web3-provider-engine interface.
 | 
			
		||||
@@ -33,22 +33,39 @@ export class InjectedWeb3Subprovider extends Subprovider {
 | 
			
		||||
    public async handleRequest(payload: JSONRPCRequestPayload, next: Callback, end: ErrorCallback): Promise<void> {
 | 
			
		||||
        switch (payload.method) {
 | 
			
		||||
            case 'web3_clientVersion':
 | 
			
		||||
                this._injectedWeb3.version.getNode(end);
 | 
			
		||||
                try {
 | 
			
		||||
                    const nodeVersion = await this._web3Wrapper.getNodeVersionAsync();
 | 
			
		||||
                    end(null, nodeVersion);
 | 
			
		||||
                } catch (err) {
 | 
			
		||||
                    end(err);
 | 
			
		||||
                }
 | 
			
		||||
                return;
 | 
			
		||||
            case 'eth_accounts':
 | 
			
		||||
                this._injectedWeb3.eth.getAccounts(end);
 | 
			
		||||
                try {
 | 
			
		||||
                    const accounts = await this._web3Wrapper.getAvailableAddressesAsync();
 | 
			
		||||
                    end(null, accounts);
 | 
			
		||||
                } catch (err) {
 | 
			
		||||
                    end(err);
 | 
			
		||||
                }
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            case 'eth_sendTransaction':
 | 
			
		||||
                const [txParams] = payload.params;
 | 
			
		||||
                this._injectedWeb3.eth.sendTransaction(txParams, end);
 | 
			
		||||
                try {
 | 
			
		||||
                    const txHash = await this._web3Wrapper.sendTransactionAsync(txParams);
 | 
			
		||||
                    end(null, txHash);
 | 
			
		||||
                } catch (err) {
 | 
			
		||||
                    end(err);
 | 
			
		||||
                }
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            case 'eth_sign':
 | 
			
		||||
                const [address, message] = payload.params;
 | 
			
		||||
                this._injectedWeb3.eth.sign(address, message, end);
 | 
			
		||||
                try {
 | 
			
		||||
                    const signature = await this._web3Wrapper.signMessageAsync(address, message);
 | 
			
		||||
                    end(null, signature);
 | 
			
		||||
                } catch (err) {
 | 
			
		||||
                    end(err);
 | 
			
		||||
                }
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            default:
 | 
			
		||||
                next();
 | 
			
		||||
                return;
 | 
			
		||||
@@ -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": {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
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';
 | 
			
		||||
import * as Web3 from 'web3';
 | 
			
		||||
 | 
			
		||||
import { configs } from './configs';
 | 
			
		||||
 | 
			
		||||
@@ -13,22 +13,21 @@ const DISPENSE_MAX_AMOUNT_ETHER = 2;
 | 
			
		||||
type AsyncTask = () => Promise<void>;
 | 
			
		||||
 | 
			
		||||
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<BigNumber>(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}`);
 | 
			
		||||
        };
 | 
			
		||||
 
 | 
			
		||||
@@ -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:
 | 
			
		||||
 
 | 
			
		||||
@@ -42,8 +42,7 @@
 | 
			
		||||
        "bignumber.js": "~4.1.0",
 | 
			
		||||
        "ethers": "3.0.22",
 | 
			
		||||
        "js-sha3": "^0.7.0",
 | 
			
		||||
        "lodash": "^4.17.4",
 | 
			
		||||
        "web3": "^0.20.0"
 | 
			
		||||
        "lodash": "^4.17.4"
 | 
			
		||||
    },
 | 
			
		||||
    "publishConfig": {
 | 
			
		||||
        "access": "public"
 | 
			
		||||
 
 | 
			
		||||
@@ -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"
 | 
			
		||||
 
 | 
			
		||||
@@ -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 {
 | 
			
		||||
@@ -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,19 @@ 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) ||
 | 
			
		||||
            _.isUndefined(injectedWeb3IfExists.version) ||
 | 
			
		||||
            _.isUndefined(injectedWeb3IfExists.version.getNetwork) ||
 | 
			
		||||
            _.isUndefined(injectedWeb3IfExists.currentProvider)
 | 
			
		||||
        ) {
 | 
			
		||||
            return undefined;
 | 
			
		||||
        }
 | 
			
		||||
        return injectedWeb3IfExists;
 | 
			
		||||
    }
 | 
			
		||||
    private static async _getInjectedWeb3ProviderNetworkIdIfExistsAsync(): Promise<number | undefined> {
 | 
			
		||||
        // Hack: We need to know the networkId the injectedWeb3 is connected to (if it is defined) in
 | 
			
		||||
@@ -119,7 +130,7 @@ export class Blockchain {
 | 
			
		||||
        return networkIdIfExists;
 | 
			
		||||
    }
 | 
			
		||||
    private static async _getProviderAsync(
 | 
			
		||||
        injectedWeb3: Web3,
 | 
			
		||||
        injectedWeb3: InjectedWeb3,
 | 
			
		||||
        networkIdIfExists: number,
 | 
			
		||||
        shouldUserLedgerProvider: boolean = false,
 | 
			
		||||
    ): Promise<[Provider, LedgerSubprovider | undefined]> {
 | 
			
		||||
@@ -153,7 +164,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({
 | 
			
		||||
@@ -834,10 +845,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);
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -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"'],
 | 
			
		||||
 
 | 
			
		||||
@@ -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 {
 | 
			
		||||
@@ -574,4 +575,16 @@ export enum AccountState {
 | 
			
		||||
    Loading = 'Loading',
 | 
			
		||||
    Locked = 'Locked',
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface InjectedProvider extends Provider {
 | 
			
		||||
    publicConfigStore?: InjectedProviderObservable;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Minimal expected interface for an injected web3 object
 | 
			
		||||
export interface InjectedWeb3 {
 | 
			
		||||
    currentProvider: InjectedProvider;
 | 
			
		||||
    version: {
 | 
			
		||||
        getNetwork(cd: (err: Error, networkId: string) => void): void;
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
// tslint:disable:max-file-line-count
 | 
			
		||||
 
 | 
			
		||||
@@ -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<void> {
 | 
			
		||||
    async logProviderAsync(web3IfExists: InjectedWeb3): Promise<void> {
 | 
			
		||||
        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);
 | 
			
		||||
    },
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user