Firehose provides two mechanisms to extract data from an ethereum-like blockchain to sf.ethereum.type.v2.Block
message:
- Running an instrumented node (data is extracted while the node actually executes the transactions) -> produces
EXTENDED
blocks - Polling an standard node with a series of RPC calls (ex:
eth_getBlock
) -> produces BASE blocks
The "Extended" vs "Base" distinction appears in the "DetailLevel" field of the Block message ref: https://github.com/streamingfast/firehose-ethereum/blob/develop/proto/sf/ethereum/type/v2/type.proto#L85
Most instrumented nodes for Ethereum-like networks have parts of their codebase coming from geth (https://github.com/ethereum/go-ethereum)
Nodes that are based on geth versions prior to v1.14.0 contain a lot of Firehose-specific instrumentation hooks send each 'event' to the firehose reader which then assembles the block. (firehose protocol < 3.0
)
Nodes that are based on geth
versions >= v1.14.0 can use the "Live tracing" feature (https://github.com/ethereum/go-ethereum/blob/master/core/tracing/CHANGELOG.md) to send fully-formed blocks to the firehose reader (firehose protocol == 3.0
)
Protocol | Networks (not exhaustive) | Upstream has v1.14 tracing | Firehose protocol version |
---|---|---|---|
Ethereum | mainnet sepolia (testnet) holesky (testnet) |
Yes | fh2.4 |
BSC | bsc (aka bnb, mainnet) chapel (testnet) |
No (Patched in SF github) | fh2.5 |
Polygon | matic (mainnet) amoy (testnet) |
Yes (Coming in v1.5.0) | fh2.4 |
Arbitrum | arbitrum-one* arbitrum-nova arbitrum-sepolia |
No (Patched in SF github) | fh3.0 |
Optimism | optimism (mainnet)** optimism-sepolia base base-sepolia |
Yes | fh3.0 |
SEI | sei-mainnet | No (Patched in SEI codebase) | fh3.0 |
*
arbitrum-one is not supported by the instrumented node below block 22207818 (pre-nitro)**
optimism mainnet is not supported by the instrumented node below block 105235064
Most ethereum-like networks can work directly using the RPC poller.
This is useful for
- networks without a full instrumentation (ex: Avalanche, fuji)
- segments of networks that don't support instrumented nodes (ex: early arb-one and optimism-mainnet)