Reference
Extractor module
// NOTE: address and topics can be used to filter events at the Ethereum node
// level.
function init({ args: {start = 0, end, address, topics, blockspan = 1}})
startStart block as a natural number in decimal-base (default: 0).endEnd block as a natural number in decimal-base.address“0x”- prefixed Ethereum address of where an event log originates from.topicsArray containing up to three 32 byte long “0x”-prefixed topic hashes related to the event or an array of arrays containing such values.blockspanThe distance betweenfromBlockandtoBlockin decimal-base (default: 1).includeTimestampFlag to include the block timestamp asblock.timestampin the result object.includeValueFlag to include the transaction’s value astransaction.valuein the result object.
Transformer module
function onLine({args: {topics = [], address, inputs}, state: {line}})
lineIs an argument defined by@attestate/crawlerinternally. It is a line within the strategy’sinput.pathfile.address“0x”- prefixed Ethereum address of where an event log originates from.topicsArray containing up to three 32 byte long “0x”-prefixed topic hashes related to the event or an array of arrays containing such values.inputsWhen defined, it replaces the event log’s “data” property with a parsed event log using web3-eth-abi@1.4.0’s decodeLog.
Loader module
function* order({state: {line}})
lineIs an argument defined by@attestate/crawlerinternally. It is a line within the strategy’sinput.pathfile.
order is a JavaScript generator function.
As the key, it concatenates serialized blockNumber and transactionIndex to
generate an identifier which defines a total order among transactionHash``es.
``value is the transactionHash.
function* direct({state: {line}})
lineIs an argument defined by@attestate/crawlerinternally. It is a line within the strategy’sinput.pathfile.
direct is a JavaScript generator function.
As the key, it defines the transactionHash to generate an identifier
which lets us directly access the log through value.
State module
The state module provides coordinator functionality for continuous blockchain monitoring via WebSocket subscriptions.
function watch({ environment, onNewBlock })
environmentObject containing environment variables (e.g.,rpcWsHost) passed from the crawler configuration.onNewBlockCallback function invoked with the new block number when a new block is detected via WebSocket subscription.
The watch() function:
Establishes a WebSocket connection to the RPC endpoint specified in
environment.rpcWsHost(e.g.,wss://opt-mainnet.g.alchemy.com/v2/YOUR_API_KEY)Subscribes to new block headers using viem’s
watchBlockNumberAutomatically handles reconnection if the connection is lost
Detects and emits missed blocks with
emitMissed: trueReturns an
unwatch()function to cleanly close the subscription
The function provides real-time block notifications with ~1-2 second latency,
replacing the previous polling-based approach which used an interval
parameter.
Note
Prior to version 0.6.0, continuous monitoring required a polling-based
interval parameter in the coordinator configuration. This has been
replaced with WebSocket subscriptions via the watch() function for
better performance and resource efficiency.