Use providerUtils.startProviderEngine to minimize the HACK
This commit is contained in:
parent
8272c7a74e
commit
f9ef942a98
@ -1,4 +1,13 @@
|
|||||||
[
|
[
|
||||||
|
{
|
||||||
|
"version": "4.1.0",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Run Web3ProviderEngine without excess block polling",
|
||||||
|
"pr": 1695
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"changes": [
|
"changes": [
|
||||||
|
@ -3,7 +3,7 @@ import { providerUtils } from '@0x/utils';
|
|||||||
import { ZeroExProvider } from 'ethereum-types';
|
import { ZeroExProvider } from 'ethereum-types';
|
||||||
import * as _ from 'lodash';
|
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';
|
import { Maybe, Network } from '../types';
|
||||||
|
|
||||||
export const providerFactory = {
|
export const providerFactory = {
|
||||||
@ -22,9 +22,7 @@ export const providerFactory = {
|
|||||||
return undefined;
|
return undefined;
|
||||||
},
|
},
|
||||||
getFallbackNoSigningProvider: (network: Network): Web3ProviderEngine => {
|
getFallbackNoSigningProvider: (network: Network): Web3ProviderEngine => {
|
||||||
const providerEngine = new Web3ProviderEngine({
|
const providerEngine = new Web3ProviderEngine();
|
||||||
pollingInterval: BLOCK_POLLING_INTERVAL_MS,
|
|
||||||
});
|
|
||||||
// Intercept calls to `eth_accounts` and always return empty
|
// Intercept calls to `eth_accounts` and always return empty
|
||||||
providerEngine.addProvider(new EmptyWalletSubprovider());
|
providerEngine.addProvider(new EmptyWalletSubprovider());
|
||||||
// Construct an RPC subprovider, all data based requests will be sent via the RPCSubprovider
|
// Construct an RPC subprovider, all data based requests will be sent via the RPCSubprovider
|
||||||
@ -32,9 +30,7 @@ export const providerFactory = {
|
|||||||
const rpcUrl = ETHEREUM_NODE_URL_BY_NETWORK[network];
|
const rpcUrl = ETHEREUM_NODE_URL_BY_NETWORK[network];
|
||||||
providerEngine.addProvider(new RPCSubprovider(rpcUrl));
|
providerEngine.addProvider(new RPCSubprovider(rpcUrl));
|
||||||
// Start the Provider Engine
|
// Start the Provider Engine
|
||||||
// HACK: Start the provider without unused block polling
|
providerUtils.startProviderEngine(providerEngine);
|
||||||
// providerEngine.start();
|
|
||||||
(providerEngine as any)._ready.go();
|
|
||||||
return providerEngine;
|
return providerEngine;
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -13,6 +13,10 @@
|
|||||||
{
|
{
|
||||||
"note": "Fix race-condition bugs due to async event callbacks modifying shared state",
|
"note": "Fix race-condition bugs due to async event callbacks modifying shared state",
|
||||||
"pr": 1718
|
"pr": 1718
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"note": "Run Web3ProviderEngine without excess block polling",
|
||||||
|
"pr": 1695
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1553091633
|
"timestamp": 1553091633
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import { getContractAddressesForNetworkOrThrow } from '@0x/contract-addresses';
|
import { getContractAddressesForNetworkOrThrow } from '@0x/contract-addresses';
|
||||||
import { RPCSubprovider, Web3ProviderEngine } from '@0x/subproviders';
|
import { RPCSubprovider, Web3ProviderEngine } from '@0x/subproviders';
|
||||||
|
import { providerUtils } from '@0x/utils';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
|
|
||||||
import { OrderWatcherWebSocketServer } from './order_watcher/order_watcher_web_socket_server';
|
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 jsonRpcUrl = process.env.JSON_RPC_URL || DEFAULT_RPC_URL;
|
||||||
const rpcSubprovider = new RPCSubprovider(jsonRpcUrl);
|
const rpcSubprovider = new RPCSubprovider(jsonRpcUrl);
|
||||||
provider.addProvider(rpcSubprovider);
|
provider.addProvider(rpcSubprovider);
|
||||||
provider.start();
|
providerUtils.startProviderEngine(provider);
|
||||||
|
|
||||||
const networkId = process.env.NETWORK_ID !== undefined ? _.parseInt(process.env.NETWORK_ID) : GANACHE_NETWORK_ID;
|
const networkId = process.env.NETWORK_ID !== undefined ? _.parseInt(process.env.NETWORK_ID) : GANACHE_NETWORK_ID;
|
||||||
|
|
||||||
|
@ -1,4 +1,13 @@
|
|||||||
[
|
[
|
||||||
|
{
|
||||||
|
"version": "4.3.0",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Added `startProviderEngine` to `providerUtils`. Preventing excess block polling",
|
||||||
|
"pr": 1695
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"timestamp": 1553091633,
|
"timestamp": 1553091633,
|
||||||
"version": "4.2.3",
|
"version": "4.2.3",
|
||||||
|
@ -8,6 +8,17 @@ import {
|
|||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
|
|
||||||
export const providerUtils = {
|
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`);
|
||||||
|
}
|
||||||
|
(providerEngine as any)._ready.go();
|
||||||
|
(providerEngine as any)._running = true;
|
||||||
|
},
|
||||||
/**
|
/**
|
||||||
* Standardize the supported provider types into our internal provider interface
|
* Standardize the supported provider types into our internal provider interface
|
||||||
* or throw if unsupported provider supplied.
|
* 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 { fakeTokenRegistry } from 'ts/utils/fake_token_registry';
|
||||||
import { tokenAddressOverrides } from 'ts/utils/token_address_overrides';
|
import { tokenAddressOverrides } from 'ts/utils/token_address_overrides';
|
||||||
import { utils } from 'ts/utils/utils';
|
import { utils } from 'ts/utils/utils';
|
||||||
import FilterSubprovider from 'web3-provider-engine/subproviders/filters';
|
|
||||||
|
|
||||||
import MintableArtifacts from '../contracts/Mintable.json';
|
import MintableArtifacts from '../contracts/Mintable.json';
|
||||||
|
|
||||||
@ -120,14 +119,11 @@ export class Blockchain {
|
|||||||
};
|
};
|
||||||
const ledgerSubprovider = new LedgerSubprovider(ledgerWalletConfigs);
|
const ledgerSubprovider = new LedgerSubprovider(ledgerWalletConfigs);
|
||||||
provider.addProvider(ledgerSubprovider);
|
provider.addProvider(ledgerSubprovider);
|
||||||
provider.addProvider(new FilterSubprovider());
|
|
||||||
const rpcSubproviders = _.map(configs.PUBLIC_NODE_URLS_BY_NETWORK_ID[networkIdIfExists], publicNodeUrl => {
|
const rpcSubproviders = _.map(configs.PUBLIC_NODE_URLS_BY_NETWORK_ID[networkIdIfExists], publicNodeUrl => {
|
||||||
return new RPCSubprovider(publicNodeUrl);
|
return new RPCSubprovider(publicNodeUrl);
|
||||||
});
|
});
|
||||||
provider.addProvider(new RedundantSubprovider(rpcSubproviders));
|
provider.addProvider(new RedundantSubprovider(rpcSubproviders));
|
||||||
// HACK: Start the provider without unused block polling
|
providerUtils.startProviderEngine(provider);
|
||||||
// provider.start();
|
|
||||||
(provider as any)._ready.go();
|
|
||||||
return [provider, ledgerSubprovider];
|
return [provider, ledgerSubprovider];
|
||||||
} else if (doesInjectedProviderExist && isPublicNodeAvailableForNetworkId) {
|
} else if (doesInjectedProviderExist && isPublicNodeAvailableForNetworkId) {
|
||||||
// We catch all requests involving a users account and send it to the injectedWeb3
|
// We catch all requests involving a users account and send it to the injectedWeb3
|
||||||
@ -140,14 +136,11 @@ export class Blockchain {
|
|||||||
? new MetamaskSubprovider(injectedProviderIfExists)
|
? new MetamaskSubprovider(injectedProviderIfExists)
|
||||||
: new SignerSubprovider(injectedProviderIfExists);
|
: new SignerSubprovider(injectedProviderIfExists);
|
||||||
provider.addProvider(signerSubprovider);
|
provider.addProvider(signerSubprovider);
|
||||||
provider.addProvider(new FilterSubprovider());
|
|
||||||
const rpcSubproviders = _.map(publicNodeUrlsIfExistsForNetworkId, publicNodeUrl => {
|
const rpcSubproviders = _.map(publicNodeUrlsIfExistsForNetworkId, publicNodeUrl => {
|
||||||
return new RPCSubprovider(publicNodeUrl);
|
return new RPCSubprovider(publicNodeUrl);
|
||||||
});
|
});
|
||||||
provider.addProvider(new RedundantSubprovider(rpcSubproviders));
|
provider.addProvider(new RedundantSubprovider(rpcSubproviders));
|
||||||
// HACK: Start the provider without unused block polling
|
providerUtils.startProviderEngine(provider);
|
||||||
// provider.start();
|
|
||||||
(provider as any)._ready.go();
|
|
||||||
return [provider, undefined];
|
return [provider, undefined];
|
||||||
} else if (doesInjectedProviderExist) {
|
} else if (doesInjectedProviderExist) {
|
||||||
// Since no public node for this network, all requests go to injectedWeb3 instance
|
// Since no public node for this network, all requests go to injectedWeb3 instance
|
||||||
@ -157,15 +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
|
// We do this so that users can still browse the 0x Portal DApp even if they do not have web3
|
||||||
// injected into their browser.
|
// injected into their browser.
|
||||||
const provider = new Web3ProviderEngine();
|
const provider = new Web3ProviderEngine();
|
||||||
provider.addProvider(new FilterSubprovider());
|
|
||||||
const networkId = constants.NETWORK_ID_MAINNET;
|
const networkId = constants.NETWORK_ID_MAINNET;
|
||||||
const rpcSubproviders = _.map(configs.PUBLIC_NODE_URLS_BY_NETWORK_ID[networkId], publicNodeUrl => {
|
const rpcSubproviders = _.map(configs.PUBLIC_NODE_URLS_BY_NETWORK_ID[networkId], publicNodeUrl => {
|
||||||
return new RPCSubprovider(publicNodeUrl);
|
return new RPCSubprovider(publicNodeUrl);
|
||||||
});
|
});
|
||||||
provider.addProvider(new RedundantSubprovider(rpcSubproviders));
|
provider.addProvider(new RedundantSubprovider(rpcSubproviders));
|
||||||
// HACK: Start the provider without unused block polling
|
providerUtils.startProviderEngine(provider);
|
||||||
// provider.start();
|
|
||||||
(provider as any)._ready.go();
|
|
||||||
return [provider, undefined];
|
return [provider, undefined];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user