Robinhood 通道
金库所持有的代币化股票位于 Robinhood Chain 上,这是一条 Arbitrum Orbit L2。协议通过 LayerZero 抵达那里,并以 Paxos 的 USDG OFT 作为现金腿。
为什么选择这条通道
这一选择于 2026-09-11 敲定,此前排除了原先的通道。
在一级铸造通道上,金库合约必须在发行方那里有资格持有该资产:KYB、登记合约地址,以及一份发行方从未公开记录过的书面确认。这是项目唯一一个真正无法回避的阻碍。
Robinhood Chain 的二级市场池不需要其中任何一项:它们对所有人开放。StockFun 与发行方没有任何关系,也不需要任何关系。
为这种自由付出的代价是一项跨链依赖:一座跨链桥、两个枢纽,以及一种由第三方发行、且可以被其冻结的稳定币。这是一项被接受并记录在案的风险,而不是一项被规避的风险。
链路
以太坊] -->|ETH → USDC
Uniswap v4| U[USDC] U -->|USDC → USDG
Curve| G[USDG] G --> BH[BridgeHub] BH -->|Paxos OFT
LayerZero| RH[RemoteHub
Robinhood Chain] RH --> MV[镜像金库
CREATE2,每个市场一个] MV -->|v3 / v4 池| S[Stock Tokens] S -->|股票适配器,封装| AD[AirdropDistributor
以太坊] AD -->|领取| HO[代币持有者
在以太坊上]
从 Robinhood Chain 回到以太坊的 USDG 回程路径只服务于创建者回购;两者已于 2026-09-28 从代码中移除。
自 2026-10-04 起,镜像金库把它的股票发送到以太坊上的空投合约:每只股票都锁定在它在 Robinhood Chain 上的 LayerZero 适配器中,并在以太坊上以封装形式铸造出来,由持有者在那里领取。这条路径只传输股票。这些适配器(每只股票一个)的主网版本尚不在代码库中;测试使用 mock,而 2026-10-06 的 LayerZero 测试网运行使用了测试适配器(见下文)。
哪些无需许可,哪些需要许可
| 组件 | 状态 |
|---|---|
| LayerZero 端点 | 无需许可 |
| Stock Token 二级市场池 | 无需许可——协议使用的正是它 |
| Robinhood 一级铸造 / 销毁 | KYB——不使用 |
| USDG | Paxos 控制铸造和销毁,并且可以暂停或冻结 |
最后一行是该通道最硬性的依赖,而且它真实存在。
镜像金库
每个市场在 Robinhood Chain 上都有一个镜像金库,通过 CREATE2 部署在一个可从以太坊预测的地址上。因此,Keeper 可以让远端枢纽在 USDC 到达之前预先部署它,这样转账就永远不会落到一个没有代码的地址上。自 2026-10-05 起,只有 Keeper 和 StockFun 的所有者可以这样做(predeploy):在此之前,任何人都可以,甚至可以为一个尚不存在的市场这样做,从而把它的镜像金库与当天的接线绑定在一起。远端枢纽从跨链批次中得知 Keeper,批次会携带它:在第一个批次之前,它不知道任何 Keeper,因此由 StockFun 的所有者预先部署第一个市场的镜像金库。自 2026-10-05 的第二个审计循环起,一个 Keeper 无法为其预先部署镜像金库的市场(在第一个批次之前,或在一次远端枢纽尚未得知的 Keeper 更换之后)会被留在批次之外,并发出警报,而不是带着不足以部署其金库的 gas 被发送出去;其他市场照常跨链,而它们的批次会携带新的 Keeper。
自 2026-10-02 起,每个镜像金库都是一个代理合约,即一个 MirrorVaultProxy,位于远端枢纽在部署该金库时所指定的金库实现合约前面。代理合约的构造函数不接受任何参数,因此无论实现合约是什么,它的创建代码,以及随之而来的每个镜像金库的地址,都仍可从以太坊预测。金库的篮子随第一个批次到达,自 2026-10-05 起,这个批次还会把金库的股票路由器和预言机更新为远端枢纽当时所指定的那些:一个在某只股票被列入之前部署的金库,会接受包含该股票的篮子。由远端枢纽所镜像的 StockFun 所有者逐个升级镜像金库,一个市场接一个市场,并立即生效。
兑换路径不是硬编码的:它们通过 calldata 传入,编码为 abi.encode(uint8 version, bytes payload)——版本 3 对应打包的 Uniswap v3 路径,版本 4 对应由 v4 PathKey 组成的数组。金库在每一段都会收到多个候选路径,并在第一个满足其界限的路径上成交。自 2026-10-01 起,只成交部分数额的路径会失败,随后尝试下一个候选路径;在此之前,v3 路径上的部分成交会让未花费的 USDG 滞留在路由器中。
自 2026-10-01 的安全流水线起,v3 路径逐个池执行。每个池都必须用掉它的全部输入,否则该路径失败;它的输出回到股票路由器,成为下一个池的输入,最后一个池向金库付款,并受该段最低数额的约束。失败的池会撤销同一次尝试中之前各个池的兑换,随后尝试下一个候选路径。在此之前,检查只看到路径的第一个池:在后面的池中发生的部分成交,会让中间代币留在 Uniswap 的 v3 路由器 SwapRouter02 中,任何人都可以拿走它,而该段却照样成功。多跳的 v3 段如今每经过一个池,就需要一次兑换和一次授权。
每一段只花费按篮子权重为其股票预留的 USDG:参见TreasuryVault。它相对股票喂价的价格界限,默认为 200 个基点,是远端枢纽所掌握、每个镜像金库都实时读取的一项设置(setStockMaxSlippageBps)。自 2026-10-05 起,金库会确保实际到达的数量不低于 Keeper 自己的最低数额,而该最低数额从不比这一界限更宽松。
当预言机暂缓给出一个价格时
自 2026-10-06 起,镜像金库的预言机有两项防护,这是 Robinhood 自己的文档所推荐的;每一项都只能暂缓给出价格,绝不会改变价格。
- 公司行动。当一只股票正在经历公司行动时(例如拆股),它的代币会表明其预言机已暂停(
oraclePaused()),而它的 Chainlink 喂价会保持其最后一个数值,在代币的乘数变化时,这个数值看上去可能仍然是新鲜的。此时预言机会暂缓给出该股票的价格:它的买入段单独失败(StockOraclePaused),其 USDG 仍为它预留,篮子中的其他股票照常买入。这项检查对每只股票开启;StockFun 的所有者可以对单只股票关闭它(setOraclePauseCheck),此时它的价格退回到只依靠其喂价自身的检查。不响应的代币被视为未暂停。 - 排序器。Robinhood Chain 是一条只有单一排序器的 Arbitrum 链。在设置了 Chainlink 的 L2 排序器在线状态喂价(
setSequencerUptimeFeed)的情况下,当该喂价表明排序器宕机、恢复不超过宽限期(默认一小时),或者该喂价无法读取时,预言机会暂缓给出所有价格:在那之前,任何一段都不会买入。如今 Robinhood Chain 没有这样的喂价,因此通道在部署时关闭这项检查;如果 Chainlink 发布了这样的喂价,由 StockFun 的所有者设置它。
Keeper 在给出任何报价之前都会看到这两项防护(参见Keeper),Worker 会说明一只股票的价格为何缺失,而 dapp 会显示这一点(参见dapp)。
把股票发送给空投
自 2026-10-04 起,股票一经买入,就只能通过一种方式离开镜像金库:sendToAirdrop。Keeper 用要发送的股票列表调用它,并支付 LayerZero 费用;多付的部分会退还给它。对于每只股票,金库通过该股票的适配器,把自己的全部余额发送到以太坊上的空投合约,并以该市场的 id 作为载荷。Keeper 既不指定数额,也不指定目的地:每只股票的适配器(setStockAdapter,它会检查该适配器承载的正是这一代币),以及空投合约(setAirdrop),都由远端枢纽的管理员,即 StockFun 的所有者,在远端枢纽上指定。一只被列出两次或不在篮子中的股票会让调用失败。
自 2026-10-06 起,Keeper 会指定每次送达在以太坊上获得的 gas:sendToAirdrop(stocks, receiveGas, composeGas),即股票 OFT 的 lzReceive 在该 OFT 强制设定的 gas 之上的部分,以及空投合约的 compose。远端枢纽会把每个数值限制在其管理员设定的下限和上限之间,零表示采用默认值(airdropGas),而金库用枢纽所批准的数值构建发送及其报价;只带股票的调用采用两个默认值。Keeper 根据在以太坊上对送达的模拟选择这些数值(参见Keeper):以太坊的 Glamsterdam 升级(自 2026-10-06 起已在 Sepolia 上启用)让一个新的存储槽的成本约为原来的五倍,而之前单一的 compose 数值 600,000 gas,让 LayerZero 测试网运行第一个循环中的每一次送达都 gas 不足。从没有这些策略的版本升级而来的远端枢纽,在两项策略都设置之前会拒绝每一次发送和报价(AirdropGasNotSet)。
自 2026-10-05 起,每只股票都单独进行。没有适配器的股票、余额无法读取的股票,以及发送失败的股票——发行方冻结、缺少对端、Keeper 的付款不足以覆盖的费用——会留在金库中并发出一个事件(AirdropSendFailed),其他股票照常发送;当没有任何东西发出时,调用会失败,并说明原因。报价函数 quoteSendToAirdrop 会略过它无法定价的部分,而不是失败。
LayerZero 只携带六位小数:一只 18 位小数的股票不足 10^12 个单位的部分,即一枚代币的百万分之一,无法跨链,会留在金库中,等待之后的发送。
在以太坊上,该股票的 OFT 把封装股票铸造给空投合约,随后 LayerZero 的端点带着载荷调用空投合约。只有当这次送达来自合约自己的端点、来自所有者登记过的股票 OFT、来自 Robinhood Chain,并且由跨链桥枢纽为载荷所指市场推导出的镜像金库发出时,合约才会将其计入。这次送达使用发送所携带的 gas 运行(见上文);gas 不足的送达会失败,但不会损失任何东西:它存储在 LayerZero 的端点上,当只有 compose 失败时,封装股票已经在空投合约上,任何人都可以用更多 gas 再次执行它。自 2026-10-06 起,Keeper 会用自己的密钥、在一个上限之内这样做,并对第二次失败发出警报。详情和测量数据见部署和空投。
升级与接入
自 2026-10-02 起,通道上的每一个 StockFun 合约都可升级,镜像金库部署器除外,每一个镜像金库的地址都由它的地址推导而来。在以太坊上,跨链桥枢纽及其适配器听命于工厂合约的所有者。在 Robinhood Chain 上,远端枢纽是升级授权方:它以自己的紧急管理员作答,即最近一个批次所携带的以太坊所有者,因此远端枢纽、镜像金库、股票路由器和预言机都由 StockFun 的所有者升级,并立即生效。
远端枢纽在其所在的链上最先部署,并带有一个初始管理员,由后者随后指定股票路由器、预言机以及未来镜像金库的实现合约;如果提供了空投路由和股票适配器,也一并指定。第一个批次会用 StockFun 的所有者替换这个管理员。
自 2026-10-05 起,这位管理员也掌握远端枢纽的各项设置:一次 sweep 支付的记录数,默认为 64(setMaxRecordsPerSweep,从不为零)、镜像金库买入时的价格界限,以及每次空投送达的 gas(setAirdrop);自 2026-10-06 起,还包括预言机的两项防护,以及空投送达在以太坊上的两项 gas 策略,每一项都包括一个默认值、一个下限和一个上限(setAirdropReceiveGas,650,000,介于 200,000 和 1,500,000 之间;setAirdropComposeGas,1,250,000,介于 600,000 和 4,000,000 之间;为零的下限、高于上限的下限以及超出范围的默认值都会被拒绝)。远端枢纽在初始化时设置这两项策略,而 DeployRemote 会根据其环境变量再次设置它们。管理员指定的替换预言机(setOracle)启动时两项防护都处于关闭状态,因此管理员要为它重新开启;已经初始化的镜像金库保留它们初始化时所用的预言机。
在以太坊上,跨链桥枢纽不再部署自己的适配器:适配器针对该枢纽部署,然后由 StockFun 的所有者指定一次(setAdapter),该调用会检查适配器所固定的地址。之后的替换(changeAdapter)自 2026-10-05 起立即生效。它只接受所固定的地址与当前适配器完全相同的适配器:同一个枢纽、工厂合约、现金代币、远端枢纽、目的链和传输方式。它可以更改 gas 数值、选项或 Curve 池,但绝不能更改目的地;远端枢纽仍然只接受来自其构建时所针对的适配器的批次(M-2,参见紧急模式)。因此,适配器的更换是通过就地升级完成的,地址不变;换用一个新地址,首先需要升级远端枢纽,使其接受这个地址。2026-10-05,所有者决定保持这一做法。
适配器自身的数值同样是 StockFun 所有者的设置:在 USDG 通道上,是 Curve 上可接受的最差 USDG/USDC 兑换率,默认为 30 个基点,以及送达在 Robinhood Chain 上最后一步的 gas(setSettings);自第十个审计循环(2026-10-06)起,这一 gas 是每个批次都需要的基数(默认 200,000),加上批次中每个市场的一份(默认 400,000),而一个批次最多携带 17 个市场(setBatchGas;参见下文“批次的 compose gas”)。在此之前,一个数值(默认 1,200,000)支付每一个批次,无论它携带什么。在官方跨链桥通道上,是两张票据的 gas(setTicketGas)。自 2026-10-05 起,官方跨链桥通道的账目票据会按当前的基础费用,支付跨链桥的 inbox 针对该批次规模所要求的数额,这项设置则是它的下限。一个在链下读取、不带 gas 价格的报价看到的基础费用为零,只按下限为这张票据定价,因此一个较长的批次在真实的基础费用下失败了;自当天的第二个审计循环起,Keeper 按它自己指定的基础费用请求报价(quoteBridgeAt),即最新基础费用的两倍,并拿回多付的部分。自第四个审计循环起,存入票据也以同样的方式定价:按基础费用计算 inbox 对 depositCalldataLength() 字节所要求的数额,tokenSubmissionCost 这项设置则是它的下限。这一长度同样是所有者的一项设置(setDepositCalldataLength,从不为零):默认为 1,024 字节,高于网关的 USDC 存入所用的 740 字节。在此之前,存入的提交成本是一项固定设置,一旦基础费用增长到超出它,每个批次都会失败。
不会扩散的故障
自 2026-10-01 起,在 2026-09-29 的安全审计之后:
- 被拒绝的篮子只会阻断它自己的市场。如果 Robinhood Chain 拒绝某个市场的篮子,例如其中有一只该链的路由器或预言机不支持的股票,该市场的镜像金库就保持未初始化状态并保留其现金,这些现金可以通过紧急模式回收。同一跨链批次中的其他市场照常通过。在此之前,整个批次都会失败,而任何人都可以把健康的市场与一个会被拒绝的市场捆绑在一起。
- 一个远端代币,一个标识符。跨链桥枢纽拒绝把第二个篮子标识符映射到一个已被映射的 Robinhood Chain 代币上。
- 暂停中的远端枢纽仍会应用角色设置。每个批次都携带当前的 Keeper 和紧急管理员。暂停中的枢纽照样会应用它们,因此 StockFun 所有者的更换总能抵达 Robinhood Chain。现金按市场记录,并在解除暂停后通过 sweep 支付给各镜像金库。
- 官方跨链桥的记录按顺序支付。在 Orbit 官方跨链桥上(用于测试网,也作为备用),代币和账目作为两张独立的票据分别到达。无论由谁触发 sweep,枢纽都会按消息到达的顺序完整地支付等待中的记录。自 2026-10-01 的安全流水线起,一张账目票据支付的记录最多与它加入队列的记录一样多,从最早的开始,这些记录可能属于更早的批次;其余的由 sweep 支付,每次调用默认最多 64 条记录。在此之前,暂停或延迟的存入所留下的积压,可能让一张票据超出其自动执行的固定 gas,而该批次会一直未被记录,除非有人在七天内手动重放这张票据。
有一种故障曾经只被部分隔离。2026-10-01 的第二轮审计发现,如果现金代币拒绝某一个镜像金库,例如因为其发行方冻结了该地址,官方跨链桥的队列就会停滞,并且在两种通道上,与该市场捆绑在一起的每一个批次都会回滚(R2H-2)。2026-10-05 的第二个审计循环缓解了这一问题,同一天的第四个审计循环将其关闭:这样的送达如今会单独等待,批次照常进行(见下文)。
自 2026-10-05 起,在当天的审计循环之后:
- 只有 Keeper 进行跨链。跨链批次
bridgeReady仅限 Keeper 调用。在此之前,任何人都可以发送跨链批次:第三方可以在自己于 Curve 池上的两笔交易之间,以适配器所允许的最宽松的最低数额塞入一个批次,或者抢先跨链 Keeper 批次中的一个金库,使 Keeper 的批次失败。 - 远端枢纽上的紧急转移会被结清,而不是由另一个市场支付。在 USDG 通道上,枢纽在支撑其所欠数额的现金不足时拒绝支付这些数额,这笔现金是它自当天的第二个审计循环起自行保有的一项计数,从来不是它的余额,而余额中还包含仍在途中的批次的现金;现金通过
restore送回。在官方跨链桥通道上,StockFun 的所有者在转移之前暂停枢纽,删除其现金被紧急转移拿走的那条记录,然后解除暂停。参见紧急模式。
自 2026-10-05 的第四个审计循环起,该循环贯彻了创始人“一处失败绝不阻断其余部分”的规则(参见架构):
- 被拒收的送达单独等待。在 USDG 通道上,现金代币拒绝转给某个镜像金库的份额会留在远端枢纽上,作为欠该市场的款项,并有资产支撑(
DeliveryRefused),批次中的其他市场照常获得支付。在官方跨链桥通道上,这样的记录会离开队列,并为其市场单独保存(undeliverable),因此排在它后面的记录和之后的票据都会照常支付。在两种通道上,一旦该金库重新接收现金,任何人都可以通过sweep(marketId)支付它。自 2026-10-06 起,在官方跨链桥通道上,Keeper 还会结束那些被拒记录已由一次 sweep 一并支付、或已由 StockFun 的所有者记到该市场名下的转账,这样就不会有转账被永远跟踪下去。 - 批次中的每个市场都单独进行。
bridgeReady会把所列市场中的以下几类排除在外:金库无法释放其现金的市场——已暂停、为空、被发行方拒绝,或者自第五个审计循环起,尚无代码的金库,例如协议市场的金库在被指定之前——、未知的市场,以及适配器无法为其构建载荷的市场(MarketSkipped),其他市场照常进行。Keeper 的最低数额覆盖所列出的整个批次,并按实际离开的部分按比例缩减;Bridged只列出已经离开的市场。没有任何东西离开的批次会失败,并给出第一个市场的原因。 - 每一段买入都单独进行,在镜像金库上与在以太坊金库上一样(
LegFailed):参见TreasuryVault。 - 紧急转移可以记在单个市场名下。StockFun 的所有者在同一次调用中转移一个市场的现金并结清其账目,这样其他市场都不必等待:
emergencyTransferFromPending拿走枢纽在 USDG 通道上欠该市场的款项,或其在官方跨链桥通道上被拒收的份额;emergencyTransferRecord则整条拿走官方跨链桥队列中的一条记录。自第五个审计循环起,后者只用于存入已经到达的记录:队列的现金是汇集在一起的,因此,如果数额超过扣除为被拒收份额保留的部分之后剩余的现金,它就会拒绝(RecordNotCovered)。存入已经丢失的记录会被核销(writeOffRecord)。在 USDG 通道上,不记在任何市场名下的转移按设计仍会造成整体等待:在现金被送回或被核销之前,账目会显示一笔短缺。 - 被暂缓的价格只会阻止它自己的段(自 2026-10-06 起):处于公司行动中的股票只会让它自己的段失败,在每一个镜像金库中都是如此;在设置了排序器检查的情况下,排序器宕机会阻止每一段,直到它恢复后已经过宽限期,而现金会在金库中等待(上文,“当预言机暂缓给出一个价格时”)。
批次的 compose gas
自第十个审计循环(2026-10-06)起。跨链批次在 Robinhood Chain 上的最后一步,即远端枢纽的 compose,会初始化每个市场的镜像金库并为其注入资金,因此它的 gas 随批次增长。它过去只获得一个固定数值,默认 1,200,000,无论批次包含什么:四个基于五只股票篮子的新市场耗尽了它。它们的 USDG 随后停留在远端枢纽上,没有任何记录,之后每一个包含相同市场的批次都以同样的方式失败,只有在 Robinhood Chain 的端点上手动运行才能让它继续前进。没有任何损失,但在此期间,该批次中没有任何市场被买入或空投。
- 一个基数加上每个市场的一份。USDG 适配器给一个包含 n 个市场的批次
composeGas + n × composeGasPerMarket的 compose gas,默认为 200,000 加上每个市场 400,000,发送和每一次报价都相同。在 Robinhood Chain 测试网的一个分叉上、通过 LayerZero 自己的端点:一个五只股票市场的第一个批次约需 294,000 gas(由实测的一至三只股票外推得出),一个已经设置好的市场需 21,000 至 39,000 - 每个批次最多 17 个市场。LayerZero 会拒绝超过路径大小限制的消息,默认 10,000 字节,而每个五只股票的市场最多给批次的消息增加 544 字节:17 个市场放得下,18 个放不下。更大的批次会在任何东西移动之前被整体拒绝,每个金库都保留其 USDC。Keeper 最多发送这么多,等待最久的市场优先,其余的在它的下一轮发出,因此没有市场会永远等待。官方跨链桥通道没有这样的上限
- 在 Robinhood Chain 的限制之内。最大批次的 compose gas 至多为 24,000,000,低于 Robinhood Chain 在一笔交易中执行的 32,000,000 gas;所有者的设置无法超出这一限度。在主网之前,所有者会读取 Paxos 的 USDG 所用路径的大小限制,如果不同,就相应设置上限
- 成本很低。LayerZero 的执行器按 Robinhood Chain 的 gas 价格收取额外的 gas:在测试网上,一个批次的费用每百万 gas 增加 0.00001 ETH
- 旧版适配器会拒绝每一个批次,直到所有者设置这两项新设置,而它的升级会在同一笔交易中完成这一设置。测试网的适配器于 2026-10-06 以这种方式升级,它的下一个批次由 LayerZero 的执行器以其新选项完成 compose:一个市场 600,000 gas,使用了 115,990
- 停滞的 compose 会说明这一点。Keeper 针对未按时计入的转账的警报现在会读取批次消息在 Robinhood Chain 端点上的状态:尚未送达那里;已 compose,计入随后进行;或已存储,其 USDG 停留在远端枢纽上,等待以更多 gas 手动再次运行,任何人都可以这样做,警报会给出已存储消息的哈希。Keeper 仍然不会自己运行跨链桥的 compose
哪些已经验证,哪些没有
先说当前状态。没有进行任何主网部署,也没有进行任何真实资金的转移。本地测试模拟了送达;它们并不能证明一次真实的 LayerZero 送达。空投的发送于 2026-10-04 写进代码,是针对 LayerZero 和股票适配器的 mock 进行测试的。
LayerZero 测试网运行,2026-10-06。协议被部署在 Sepolia 和 Robinhood Chain 的测试网上(167 笔部署交易,全部成功),并由 Keeper 在 LayerZero 真实的测试网端点、DVN 和执行器上,从 13:50 到 19:07 UTC 端到端地运行,共七个每小时的时间窗口:每个时间窗口的 ETH 都被转换一次,在一个 LayerZero 批次中跨链,在远端枢纽上经 compose 进入镜像金库,并花费在三只测试股票上。六个空投循环被开启,通过 LayerZero 发回,并在空投合约上经 compose 处理;前四个由五位持有者全额领取,第五个被部分领取,第六个留待领取,每一笔支付都恰好等于根据持仓记录器独立计算出的份额。事故演练(暂停、紧急转移和 restore、rescue、一个带着待处理交易被终止的 Keeper、一次手动运行的 compose、一个过期的喂价、一只暂停的股票、排序器防护、一次被现金代币拒收的送达)在真实消息上进行,并按文档所述恢复,只有两个半项例外:Sepolia 跨链桥枢纽的暂停,以及一次手动运行的跨链桥 compose。Sepolia 在这次运行期间启用了以太坊的 Glamsterdam 升级:最初的几次空投送达在 LayerZero 的执行器处耗尽了 gas,并被手动执行,而送达 gas 的修复(见上文)通过升级得到应用,并支撑了之后的各个循环。Keeper 于 18:25 以第九个审计循环的代码重启,并顺利运行了最后一个时间窗口,使用的是它根据模拟选择的 gas。
这次运行不能证明的内容:Paxos 的 USDG,其测试网代币在这些测试网上没有 OFT 功能,因此由一种置于 LayerZero MintBurnOFTAdapter 之下、仿照主网那一对设计的测试 USDG 代替,而这一对的 DVN、冻结和暂停都没有经过检验;Robinhood 的股票及其适配器,由置于 LayerZero OFTAdapter 之下的测试股票代替;真实的价格喂价和真实的流动性;主网的 gas、费用和最终性。仍需进行一次主网试验,即在一个验证用金库上进行首个小规模循环。
较早的 Sepolia 脚本使用的是官方 Orbit 跨链桥,并不验证 LayerZero。分叉上的成功,或测试网上的成功,都不是主网上实际送达的证据。