

- 提现的过程中不存在自动兑付,因为EVM没有定时器或自动化,而L2上可以实现自动兑付,是排序器帮忙实现的,所以L1上用户要手动与Outbox合约交互,以Claim取回资产。
- 提现也不存在票据过期的问题,只要过了挑战期,可以在任意时间领取。
- 一个在L1上部署的代币,它在L2上要如何部署?
- 它的L2对应合约需要预先手动部署,还是系统可以自动为跨过来的、但尚未部署合约的代币 自动部署资产合约?
- L1上的ERC-20资产,在L2对应的合约地址是什么?是否该和L1一致?
- 在L2上原生发行的代币,如何跨链至L1?
- 拥有特殊功能的代币,如可调整数量的Rebase型代币,自增长生息代币,如何跨链?

- Gateway组件在L1和L2成对出现。
- Gateway Router负责维护Token L1<->Token L2之间的地址映射,以及some token<->some gateway之间的映射。
- Gateway本身可分为StandardERC20 gateway,Generic-custom gateway,Custom gateway等等,用以解决不同类型的和功能ERC20的桥接问题。

- 无法在L2上把WETH进行Unwrap变成ETH,因为L2上并没有锁仓对应的ETH。
- Wrap功能可以使用,但这些新生成的WETH如果跨回到L1,也无法在L1上解封装为ETH,因为L1和L2上的WETH合约不是“对称的”。

- depositETH(),最简单的充值ETH的函数。
- createRetryableTicket(),可用于ETH和ERC20以及消息的充值。相较depositETH()而言,有更高的灵活性,例如可指定充值后L2的收款地址等。
- forceInclusion(),也即强制归集功能,任何⼈都可以调⽤。该函数会校验,提交至慢箱合约中的某笔交易,是否过了24小时还没被处理。如果条件满⾜,则将对消息进⾏强制归集。
- 我们知道,Arbitrum官方桥的提现需要等待约7天的挑战期结束, Rollup Block 最终敲定后,提款行为才可以实施。⽤户在挑战期结束后,向Layer1上的Outbox合约提交相应的Merkle Proof,它再与其他职能的合约通信(如解锁其他合约中锁定的资产),最终完成提现。
- OutBox合约会记录哪些L2到L1的跨链消息已经被处理过,以防止有人反复提交执行过的提现请求。它通过
- mapping(uint256 => bytes32) public spent,记录提现请求的spent Index与信息对应关系,如果mapping[spentIndex] != bytes32(0)则该请求已被提现过。原理类似于防止重放攻击的交易计数器Nonce。


- 原⼦锁交换。这种⽅式只是在双⽅在各⾃的链内进⾏了资产的互换,并且具有原⼦性,只要⼀⽅提供了Preimage,双⽅⼀定可以得到应有的资产。但问题是流动性⽐较稀缺,需要点对点地寻找对⼿⽅。
- ⻅证⼈跨链桥。⼀般类型的跨链桥都属于⻅证⼈桥。⽤户提交⾃⼰的提现请求,提现⽬的地指向第三方桥的运营者或流动性池。⻅证⼈发现跨链交易已提交到L1的快箱合约后,就可以直接在L1端向⽤户转账。这种⽅式本质上是⽤另⼀套共识系统来监视Layer2,并根据其已提交至Layer1上的数据进⾏操作。问题是,这种模式下的安全系数不如Rollup官方桥⾼。

- 调用L1上慢箱合约中的inbox.sendL2Message(),输入参数就是在L2上调用withdrawEth()时需要输入的参数。该消息会共享给L1上的bridge合约。
- 等待24小时的强制归集等待期后,调用快箱中的force Inclusion()进行强制归集,快箱合约会检视bridge中是否有对应消息。