Robinhoodレール

ボールトが保有するトークン化株式は、Arbitrum OrbitのL2であるRobinhood Chain上に存在します。プロトコルはLayerZeroを通じてこのチェーンに到達し、PaxosのUSDG OFTをキャッシュレッグとして使います。

なぜこのレールなのか

この選択は、以前のレールを除外したうえで、2026-09-11に確定しました。

プライマリーミントのレールでは、ボールトのコントラクトが、発行体のもとで資産を保有する適格性を持たなければなりません。KYB、コントラクトアドレスの登録、そして発行体が公に文書化したことのない書面による確認が必要です。これが、プロジェクトにとって真に避けようのない唯一の障害でした。

Robinhood Chainのセカンダリープールには、そのいずれも必要ありません。誰にでも開かれています。StockFunは発行体と何の関係もなく、関係を持つ必要もありません。

その自由の代償は、クロスチェーンへの依存です。ブリッジ、2つのハブ、そして第三者が発行し、その第三者が凍結できるステーブルコインです。これは回避されたリスクではなく、受け入れられ、文書化されたリスクです。

資金の流れ

flowchart LR V[TreasuryVault

Ethereum] -->|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、マーケットごとに1つ] MV -->|v3 / v4プール| S[Stock Tokens] S -->|株式アダプター、ラップ| AD[AirdropDistributor

Ethereum] AD -->|請求| HO[Ethereum上の

トークンホルダー]

Robinhood ChainからEthereumへのUSDGの復路は、クリエイターバイバックのためだけに使われていました。この2つは、2026-09-28にコードから削除されました。

2026-10-04以降、ミラーボールトは自身の株式をEthereum上のエアドロップのコントラクトへ送ります。各株式は、Robinhood Chain上でそのLayerZeroアダプターにロックされ、Ethereum上でラップされた形でミントされ、ホルダーはそこでそれを請求します。この経路は株式だけを運びます。アダプター(株式ごとに1つ)は、メインネット用のものはまだリポジトリになく、テストではモックを使っています。2026-10-06のLayerZeroのテストネット実行では、テスト用のアダプターを使いました(後述)。

パーミッションレスなもの、そうでないもの

コンポーネント 状態
LayerZeroのエンドポイント パーミッションレス
Stock Tokenのセカンダリープール パーミッションレス — プロトコルが使用するもの
Robinhoodのプライマリーミント/バーン KYB — 使用しない
USDG Paxosがミントとバーンを管理し、一時停止や凍結が可能

最後の行は、このレールで最も強い依存関係であり、現実のものです。

ミラーボールト

すべてのマーケットは、Robinhood Chain上にミラーボールトを持ちます。ミラーボールトはCREATE2でデプロイされ、そのアドレスはEthereum側から予測できます。そのためキーパーは、USDCが届く前にリモートハブにミラーボールトを事前にデプロイさせることができ、送金がコードのないアドレスに着地することはありません。2026-10-05以降、これができるのはキーパーとStockFunのオーナーだけです(predeploy)。それまでは誰でもそれができ、まだ存在しないマーケットについてさえ、そのミラーボールトをその日の接続設定に結び付けることができました。リモートハブは、キーパーを運ぶブリッジバッチからキーパーを知ります。最初のバッチより前はどのキーパーも知らないため、StockFunのオーナーが最初のマーケットのミラーボールトを事前にデプロイします。2026-10-05の2回目の監査ループ以降、キーパーがミラーボールトを事前にデプロイできないマーケット(最初のバッチより前、またはリモートハブがまだ知らないキーパーの変更の後)は、ボールトをデプロイするには少なすぎるガスで送られる代わりに、アラートとともにバッチから外されます。他のマーケットはブリッジを渡り、そのバッチが新しいキーパーを運びます。

2026-10-02以降、各ミラーボールトはプロキシ(MirrorVaultProxy)であり、ボールトのデプロイ時にリモートハブが指定するボールトの実装の前に置かれます。プロキシのコンストラクタは引数を取らないため、その作成コード、ひいてはすべてのミラーボールトのアドレスは、実装が何であってもEthereum側から予測できるままです。ボールトのバスケットは最初のバッチとともに届きます。2026-10-05以降、このバッチは、ボールトの株式ルーターとオラクルも、その時点でリモートハブが指定しているものに更新します。そのため、ある株式がリストに追加される前にデプロイされたボールトでも、その株式を含むバスケットを受け入れます。リモートハブが反映するStockFunのオーナーは、ミラーボールトを1つずつ、マーケットごとに、即時発効でアップグレードします。

