Skip to main content
L1/L2 Chains - Protobuf Data Streams EVM Streams
This section provides details about ChainStream’s EVM Streams via Kafka. The top-level Kafka section explains how we use Kafka Streams to deliver data.
EVM blockchains produce blocks at varying intervals depending on the network. Ethereum mainnet targets ~12 seconds per block, while other EVM chains may have different block times.
Structure of On-Chain Data
The EVM Protobuf Streams provide two main message types for different use cases:
BlockMessage: Full blocks with detailed transaction and header data
TransfersMessage: Focused on token transfers with currency metadata
Represents metadata about a block.
Hash: Unique identifier of the block
ParentHash: Hash of the parent block
UncleHash: Hash of uncle/ommer blocks (Ethereum PoW)
Root: State root of the block
TxHash: Root hash of all transactions
ReceiptHash: Root hash of all receipts
MixDigest: Proof-of-work mix digest (legacy)
Coinbase: Miner/validator address
Bloom: Bloom filter for logs
Extra: Extra data field
Nonce: Block nonce (legacy PoW)
Difficulty: Mining difficulty (legacy PoW)
Number: Block height
GasLimit: Maximum gas allowed in this block
GasUsed: Actual gas consumed
Time: Block timestamp (seconds since epoch)
BaseFee: Base fee per gas (EIP-1559)
SequenceNumber: Optimism-specific sequence number
BatcherAddr: Optimism-specific batcher address
L1FeeOverhead: Optimism-specific L1 fee overhead
L1FeeScalar: Optimism-specific L1 fee scalar
Represents metadata about a transaction.
Index: Transaction index in the block
Hash: Transaction hash
GasUsed: Gas actually consumed
GasLimit: Gas limit specified
Value: Amount of native currency transferred
Data: Input call data
Nonce: Sender account nonce
ChainId: Chain ID of the transaction
Cost: Total cost (gas × price + value)
GasFeeCap: Max fee per gas (EIP-1559)
GasPrice: Legacy gas price
GasTipCap: Max priority fee per gas
Protected: Whether replay protection is enabled
Type: Transaction type (e.g. 2 for EIP-1559, 3 for EIP-4844)
To: Recipient address
From: Sender address
ToCode: Code metadata of the recipient contract
AccessList: Access list (EIP-2930)
GasL1: Arbitrum-specific L1 gas usage
IsSystemTx: Optimism-specific system transaction flag
EffectiveNonce: Optimism-specific effective nonce
SourceHash: Optimism-specific source hash
Time: Broadcast timestamp (optional)
Blob: EIP-4844 blob data (hashes, proofs, commitments, gas, fee cap)
Transfer
Represents a token or native currency transfer.
CallIndex: Index of the call within the transaction
LogIndex: Index of the log within the block
Sender: Address sending tokens
Receiver: Address receiving tokens
Amount: Amount of tokens transferred (string for precision)
Id: Token ID (for NFTs)
URI: Token URI (for NFTs with metadata)
Currency: TokenInfo metadata about the token
Success: Whether the transfer succeeded
Data: Raw event data
Index: Transfer index within the message
TransactionHeader: Transaction context for this transfer
TokenInfo
Metadata about a token.
SmartContract: Token contract address
Delegated: Whether the token is delegated
DelegatedTo: Address to which it is delegated
ProtocolName: Protocol/project name
Name: Token name
Symbol: Token symbol
Decimals: Number of decimal places
HasURI: Whether the token has a URI field
Fungible: Whether the token is fungible (ERC-20) or non-fungible (ERC-721/1155)
AssetId: Unique asset identifier
Standard: Token standard (NATIVE, ERC20, ERC721, ERC1155)
TransfersMessage
Top-level message for transfer streams.
Chain: Blockchain metadata (ChainId, Config)
Header: Block header of the current block
Transfers: List of Transfer records
L1Header: Optional L1 block header (for L2 chains)
Chain
ChainId: Unique identifier of the blockchain
Config: Chain configuration string
Blob (EIP-4844)
Hashes: Blob hashes
Proofs: Blob proofs
Commitments: Blob commitments
BlobGas: Gas used for blobs
BlobGasFeeCap: Fee cap for blob gas
Layer 2 Support
EVM Protobuf Streams provide dedicated fields for Layer 2 chains:
L1Header: Corresponding L1 block information
Optimism-specific: SequenceNumber, BatcherAddr, L1FeeOverhead, L1FeeScalar, IsSystemTx, EffectiveNonce, SourceHash
Arbitrum-specific: GasL1
EIP-4844: Blob structure for blob-carrying transactions
Using This Stream
Topic Names
The EVM streams are available under different topics:
eth.v1.transfers.proto → TransfersMessage
bsc.v1.transfers.proto → TransfersMessage
polygon.v1.transfers.proto → TransfersMessage
eth.broadcasted.v1.transfers.proto → TransfersMessage
bsc.broadcasted.v1.transfers.proto→TransfersMessage
eth.broadcasted.v1.transfers.processed.proto → TransfersMessage
bsc.broadcasted.v1.transfers.processed.proto→TransfersMessage