跳转到主要内容本节详细介绍了 ChainStream 通过 Kafka 提供的 EVM 数据流。顶层 Kafka 部分解释了我们如何使用 Kafka Streams 来传输数据。
EVM 区块链根据网络的不同以不同的间隔产生区块。以太坊主网目标是每个区块约 12 秒,而其他 EVM 链可能有不同的区块时间。
链上数据结构
EVM Protobuf 数据流为不同的使用场景提供两种主要消息类型:
BlockMessage: 包含完整区块和交易头信息
TransfersMessage: 专注于代币转账和货币元数据
每个区块包含一个 BlockHeader,字段包括:
Hash: 区块的唯一标识符
ParentHash: 前一个区块的哈希
UncleHash: 叔块/ommer 区块哈希
Root: 状态根
TxHash: 交易根哈希
ReceiptHash: 收据根哈希
MixDigest: 工作量证明混合摘要(PoW)
Coinbase: 出块者地址
Bloom: 日志布隆过滤器
Extra: 附加数据
Nonce: 区块随机数(PoW)
Difficulty: 挖矿难度(PoW)
Number: 区块高度
GasLimit: 区块允许的最大 gas
GasUsed: 实际消耗的 gas
Time: 区块时间戳
BaseFee: 每 gas 的基础费用(EIP-1559)
SequenceNumber: Optimism 专用序列号
BatcherAddr: Optimism 专用批处理地址
L1FeeOverhead: Optimism 专用 L1 费用开销
L1FeeScalar: Optimism 专用 L1 费用系数
TransactionHeader 提供交易的核心信息:
Index: 交易在区块中的索引
Hash: 交易哈希
GasUsed: 实际消耗的 gas
GasLimit: 交易指定的 gas 上限
Value: 转移的原生货币数量
Data: 调用数据
Nonce: 发送方账户 nonce
ChainId: 链 ID
Cost: 交易总成本
GasFeeCap: 最大 gas 费用上限(EIP-1559)
GasPrice: 传统 gas 价格
GasTipCap: 最大优先费
Protected: 是否启用重放保护
Type: 交易类型(如 2 = EIP-1559,3 = EIP-4844)
To: 接收方地址
From: 发送方地址
ToCode: 接收方合约代码信息
AccessList: 访问列表(EIP-2930)
GasL1: Arbitrum 专用 L1 gas 消耗
IsSystemTx: Optimism 系统交易标记
EffectiveNonce: Optimism 有效 nonce
SourceHash: Optimism 源哈希
Time: 广播时间戳(可选)
Blob: EIP-4844 Blob 数据(哈希、证明、承诺、gas、费用上限)
转账数据(Transfer)
TransfersMessage 中的 Transfer 记录代币或原生货币的转账:
CallIndex: 调用索引
LogIndex: 日志索引
Sender: 发送地址
Receiver: 接收地址
Amount: 转账数量(字符串表示,保证精度)
Id: 代币 ID(NFT 使用)
URI: 代币 URI(NFT 元数据)
Currency: TokenInfo 代币元数据
Success: 转账是否成功
Data: 原始事件数据
Index: 转账在消息中的索引
TransactionHeader: 所属交易的上下文
代币信息(TokenInfo)
TokenInfo 提供代币的详细元数据:
SmartContract: 代币合约地址
Delegated: 是否被委托
DelegatedTo: 委托目标地址
ProtocolName: 协议/项目名称
Name: 代币名称
Symbol: 代币符号
Decimals: 小数位数
HasURI: 是否包含 URI
Fungible: 是否为同质化代币
AssetId: 唯一资产标识符
Standard: 代币标准(NATIVE、ERC20、ERC721、ERC1155)
TransfersMessage
顶层转账消息:
Chain: 区块链元数据(ChainId、Config)
Header: 当前区块头
Transfers: 转账记录列表
L1Header: 对应的 L1 区块头(仅 L2 链)
Layer 2 支持
EVM Protobuf 数据流为 Layer 2 链提供专用字段:
L1Header: 对应的 L1 区块信息
- Optimism 专用:
SequenceNumber、BatcherAddr、L1FeeOverhead、L1FeeScalar、IsSystemTx、EffectiveNonce、SourceHash
- Arbitrum 专用:
GasL1
- EIP-4844:
Blob 结构
使用数据流
主题名称
EVM 数据流在不同的 Kafka 主题下可用:
-
eth.v1.transfers.proto → TransfersMessage
-
bsc.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