スワップのルートはハードコードされていません。calldataで渡され、abi.encode(uint8 version, bytes payload)としてエンコードされます。バージョン3はパックされたUniswap v3のパス、バージョン4はv4のPathKeyの配列です。ボールトはレッグごとに複数の候補を受け取り、許容幅を満たした最初の候補で約定します。2026-10-01以降、金額の一部しか約定しないルートは失敗し、次の候補が試されます。それ以前は、v3のルートで部分約定が起きると、使われなかったUSDGがルーター内に取り残されていました。

2026-10-01のセキュリティパイプライン以降、v3のルートは1プールずつ実行されます。各プールは入力の全量を消化しなければならず、そうでなければルートは失敗します。各プールの出力は株式ルーターに戻って次のプールの入力となり、最後のプールが、レッグの最低額を適用してボールトに支払います。あるプールが失敗すると、同じ試行のそれまでのプールも取り消され、次の候補が試されます。それまでは、チェックはルートの最初のプールしか見ていませんでした。それより先で部分約定が起きると、中間トークンが、誰でも持ち出せる状態でUniswapのv3ルーターであるSwapRouter02に残され、その一方でレッグは成功していました。現在、マルチホップのv3のレッグには、プールごとに1回のスワップと1回の承認のコストがかかります。

各レッグは、バスケットのウェイトに従ってその株式のために確保されたUSDGだけを使います。TreasuryVaultを参照してください。その株式のフィードに対する価格許容幅(デフォルトで200ベーシスポイント)は、リモートハブが保持し、すべてのミラーボールトがその都度読み取る設定です(setStockMaxSlippageBps)。2026-10-05以降、ボールトは、その許容幅より緩くなることのないキーパー自身の最低額を、実際に届いた量に対して適用します。

オラクルが価格を差し止めるとき

2026-10-06以降、ミラーボールトのオラクルには、Robinhood自身のドキュメントが推奨する2つのガードがあります。どちらも価格を差し止めることしかできず、決して変更することはありません。

  • コーポレートアクション。株式がコーポレートアクション(たとえば株式分割)の最中にある間、そのトークンはオラクルが一時停止中であることを示し(oraclePaused())、そのChainlinkフィードは最後の値を保ちます。その値は、トークンの乗数が変わる間も新しく見えることがあります。その場合、オラクルはその株式の価格を差し止めます。その購入のレッグは単独で失敗し(StockOraclePaused)、そのUSDGはその株式のために確保されたままで、バスケットの他の株式は購入されます。このチェックはすべての株式でオンです。StockFunのオーナーは1つの株式についてこれをオフにでき(setOraclePauseCheck)、その場合、その株式の価格はフィード自身のチェックだけに頼ります。応答しないトークンは一時停止していないものとして数えられます。
  • シーケンサー。Robinhood Chainは、単一のシーケンサーを持つArbitrumのチェーンです。ChainlinkのL2シーケンサーのアップタイムフィードが設定されていれば(setSequencerUptimeFeed)、オラクルは、シーケンサーが停止しているとフィードが示す間、復旧から猶予期間(デフォルトで1時間)が経っていない間、またはフィードを読み取れない間、すべての価格を差し止めます。それまでは、どのレッグも購入しません。現時点でRobinhood Chainにはそのようなフィードが存在しないため、レールはこのチェックをオフにしてデプロイされます。Chainlinkがそれを公開すれば、StockFunのオーナーがそのフィードを設定します。

キーパーは、何かを見積もる前に両方のガードを確認し(キーパーを参照してください)、Workerは株式の価格が欠けている理由を示し、dappはそれを表示します(dappを参照してください)。

エアドロップへの株式の送付

2026-10-04以降、購入された株式がミラーボールトから出ていく経路は1つ、sendToAirdropだけです。キーパーは送付する株式のリストを指定してこれを呼び出し、LayerZeroの手数料を支払います。払いすぎた分はキーパーに返金されます。ボールトは、各株式について、その残高の全量を、その株式のアダプターを通じて、マーケットのIDをペイロードとして、Ethereum上のエアドロップのコントラクトへ送ります。キーパーは金額も行き先も指定しません。各株式のアダプター(setStockAdapter。アダプターがまさにそのトークンを運ぶことを確認します)とエアドロップのコントラクト(setAirdrop)は、リモートハブ上で、その管理者であるStockFunのオーナーが指定します。同じ株式を2回リストに載せたり、バスケット外の株式を載せたりすると、呼び出しは失敗します。

