viem
Version:
58 lines • 3.26 kB
TypeScript
import type { Client } from '../../clients/createClient.js';
import type { Transport } from '../../clients/transports/createTransport.js';
import type { ErrorType } from '../../errors/utils.js';
import type { Chain } from '../../types/chain.js';
import type { HasTransportType } from '../../types/transport.js';
import { type PollErrorType } from '../../utils/poll.js';
import { type GetBlockNumberReturnType } from './getBlockNumber.js';
export type OnBlockNumberParameter = GetBlockNumberReturnType;
export type OnBlockNumberFn = (blockNumber: OnBlockNumberParameter, prevBlockNumber: OnBlockNumberParameter | undefined) => void;
export type WatchBlockNumberParameters<transport extends Transport = Transport> = {
/** The callback to call when a new block number is received. */
onBlockNumber: OnBlockNumberFn;
/** The callback to call when an error occurred when trying to get for a new block. */
onError?: ((error: Error) => void) | undefined;
} & ((HasTransportType<transport, 'webSocket'> extends true ? {
emitMissed?: undefined;
emitOnBegin?: undefined;
/** Whether or not the WebSocket Transport should poll the JSON-RPC, rather than using `eth_subscribe`. */
poll?: false | undefined;
pollingInterval?: undefined;
} : never) | {
/** Whether or not to emit the missed block numbers to the callback. */
emitMissed?: boolean | undefined;
/** Whether or not to emit the latest block number to the callback when the subscription opens. */
emitOnBegin?: boolean | undefined;
poll?: true | undefined;
/** Polling frequency (in ms). Defaults to Client's pollingInterval config. */
pollingInterval?: number | undefined;
});
export type WatchBlockNumberReturnType = () => void;
export type WatchBlockNumberErrorType = PollErrorType | ErrorType;
/**
* Watches and returns incoming block numbers.
*
* - Docs: https://viem.sh/docs/actions/public/watchBlockNumber
* - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_watching-blocks
* - JSON-RPC Methods:
* - When `poll: true`, calls [`eth_blockNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_blocknumber) on a polling interval.
* - When `poll: false` & WebSocket Transport, uses a WebSocket subscription via [`eth_subscribe`](https://docs.alchemy.com/reference/eth-subscribe-polygon) and the `"newHeads"` event.
*
* @param client - Client to use
* @param parameters - {@link WatchBlockNumberParameters}
* @returns A function that can be invoked to stop watching for new block numbers. {@link WatchBlockNumberReturnType}
*
* @example
* import { createPublicClient, watchBlockNumber, http } from 'viem'
* import { mainnet } from 'viem/chains'
*
* const client = createPublicClient({
* chain: mainnet,
* transport: http(),
* })
* const unwatch = watchBlockNumber(client, {
* onBlockNumber: (blockNumber) => console.log(blockNumber),
* })
*/
export declare function watchBlockNumber<chain extends Chain | undefined, transport extends Transport>(client: Client<transport, chain>, { emitOnBegin, emitMissed, onBlockNumber, onError, poll: poll_, pollingInterval, }: WatchBlockNumberParameters<transport>): WatchBlockNumberReturnType;
//# sourceMappingURL=watchBlockNumber.d.ts.map