Merge branch 'development' into fix/ether_token_address
This commit is contained in:
		@@ -1,4 +1,4 @@
 | 
			
		||||
import { BlockchainLifecycle } from '@0xproject/dev-utils';
 | 
			
		||||
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
 | 
			
		||||
import { BigNumber } from '@0xproject/utils';
 | 
			
		||||
import * as chai from 'chai';
 | 
			
		||||
import * as _ from 'lodash';
 | 
			
		||||
@@ -10,9 +10,8 @@ import { ApprovalContractEventArgs, LogWithDecodedArgs, Order, TokenEvents, Zero
 | 
			
		||||
import { chaiSetup } from './utils/chai_setup';
 | 
			
		||||
import { constants } from './utils/constants';
 | 
			
		||||
import { TokenUtils } from './utils/token_utils';
 | 
			
		||||
import { web3Factory } from './utils/web3_factory';
 | 
			
		||||
 | 
			
		||||
const blockchainLifecycle = new BlockchainLifecycle(constants.RPC_URL);
 | 
			
		||||
const blockchainLifecycle = new BlockchainLifecycle();
 | 
			
		||||
chaiSetup.configure();
 | 
			
		||||
const expect = chai.expect;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,4 @@
 | 
			
		||||
import { web3Factory } from '@0xproject/dev-utils';
 | 
			
		||||
import * as chai from 'chai';
 | 
			
		||||
import 'mocha';
 | 
			
		||||
 | 
			
		||||
@@ -5,7 +6,6 @@ import { ZeroEx } from '../src';
 | 
			
		||||
import { assert } from '../src/utils/assert';
 | 
			
		||||
 | 
			
		||||
import { constants } from './utils/constants';
 | 
			
		||||
import { web3Factory } from './utils/web3_factory';
 | 
			
		||||
 | 
			
		||||
const expect = chai.expect;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
import { BlockchainLifecycle } from '@0xproject/dev-utils';
 | 
			
		||||
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
 | 
			
		||||
import { BigNumber } from '@0xproject/utils';
 | 
			
		||||
import * as chai from 'chai';
 | 
			
		||||
import 'mocha';
 | 
			
		||||
@@ -23,11 +23,10 @@ import { chaiSetup } from './utils/chai_setup';
 | 
			
		||||
import { constants } from './utils/constants';
 | 
			
		||||
import { reportNodeCallbackErrors } from './utils/report_callback_errors';
 | 
			
		||||
import { TokenUtils } from './utils/token_utils';
 | 
			
		||||
import { web3Factory } from './utils/web3_factory';
 | 
			
		||||
 | 
			
		||||
chaiSetup.configure();
 | 
			
		||||
const expect = chai.expect;
 | 
			
		||||
const blockchainLifecycle = new BlockchainLifecycle(constants.RPC_URL);
 | 
			
		||||
const blockchainLifecycle = new BlockchainLifecycle();
 | 
			
		||||
 | 
			
		||||
// Since the address depositing/withdrawing ETH/WETH also needs to pay gas costs for the transaction,
 | 
			
		||||
// a small amount of ETH will be used to pay this gas cost. We therefore check that the difference between
 | 
			
		||||
@@ -156,7 +155,7 @@ describe('EtherTokenWrapper', () => {
 | 
			
		||||
            etherTokenAddress = etherToken.address;
 | 
			
		||||
        });
 | 
			
		||||
        afterEach(() => {
 | 
			
		||||
            zeroEx.etherToken.unsubscribeAll();
 | 
			
		||||
            zeroEx.etherToken._unsubscribeAll();
 | 
			
		||||
        });
 | 
			
		||||
        // Hack: Mocha does not allow a test to be both async and have a `done` callback
 | 
			
		||||
        // Since we need to await the receipt of the event in the `subscribe` callback,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,4 @@
 | 
			
		||||
import { web3Factory } from '@0xproject/dev-utils';
 | 
			
		||||
import { Web3Wrapper } from '@0xproject/web3-wrapper';
 | 
			
		||||
import * as chai from 'chai';
 | 
			
		||||
import * as _ from 'lodash';
 | 
			
		||||
@@ -11,7 +12,6 @@ import { DoneCallback } from '../src/types';
 | 
			
		||||
 | 
			
		||||
import { chaiSetup } from './utils/chai_setup';
 | 
			
		||||
import { reportNodeCallbackErrors } from './utils/report_callback_errors';
 | 
			
		||||
import { web3Factory } from './utils/web3_factory';
 | 
			
		||||
 | 
			
		||||
chaiSetup.configure();
 | 
			
		||||
const expect = chai.expect;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
import { BlockchainLifecycle } from '@0xproject/dev-utils';
 | 
			
		||||
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
 | 
			
		||||
import { BigNumber } from '@0xproject/utils';
 | 
			
		||||
import * as chai from 'chai';
 | 
			
		||||
 | 
			
		||||
@@ -8,11 +8,10 @@ import { ExchangeTransferSimulator } from '../src/utils/exchange_transfer_simula
 | 
			
		||||
 | 
			
		||||
import { chaiSetup } from './utils/chai_setup';
 | 
			
		||||
import { constants } from './utils/constants';
 | 
			
		||||
import { web3Factory } from './utils/web3_factory';
 | 
			
		||||
 | 
			
		||||
chaiSetup.configure();
 | 
			
		||||
const expect = chai.expect;
 | 
			
		||||
const blockchainLifecycle = new BlockchainLifecycle(constants.RPC_URL);
 | 
			
		||||
const blockchainLifecycle = new BlockchainLifecycle();
 | 
			
		||||
 | 
			
		||||
describe('ExchangeTransferSimulator', () => {
 | 
			
		||||
    const web3 = web3Factory.create();
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
import { BlockchainLifecycle } from '@0xproject/dev-utils';
 | 
			
		||||
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
 | 
			
		||||
import { BigNumber } from '@0xproject/utils';
 | 
			
		||||
import * as chai from 'chai';
 | 
			
		||||
import * as _ from 'lodash';
 | 
			
		||||
@@ -25,11 +25,10 @@ import { constants } from './utils/constants';
 | 
			
		||||
import { FillScenarios } from './utils/fill_scenarios';
 | 
			
		||||
import { reportNodeCallbackErrors } from './utils/report_callback_errors';
 | 
			
		||||
import { TokenUtils } from './utils/token_utils';
 | 
			
		||||
import { web3Factory } from './utils/web3_factory';
 | 
			
		||||
 | 
			
		||||
chaiSetup.configure();
 | 
			
		||||
const expect = chai.expect;
 | 
			
		||||
const blockchainLifecycle = new BlockchainLifecycle(constants.RPC_URL);
 | 
			
		||||
const blockchainLifecycle = new BlockchainLifecycle();
 | 
			
		||||
 | 
			
		||||
const NON_EXISTENT_ORDER_HASH = '0x79370342234e7acd6bbeac335bd3bb1d368383294b64b8160a00f4060e4d3777';
 | 
			
		||||
 | 
			
		||||
@@ -922,7 +921,7 @@ describe('ExchangeWrapper', () => {
 | 
			
		||||
            );
 | 
			
		||||
        });
 | 
			
		||||
        afterEach(async () => {
 | 
			
		||||
            zeroEx.exchange.unsubscribeAll();
 | 
			
		||||
            zeroEx.exchange._unsubscribeAll();
 | 
			
		||||
        });
 | 
			
		||||
        // Hack: Mocha does not allow a test to be both async and have a `done` callback
 | 
			
		||||
        // Since we need to await the receipt of the event in the `subscribe` callback,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
import { BlockchainLifecycle } from '@0xproject/dev-utils';
 | 
			
		||||
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
 | 
			
		||||
import { BigNumber } from '@0xproject/utils';
 | 
			
		||||
import * as chai from 'chai';
 | 
			
		||||
import * as _ from 'lodash';
 | 
			
		||||
@@ -13,15 +13,13 @@ import { constants } from '../src/utils/constants';
 | 
			
		||||
import { utils } from '../src/utils/utils';
 | 
			
		||||
 | 
			
		||||
import { chaiSetup } from './utils/chai_setup';
 | 
			
		||||
import { constants as testConstants } from './utils/constants';
 | 
			
		||||
import { FillScenarios } from './utils/fill_scenarios';
 | 
			
		||||
import { reportNoErrorCallbackErrors } from './utils/report_callback_errors';
 | 
			
		||||
import { TokenUtils } from './utils/token_utils';
 | 
			
		||||
import { web3Factory } from './utils/web3_factory';
 | 
			
		||||
 | 
			
		||||
chaiSetup.configure();
 | 
			
		||||
const expect = chai.expect;
 | 
			
		||||
const blockchainLifecycle = new BlockchainLifecycle(testConstants.RPC_URL);
 | 
			
		||||
const blockchainLifecycle = new BlockchainLifecycle();
 | 
			
		||||
 | 
			
		||||
describe('ExpirationWatcher', () => {
 | 
			
		||||
    let web3: Web3;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
import { BlockchainLifecycle } from '@0xproject/dev-utils';
 | 
			
		||||
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
 | 
			
		||||
import { BigNumber } from '@0xproject/utils';
 | 
			
		||||
import * as chai from 'chai';
 | 
			
		||||
import * as _ from 'lodash';
 | 
			
		||||
@@ -22,13 +22,12 @@ import { constants } from './utils/constants';
 | 
			
		||||
import { FillScenarios } from './utils/fill_scenarios';
 | 
			
		||||
import { reportNodeCallbackErrors } from './utils/report_callback_errors';
 | 
			
		||||
import { TokenUtils } from './utils/token_utils';
 | 
			
		||||
import { web3Factory } from './utils/web3_factory';
 | 
			
		||||
 | 
			
		||||
const TIMEOUT_MS = 150;
 | 
			
		||||
 | 
			
		||||
chaiSetup.configure();
 | 
			
		||||
const expect = chai.expect;
 | 
			
		||||
const blockchainLifecycle = new BlockchainLifecycle(constants.RPC_URL);
 | 
			
		||||
const blockchainLifecycle = new BlockchainLifecycle();
 | 
			
		||||
 | 
			
		||||
describe('OrderStateWatcher', () => {
 | 
			
		||||
    let web3: Web3;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
import { BlockchainLifecycle } from '@0xproject/dev-utils';
 | 
			
		||||
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
 | 
			
		||||
import { BigNumber } from '@0xproject/utils';
 | 
			
		||||
import * as chai from 'chai';
 | 
			
		||||
import * as Sinon from 'sinon';
 | 
			
		||||
@@ -13,11 +13,10 @@ import { chaiSetup } from './utils/chai_setup';
 | 
			
		||||
import { constants } from './utils/constants';
 | 
			
		||||
import { FillScenarios } from './utils/fill_scenarios';
 | 
			
		||||
import { TokenUtils } from './utils/token_utils';
 | 
			
		||||
import { web3Factory } from './utils/web3_factory';
 | 
			
		||||
 | 
			
		||||
chaiSetup.configure();
 | 
			
		||||
const expect = chai.expect;
 | 
			
		||||
const blockchainLifecycle = new BlockchainLifecycle(constants.RPC_URL);
 | 
			
		||||
const blockchainLifecycle = new BlockchainLifecycle();
 | 
			
		||||
 | 
			
		||||
describe('OrderValidation', () => {
 | 
			
		||||
    let web3: Web3;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
import { BlockchainLifecycle } from '@0xproject/dev-utils';
 | 
			
		||||
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
 | 
			
		||||
import { BigNumber } from '@0xproject/utils';
 | 
			
		||||
import * as _ from 'lodash';
 | 
			
		||||
import 'mocha';
 | 
			
		||||
@@ -11,10 +11,9 @@ import { DoneCallback } from '../src/types';
 | 
			
		||||
import { chaiSetup } from './utils/chai_setup';
 | 
			
		||||
import { constants } from './utils/constants';
 | 
			
		||||
import { assertNodeCallbackError } from './utils/report_callback_errors';
 | 
			
		||||
import { web3Factory } from './utils/web3_factory';
 | 
			
		||||
 | 
			
		||||
chaiSetup.configure();
 | 
			
		||||
const blockchainLifecycle = new BlockchainLifecycle(constants.RPC_URL);
 | 
			
		||||
const blockchainLifecycle = new BlockchainLifecycle();
 | 
			
		||||
 | 
			
		||||
describe('SubscriptionTest', () => {
 | 
			
		||||
    let web3: Web3;
 | 
			
		||||
@@ -50,7 +49,7 @@ describe('SubscriptionTest', () => {
 | 
			
		||||
            tokenAddress = token.address;
 | 
			
		||||
        });
 | 
			
		||||
        afterEach(() => {
 | 
			
		||||
            zeroEx.token.unsubscribeAll();
 | 
			
		||||
            zeroEx.token._unsubscribeAll();
 | 
			
		||||
            _.each(stubs, s => s.restore());
 | 
			
		||||
            stubs = [];
 | 
			
		||||
        });
 | 
			
		||||
@@ -77,7 +76,7 @@ describe('SubscriptionTest', () => {
 | 
			
		||||
                const callback = (err: Error | null, logEvent?: DecodedLogEvent<ApprovalContractEventArgs>) => _.noop;
 | 
			
		||||
                zeroEx.token.subscribe(tokenAddress, TokenEvents.Approval, indexFilterValues, callback);
 | 
			
		||||
                stubs = [Sinon.stub((zeroEx as any)._web3Wrapper, 'getBlockAsync').throws(new Error('JSON RPC error'))];
 | 
			
		||||
                zeroEx.token.unsubscribeAll();
 | 
			
		||||
                zeroEx.token._unsubscribeAll();
 | 
			
		||||
                done();
 | 
			
		||||
            })().catch(done);
 | 
			
		||||
        });
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
import { BlockchainLifecycle } from '@0xproject/dev-utils';
 | 
			
		||||
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
 | 
			
		||||
import { schemas, SchemaValidator } from '@0xproject/json-schemas';
 | 
			
		||||
import * as chai from 'chai';
 | 
			
		||||
import * as _ from 'lodash';
 | 
			
		||||
@@ -8,11 +8,10 @@ import { Token, ZeroEx } from '../src';
 | 
			
		||||
 | 
			
		||||
import { chaiSetup } from './utils/chai_setup';
 | 
			
		||||
import { constants } from './utils/constants';
 | 
			
		||||
import { web3Factory } from './utils/web3_factory';
 | 
			
		||||
 | 
			
		||||
chaiSetup.configure();
 | 
			
		||||
const expect = chai.expect;
 | 
			
		||||
const blockchainLifecycle = new BlockchainLifecycle(constants.RPC_URL);
 | 
			
		||||
const blockchainLifecycle = new BlockchainLifecycle();
 | 
			
		||||
 | 
			
		||||
const TOKEN_REGISTRY_SIZE_AFTER_MIGRATION = 7;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,10 @@
 | 
			
		||||
import { web3Factory } from '@0xproject/dev-utils';
 | 
			
		||||
import * as chai from 'chai';
 | 
			
		||||
 | 
			
		||||
import { ZeroEx } from '../src';
 | 
			
		||||
 | 
			
		||||
import { chaiSetup } from './utils/chai_setup';
 | 
			
		||||
import { constants } from './utils/constants';
 | 
			
		||||
import { web3Factory } from './utils/web3_factory';
 | 
			
		||||
 | 
			
		||||
chaiSetup.configure();
 | 
			
		||||
const expect = chai.expect;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,4 @@
 | 
			
		||||
import { BlockchainLifecycle } from '@0xproject/dev-utils';
 | 
			
		||||
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
 | 
			
		||||
import { BigNumber } from '@0xproject/utils';
 | 
			
		||||
import { Web3Wrapper } from '@0xproject/web3-wrapper';
 | 
			
		||||
import * as chai from 'chai';
 | 
			
		||||
@@ -22,11 +22,10 @@ import { chaiSetup } from './utils/chai_setup';
 | 
			
		||||
import { constants } from './utils/constants';
 | 
			
		||||
import { reportNodeCallbackErrors } from './utils/report_callback_errors';
 | 
			
		||||
import { TokenUtils } from './utils/token_utils';
 | 
			
		||||
import { web3Factory } from './utils/web3_factory';
 | 
			
		||||
 | 
			
		||||
chaiSetup.configure();
 | 
			
		||||
const expect = chai.expect;
 | 
			
		||||
const blockchainLifecycle = new BlockchainLifecycle(constants.RPC_URL);
 | 
			
		||||
const blockchainLifecycle = new BlockchainLifecycle();
 | 
			
		||||
 | 
			
		||||
describe('TokenWrapper', () => {
 | 
			
		||||
    let web3: Web3;
 | 
			
		||||
@@ -378,7 +377,7 @@ describe('TokenWrapper', () => {
 | 
			
		||||
            tokenAddress = token.address;
 | 
			
		||||
        });
 | 
			
		||||
        afterEach(() => {
 | 
			
		||||
            zeroEx.token.unsubscribeAll();
 | 
			
		||||
            zeroEx.token._unsubscribeAll();
 | 
			
		||||
        });
 | 
			
		||||
        // Hack: Mocha does not allow a test to be both async and have a `done` callback
 | 
			
		||||
        // Since we need to await the receipt of the event in the `subscribe` callback,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,9 @@
 | 
			
		||||
export const constants = {
 | 
			
		||||
    NULL_ADDRESS: '0x0000000000000000000000000000000000000000',
 | 
			
		||||
    RPC_URL: 'http://localhost:8545',
 | 
			
		||||
    ROPSTEN_NETWORK_ID: 3,
 | 
			
		||||
    KOVAN_NETWORK_ID: 42,
 | 
			
		||||
    TESTRPC_NETWORK_ID: 50,
 | 
			
		||||
    KOVAN_RPC_URL: 'https://kovan.infura.io/',
 | 
			
		||||
    ROPSTEN_RPC_URL: 'https://ropsten.infura.io/',
 | 
			
		||||
    ZRX_DECIMALS: 18,
 | 
			
		||||
    GAS_ESTIMATE: 500000,
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -1,27 +0,0 @@
 | 
			
		||||
import { JSONRPCPayload } from '../../../src/types';
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This class implements the web3-provider-engine subprovider interface and returns
 | 
			
		||||
 * that the provider has no addresses when queried.
 | 
			
		||||
 * Source: https://github.com/MetaMask/provider-engine/blob/master/subproviders/subprovider.js
 | 
			
		||||
 */
 | 
			
		||||
export class EmptyWalletSubprovider {
 | 
			
		||||
    // This method needs to be here to satisfy the interface but linter wants it to be static.
 | 
			
		||||
    // tslint:disable-next-line:prefer-function-over-method
 | 
			
		||||
    public handleRequest(payload: JSONRPCPayload, next: () => void, end: (err: Error | null, result: any) => void) {
 | 
			
		||||
        switch (payload.method) {
 | 
			
		||||
            case 'eth_accounts':
 | 
			
		||||
                end(null, []);
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            default:
 | 
			
		||||
                next();
 | 
			
		||||
                return;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    // Required to implement this method despite not needing it for this subprovider
 | 
			
		||||
    // tslint:disable-next-line:prefer-function-over-method
 | 
			
		||||
    public setEngine(engine: any) {
 | 
			
		||||
        // noop
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,34 +0,0 @@
 | 
			
		||||
import { JSONRPCPayload } from '../../../src/types';
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This class implements the web3-provider-engine subprovider interface and returns
 | 
			
		||||
 * the constant gas estimate when queried.
 | 
			
		||||
 * HACK: We need this so that our tests don't use testrpc gas estimation which sometimes kills the node.
 | 
			
		||||
 * Source: https://github.com/trufflesuite/ganache-cli/issues/417
 | 
			
		||||
 * Source: https://github.com/trufflesuite/ganache-cli/issues/437
 | 
			
		||||
 * Source: https://github.com/MetaMask/provider-engine/blob/master/subproviders/subprovider.js
 | 
			
		||||
 */
 | 
			
		||||
export class FakeGasEstimateSubprovider {
 | 
			
		||||
    private _constantGasAmount: number;
 | 
			
		||||
    constructor(constantGasAmount: number) {
 | 
			
		||||
        this._constantGasAmount = constantGasAmount;
 | 
			
		||||
    }
 | 
			
		||||
    // This method needs to be here to satisfy the interface but linter wants it to be static.
 | 
			
		||||
    // tslint:disable-next-line:prefer-function-over-method
 | 
			
		||||
    public handleRequest(payload: JSONRPCPayload, next: () => void, end: (err: Error | null, result: any) => void) {
 | 
			
		||||
        switch (payload.method) {
 | 
			
		||||
            case 'eth_estimateGas':
 | 
			
		||||
                end(null, this._constantGasAmount);
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            default:
 | 
			
		||||
                next();
 | 
			
		||||
                return;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    // Required to implement this method despite not needing it for this subprovider
 | 
			
		||||
    // tslint:disable-next-line:prefer-function-over-method
 | 
			
		||||
    public setEngine(engine: any) {
 | 
			
		||||
        // noop
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,42 +0,0 @@
 | 
			
		||||
// 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');
 | 
			
		||||
 | 
			
		||||
import { EmptyWalletSubprovider } from './subproviders/empty_wallet_subprovider';
 | 
			
		||||
import { FakeGasEstimateSubprovider } from './subproviders/fake_gas_estimate_subprovider';
 | 
			
		||||
 | 
			
		||||
import { constants } from './constants';
 | 
			
		||||
 | 
			
		||||
// HACK: web3 leaks XMLHttpRequest into the global scope and causes requests to hang
 | 
			
		||||
// because they are using the wrong XHR package.
 | 
			
		||||
// importing web3 after subproviders fixes this issue
 | 
			
		||||
// Filed issue: https://github.com/ethereum/web3.js/issues/844
 | 
			
		||||
// tslint:disable-next-line:ordered-imports
 | 
			
		||||
import * as Web3 from 'web3';
 | 
			
		||||
 | 
			
		||||
export const web3Factory = {
 | 
			
		||||
    create(hasAddresses: boolean = true): Web3 {
 | 
			
		||||
        const provider = this.getRpcProvider(hasAddresses);
 | 
			
		||||
        const web3 = new Web3();
 | 
			
		||||
        web3.setProvider(provider);
 | 
			
		||||
        return web3;
 | 
			
		||||
    },
 | 
			
		||||
    getRpcProvider(hasAddresses: boolean = true): Web3.Provider {
 | 
			
		||||
        const provider = new ProviderEngine();
 | 
			
		||||
        if (!hasAddresses) {
 | 
			
		||||
            provider.addProvider(new EmptyWalletSubprovider());
 | 
			
		||||
        }
 | 
			
		||||
        provider.addProvider(new FakeGasEstimateSubprovider(constants.GAS_ESTIMATE));
 | 
			
		||||
        provider.addProvider(
 | 
			
		||||
            new RpcSubprovider({
 | 
			
		||||
                rpcUrl: constants.RPC_URL,
 | 
			
		||||
            }),
 | 
			
		||||
        );
 | 
			
		||||
        provider.start();
 | 
			
		||||
        return provider;
 | 
			
		||||
    },
 | 
			
		||||
};
 | 
			
		||||
		Reference in New Issue
	
	Block a user