2026-10-06以降、キーパーは、各配信がEthereum上で受け取るガスを指定します。sendToAirdrop(stocks, receiveGas, composeGas)で、株式のOFTのlzReceiveについては、そのOFTが強制するガスへの上乗せ分、エアドロップのコントラクトについてはそのcomposeのガスです。リモートハブは、各値を、その管理者が設定する下限と上限の間に収め、ゼロはデフォルト値を意味します(airdropGas)。ボールトは、ハブが認めた値で送付とその見積もりを組み立てます。株式だけを指定する呼び出しは、両方のデフォルト値を使います。キーパーは、Ethereum上での配信のシミュレーションから値を選びます(キーパーを参照してください)。EthereumのGlamsterdamアップグレード(Sepoliaでは2026-10-06以降有効)によって、新しいストレージスロットのコストはおよそ5倍になり、それまでの単一のcomposeの数値である600,000ガスでは、LayerZeroのテストネット実行の最初のサイクルの配信がすべてガス不足になりました。ポリシーのないバージョンからアップグレードされたリモートハブは、両方が設定されるまで、すべての送付と見積もりを拒否します(AirdropGasNotSet)。

2026-10-05以降、各株式は個別に送られます。アダプターのない株式、残高を読み取れない株式、そして送付が失敗する株式(発行体による凍結、ピアの欠如、キーパーの支払いでまかなえない手数料)は、イベント(AirdropSendFailed)とともにボールトに残り、他の株式は送られます。何も送られない場合、呼び出しは失敗し、その理由を示します。見積もりのquoteSendToAirdropは、価格を付けられないものを、失敗する代わりに除外します。

LayerZeroが運ぶのは小数点以下6桁までです。18桁の株式の10^12単位未満、つまりトークンの100万分の1未満はブリッジを渡れず、後の送付のためにボールトに残ります。

Ethereum上では、その株式のOFTがラップされた株式をエアドロップのコントラクトにミントし、その後LayerZeroのエンドポイントがペイロードとともにコントラクトを呼び出します。コントラクトがその配信を計上するのは、それが自身のエンドポイントから、オーナーが登録した株式のOFTから、Robinhood Chainから来たもので、ペイロードが示すマーケットについてブリッジハブが導出するミラーボールトによって送られた場合だけです。この配信は、送付が運んだガスで実行されます(前述)。ガスが不足した配信は、何も失うことなく失敗します。配信はLayerZeroのエンドポイント上に保存され、composeだけが失敗した場合は、ラップされた株式はすでにエアドロップのコントラクト上にあり、誰でもより多くのガスで再実行できます。2026-10-06以降は、キーパーが自身の鍵から、上限の範囲内でそれを行い、2回目の失敗にはアラートを出します。詳細と測定値はデプロイとエアドロップにあります。

アップグレードと接続設定

2026-10-02以降、レール上のStockFunのコントラクトは、ミラーボールトのデプロイヤーを除いてすべてアップグレード可能です。すべてのミラーボールトのアドレスは、このデプロイヤーのアドレスから導出されます。Ethereumでは、ブリッジハブとそのアダプターはファクトリーのオーナーに従います。Robinhood Chainでは、リモートハブがアップグレード権限の管理元です。リモートハブは自身の緊急管理者、つまり直近のバッチが運んできたEthereumのオーナーを返すため、リモートハブ、ミラーボールト、株式ルーター、オラクルは、StockFunのオーナーによって即時発効でアップグレードされます。

リモートハブは、そのチェーン上で最初に、初期管理者とともにデプロイされます。初期管理者はその後、株式ルーター、オラクル、そして今後のミラーボールトの実装を指定し、エアドロップの経路と株式アダプターが与えられていれば、それらも指定します。最初のバッチが、その管理者をStockFunのオーナーに置き換えます。

