Arbitrum 可重试票据是什么?跨链充值失败后为什么会自动再执行 图 1
Arbitrum 可重试票据是什么?跨链充值失败后为什么会自动再执行 · 图 1

从以太坊主网往 Arbitrum 充值,最让人心里没底的一点是:主网交易明明已经确认了,钱却好像悬在半空。Arbitrum 用一个叫 retryable ticket(可重试票据)的对象来兜住这段悬空期——消息被登记成一张 L2 上的票据,系统会自动尝试执行;执行失败不会让资产蒸发,稍后还能再试一次,或者手动赎回。这篇按官方文档拆一遍它的生命周期、参数含义和常见的失败位置。

为什么需要一张可重试的票据

跨链消息天然是单向的:L1 合约只能把消息放进 Inbox,它无法在低成本下知道 L2 那头执行成不成功。如果执行失败就把失败留在 L1 上无人认领,充值就会出现“主网扣了钱、L2 没到账”的黑洞。Arbitrum 的解法是把投递语义从“恰好一次”改成“至少一次”:先在子链上创建一个 pending 状态的票据对象,里面完整记录了将来要执行的那笔调用;执行权交给自动机制,执行结果则决定票据走向成功还是等待重试。

创建票据时每个参数在管什么

官方文档列出的 createRetryableTicket 参数值得逐个看:l1CallValue 是随交易从 L1 一起带过去的总 ETH,负责覆盖票据提交费、gas 预存和实际要转的 callvalue;l2CallValue 是票据最终在 L2 执行时作为转账金额送出的部分;maxSubmissionCost 是为“把票据挂上账本”这笔操作愿意付的上限,官方文档明确它与票据数据大小和主网基础费成正比,之后会从发送者的子链余额中扣除;gasLimit 和 maxFeePerGas 则锁定自动执行那一次调用的燃料预算。两个退款地址最容易被忽视:excessFeeRefundAddress 收回未用尽的 gas 与提交费,callValueRefundAddress 在票据超时或被取消时收回 l2CallValue,同时也是有权取消这张票据的受益人。填错这两个地址,退款会进别人的口袋。

充值消息在两级链间排队、自动执行与重试的票据流转示意

自动执行与手动赎回的两段窗口

票据创建后系统会立即自动执行一次。这一次执行可能失败:目标合约拒收、gasLimit 估少了、maxFeePerGas 出价低于子链当时的气价,都会让自动执行以失败告终。失败后票据并没有作废——官方文档给出两条出路:一是通过 ArbRetryableTx 预编译合约(地址 110)用 redeem 手动触发执行;二是等待成熟期后系统的再次自动尝试。票据成功执行即变为 redeemed,资金与调用正式落地;若始终无法执行,取消票据可把价值退回 callValueRefundAddress。重试窗口的具体时长与次数以 Arbitrum 官方文档当前版本为准,不要在第三方教程里找固定天数。

地址别名:权限检查失败的经典元凶

如果充值发起方是 L1 合约而不是普通钱包,L2 上看到的发送者地址会被系统加上一个固定偏移(官方文档给出 Child_Alias 等于 Parent_Contract_Address 加 0x1111000000000000000000000000000000001111),这是防止两条链上相同地址合约互相冒充的安全设计。后果很实际:L2 合约里直接拿 msg.sender 和 L1 合约地址比对会永远不相等,于是拒绝执行、票据卡死。官方文档的解法是引入 AddressAliasHelper 库,先用 undoL1ToL2Alias 还原真实发送者再比对。EOA 走 Delayed Inbox 的已签名消息路径则不做别名转换。

去程自动、回程手动:方向不对称是设计使然

把充值与提款放在一起看更能理解票据的定位。按官方文档,从子链回主链的消息走的是另一套流程:在 L2 调用 ArbSys 的 sendTxToL1 后,要先等包含该消息的断言走完挑战期最终确认,再回到主链调用 Outbox 的 executeTransaction 手动领取——官方文档当前把这段等待期写为 6.4 天,具体时长随部署与版本调整,以官方文档为准。也就是说,去靠自动执行票据、回靠手动认领出站箱,是协议刻意的不对称:去程风险由票据兜底,回程风险由挑战期兜底。排查时先分清方向,能避免在错误的窗口里空等。

排查顺序与风险提示

实战排查建议按此顺序:先用官方 SDK 的 ChildTransactionReceipt 拿到消息对象与状态;卡在 pending 就先查两个退款地址与别名逻辑;自动执行失败则确认 gas 出价与目标合约逻辑,必要时手动 redeem。还要注意,充值到 L2 后的资产价值会随行情波动,等待执行期间的价格变化不属于协议故障;跨链桥合约本身也经历过多年的审计与迭代,重大升级以官方公告为准。本文只做机制说明,不构成任何投资建议或跨链操作收益承诺。