@ubiquity-dao/rpc-handler
v1.1.0
Published
Uses Chainlist's RPC collection racing them returning the lowest latency RPC
Downloads
284
Readme
@ubiquity-dao/rpc-handler
This packages leverages Chainlist's network RPC list to return the lowest latency provider from the list for any given network ID.
Features
- 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
)
Installation
yarn add @ubiquity-dao/rpc-handler
Usage
- 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();
Notes
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 objectThe
cacheRefreshCycles
is the number of roundtrips made before clearing the cache and re-testing all RPCs again
Testing
- 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