菜单

数据可用性与 Relayer

相关源文件

目的与范围

数据可用性与中继器系统实现了 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