2026-10-05以降、同じ管理者がリモートハブの設定を保持します。1回のスイープが支払う記録の数(デフォルトで64、setMaxRecordsPerSweep、ゼロは不可)、ミラーボールトの購入の価格許容幅、そして各エアドロップ配信のガス(setAirdrop)です。2026-10-06以降は、オラクルの2つのガードと、Ethereum上のエアドロップ配信の2つのガスのポリシーも保持します。それぞれがデフォルト値、下限、上限からなります(setAirdropReceiveGasは650,000で200,000〜1,500,000の範囲、setAirdropComposeGasは1,250,000で600,000〜4,000,000の範囲。ゼロの下限、上限を超える下限、範囲外のデフォルト値は拒否されます)。リモートハブは初期化時に両方を設定し、DeployRemoteはその環境変数から再び設定します。管理者が指定する代わりのオラクル(setOracle)は、両方のガードがオフの状態で始まるため、管理者はそのオラクルについてそれらをもう一度オンにします。すでに初期化されたミラーボールトは、初期化されたときのオラクルを保持します。

Ethereumでは、ブリッジハブはもう自身のアダプターをデプロイしません。アダプターはハブを指す形でデプロイされ、その後、StockFunのオーナーが一度だけ指定します(setAdapter)。この指定の際に、アダプターが固定しているアドレスが確認されます。その後の差し替え(changeAdapter)は、2026-10-05以降は即時です。受け入れられるのは、現在のアダプターとまったく同じ固定値、つまり同じハブ、ファクトリー、キャッシュトークン、リモートハブ、送付先チェーン、トランスポートを持つアダプターだけです。差し替えで変えられるのはガスの数値、オプション、Curveのプールであり、送付先は決して変えられません。リモートハブは依然として、自身が想定しているアダプターからのバッチしか受け付けません(M-2、緊急モードを参照)。そのため、アダプターは、同じアドレスのままその場でアップグレードすることで変更されます。新しいアドレスにするには、まずそれを受け入れるようにリモートハブをアップグレードする必要があります。2026-10-05、オーナーはこれをそのまま維持することを決定しました。

アダプター自体の数値も、StockFunのオーナーの設定です。USDGのレールでは、Curveで受け入れる、USDCあたりのUSDGの最悪のレート(デフォルトで30ベーシスポイント)と、Robinhood Chain上での配信の最後のステップのガス(setSettings)です。10回目の監査ループ以降(2026-10-06)、このガスは、すべてのバッチが必要とする基本分(デフォルトで200,000)に、バッチのマーケットごとの分(デフォルトで400,000)を加えたもので、1つのバッチが運ぶマーケットは最大17です(setBatchGas。後述の「バッチのcomposeのガス」を参照してください)。それまでは、運ぶものにかかわらず、すべてのバッチに1つの数値(デフォルトで1,200,000)が支払われていました。正規ブリッジのレールでは、2つのチケットのガス(setTicketGas)です。2026-10-05以降、正規ブリッジのレールの会計情報のチケットは、現在のベースフィーでバッチのサイズに対してブリッジのインボックスが求める額を支払い、設定はその下限となります。オフチェーンで、ガス価格なしで読み取られた見積もりは、ベースフィーをゼロと見なして、そのチケットに下限の額しか付けていなかったため、長いバッチは実際のベースフィーのもとで失敗していました。同日の2回目の監査ループ以降、キーパーは、自ら指定するベースフィー、つまり直近のベースフィーの2倍で見積もりを求め(quoteBridgeAt)、超過分を取り戻します。4回目のループ以降、入金のチケットも同じ方法で価格が付けられます。ベースフィーのもとでdepositCalldataLength()バイトに対してインボックスが求める額で、tokenSubmissionCostの設定がその下限です。この長さもオーナーの設定であり(setDepositCalldataLength、ゼロは不可)、デフォルトは1,024バイトで、USDCのためのゲートウェイの入金の740バイトを上回ります。それまでは、入金の送信コストは固定の設定であり、ベースフィーがそれを超えて上昇すると、すべてのバッチが失敗していました。

封じ込められる障害

