eth-rpc-cache
Version:
A simple cache for Ethereum RPC requests extensible with different caching strategies
90 lines (59 loc) • 2.42 kB
Markdown

A simple cache for Ethereum RPC requests extensible with different caching strategies.
```sh
npm i eth-rpc-cache
```
```ts
import { createEthRpcCache } from 'eth-rpc-cache'
import { providers } from 'ethers'
const provider = new providers.JsonRpcProvider('https://rpc.url.org')
const cache = new Map()
const cachedProvider = {
...provider,
send: createEthRpcCache((method, params) => provider.send(method, params), {
cache
})
}
Object.setPrototypeOf(cachedProvider, Object.getPrototypeOf(cachedProvider))
// Will call the RPC endpoint and retrieve the chainId
await cachedProvider.send('eth_chainId', [])
// Will retrieve the value from the cache, and while the instance is alive, it will permanently be cached
await cachedProvider.send('eth_chainId', [])
// Will call the RPC endpoint and retrieve the current number
await cachedProvider.send('eth_blockNumber', [])
// This value will be cached for ~half block, so if requested again before that time passes, it will come from the cache
await cachedProvider.send('eth_blockNumber', [])
```
Returns a function
Type: `Function`
A function that follows the [JSON-RPC specification](https://www.jsonrpc.org/specification). Its parameters are:
- `method` (string): The method to call
- `params` (Array): The parameters to pass to the method
and returns a Promise which resolves to an object with the following structure
- `jsonrpc` (string): Version of the protocol
- `id` (number): The request identifier
- `result` (any): The result of the request
Type: `object`
Default: `{}`
An optional configuration object
Type: `boolean`
Default: `true`
Whether the strategy should allow to run the RPC call to unknown methods. Throws if `false`
Type: `object`
Default: `new Map()`
The cache storage.
Must implement these methods: `has(key)`, `set(key, value)`, `get(key)` and `delete(key)`
Type: `object[]`
Default: `[perBlockStrategy, permanentStrategy]`
Array of strategies to use to cache methods. If methods are repeated, the latter will take precedence over the former.