跨链桥接是区块链生态中至关重要的基础设施,它让资产能够在不同网络间安全流动。虽然 Arbitrum 协议本身在技术上并不原生支持任何特定的代币标准,也未内置对任何桥接方案的优先支持,但其规范桥接(Canonical Bridge) 由 Offchain Labs 实现,是大多数用户和应用的首选。本文将系统解析其设计原理、核心架构、标准流程,并探讨自定义网关的应用场景。
为什么需要规范的桥接设计?
在跨链资产转移中,我们采用“网关”(Gateway)这一概念。它是指部署在两个不同域(如以太坊主网和 Arbitrum 链)上、成对出现的智能合约,共同协作以完成资产的跨域转移。
我们的桥接系统设计主要围绕两个核心目标展开。
支持自定义网关功能
对于许多标准的 ERC-20 代币,基础的桥接功能已经足够。这通常意味着:
- 在以太坊上的一个代币合约与 Arbitrum 上的一个“配对”代币合约关联。
- 存入(Deposit):用户将代币锁定在主网的桥合约中,子网上的配对合约便会铸造等量的代币。
- 取出(Withdraw):用户在子网上销毁代币,之后便可从主网桥合约中赎回原资产。
然而,许多代币需要更复杂的定制功能,例如:
- 为持有者产生利息的代币,需确保利息能正确地在不同层间分配,而非全部累积给桥合约。
- 跨域转移的
WETH需要在不同层上进行封装和解封。
因此,我们的桥接架构不仅要支持标准的存提款功能,还必须允许动态添加新的、自定义的网关。
确保代币在子网上的规范唯一性
支持多种自定义网关固然重要,但也要避免单个主网代币在子网上有多个地址或合约代表的情况,这会为用户和开发者带来巨大摩擦和困惑。因此,我们需要一个系统来追踪每个主网代币所使用的网关,并提供一个规范的地址预言机,来映射以太坊和 Arbitrum 域上的代币地址。
规范代币桥的核心架构
基于以上目标,我们的桥接架构主要由三类合约构成:
- 资产合约(Asset Contracts):即代币合约本身,如主网上的
ERC-20合约及其在 Arbitrum 上的对应合约。 - 网关(Gateways):成对出现的合约(一个在主网,一个在子网),负责实现特定类型的跨链资产桥接。
- 路由器(Routers):两个核心路由合约(同样各一个在主网和子网),负责将每个资产的请求引导至其指定的网关。
跨链传输流程
- 以太坊 → Arbitrum:传输通过主网的路由器合约
L1GatewayRouter发起。该合约将存币调用转发给主网上相应的网关合约L1ArbitrumGateway,后者再通过可重试票据与其在子网的对应网关L2ArbitrumGateway通信。 - Arbitrum → 以太坊:传输通过子网的路由器合约
L2GatewayRouter发起,它调用子网上的网关合约L2ArbitrumGateway,该合约再通过向 Outbox 发送消息与主网网关L1ArbitrumGateway通信。
所有网关调用都必须通过相应的路由器发起,并且网关必须符合 TokenGateway 接口,该接口设计得足够灵活,以支持任何代币可能需要的桥接功能。
标准 ERC-20 网关流程
默认情况下,任何在主网上未注册到特定网关的 ERC-20 代币,都可以通过 StandardERC20Gateway 进行无许可桥接。
示例:标准存币与提币流程
假设 SomeERC20Token 已在 L1GatewayRouter 中注册使用标准 ERC-20 网关。
存币(Deposits)步骤
- 用户调用
L1GatewayRouter.outboundTransferCustomRefund[1],并传入代币的主网地址等参数。 L1GatewayRouter查找到该代币的网关为标准ERC-20网关(即L1ERC20Gateway合约)。L1GatewayRouter调用L1ERC20Gateway.outboundTransferCustomRefund,转发相应参数。L1ERC20Gateway托管用户发送的代币,并创建一个可重试票据,以在子链触发L2ERC20Gateway的finalizeInboundTransfer方法。L2ERC20Gateway.finalizeInboundTransfer在子网上的arbSomeERC20Token合约中铸造等量的代币。
💡 提示 [1]:请注意,一些较旧的自定义网关可能未实现outboundTransferCustomRefund方法,且L1GatewayRouter.outboundTransferCustomRefund不会回退到outboundTransfer。在这种情况下,请直接使用L1GatewayRouter.outboundTransfer函数。
提币(Withdrawals)步骤
- 用户在 Arbitrum 上调用
L2GatewayRouter.outBoundTransfer,该调用继而会调用arbSomeERC20Token的网关(即L2ERC20Gateway)上的outBoundTransfer方法。 - 此操作会销毁
arbSomeERC20Token代币,并通过ArbSys发送一条编码消息给L1ERC20Gateway.finalizeInboundTransfer,该消息最终将在主网上执行。 - 争议期结束后,且包含用户交易的断言得到确认,用户便可以调用
Outbox.executeTransaction,从而执行编码的L1ERC20Gateway.finalizeInboundTransfer消息,从L1ERC20Gateway合约的托管中释放用户的代币。
通用自定义网关(Generic-Custom Gateway)
如果一个代币的需求超出了标准 ERC-20 网关的功能范围,这并不总意味着需要为其量身定制一个独一无二的网关。我们的通用自定义网关设计得非常灵活,足以满足大多数(并非所有)自定义同质化代币的需求。
一个通用的原则是:如果你的自定义代币能够在子链上直接增发(Mint),并且希望子链上增发的代币能够被提回主网并被主网合约认可,那么它很可能需要自己专用的网关。否则,通用自定义网关很可能就是你的正确选择!
适用通用自定义网关的代币特性示例包括:
- 可通过代理升级的子链代币合约。
- 包含地址白名单/黑名单功能的子链代币合约。
- 部署者希望自行确定子链代币合约的地址。
设置通用自定义网关的步骤
为代币设置通用自定义网关主要包含以下步骤:
0. 拥有一个主网代币
你的主网代币应符合 ICustomToken 接口,其接口中必须包含 isArbitrumEnabled 方法。
1. 在 Arbitrum 上部署你的代币
你的代币应符合最低限度的 IArbToken 接口,即应包含只能由 L2CustomGateway 合约调用的 bridgeMint 和 bridgeBurn 方法,并能通过 l1Address 访问其对应的以太坊代币地址。
2. 通过 L1CustomGateway 合约将主网代币注册到子网代币
让你主网代币的合约对外调用 L1CustomGateway.registerTokenToL2 方法。此注册也可通过链所有者提案替代完成。
3. 将你的代币注册到 L1GatewayRouter
代币向通用自定义网关的注册完成后,让你主网代币的合约对外调用 L1GatewayRouter.setGateway 方法。此注册同样可通过提案替代完成。
其他类型的网关
在上述系统中,一对网关合约处理许多 ERC-20 代币的桥接。而其他网关与它们所桥接的合约可能具有不同的关系。
以封装以太坊(Wrapped Ether)的实现为例:这里,主网上的一个 WETH 合约连接到子网上的一个 WETH 合约。当跨域转移 WETH 时,利用网关架构在域 A 解封 WETH,转移解封后的以太币,然后在域 B 重新封装。这确保了 WETH 在 Arbitrum 上的行为与用户在以太坊上习惯的行为一致,同时保证所有 WETH 在其所驻留的层上始终有全额抵押。
无论一个代币的桥接需求多么复杂,在原则上都可以在我们的规范桥接系统内创建网关来满足它。
常见问题(FAQ)
Q1: 什么是 Arbitrum 的规范桥接(Canonical Bridge)?
A: 它是由 Arbitrum 开发团队 Offchain Labs 官方实现的去中心化跨链桥接应用,由部署在以太坊和 Arbitrum 上的智能合约组构成。它利用 Arbitrum 的跨链消息传递协议,是大多数用户和项目首选的、经过充分验证的桥接方案。
Q2: 标准 ERC-20 网关和自定义网关的主要区别是什么?
A: 标准网关为大多数普通代币提供通用的存提款流程,代币在子网上的映射合约由系统生成。而自定义网关允许代币项目方使用自己在子网上部署的、具有特殊逻辑(如升级、权限管理)的合约,并通过通用或独有的网关与之对接,提供更大的灵活性。
Q3: 作为普通用户,如何安全地进行跨链桥接?
A: 普通用户应优先使用官方推荐的规范桥接界面进行操作。对于任何第三方桥接应用,应像对待任何其他 DeFi 应用一样,保持警惕,在投入大量资金前务必做好项目背景调查、代码审计状态和安全记录的研究。
Q4: 为什么需要“路由器”(Router)合约?
A: 路由器充当了一个路由器和地址预言机。它维护着主网代币地址到其对应网关的映射关系,确保每个代币都指向唯一正确的网关。用户只需与路由器交互,而无需关心背后具体是哪个网关在处理,简化了用户体验并保证了代币在子网上的唯一性。
Q5: 提币后,需要等待多久才能在主网上领取资产?
A: 从 Arbitrum 提币回以太坊主网需要经过一个“争议窗口期”(Dispute Window),通常约为 7 天左右。这是 Arbitrum rollup 安全模型的一部分。只有在窗口期过后,提款才会被最终确认,用户才能从主网的 Outbox 合约中执行交易并领取资产。
结语
跨链桥接是一个充满创新与挑战的设计领域。虽然非规范的桥接方案可能提供更快的提款速度或与其他链的互操作性,但它们也可能带来不同的信任假设和安全风险。用户在使用任何桥接应用时,都应保持谨慎,进行充分的尽职调查。Arbitrum 的规范桥接提供了一个安全、灵活且强大的基础架构,无论是对于标准代币还是复杂的自定义需求,都是值得信赖的起点。