2026-09-29のセキュリティ監査を受けて、2026-10-01以降は次のとおりです。

  • 拒否されたバスケットがブロックするのは、自身のマーケットだけです。Robinhood Chainがあるマーケットのバスケットを拒否した場合(たとえば、そのチェーンのルーターやオラクルが対応していない株式)、そのマーケットのミラーボールトは初期化されないまま資金を保持し、その資金は緊急モードで回収できます。同じブリッジバッチに含まれる他のマーケットは、そのまま処理されます。それ以前は、バッチ全体が失敗し、誰でも、正常なマーケットを拒否されるマーケットと同じバッチにまとめることができました。
  • 1つのリモートトークンに、1つの識別子。ブリッジハブは、すでに対応付けられているRobinhood Chainのトークンに、2つ目のバスケット識別子を対応付けることを拒否します。
  • 一時停止中のリモートハブも、ロールは適用します。各バッチは、現在のキーパーと緊急管理者を運びます。一時停止中のハブもそれらを同様に適用するため、StockFunのオーナーの変更は必ずRobinhood Chainに届きます。資金はマーケットごとに記録され、一時停止の解除後に、スイープによってミラーボールトへ支払われます。
  • 正規ブリッジの記録は順番どおりに支払われます。テストネットで、またフォールバックとして使われる正規のOrbitブリッジでは、トークンと会計情報が2つの別々のチケットとして届きます。ハブは、誰がスイープをトリガーしても、待機中の記録を、そのメッセージが着地した順に、全額支払います。2026-10-01のセキュリティパイプライン以降、会計情報のチケットは、自らがキューに追加した数までの記録を、古いものから順に支払います。それらの記録は、以前のバッチのものであることもあります。残りはスイープが、1回の呼び出しにつきデフォルトで最大64件まで支払います。それ以前は、一時停止や遅れた入金によって残った未処理分のために、チケットが自動実行の固定ガス量を超えてしまうことがあり、誰かが7日以内にチケットを手動でリプレイしない限り、そのバッチは記録されないままでした。

一部しか封じ込められていなかった障害が1つありました。2026-10-01に行われた監査の第2ラウンドは、キャッシュレッグのトークンが1つのミラーボールトを拒否した場合、たとえばその発行体がそのアドレスを凍結したために拒否した場合、正規ブリッジのキューが停止し、両方のレールで、そのマーケットを含むすべてのバッチが失敗することを明らかにしました(R2H-2)。2026-10-05の2回目の監査ループがこれを緩和し、同日の4回目のループがこれを解決しました。現在、そのような配信はそれだけで待機し、バッチは先へ進みます(後述)。

同日の監査ループを受けて、2026-10-05以降は次のとおりです。

  • ブリッジで送るのはキーパーだけです。ブリッジバッチ(bridgeReady)は、キーパーだけのものです。それまでは誰でもそれを送ることができました。第三者が、Curveのプールで自ら行う2つの取引の間に、アダプターが受け入れる最も緩い最低額でバッチを差し込むことも、キーパーのバッチに含まれるボールトの1つを先にブリッジで送ることで、そのバッチを失敗させることもできました。
  • リモートハブでの緊急リカバリーは清算され、別のマーケットが支払うことはありません。USDGのレールでは、ハブは、自身が負っている額を裏付ける資金が不足している間、その支払いを拒否します。これは、同日の2回目の監査ループ以降、ハブが自ら保持している集計であり、残高では決してありません。残高には、まだ移動中のバッチの資金も含まれるからです。資金はrestoreを通じて戻ってきます。正規ブリッジのレールでは、StockFunのオーナーが、移転の前にハブを一時停止し、緊急リカバリーによって資金を持ち出された記録を取り除き、その後に一時停止を解除します。緊急モードを参照してください。

