数据可用性与中继器系统实现了 Fuel 与外部数据可用性 (DA) 层(主要是以太坊)之间的跨链通信。该系统监控外部区块链事件,处理跨链消息,并使其可在 Fuel 网络中消费。中继器确保来自外部链的消息在 Fuel 交易中得到正确验证、存储并可供花费。
有关与 DA 层一起使用的区块压缩机制的信息,请参阅区块压缩。有关客户端接口的详细信息,请参阅客户端接口。
中继器系统作为 Fuel Core 整体架构中的一项服务运行,将外部区块链数据与本地 Fuel 节点状态连接起来。
来源:tests/tests/relayer.rs17-24 tests/tests/relayer.rs100-101 tests/tests/relayer.rs393-399
中继器通过几个不同的阶段处理跨链消息,从外部链上的检测到在 Fuel 交易中可供花费。
系统根据其数据内容区分两种消息类型
| 消息类型 | 数据内容 | 余额包含 | 重试行为 |
|---|---|---|---|
| 不可重试 | 空 ([]) | 包含在余额中 | 不可重试 |
| 可重试 | 非空 ([1] 或其他数据) | 排除在余额之外 | 可重试 |
来源:tests/tests/relayer.rs92-95 tests/tests/balances.rs40-41 tests/tests/relayer.rs530-539
中继器通过relayer::Config 结构进行配置,并集成到 Fuel 的主服务配置中。
关键配置要素包括:
eth_v2_listening_contracts:用于监控事件的合约地址数组relayer:以太坊节点连接的可选 HTTP 端点向量来源:tests/tests/relayer.rs100-131 tests/tests/relayer.rs196-201 tests/tests/relayer.rs408-442
中继器系统与 Fuel 的存储层集成,以在节点重启后持久化消息和交易状态。
消息存储时包含从以太坊事件中提取的以下关键属性
nonce:消息的唯一标识符sender:外部链上的发起地址recipient:Fuel 上的目标地址amount:正在转移的代币数量data:确定重试行为的附加有效载荷数据da_height:数据可用性区块高度来源:tests/tests/relayer.rs383-406 tests/tests/relayer.rs266-279 tests/tests/relayer.rs336-380
中继器系统与 Fuel 的余额和代币选择系统紧密集成,使跨链消息可作为可花费资产使用。
该系统确保只有不可重试的消息计入用户余额,从而防止可重试消息可能被重复处理导致的双重花费情况。
来源:tests/tests/relayer.rs506-706 tests/tests/balances.rs40-144 tests/tests/coins.rs303-508
中继器与外部链保持同步,并与 Fuel 的区块生产协调,以确保消息可用性。
此await_relayer_synced() 方法确保区块生产等待中继器与外部链同步,从而保持跨链状态和本地区块生产之间的一致性。
来源:tests/tests/relayer.rs138-150 tests/tests/relayer.rs212-215 tests/tests/relayer.rs575-587