This packages leverages Chainlist's network RPC list to return the lowest latency provider from the list for any given network ID.
- Returns the lowest latency provider for a given network ID
- Drops bad endpoints from the list and creates a runtime/local storage cache
- Can re-test the cached RPCs by calling
handler.getFastestRpcProvider()
- Can be used in both the browser and Node.js
- Fully configurable and extendable
- Only uses endpoints which Chainlist report as tracking no data (see
extraRpcs.js
)
yarn add @ubiquity-dao/rpc-handler
- Config options with null are optional, but still need to be passed as
null
import { RPCHandler, HandlerConstructorConfig } from "@ubiquity-dao/rpc-handler/";
export function useHandler(networkId: number) {
const config: HandlerConstructorConfig = {
networkId: 1,
rpcTimeout: 1500,
autoStorage: false,
cacheRefreshCycles: 10,
networkName: null, // the name will be deduced from the networkId, unless using a custom network
networkRpcs: null, // same as networkName, but for injecting additional RPCs
runtimeRpcs: null, // same as networkRpcs, although these are considered error-free
};
// No RPCs are tested at this point
return new RPCHandler(config);
}
import { useHandler } from "./rpc-handler";
const handler = useHandler(networkId);
// Now the RPCs are tested
app.provider = await handler.getFastestRpcProvider();
-
The RPCs are not tested on instantiation, but are tested on each call to
handler.getFastestRpcProvider()
orhandler.testRpcPerformance()
-
See the full config object (optionally passed in the constructor) for more options
-
Local storage is not enabled by default, but can be enabled by passing
autoStorage: true
in the config object -
The
cacheRefreshCycles
is the number of roundtrips made before clearing the cache and re-testing all RPCs again
- Tests have a specific build in order to run
yarn test
will produce this build and run the tests. - After testing, re-build using
yarn build
for the original build
yarn test
- This below will only work after
yarn build
has been run and will fail under test conditions
npx tsx tests/script-test.ts