1つの失敗が残りを決して止めないというファウンダーのルールを適用した、2026-10-05の4回目の監査ループ以降は、次のとおりです(アーキテクチャを参照してください)。

  • 拒否された配信は、それだけで待機します。USDGのレールでは、キャッシュレッグのトークンが拒否したミラーボールトの取り分は、そのマーケットへの未払い分として、裏付けを伴ってリモートハブにとどまり(DeliveryRefused)、バッチの他のマーケットには支払われます。正規ブリッジのレールでは、そのような記録はキューを離れ、そのマーケットのために別に保持されます(undeliverable)。そのため、その後ろの記録と次のチケットは支払われます。どちらのレールでも、ボールトが再び資金を受け取るようになれば、誰でもsweep(marketId)でそれを支払うことができます。2026-10-06以降、正規ブリッジのレールでは、キーパーは、拒否された記録が1回のスイープでまとめて支払われた送金や、StockFunのオーナーがマーケットの負担とした送金も閉じ、どの送金もいつまでも追跡され続けることがないようにします。
  • バッチの各マーケットは個別に進みます。bridgeReadyは、リストに載ったマーケットのうち、ボールトが資金を払い出せないもの(一時停止中、空、発行体による拒否、あるいは5回目のループ以降は、指定される前のプロトコルのマーケットのボールトのように、まだコードのないボールト)、未知のマーケット、またはアダプターがペイロードを組み立てられないマーケットを外し(MarketSkipped)、他のマーケットは進みます。キーパーの最低額はリストどおりのバッチをカバーし、実際に出ていった分に比例して引き下げられます。Bridgedには、出ていったマーケットだけが載ります。何も出ていかないバッチは、最初のマーケットの理由で失敗します。
  • 購入の各レッグは個別に進みます。Ethereumのボールトと同様に、ミラーボールトでもそうです(LegFailed)。TreasuryVaultを参照してください。
  • 緊急移転を1つのマーケットの負担とすることができます。StockFunのオーナーは、1つのマーケットの資金を移動させ、同じ呼び出しの中でその帳簿を清算するため、他のマーケットが待つことはありません。emergencyTransferFromPendingは、USDGのレールではハブがそのマーケットに負っている分を、正規ブリッジのレールではその拒否された取り分を持ち出し、emergencyTransferRecordは、キューに入った正規ブリッジの記録を丸ごと持ち出します。5回目のループ以降、後者は入金が着地した記録のためのものです。キューの資金はプールされているため、拒否された取り分のために保持されていない資金を超える額は拒否されます(RecordNotCovered)。入金が失われた記録は償却されます(writeOffRecord)。USDGのレールでは、どのマーケットの負担ともされない移転は、設計上、全体的な待機を保ちます。資金が戻されるか償却されるまで、帳簿は不足を示します。
  • 差し止められた価格が止めるのは、自身のレッグだけ(2026-10-06以降)。コーポレートアクションの最中の株式は、すべてのミラーボールトで、自身のレッグだけを単独で失敗させます。シーケンサーのチェックが設定されていれば、シーケンサーの停止は、復旧してから猶予期間が経つまですべてのレッグを止め、資金はボールトで待機します(前述の「オラクルが価格を差し止めるとき」)。

バッチのcomposeのガス

10回目の監査ループ以降(2026-10-06)。ブリッジバッチのRobinhood Chain上の最後のステップ、つまりリモートハブのcomposeは、各マーケットのミラーボールトを初期化して資金を入れるため、そのガスはバッチとともに増えます。以前は、バッチの中身にかかわらず、1つの固定の数値(デフォルトで1,200,000)を受け取っていました。5つの株式からなるバスケットの新しいマーケット4つで、そのガスが尽きました。その後それらのUSDGは何の記録もないままリモートハブに残り、同じマーケットを含む後のバッチもすべて同じように失敗し、Robinhood Chainのエンドポイントでの手作業での実行だけがそれを動かしました。何も失われませんでしたが、その間、そのバッチのどのマーケットでも購入もエアドロップも行われませんでした。

  • 基本分とマーケットごとの分。USDGアダプターは、n個のマーケットのバッチにcomposeGas + n × composeGasPerMarketのcomposeのガスを与えます。デフォルトでは200,000にマーケットごとに400,000を加えた値で、送付にもすべての見積もりにも同じように使われます。LayerZero自身のエンドポイントを通じたRobinhood Chainのテストネットのフォーク上で、5つの株式からなるマーケットの最初のバッチには約294,000ガス(測定した1〜3つの株式からの外挿)、すでにセットアップされたマーケットには21,000〜39,000が必要です
  • 1つのバッチは最大17マーケット。LayerZeroは、経路のサイズ制限(デフォルトで10,000バイト)を超えるメッセージを拒否し、5つの株式からなるマーケットはそれぞれバッチのメッセージに最大544バイトを加えます。17マーケットは収まり、18は収まりません。それより大きなバッチは、何かが動く前に丸ごと拒否され、各ボールトはUSDCを保持します。キーパーはそれ以上は送らず、最も長く待っているマーケットから先に送り、残りは次の周回で送られるため、いつまでも待たされるマーケットはありません。正規ブリッジのレールには、このような上限はありません
  • Robinhood Chainの制限の範囲内。最大のバッチのcomposeのガスは最大でも24,000,000で、Robinhood Chainが1つのトランザクションで実行する32,000,000ガスを下回ります。オーナーの設定はそれを超えられません。メインネットの前に、オーナーはPaxosのUSDGが使う経路のサイズ制限を読み取り、異なっていれば上限をそれに合わせて設定します
  • コストはわずか。LayerZeroのエグゼキューターは、追加のガスをRobinhood Chainのガス価格で請求します。テストネットでは、バッチの手数料は100万ガスあたり0.00001 ETH増えます
  • それ以前のアダプターは、オーナーが2つの新しい設定を行うまで、すべてのバッチを拒否します。アダプターのアップグレードは、それを同じトランザクションで行います。テストネットのアダプターは2026-10-06にこの方法でアップグレードされ、次のバッチは、LayerZeroのエグゼキューターによって新しいオプション(1マーケットで600,000ガス、うち115,990を使用)でcomposeされました
  • 停滞したcomposeはそれを示す。期限内に計上されなかった送金についてのキーパーのアラートは、今ではRobinhood Chainのエンドポイントでバッチのメッセージを読み取ります。まだそこに届いていない、composeされて計上がそれに続く、あるいは保存されている、のいずれかです。保存されている場合、そのUSDGはリモートハブにあり、より多くのガスでの手作業による再実行を待っています。再実行は誰でも行うことができ、アラートは保存されたメッセージのハッシュを示します。キーパーは今もブリッジのcomposeを自分では実行しません

