Skip to content

Commit

Permalink
Remove polling rpcs from default fallback config
Browse files Browse the repository at this point in the history
  • Loading branch information
therealjmj committed Jun 19, 2023
1 parent b7e7129 commit 11ab19a
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 10 deletions.
59 changes: 59 additions & 0 deletions src/utils/__tests__/available-rpc.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
import {
FallbackProviderJsonConfig,
createFallbackProviderFromJsonConfig,
} from '../fallback-provider';

chai.use(chaiAsPromised);
const { expect } = chai;

describe('available-rpc', () => {
it('Should check fallback provider cascade', async () => {
const config: FallbackProviderJsonConfig = {
chainId: 1,
providers: [
{
provider:
'https://eth-mainnet.gateway.pokt.network/v1/lb/627a4b6e18e53a003a6b6c26',
priority: 1,
weight: 2,
stallTimeout: 2500,
},
{
provider: 'https://railwayapi.xyz/rpc/alchemy/eth-mainnet',
priority: 2,
weight: 1,
},
{ provider: 'https://cloudflare-eth.com/', priority: 3, weight: 1 },
{ provider: 'https://rpc.ankr.com/eth', priority: 3, weight: 1 },
],
};

const fallbackProvider = createFallbackProviderFromJsonConfig(config);

await fallbackProvider.getBlockNumber();
});

it('Should sort ascending and descending', () => {
const allConfigs = [
{
priority: 3,
},
{
priority: 1,
},
{
priority: 2,
},
];

// Ascending
allConfigs.sort((a, b) => a.priority - b.priority);
expect(allConfigs.map(c => c.priority)).to.deep.equal([1, 2, 3]);

// Descending
allConfigs.sort((a, b) => b.priority - a.priority);
expect(allConfigs.map(c => c.priority)).to.deep.equal([3, 2, 1]);
});
});
1 change: 1 addition & 0 deletions src/utils/available-rpc.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
/// <reference types="../types/global" />
import { JsonRpcProvider, Network } from 'ethers';
import { ProviderJson } from './fallback-provider';
import { getUpperBoundMedian } from './median';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,13 @@
import { JsonRpcProvider, JsonRpcApiProviderOptions, Network } from 'ethers';

/**
* Uses a setting in JsonRpcProvider to poll for events,
* rather than using sparsely-implemented eth_filter events.
*/
export class PollingJsonRpcProvider extends JsonRpcProvider {
export class ConfiguredJsonRpcProvider extends JsonRpcProvider {
constructor(url: string, network: Network, disableBatching = false) {
const options: JsonRpcApiProviderOptions = {
polling: true,
staticNetwork: network,
};
if (disableBatching) {
options.batchMaxCount = 1;
}
super(url, network, options);
this.pollingInterval = 30000;
}
}
13 changes: 10 additions & 3 deletions src/utils/fallback-provider.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import { FallbackProvider, Network, WebSocketProvider } from 'ethers';
import { PollingJsonRpcProvider } from './polling-json-rpc-provider';
import { FallbackProviderConfig } from 'ethers/lib.commonjs/providers/provider-fallback';
import { ConfiguredJsonRpcProvider } from './configured-json-rpc-provider';
import {
FallbackProviderConfig,
FallbackProviderOptions,
} from 'ethers/lib.commonjs/providers/provider-fallback';

export type FallbackProviderJsonConfig = {
chainId: number;
Expand Down Expand Up @@ -42,7 +45,11 @@ export const createFallbackProviderFromJsonConfig = (
const isWebsocket = providerURL.startsWith('wss');
const provider = isWebsocket
? new WebSocketProvider(providerURL, network)
: new PollingJsonRpcProvider(providerURL, network, disableBatching);
: new ConfiguredJsonRpcProvider(
providerURL,
network,
disableBatching,
);

const fallbackProviderConfig: FallbackProviderConfig = {
provider,
Expand Down

0 comments on commit 11ab19a

Please sign in to comment.