Merge pull request #1695 from 0xProject/feature/reduce-excess-block-polling
Reduce excess block polling when using Web3ProviderEngine
This commit is contained in:
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"version": "2.1.0",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Run Web3ProviderEngine without excess block polling",
|
||||
"pr": 1695
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"changes": [
|
||||
|
@@ -1,8 +1,10 @@
|
||||
import { env, EnvVars } from '@0x/dev-utils';
|
||||
|
||||
import { coverage, profiler, provider } from '@0x/contracts-test-utils';
|
||||
import { providerUtils } from '@0x/utils';
|
||||
|
||||
before('start web3 provider', () => {
|
||||
provider.start();
|
||||
providerUtils.startProviderEngine(provider);
|
||||
});
|
||||
after('generate coverage report', async () => {
|
||||
if (env.parseBoolean(EnvVars.SolidityCoverage)) {
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"version": "1.1.0",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Run Web3ProviderEngine without excess block polling",
|
||||
"pr": 1695
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"version": "1.0.0",
|
||||
"changes": [
|
||||
|
@@ -1,8 +1,10 @@
|
||||
import { env, EnvVars } from '@0x/dev-utils';
|
||||
|
||||
import { coverage, profiler, provider } from '@0x/contracts-test-utils';
|
||||
import { providerUtils } from '@0x/utils';
|
||||
|
||||
before('start web3 provider', () => {
|
||||
provider.start();
|
||||
providerUtils.startProviderEngine(provider);
|
||||
});
|
||||
after('generate coverage report', async () => {
|
||||
if (env.parseBoolean(EnvVars.SolidityCoverage)) {
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"version": "1.1.0",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Run Web3ProviderEngine without excess block polling",
|
||||
"pr": 1695
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1553091633,
|
||||
"version": "1.0.1",
|
||||
|
@@ -1,8 +1,10 @@
|
||||
import { env, EnvVars } from '@0x/dev-utils';
|
||||
|
||||
import { coverage, profiler, provider } from '@0x/contracts-test-utils';
|
||||
import { providerUtils } from '@0x/utils';
|
||||
|
||||
before('start web3 provider', () => {
|
||||
provider.start();
|
||||
providerUtils.startProviderEngine(provider);
|
||||
});
|
||||
after('generate coverage report', async () => {
|
||||
if (env.parseBoolean(EnvVars.SolidityCoverage)) {
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"version": "2.1.0",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Run Web3ProviderEngine without excess block polling",
|
||||
"pr": 1695
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"changes": [
|
||||
|
@@ -1,8 +1,10 @@
|
||||
import { env, EnvVars } from '@0x/dev-utils';
|
||||
|
||||
import { coverage, profiler, provider } from '@0x/contracts-test-utils';
|
||||
import { providerUtils } from '@0x/utils';
|
||||
|
||||
before('start web3 provider', () => {
|
||||
provider.start();
|
||||
providerUtils.startProviderEngine(provider);
|
||||
});
|
||||
after('generate coverage report', async () => {
|
||||
if (env.parseBoolean(EnvVars.SolidityCoverage)) {
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"version": "2.1.0",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Run Web3ProviderEngine without excess block polling",
|
||||
"pr": 1695
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"changes": [
|
||||
|
@@ -1,8 +1,10 @@
|
||||
import { env, EnvVars } from '@0x/dev-utils';
|
||||
|
||||
import { coverage, profiler, provider } from '@0x/contracts-test-utils';
|
||||
import { providerUtils } from '@0x/utils';
|
||||
|
||||
before('start web3 provider', () => {
|
||||
provider.start();
|
||||
providerUtils.startProviderEngine(provider);
|
||||
});
|
||||
after('generate coverage report', async () => {
|
||||
if (env.parseBoolean(EnvVars.SolidityCoverage)) {
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"version": "2.1.0",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Run Web3ProviderEngine without excess block polling",
|
||||
"pr": 1695
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"changes": [
|
||||
|
@@ -1,8 +1,10 @@
|
||||
import { env, EnvVars } from '@0x/dev-utils';
|
||||
|
||||
import { coverage, profiler, provider } from '@0x/contracts-test-utils';
|
||||
import { providerUtils } from '@0x/utils';
|
||||
|
||||
before('start web3 provider', () => {
|
||||
provider.start();
|
||||
providerUtils.startProviderEngine(provider);
|
||||
});
|
||||
after('generate coverage report', async () => {
|
||||
if (env.parseBoolean(EnvVars.SolidityCoverage)) {
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"version": "2.1.0",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Run Web3ProviderEngine without excess block polling",
|
||||
"pr": 1695
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"changes": [
|
||||
|
@@ -1,8 +1,10 @@
|
||||
import { env, EnvVars } from '@0x/dev-utils';
|
||||
|
||||
import { coverage, profiler, provider } from '@0x/contracts-test-utils';
|
||||
import { providerUtils } from '@0x/utils';
|
||||
|
||||
before('start web3 provider', () => {
|
||||
provider.start();
|
||||
providerUtils.startProviderEngine(provider);
|
||||
});
|
||||
after('generate coverage report', async () => {
|
||||
if (env.parseBoolean(EnvVars.SolidityCoverage)) {
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"version": "2.1.0",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Run Web3ProviderEngine without excess block polling",
|
||||
"pr": 1695
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"changes": [
|
||||
|
@@ -1,8 +1,10 @@
|
||||
import { env, EnvVars } from '@0x/dev-utils';
|
||||
|
||||
import { coverage, profiler, provider } from '@0x/contracts-test-utils';
|
||||
import { providerUtils } from '@0x/utils';
|
||||
|
||||
before('start web3 provider', () => {
|
||||
provider.start();
|
||||
providerUtils.startProviderEngine(provider);
|
||||
});
|
||||
after('generate coverage report', async () => {
|
||||
if (env.parseBoolean(EnvVars.SolidityCoverage)) {
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"version": "3.1.0",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Run Web3ProviderEngine without excess block polling",
|
||||
"pr": 1695
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"version": "3.0.0",
|
||||
"changes": [
|
||||
|
@@ -1,8 +1,10 @@
|
||||
import { env, EnvVars } from '@0x/dev-utils';
|
||||
|
||||
import { coverage, profiler, provider } from '@0x/contracts-test-utils';
|
||||
import { providerUtils } from '@0x/utils';
|
||||
|
||||
before('start web3 provider', () => {
|
||||
provider.start();
|
||||
providerUtils.startProviderEngine(provider);
|
||||
});
|
||||
after('generate coverage report', async () => {
|
||||
if (env.parseBoolean(EnvVars.SolidityCoverage)) {
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"version": "3.1.0",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Run Web3ProviderEngine without excess block polling",
|
||||
"pr": 1695
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"version": "3.0.0",
|
||||
"changes": [
|
||||
|
@@ -1,9 +1,9 @@
|
||||
import { env, EnvVars } from '@0x/dev-utils';
|
||||
|
||||
import { coverage, profiler, provider } from '@0x/contracts-test-utils';
|
||||
import { env, EnvVars } from '@0x/dev-utils';
|
||||
import { providerUtils } from '@0x/utils';
|
||||
|
||||
before('start web3 provider engine', () => {
|
||||
provider.start();
|
||||
before('start web3 provider', () => {
|
||||
providerUtils.startProviderEngine(provider);
|
||||
});
|
||||
|
||||
after('generate coverage report', async () => {
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"version": "3.1.0",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Added `startProviderEngine` to `providerUtils`. Preventing excess block polling",
|
||||
"pr": 1695
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"version": "3.0.0",
|
||||
"changes": [
|
||||
|
@@ -1,8 +1,10 @@
|
||||
import { env, EnvVars } from '@0x/dev-utils';
|
||||
|
||||
import { coverage, profiler, provider } from '@0x/contracts-test-utils';
|
||||
import { providerUtils } from '@0x/utils';
|
||||
|
||||
before('start web3 provider', () => {
|
||||
provider.start();
|
||||
providerUtils.startProviderEngine(provider);
|
||||
});
|
||||
after('generate coverage report', async () => {
|
||||
if (env.parseBoolean(EnvVars.SolidityCoverage)) {
|
||||
|
@@ -2,7 +2,7 @@ import { ContractAddresses } from '@0x/contract-addresses';
|
||||
import { BlockchainLifecycle, callbackErrorReporter } from '@0x/dev-utils';
|
||||
import { EmptyWalletSubprovider, Web3ProviderEngine } from '@0x/subproviders';
|
||||
import { DoneCallback } from '@0x/types';
|
||||
import { BigNumber } from '@0x/utils';
|
||||
import { BigNumber, providerUtils } from '@0x/utils';
|
||||
import * as chai from 'chai';
|
||||
import 'mocha';
|
||||
|
||||
@@ -628,6 +628,6 @@ function addEmptyWalletSubprovider(p: Web3ProviderEngine): Web3ProviderEngine {
|
||||
for (const subprovider of currentSubproviders) {
|
||||
providerEngine.addProvider(subprovider);
|
||||
}
|
||||
providerEngine.start();
|
||||
providerUtils.startProviderEngine(providerEngine);
|
||||
return providerEngine;
|
||||
}
|
||||
|
@@ -1,7 +1,7 @@
|
||||
import { BlockchainLifecycle, callbackErrorReporter } from '@0x/dev-utils';
|
||||
import { EmptyWalletSubprovider, Web3ProviderEngine } from '@0x/subproviders';
|
||||
import { DoneCallback } from '@0x/types';
|
||||
import { BigNumber } from '@0x/utils';
|
||||
import { BigNumber, providerUtils } from '@0x/utils';
|
||||
import * as chai from 'chai';
|
||||
import 'mocha';
|
||||
|
||||
@@ -460,6 +460,6 @@ function addEmptyWalletSubprovider(p: Web3ProviderEngine): Web3ProviderEngine {
|
||||
for (const subprovider of currentSubproviders) {
|
||||
providerEngine.addProvider(subprovider);
|
||||
}
|
||||
providerEngine.start();
|
||||
providerUtils.startProviderEngine(providerEngine);
|
||||
return providerEngine;
|
||||
}
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"version": "2.2.0",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Added `startProviderEngine` to `providerUtils`. Preventing excess block polling",
|
||||
"pr": 1695
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1553091633,
|
||||
"version": "2.1.4",
|
||||
|
@@ -5,6 +5,7 @@ import {
|
||||
RPCSubprovider,
|
||||
Web3ProviderEngine,
|
||||
} from '@0x/subproviders';
|
||||
import { providerUtils } from '@0x/utils';
|
||||
import * as fs from 'fs';
|
||||
import * as _ from 'lodash';
|
||||
|
||||
@@ -68,7 +69,7 @@ export const web3Factory = {
|
||||
} else {
|
||||
provider.addProvider(new RPCSubprovider(config.rpcUrl || constants.RPC_URL));
|
||||
}
|
||||
provider.start();
|
||||
providerUtils.startProviderEngine(provider);
|
||||
return provider;
|
||||
},
|
||||
};
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"version": "4.1.0",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Run Web3ProviderEngine without excess block polling",
|
||||
"pr": 1695
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"version": "4.0.0",
|
||||
"changes": [
|
||||
|
@@ -3,7 +3,7 @@ import { providerUtils } from '@0x/utils';
|
||||
import { ZeroExProvider } from 'ethereum-types';
|
||||
import * as _ from 'lodash';
|
||||
|
||||
import { BLOCK_POLLING_INTERVAL_MS, ETHEREUM_NODE_URL_BY_NETWORK } from '../constants';
|
||||
import { ETHEREUM_NODE_URL_BY_NETWORK } from '../constants';
|
||||
import { Maybe, Network } from '../types';
|
||||
|
||||
export const providerFactory = {
|
||||
@@ -22,17 +22,15 @@ export const providerFactory = {
|
||||
return undefined;
|
||||
},
|
||||
getFallbackNoSigningProvider: (network: Network): Web3ProviderEngine => {
|
||||
const providerEngine = new Web3ProviderEngine({
|
||||
pollingInterval: BLOCK_POLLING_INTERVAL_MS,
|
||||
});
|
||||
const providerEngine = new Web3ProviderEngine();
|
||||
// Intercept calls to `eth_accounts` and always return empty
|
||||
providerEngine.addProvider(new EmptyWalletSubprovider());
|
||||
// Construct an RPC subprovider, all data based requests will be sent via the RPCSubprovider
|
||||
// TODO(bmillman): make this more resilient to infura failures
|
||||
const rpcUrl = ETHEREUM_NODE_URL_BY_NETWORK[network];
|
||||
providerEngine.addProvider(new RPCSubprovider(rpcUrl));
|
||||
// // Start the Provider Engine
|
||||
providerEngine.start();
|
||||
// Start the Provider Engine
|
||||
providerUtils.startProviderEngine(providerEngine);
|
||||
return providerEngine;
|
||||
},
|
||||
};
|
||||
|
@@ -1,8 +1,9 @@
|
||||
import { env, EnvVars } from '@0x/dev-utils';
|
||||
|
||||
import { coverage, profiler, provider } from '@0x/contracts-test-utils';
|
||||
import { providerUtils } from '@0x/utils';
|
||||
before('start web3 provider', () => {
|
||||
provider.start();
|
||||
providerUtils.startProviderEngine(provider);
|
||||
});
|
||||
after('generate coverage report', async () => {
|
||||
if (env.parseBoolean(EnvVars.SolidityCoverage)) {
|
||||
|
@@ -41,7 +41,6 @@ describe('Metacoin', () => {
|
||||
const amount = INITIAL_BALANCE.div(2);
|
||||
const oldBalance = await metacoin.balances.callAsync(ZERO_ADDRESS);
|
||||
expect(oldBalance).to.be.bignumber.equal(0);
|
||||
// profiler.start();
|
||||
const txHash = await metacoin.transfer1.sendTransactionAsync(
|
||||
{
|
||||
to: ZERO_ADDRESS,
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"version": "4.1.0",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Added `startProviderEngine` to `providerUtils`. Preventing excess block polling",
|
||||
"pr": 1695
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1553091633,
|
||||
"version": "4.0.4",
|
||||
|
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env node
|
||||
import { RPCSubprovider, Web3ProviderEngine } from '@0x/subproviders';
|
||||
import { logUtils } from '@0x/utils';
|
||||
import { logUtils, providerUtils } from '@0x/utils';
|
||||
import * as yargs from 'yargs';
|
||||
|
||||
import { runMigrationsAsync } from './migration';
|
||||
@@ -26,7 +26,7 @@ const args = yargs
|
||||
const rpcSubprovider = new RPCSubprovider(args['rpc-url']);
|
||||
const provider = new Web3ProviderEngine();
|
||||
provider.addProvider(rpcSubprovider);
|
||||
provider.start();
|
||||
providerUtils.startProviderEngine(provider);
|
||||
const normalizedFromAddress = (args.from as string).toLowerCase();
|
||||
const txDefaults = {
|
||||
from: normalizedFromAddress,
|
||||
|
@@ -1,4 +1,5 @@
|
||||
import { LedgerEthereumClient, LedgerSubprovider, RPCSubprovider, Web3ProviderEngine } from '@0x/subproviders';
|
||||
import { providerUtils } from '@0x/utils';
|
||||
import Eth from '@ledgerhq/hw-app-eth';
|
||||
// tslint:disable:no-implicit-dependencies
|
||||
import TransportNodeHid from '@ledgerhq/hw-transport-node-hid';
|
||||
@@ -21,7 +22,7 @@ export const providerFactory = {
|
||||
const ledgerSubprovider = new LedgerSubprovider(ledgerWalletConfigs);
|
||||
provider.addProvider(ledgerSubprovider);
|
||||
provider.addProvider(new RPCSubprovider(constants.KOVAN_RPC_URL));
|
||||
provider.start();
|
||||
providerUtils.startProviderEngine(provider);
|
||||
return provider;
|
||||
},
|
||||
async getMainnetLedgerProviderAsync(): Promise<Provider> {
|
||||
@@ -33,7 +34,7 @@ export const providerFactory = {
|
||||
const ledgerSubprovider = new LedgerSubprovider(ledgerWalletConfigs);
|
||||
provider.addProvider(ledgerSubprovider);
|
||||
provider.addProvider(new RPCSubprovider(constants.MAINNET_RPC_URL));
|
||||
provider.start();
|
||||
providerUtils.startProviderEngine(provider);
|
||||
return provider;
|
||||
},
|
||||
};
|
||||
|
@@ -13,6 +13,10 @@
|
||||
{
|
||||
"note": "Fix race-condition bugs due to async event callbacks modifying shared state",
|
||||
"pr": 1718
|
||||
},
|
||||
{
|
||||
"note": "Run Web3ProviderEngine without excess block polling",
|
||||
"pr": 1695
|
||||
}
|
||||
],
|
||||
"timestamp": 1553091633
|
||||
|
@@ -1,5 +1,6 @@
|
||||
import { getContractAddressesForNetworkOrThrow } from '@0x/contract-addresses';
|
||||
import { RPCSubprovider, Web3ProviderEngine } from '@0x/subproviders';
|
||||
import { providerUtils } from '@0x/utils';
|
||||
import * as _ from 'lodash';
|
||||
|
||||
import { OrderWatcherWebSocketServer } from './order_watcher/order_watcher_web_socket_server';
|
||||
@@ -11,7 +12,7 @@ const provider = new Web3ProviderEngine();
|
||||
const jsonRpcUrl = process.env.JSON_RPC_URL || DEFAULT_RPC_URL;
|
||||
const rpcSubprovider = new RPCSubprovider(jsonRpcUrl);
|
||||
provider.addProvider(rpcSubprovider);
|
||||
provider.start();
|
||||
providerUtils.startProviderEngine(provider);
|
||||
|
||||
const networkId = process.env.NETWORK_ID !== undefined ? _.parseInt(process.env.NETWORK_ID) : GANACHE_NETWORK_ID;
|
||||
|
||||
|
@@ -1,5 +1,5 @@
|
||||
import { DoneCallback } from '@0x/types';
|
||||
import { promisify } from '@0x/utils';
|
||||
import { promisify, providerUtils } from '@0x/utils';
|
||||
import Eth from '@ledgerhq/hw-app-eth';
|
||||
// HACK: This dependency is optional and tslint skips optional dependencies
|
||||
// tslint:disable-next-line:no-implicit-dependencies
|
||||
@@ -86,11 +86,11 @@ describe('LedgerSubprovider', () => {
|
||||
ledgerProvider.addProvider(ledgerSubprovider);
|
||||
const httpProvider = new RPCSubprovider('http://localhost:8545');
|
||||
ledgerProvider.addProvider(httpProvider);
|
||||
ledgerProvider.start();
|
||||
providerUtils.startProviderEngine(ledgerProvider);
|
||||
|
||||
defaultProvider = new Web3ProviderEngine();
|
||||
defaultProvider.addProvider(httpProvider);
|
||||
defaultProvider.start();
|
||||
providerUtils.startProviderEngine(defaultProvider);
|
||||
});
|
||||
it('returns a list of accounts', (done: DoneCallback) => {
|
||||
const payload = {
|
||||
|
@@ -1,3 +1,4 @@
|
||||
import { providerUtils } from '@0x/utils';
|
||||
import * as chai from 'chai';
|
||||
import * as lightwallet from 'eth-lightwallet';
|
||||
import { JSONRPCResponsePayload } from 'ethereum-types';
|
||||
@@ -88,7 +89,7 @@ describe('EthLightwalletSubprovider', () => {
|
||||
provider = new Web3ProviderEngine();
|
||||
provider.addProvider(ethLightwalletSubprovider);
|
||||
provider.addProvider(ganacheSubprovider);
|
||||
provider.start();
|
||||
providerUtils.startProviderEngine(provider);
|
||||
});
|
||||
describe('success cases', () => {
|
||||
it('returns a list of accounts', (done: DoneCallback) => {
|
||||
|
@@ -1,3 +1,4 @@
|
||||
import { providerUtils } from '@0x/utils';
|
||||
import * as chai from 'chai';
|
||||
import { JSONRPCResponsePayload } from 'ethereum-types';
|
||||
import * as ethUtils from 'ethereumjs-util';
|
||||
@@ -105,7 +106,7 @@ describe('LedgerSubprovider', () => {
|
||||
provider = new Web3ProviderEngine();
|
||||
provider.addProvider(ledgerSubprovider);
|
||||
provider.addProvider(ganacheSubprovider);
|
||||
provider.start();
|
||||
providerUtils.startProviderEngine(provider);
|
||||
});
|
||||
describe('success cases', () => {
|
||||
it('returns a list of accounts', (done: DoneCallback) => {
|
||||
|
@@ -1,3 +1,4 @@
|
||||
import { providerUtils } from '@0x/utils';
|
||||
import * as chai from 'chai';
|
||||
import { JSONRPCResponsePayload } from 'ethereum-types';
|
||||
import * as ethUtils from 'ethereumjs-util';
|
||||
@@ -77,7 +78,7 @@ describe('MnemonicWalletSubprovider', () => {
|
||||
provider.addProvider(subprovider);
|
||||
const ganacheSubprovider = new GanacheSubprovider({});
|
||||
provider.addProvider(ganacheSubprovider);
|
||||
provider.start();
|
||||
providerUtils.startProviderEngine(provider);
|
||||
});
|
||||
describe('success cases', () => {
|
||||
it('returns a list of accounts', (done: DoneCallback) => {
|
||||
|
@@ -1,7 +1,7 @@
|
||||
import * as chai from 'chai';
|
||||
import FixtureSubprovider = require('web3-provider-engine/subproviders/fixture');
|
||||
|
||||
import { promisify } from '@0x/utils';
|
||||
import { promisify, providerUtils } from '@0x/utils';
|
||||
import EthereumTx = require('ethereumjs-tx');
|
||||
|
||||
import { NonceTrackerSubprovider, Web3ProviderEngine } from '../../src';
|
||||
@@ -56,7 +56,7 @@ describe('NonceTrackerSubprovider', () => {
|
||||
const nonceTrackerSubprovider = new NonceTrackerSubprovider();
|
||||
provider.addProvider(nonceTrackerSubprovider);
|
||||
provider.addProvider(createFixtureSubprovider());
|
||||
provider.start();
|
||||
providerUtils.startProviderEngine(provider);
|
||||
|
||||
const payload = { ...getTransactionCountPayload, params: ['0x0', 'pending'] };
|
||||
|
||||
@@ -70,7 +70,7 @@ describe('NonceTrackerSubprovider', () => {
|
||||
const nonceTrackerSubprovider = new NonceTrackerSubprovider();
|
||||
provider.addProvider(nonceTrackerSubprovider);
|
||||
provider.addProvider(createFixtureSubprovider());
|
||||
provider.start();
|
||||
providerUtils.startProviderEngine(provider);
|
||||
|
||||
const payload = { ...getTransactionCountPayload, params: ['0x0', 'latest'] };
|
||||
|
||||
@@ -91,7 +91,7 @@ describe('NonceTrackerSubprovider', () => {
|
||||
},
|
||||
}),
|
||||
);
|
||||
provider.start();
|
||||
providerUtils.startProviderEngine(provider);
|
||||
|
||||
const noncePayload = {
|
||||
...getTransactionCountPayload,
|
||||
@@ -126,7 +126,7 @@ describe('NonceTrackerSubprovider', () => {
|
||||
},
|
||||
}),
|
||||
);
|
||||
provider.start();
|
||||
providerUtils.startProviderEngine(provider);
|
||||
|
||||
const noncePayload = {
|
||||
...getTransactionCountPayload,
|
||||
|
@@ -1,3 +1,4 @@
|
||||
import { providerUtils } from '@0x/utils';
|
||||
import * as chai from 'chai';
|
||||
import { JSONRPCResponsePayload } from 'ethereum-types';
|
||||
import * as ethUtils from 'ethereumjs-util';
|
||||
@@ -48,7 +49,7 @@ describe('PrivateKeyWalletSubprovider', () => {
|
||||
provider.addProvider(subprovider);
|
||||
const ganacheSubprovider = new GanacheSubprovider({});
|
||||
provider.addProvider(ganacheSubprovider);
|
||||
provider.start();
|
||||
providerUtils.startProviderEngine(provider);
|
||||
});
|
||||
describe('success cases', () => {
|
||||
it('returns a list of accounts', (done: DoneCallback) => {
|
||||
|
@@ -1,4 +1,5 @@
|
||||
import { DoneCallback } from '@0x/types';
|
||||
import { providerUtils } from '@0x/utils';
|
||||
import * as chai from 'chai';
|
||||
import { JSONRPCResponsePayload } from 'ethereum-types';
|
||||
import * as Sinon from 'sinon';
|
||||
@@ -20,7 +21,7 @@ describe('RedundantSubprovider', () => {
|
||||
const subproviders = [ganacheSubprovider];
|
||||
const redundantSubprovider = new RedundantSubprovider(subproviders);
|
||||
provider.addProvider(redundantSubprovider);
|
||||
provider.start();
|
||||
providerUtils.startProviderEngine(provider);
|
||||
|
||||
const payload = {
|
||||
jsonrpc: '2.0',
|
||||
@@ -44,7 +45,7 @@ describe('RedundantSubprovider', () => {
|
||||
const subproviders = [nonExistentSubprovider as Subprovider, ganacheSubprovider];
|
||||
const redundantSubprovider = new RedundantSubprovider(subproviders);
|
||||
provider.addProvider(redundantSubprovider);
|
||||
provider.start();
|
||||
providerUtils.startProviderEngine(provider);
|
||||
|
||||
const payload = {
|
||||
jsonrpc: '2.0',
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"version": "4.3.0",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Added `startProviderEngine` to `providerUtils`. Preventing excess block polling",
|
||||
"pr": 1695
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1553091633,
|
||||
"version": "4.2.3",
|
||||
|
@@ -8,6 +8,21 @@ import {
|
||||
import * as _ from 'lodash';
|
||||
|
||||
export const providerUtils = {
|
||||
/**
|
||||
* Starts the Web3ProviderEngine without excess block polling
|
||||
* @param providerEngine The Web3ProviderEngine
|
||||
*/
|
||||
startProviderEngine(providerEngine: any): void {
|
||||
if (providerEngine.start === undefined) {
|
||||
throw new Error(`Invalid Web3ProviderEngine`);
|
||||
}
|
||||
// HACK: When calling start() Web3ProviderEngine starts a block polling service
|
||||
// this continuously pulls data from the network and can result in high data usage
|
||||
// for long running services. If used in a front end application this can cause
|
||||
// a high amount of load on a node (one request per user per block).
|
||||
providerEngine._ready.go();
|
||||
providerEngine._running = true;
|
||||
},
|
||||
/**
|
||||
* Standardize the supported provider types into our internal provider interface
|
||||
* or throw if unsupported provider supplied.
|
||||
|
@@ -61,7 +61,6 @@ import { errorReporter } from 'ts/utils/error_reporter';
|
||||
import { fakeTokenRegistry } from 'ts/utils/fake_token_registry';
|
||||
import { tokenAddressOverrides } from 'ts/utils/token_address_overrides';
|
||||
import { utils } from 'ts/utils/utils';
|
||||
import FilterSubprovider from 'web3-provider-engine/subproviders/filters';
|
||||
|
||||
import MintableArtifacts from '../contracts/Mintable.json';
|
||||
|
||||
@@ -120,12 +119,11 @@ export class Blockchain {
|
||||
};
|
||||
const ledgerSubprovider = new LedgerSubprovider(ledgerWalletConfigs);
|
||||
provider.addProvider(ledgerSubprovider);
|
||||
provider.addProvider(new FilterSubprovider());
|
||||
const rpcSubproviders = _.map(configs.PUBLIC_NODE_URLS_BY_NETWORK_ID[networkIdIfExists], publicNodeUrl => {
|
||||
return new RPCSubprovider(publicNodeUrl);
|
||||
});
|
||||
provider.addProvider(new RedundantSubprovider(rpcSubproviders));
|
||||
provider.start();
|
||||
providerUtils.startProviderEngine(provider);
|
||||
return [provider, ledgerSubprovider];
|
||||
} else if (doesInjectedProviderExist && isPublicNodeAvailableForNetworkId) {
|
||||
// We catch all requests involving a users account and send it to the injectedWeb3
|
||||
@@ -138,12 +136,11 @@ export class Blockchain {
|
||||
? new MetamaskSubprovider(injectedProviderIfExists)
|
||||
: new SignerSubprovider(injectedProviderIfExists);
|
||||
provider.addProvider(signerSubprovider);
|
||||
provider.addProvider(new FilterSubprovider());
|
||||
const rpcSubproviders = _.map(publicNodeUrlsIfExistsForNetworkId, publicNodeUrl => {
|
||||
return new RPCSubprovider(publicNodeUrl);
|
||||
});
|
||||
provider.addProvider(new RedundantSubprovider(rpcSubproviders));
|
||||
provider.start();
|
||||
providerUtils.startProviderEngine(provider);
|
||||
return [provider, undefined];
|
||||
} else if (doesInjectedProviderExist) {
|
||||
// Since no public node for this network, all requests go to injectedWeb3 instance
|
||||
@@ -153,13 +150,12 @@ export class Blockchain {
|
||||
// We do this so that users can still browse the 0x Portal DApp even if they do not have web3
|
||||
// injected into their browser.
|
||||
const provider = new Web3ProviderEngine();
|
||||
provider.addProvider(new FilterSubprovider());
|
||||
const networkId = constants.NETWORK_ID_MAINNET;
|
||||
const rpcSubproviders = _.map(configs.PUBLIC_NODE_URLS_BY_NETWORK_ID[networkId], publicNodeUrl => {
|
||||
return new RPCSubprovider(publicNodeUrl);
|
||||
});
|
||||
provider.addProvider(new RedundantSubprovider(rpcSubproviders));
|
||||
provider.start();
|
||||
providerUtils.startProviderEngine(provider);
|
||||
return [provider, undefined];
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user