検証済みのこと、未検証のこと

まず現状です。メインネットへのデプロイも、実際の資金の送金も一切行われていません。ローカルテストは配信をシミュレートするものであり、実際のLayerZeroによる配信を証明するものではありません。2026-10-04にコード化されたエアドロップへの送付は、LayerZeroと株式アダプターのモックに対してテストされています。

LayerZeroのテストネット実行、2026-10-06。プロトコルは、SepoliaとRobinhood Chainのテストネットにデプロイされ(デプロイのトランザクションは167、すべて成功)、LayerZeroの実際のテストネットのエンドポイント、DVN、エグゼキューターの上で、13:50から19:07 UTCまで、キーパーによってエンドツーエンドで実行されました。1時間ごとの時間枠7つで、各時間枠のETHは一度だけ変換され、1つのLayerZeroのバッチでブリッジされ、リモートハブ上でcomposeによってミラーボールトへ入り、3つのテスト用の株式に使われました。エアドロップのサイクル6つが開かれ、LayerZeroで送り返され、エアドロップのコントラクト上でcomposeされました。最初の4つは5人のホルダーによって全額請求され、5つ目は一部が請求され、6つ目は請求されないまま残され、各支払いは、保有量レコーダーから独立に計算した取り分とぴったり一致しました。インシデントの訓練(一時停止、緊急移転とrestore、rescue、トランザクションが保留中のまま停止されたキーパー、手作業で実行したcompose、古いフィード、一時停止された株式、シーケンサーのガード、キャッシュトークンが拒否する配信)は、実際のメッセージの上で行われ、文書どおりに回復しましたが、2つの半分だけは例外でした。Sepoliaのブリッジハブの一時停止と、手作業で実行したブリッジのcomposeです。この実行の最中にSepoliaがEthereumのGlamsterdamアップグレードを有効にしました。最初のエアドロップ配信はLayerZeroのエグゼキューターでガスが尽き、手作業で実行されました。そして配信のガスの修正(前述)がアップグレードによって適用され、その後のサイクルを支えました。キーパーは18:25に9回目の監査ループのコードで再起動され、シミュレーションから選んだガスで、最後の時間枠を問題なく実行しました。

この実行が証明しないこと:PaxosのUSDG。そのテストネットのトークンはこれらのテストネット上にOFTの機能を持たないため、メインネットのペアと同じ形の、LayerZeroのMintBurnOFTAdapterのもとにあるテスト用のUSDGが代わりを務め、そのペアのDVNも、凍結も、一時停止も試されていません。Robinhoodの株式とそのアダプター。LayerZeroのOFTAdapterのもとにあるテスト用の株式が代わりを務めました。実際の価格フィードと実際の流動性。メインネットのガス、手数料、ファイナリティ。メインネットでの試行、つまり検証用ボールトでの小規模な最初のサイクルがまだ残っています。

古いSepolia向けスクリプトは正規のOrbitブリッジを使用しており、LayerZeroを検証するものではありません。フォークでの成功も、テストネットでの成功も、メインネットでの本番の配信の証拠にはなりません。