意思決定ログ

正式な記録簿はdoc/DECISIONS.mdです。このページでは転換点を要約します。

2026-08-25 — 内部セキュリティレビュー

深刻度Highの指摘が1件ありました。部分約定の際、タックスを全額課されたETHとUSDCがルーター内に取り残されていたというものです。部分約定を処理するのではなく、拒否することで修正されました。

2026-08-27 — 手数料が4 %から5 %に

クリエイターの取り分は1 %から2 %へと倍増しました。$STOCKFUNの配分表は2 / 1.5 / 0.5から2 / 2.5 / 0.5になりました。トレジャリーの取り分は2 %のままであり、それこそが決して変わらない数字です。

受け入れた帰結:往復のコストは7.84 %から9.75 %になります。2026-10-05以降、料率とその配分はオーナーの設定であり、これらの値はそのデフォルト値です。

2026-08-27 — クリエイターバイバック

「出口なし」という除外を、常にバーンで終わる単一の経路に限って解除します。これにより、Treasury Ratioはクリエイターの裁量で低下しうるようになります。2026-09-27に廃止され、エアドロップに置き換えられました。

2026-08-29 — 緊急モード

オーナーは、公開された48時間の経過後、トレジャリーの資産を移動できます。「誰もトレジャリーに触れることはできない」という約束を置き換えます。プロトコルをトラストレスと説明することはなくなります。2026-10-05以降は即時:遅延期間はなくなりました。

2026-09-11 — レールがRobinhood Chainへ移行

障害となっていたのは、プライマリーミントの発行体のもとでのボールトコントラクトの適格性で、これは公に文書化されたことがありませんでした。Robinhood Chainのセカンダリープールはそれを必要としません。代償:受け入れたクロスチェーンへの依存。

2026-09-12 — ボンディングカーブの廃止

作成時からロックされた、2つのシングルサイドのUniswap v4ポジションに置き換えられました。グラデュエーションも、マイグレーションも、グラデュエーション手数料もありません。

ローンチ時のFDVは変わりません。カーブの開始時と同じ3.409 ETHのままです。最初の2 ETHの購入で供給量の36.06 %を取得し、以前は36.99 %でした。ローンチは1ポイント以内の差で以前と同じように振る舞います。

途中で除外された案:上限$50,000で$5,000からローンチする案。深さが3.25 ETHしかなく、最初に2 ETHを購入した人が供給量の57 %を取得できてしまいました。また、上限を下げればマーケットが落ち着くという考えも除外されました。上限を下げると、薄い上限なしのバンドに早く引き継がれ、50 ETHを支出した後に到達するFDVが2倍になります。

2026-09-12 — 3ブロックのアンチスナイプ

ブロック1はクリエイターのみ、ブロック2はクリエイターとオーナーのホワイトリストを除いて99 %がバイバックへ、それ以降は通常どおり。逓減型アンチスナイプによって2026-09-28に置き換えられました。

この決定は、反対意見を十分に承知したうえで下されました。99 %のタックスは誰かがお金を失ったときにしか何も生み出さず、ブロック2を閉じてしまえば、被害者を出さずに同じ抑止効果が得られたはずだ、という意見です。ホワイトリストがクリエイターレベルではなくプロトコルレベルに置かれているのは、まさにマーケットごとのインサイダーの優位性にならないようにするためです。

2026-09-12 — 売却時のバーンは行わない

売却のたびに、入ってくるトークンの10 %をバーンアドレスへ送るという案は見送られました。売り手が負担すれば、往復のコストは18.78 %に押し上げられます。LPが負担すれば、「流動性は永久にロック」という表現が偽りになり、誰にでも、ほぼ1:1のレバーで流通量をバーンして自分の保有分をパンプする手段を与えてしまいます。

2026-09-27 — エアドロップがクリエイターバイバックに取って代わる

マーケットのトレジャリーの用途は1つになりました。トレジャリーが購入する株式の100 %は、Robinhood Chain上で、そのトークンのホルダーへ比例配分で、現物でエアドロップされます。クリエイターバイバックは廃止され、それとともにブリッジの復路も廃止されました。$STOCKFUNのバイバック&バーンは存続します。

途中で除外された案:クリエイターバイバックの維持、そして以前のV2計画であった、60 %をトレジャリーに残して40 %を分配する配分。受け入れた帰結:トレジャリーはもはや蓄積されず、Treasury Ratioは意味を失い、スローガンとタグラインは見直しが必要になります。仕組みは2026-10-04にコード化されました。エアドロップを参照してください。

2026-09-27 — 24時間ごとのサイクル

エアドロップの実行頻度は同じ日に決定されました。24時間に1回、トレジャリーに少なくとも0.1 ETHが貯まっている各マーケットについて、キーパーが変換、ブリッジ、株式の購入を行い、続いてその株式をエアドロップします。しきい値を下回る場合、その日は何も起こらず、ETHは待機します。

株式を購入できるのは米国株式市場が開いている間だけなので、週末とNYSEの休場日にはサイクルはありません。キーパーのコードでは、2026-10-06までは、変換は取引時間中、ボールトがしきい値を保有した最初の周回で行われていました。それ以降はこの決定に従い、時間枠ごとに1回、時間枠が閉じた後のキーパーの最初の周回で、その時点でボールトがしきい値を保有している場合にだけ行われます(後述の2026-10-06を参照)。同日の6回目の監査ループ以降は、ボールトが保有するUSDCもこのペースに従います。エアドロップへの送付は、2026-10-05以降、その日の取引時間の後に、時間枠ごとに1回行われます。キーパーを参照してください。

2026-09-27 — 滞留資金と保有量の測定

中断されたサイクルの残余は、しきい値に達したかどうかにかかわらず、次のサイクルで完了します。ミラーボールトに24時間滞留したエアドロップ資金は、オーナーが事前告知なしに移動できます。これは公開された48時間の遅延期間に対する唯一の例外であり、承知のうえで選ばれたものです。保有量は、月曜日も含め、サイクル前の24時間の平均残高として測定されます。滞留資金に適用される時間枠は、2026-09-28に48時間になり、このルールはコード化されないまま2026-10-05に廃止されました。

2026-09-28 — 逓減型アンチスナイプ

開始ブロックで80 %、ブロックごとに8ポイントずつ減り、11番目のブロックからは5 %。買いにも売りにも適用されます。超過分はマーケットのトレジャリーに入り、$STOCKFUNではチームの請求可能な手数料になります。免除対象:クリエイターのローンチ時の購入と、クリエイターが設定するホワイトリスト。このリストは作成トランザクション内で確定し、公開され、イミュータブルで、上限は20アドレスです。$STOCKFUNでは、ローンチ時にオーナーが設定します。2026-10-05以降、これらの数値はオーナーの設定であり、上記の値はそのデフォルト値です。

途中で除外された案:最初の数ブロックで購入したウォレットにタグを付け、転送後も含めて、その後の売却にタックスを課すこと。v4のプールにはウォレットが見えず、トークン側で徴収するタックスは売却を失敗させ、StockFunのルーター以外でタグ付きウォレットをブロックすれば、そのトークンはスキャナーにフラグを立てられてしまいます。受け入れた帰結:ホワイトリストはプロトコルからクリエイターへと移ります。これは、2026-09-12の決定がインサイダーの優位性を防ぐために除外していたことです。

2026-09-28 — 滞留したエアドロップ資金:48時間

ミラーボールトに、24時間ではなく48時間とどまったエアドロップ資金は、オーナーが事前告知なしに移動できます。24時間では、この時間枠がサイクルの周期と同じだったため、1サイクル分の通常の繰り越しが事前告知なしに移動可能になっていました。48時間では、もはやそうはなりません。金曜日に失敗したサイクルの資金は、それでも月曜日のサイクルより前の日曜日に移動可能になります。同じ日に決定:このカウントは、一時停止中も週末も、決して止まりません。コード化されないまま2026-10-05に廃止されました。緊急移転はどこでも即時です。

2026-09-28 — オンチェーンで記録される保有量

各マーケットのトークンが各ウォレットの保有量を時系列で記録するため、サイクル前の24時間の平均と各取り分はコントラクトが計算します。キーパーがそれらを提供することは決してありません。除外された案:キーパーがオフチェーンで計算し、異議申し立て期間を設けて公開する配分。受け入れたコスト:トークンの転送のたびに、追加のガス代がかかります。

2026-09-28 — Ethereum上での、ラップされた株式によるエアドロップ

Robinhood Chain上で購入された株式は、そこでStockFunがデプロイしたLayerZeroアダプター(株式ごとに1つ)にロックされ、ラップされた株式としてEthereumへ送られます。分配は、トークンとその保有量が存在するEthereum上で行われ、各ホルダーは自己負担で自分の取り分を請求します。受け入れた帰結:ラップされた株式の価値は、ロックされた株式とLayerZeroの設定にのみ依存し、Ethereum上に取引市場はなく、発行体が株式トークンを凍結すれば、ロックされた株式も動かせなくなります。同じ日に決定:PaxosがUSDGについてそうしているように、オーナーが、遅延期間も引き出しの上限もなしに、アダプターのLayerZeroの設定を保持します。除外された案:デプロイ後に凍結される設定と、48時間の事前告知のもとでの変更。

2026-09-28 — 公式ルーターは変更可能なまま

オーナーは公式のスワップルーターをいつでも変更でき、フックはそのルーターを通じてアンチスナイプのホワイトリストを認識します。受け入れた帰結:別のルーターを指定することで、オーナーは誰でもアンチスナイプから免除できます。

2026-09-28 — 0.001 ETHの作成手数料

作成手数料は、約$3ではなく、コードに固定された0.001 ETHになります。価格フィードも、オーナーによる設定もありません。そのドル建ての価値は、今後はETHの価格に連動します。2026-10-05以降はオーナーの設定で、デフォルトは0.001 ETHです。

2026-09-28 — PoolManagerを保有量の記録から除外

トークンはUniswapのPoolManagerを記録しません。PoolManagerはすべてのスワップの当事者で、すべてのプールのトークンを保有し、エアドロップを受け取ることはありません。その履歴はゼロと読まれ、トレーダーの保有量はこれまでどおり記録されます。実測の節約:スワップ1回あたり約24,000ガスで、購入でも売却でも同じです。

2026-09-29 — StockFunのプールにLP手数料なし

プールは、0.30 %ではなくゼロのUniswap LP手数料で作成されます。フックのタックスが取引コストのすべてであり、片道あたり5 %、往復では価格インパクトを除いて9.75 %です。受け入れたコスト:トレジャリー、チーム、クリエイターはLP手数料の取り分を失い、その手数料のうちトークン側の分のバーンもなくなります。2026-10-05以降、LP手数料はローンチの設定の一部で、デフォルトはゼロです。各プールは作成時の手数料を保持します。

2026-10-01 — 2026-09-29のセキュリティ監査を受けた修正

すべての指摘を検討し、それぞれの修正方法を選んだうえで、2026-09-30と2026-10-01に適用されました。修正された各指摘には、監査対象のコードでは失敗する回帰テストがあります。

StockFunのプールに流動性を追加できるのは、流動性のロックだけです。サードパーティのポジションは、タックスもアンチスナイプも支払うことなく、タックスを課されたスワップの相手方として取引していました。フックの新しい権限によってフックのアドレスが変わり、アドレスは再マイニングされました。

取引中に送られるのはトレジャリーの取り分だけです。チームとバイバックの取り分はフック上に計上され、誰でも呼び出せる請求によって、ファクトリーの現在のウォレットへ支払われます。エスクローはなくなりました。ルーターとロックは、スワップの前に入力額を支払います。それまでは、Uniswapへコールバックする手数料用のウォレットが、すべてのプールの取引を停止させることができました。

変換の各ステップはキーパーが指定する金額を使うため、取引の場より大きいボールトは分割して変換します。資金は届いた時点でバスケットの株式ごとに確保され、キーパーがスキップした株式は自分の確保分を保持します。ミラーボールトも同じように動作します。

各トークンは、UniswapのPoolManagerの外にある供給量を時系列で記録します。これがエアドロップの比例配分の取り分の分母です。監査が示した3つの選択肢のうち、この案のコストはスワップ1回あたり書き込み1回の追加です。PoolManagerを再び記録する案では、スワップ1回あたり約24,000ガスかかっていたはずです。受け入れた帰結:エアドロップの時間枠は正時に始まり、正時に終わります。

Robinhoodレールでは、拒否されたバスケットがバッチ内の他のマーケットをブロックすることはなくなり、1つのリモートトークンに対応する識別子は1つだけになり、v3での部分約定はそのルートを失敗させ、一時停止中のリモートハブもロールの変更を適用し、正規ブリッジの記録は着地した順に支払われます。

実測:ルーター経由の買いは113,529ガス、売りは137,250ガスで、以前はそれぞれ125,862と150,416でした。オーナーの決定待ちで、まだ未解決のもの:ブリッジアダプターの差し替え(M-2、およびそれに伴うL-8)、Ondoのアテステーション(M-7)、自分自身を受取人として受け入れるルーター(L-4)。2026-10-05以降、M-7とL-4は修正され、M-2はオーナーの決定により現状のまま維持され、L-8もそれに伴います。

2026-10-01 — セキュリティパイプラインが修正を完成させる

同じ日に、独立した2者の監査人による監査の第2ラウンドが、いくつかの修正を完成させました。各修正には回帰テストがあり、どれも設計上の決定やイミュータブルなパラメータを変更しません。

Robinhood Chainでは、v3のルートは1プールずつ実行され、各プールは入力の全量を消化しなければなりません。以前のチェックは最初のプールしか見ておらず、それより先で部分約定が起きると、誰でも持ち出せる場所に中間トークンが残されていました。正規ブリッジの会計情報のチケットは、自らがキューに追加した数までの記録を、古いものから順に支払うため、未処理分によってチケットが自動実行のガスを超えることはなくなりました。残りはスイープが支払います。

ボールトの資金を確保分より少なくする緊急リカバリーが実行されると、両方のボールトで、確保分はすべてゼロになります。残った分と、その後のすべての流入は、ウェイトに従って改めて配分されます。それまでは、このリセットは読み取りの中にしか存在せず、古い確保分は次の流入とともに戻ってきていました。

キーパーは、購入のたびに、バスケットの最後の株式についてn−1単位を残します。丸めの端数はその株式に入り、ダストの送金によって購入が失敗することがありえたためです。また、$STOCKFUNのプールが全量を約定できないバーンの1回分も半分にします。各トークンは、最初の正時の記録点をデプロイ時に記録します。これが問題になったのは、テストチェーンのように、時計が0時間目から始まる場合だけでした。Ethereumの株式ルーターはETHを支払う前に同期を行い、Lensは空のページを拒否します。

実測:トークンごとの各時間の最初のスワップは、単独のトランザクションとして、ガスが約23,000ではなく、約28,000〜30,000多くかかります。

オーナーの決定待ちで、まだ決まっていないもの:リモートハブの記録済みの資金に対する緊急リカバリーで、その記録がその後、他のマーケットの資金から支払われること(R2H-1)、キャッシュレッグのトークンが1つのミラーボールトを拒否し、正規ブリッジのキューが止まって、そのマーケットを含むバッチが失敗すること(R2H-2)、文書化された配分ルールを変更することになる、最後の株式のマージンのコントラクト側での対応(R2T-1)、どのルーターでも買えるように、買いのタックスをPoolManagerのクレームとして徴収すること(R2F-1、option b)、$STOCKFUNのボールトをファクトリー自身にデプロイさせること(R2F-2)、そして3つの参考情報(R2H-4、R2H-6、R2H-7)。二度と購入できなくなった株式も、すべての流入から自分のウェイト分を受け取り続けます。これは意図的な設計です。レッグを外すと、バスケットの固定されたウェイトが変わってしまうからです。2026-10-05以降、R2H-1は、同日の一連の監査ループによる清算の手段と、オーナーが移転の前にリモートハブを一時停止するという手順によってカバーされます。R2H-2は、4回目のループの、他をブロックしない配信によって解決されました。R2F-1のoption bは見送られ、タックスは現在の徴収方法のまま維持されます。そして、ETHを拒否するボールトが、R2F-2が述べていたようにそのマーケットを止めることは、もうありません。後述の2026-10-05の各項目を参照してください。

2026-10-02 — すべてのモジュールがアップグレード可能に

それまで、プロトコルのどのコントラクトもアップグレードできませんでした。トークンと流動性のロックを除くすべてのモジュールが、StockFunのオーナーによって即時発効でアップグレード可能になります。タイムロックはありません。各モジュールはUUPSでアップグレードされるプロキシであり、誰が自分をアップグレードできるかを、アップグレード権限の管理元に問い合わせます。管理元は、Ethereumではファクトリー、Robinhood Chainではリモートハブです。ボールトは、両方のチェーンで、マーケットごとに1つのプロキシであり、マーケットごとにアップグレードされます。フックのプロキシは、v4の14の権限すべてを持つようにマイニングされるため、今後の実装は、アドレスを動かすことなく、どのコールバックでも使用できます。

トークンは独自のロジックを持ちません。固定供給量の単純なERC-20で、setterはオーナー用のsetRecorderだけです。保有量の記録はトークンを離れ、新しいモジュールである保有量レコーダーに移ります。すべてのトークンは転送のたびに保有量レコーダーを呼び出し、その呼び出しが失敗すれば、転送も失敗します。2026-10-05以降、トークンには、自身のアドレスに送られたもののためのレスキューもあり、このブロックする呼び出しは、ファウンダーの分離のルールの唯一の意図的な例外です(後述)。

流動性のロックはアップグレードできないままで、終了モードを得ます。オーナーがこれを告知し、30日後に、$STOCKFUNのプールを含むすべてのプールの流動性の全量を、任意のアドレスへ回収できます。オーナーはキャンセルできます。30日間も取引は続き、終了が予定されている間は、新しいマーケットはローンチできません。これはプロジェクトが終了する場合に備えたものであり、30日間はホルダーへの事前告知です。Robinhood Chain上のミラーボールトのデプロイヤーもアップグレードできません。すべてのミラーボールトのアドレスは、そこから導出されるからです。

これによって変わること:アップグレードは、存続する緊急モードの48時間を待ちません。ボールトの許容幅からバーン、5 %という料率まで、本書が固定されていると述べるルールは、オーナーがそれを担うモジュールをアップグレードしない限りにおいて成り立ちます。ファクトリーが最初にデプロイされ、オーナーがその接続設定を行うため、デプロイの順序が変わります。スワップのガスは、単独で測定して約27,000増えます。買いは210,105ではなく237,190ガス、売りは258,278ではなく285,031ガスです。これは、経路上のプロキシと保有量レコーダーへの呼び出しのコストです。2026-10-05以降、緊急モードにも遅延期間はなくなり、ボールトの許容幅と5 %という料率はオーナーの設定です。

2026-10-04 — エアドロップのコントラクト

コード化・テスト済み、未デプロイ。ファクトリーに結び付けられた、Ethereum上のアップグレード可能なモジュールであるAirdropDistributorが、各マーケットの株式を日次サイクルごとに分配します。サイクルの時間枠は、年間を通じて米国市場の取引開始前である13:00 UTCに閉じ、その購入と送付は、その後に続く取引時間中に行われます。サイクルは最初の送付によって、あるいはそれより先に開かれ、その数値を固定します:保有量レコーダー、時間枠が閉じた時点で有効だった除外リスト、そして対象となる保有量です。資産を送る経路は2つです。各株式のLayerZeroアダプターを通じたミラーボールトのsendToAirdropと、ローカルのレールのためのEthereumのボールトのsendToAirdropです。それ以外にサイクルに計上されるものはありません。

同じ日に決着したこと:キーパーによるプッシュはなく、請求するのはホルダーだけで、自己負担で行う(TBD 5)。ウォレットごとの上限も、最低額も、期限もない(TBD 7)。トークンごとの除外リストはオーナーが設定し、最大16アドレスで、バーンアドレスは常に、$STOCKFUNではベスティングコントラクトも除外される(TBD 8)。対象となる保有量のない時間枠への送付は保留され、その間にサイクルの時刻が変わらず、トークンの保有量レコーダーが置き換えられない限り、誰がいつ呼び出しても、対象となる保有量を持つ最初の時間枠に渡ります。

受け入れ、文書化したこと:キーパーがタイミングを選ぶため、次の13:00 UTCより後に到着した送付は翌日の時間枠で測定されること。サイクルの時刻を動かすと、まだ開かれていない時間枠が区切り直され、保留された株式がこれから確認する時間枠も含まれること。トークンの保有量レコーダーはその場でアップグレードされ、稼働中のトークンで置き換えられることは決してないこと。この変更に含まれないもの:滞留資金に関する48時間のルール、株式アダプター、キーパーのエアドロップのステップ、dappの請求画面。2026-10-05以降、除外すべきベスティングコントラクトはなく、48時間のルールは廃止され、サイクルの時刻は、オーナーが設定するスケジュール、つまり時間枠の長さと閉じる時刻の一部になり(setCycleSchedule)、稼働中のトークンに指定されたレコーダーは、PoolManagerの外にあるトークンの供給量から始まります(後述の監査ループの項目を参照してください)。

2026-10-05 — チームへの割り当ての廃止、即時の緊急モード、すべての数値の設定化

3つの決定で、同じ日にコード化・テストされましたが、デプロイはされていません。

チームへの割り当てがなくなります。チームのベスティングコントラクトであるTeamVestingは削除され、チームのために確保される$STOCKFUNはありません。供給量の全量(デフォルトで1,000,000,000トークン)は、マーケットの供給量の全量が2つのポジションに入るのと同じように、ロックされたシングルサイドのポジションに入ります。それまでは10 %が12か月かけてベスティングコントラクトに渡り、エアドロップはそのコントラクトを$STOCKFUNのサイクルから除外していました。現在除外されるのはバーンアドレスだけで、同日の3回目の監査ループ以降は、ローンチの実行者も除外されます(後述)。

緊急モードが即時になります。emergencyTransferは、ボールト、ブリッジハブ、エアドロップのコントラクトから資産を、任意のアドレスへ、ただちに移動させます。各移転には連番のIDと公開イベントがあります。2026-08-29の48時間のスケジュールは、そのキャンセル期間とともになくなり、遅延期間はパラメータではありません。緊急モードはオーナーが使った時点で作動し、待機を経ることは決してありません。ブリッジアダプターの差し替え(changeAdapter)も、同じ固定値のもとで即時になります。2026-09-27と2026-09-28に決定され、コード化されなかった、滞留したエアドロップ資金のルールは廃止されます。即時の移転が、どのコントラクトでも、いつでも、それをカバーします。

すべての数値が設定になります。プロトコルの数値は、両方のチェーンで、オーナーのオンチェーンの設定となり、現在の値がそのデフォルト値です:タックス、その配分とアンチスナイプ。作成手数料と、新しいマーケットの文字列の長さの制限。LP手数料とティック間隔を含む新しいマーケットの形状と、ロックされたポジションが回収するものの取り分。変換しきい値とボールトの価格許容幅。エアドロップのスケジュールと制限。オラクルのハートビート。ブリッジのガスとスリッページ。各設定はただちに発効し、ありえない値を拒否します。タックスの変更は、アンチスナイプのブロック内にあるプールも含め、すべてのプールで次のスワップから適用されます。形状の変更はその後に作成されるマーケットに適用され、各プールは作成時のLP手数料とティック間隔を保持します。

固定されたままのもの:アップグレードできないロックにある、終了モードの30日間の事前告知(END_DELAY)。ベーシスポイントから保有量の記録の1時間まで、単位とエンコーディング。そして、価格フィードからブリッジのエンドポイントまで、アップグレードによってしか別のものを指せない接続先。

受け入れた帰結:本書がタックス、ローンチ、ボールト、エアドロップについて示す数値はデフォルト値であり、保証ではありません。オーナーは、そのいずれも、いつでも、事前告知なしに変更できます。実測:タックスの設定の読み取りによって、スワップのガスはウォームの状態で約1,200増えます。信頼モデルを参照してください。

2026-10-05 — 監査ループによる修正

同じ日に、コード全体を対象としたレビューのループによって、コントラクトの修正が行われました。各修正には回帰テストがあり、デプロイはされていません。そのうち4つは挙動を変えます。

緊急移転の後、帳簿は清算され、別のマーケットから支払われることは決してありません。エアドロップのコントラクトとリモートハブは、複数のマーケットが受け取るべき資産を保有しています。そのどちらかからの移転の後は、不足しているものに依存する支払い、つまりエアドロップにおけるその株式の請求と、USDGのレールでのリモートハブの支払いは、資産が戻ってくるか、StockFunのオーナーが損失を、それを被ったサイクルまたはマーケットの負担として償却するまで待機します。正規ブリッジのレールでは、オーナーが、移転によって資金を持ち出された記録を、次の入金が着地する前に取り除きます。サイクルの負担として一部だけを償却できるのは、そのサイクルからその株式を誰も請求していない間だけで、その場合はすべてのホルダーが同じ割合を失います。一部のホルダーがすでに支払いを受けた後は、償却できるのはそのサイクルの残りの全量だけであり、それはまだ支払いを受けていないホルダーが失います。移転そのものは、即時かつ無条件のままです。緊急モードを参照してください。

ブリッジで送るのはキーパーだけになります。それまでは誰でもブリッジバッチを送ることができました。第三者が、Curveのプールで自ら行う2つの取引の間に、アダプターが受け入れる最も緩い最低額でバッチを差し込むことも、キーパーのバッチに含まれるボールトの1つを先にブリッジで送ることで、そのバッチを失敗させることもできました。

Robinhood Chain上でミラーボールトを事前にデプロイするのは、キーパーとStockFunのオーナーだけになります。それまでは誰でもそれができ、まだ存在しないマーケットのためにさえ、その日の接続設定に結び付けられた形で行えました。事前にデプロイされたボールトは現在、最初のバッチで、リモートハブの株式ルーターとオラクルを採用します。

稼働中のトークンに指定された保有量レコーダーは、PoolManagerの外にあるトークンの供給量から始まり、以前にそのトークンを記録したことのあるレコーダーは、そのトークンを受け付けません。それまでは、新しいレコーダーはゼロから始まっていました。すべての売りが失敗し、その後に開かれたサイクルのエアドロップの取り分は恒久的に壊れていました。現在は取引が続き、新しいレコーダーが動きを見ていないホルダーは、次に動くまで何も保有していなかったものとして読まれます。レコーダーをその場でアップグレードすることが、引き続きルールです。

より小さな修正:ボールトは、自身の許容幅だけでなく、キーパー自身の最低額も、実際に届いた量に対して適用します。正規ブリッジの会計情報のチケットは、バッチのサイズに見合った額を支払います。設定は、どのプールもそこで開始できないローンチのティック、ゼロに設定された名前の長さの上限、異なるPoolManager上にあるフックとロックを拒否します。エアドロップの時間枠をより長くする変更が、株式を保留しているマーケットをブロックすることはなくなりました。信頼モデルを参照してください。

2026-10-05 — 監査ループの2巡目

同じ日に、修正を対象とした2回目のレビューのループによって、さらにコントラクトの修正が行われ、キーパーも変更されました。各修正にはテストがあり、デプロイはされていません。

帳簿が数えるのは、それを裏付けるものであり、残高では決してありません。エアドロップのコントラクトの残高、そしてUSDGのレール上のリモートハブの残高には、届いたもののまだ計上されていないトークンも含まれます。つまり、最後のステップがまだ実行されていない配信です。緊急リカバリーの後、そのようなトークンが、空になったサイクルの請求を再開させ、別のマーケットの株式でそれを支払ってしまうことがありえました。現在は、どちらのコントラクトも、帳簿を裏付けるものを自ら数えます。緊急移転はまずそこから持ち出します。それを超えて持ち出した分は、まだ計上されていないトークンから出たものであり、次の配信は、何かを裏付ける前にまずそれを返済します。その際、リモートハブはそれらのバッチを配信する代わりに記録します。資産は、誰でも呼び出せるrestoreを通じて戻ってきます。単なる転送は何も裏付けないため、紛れ込んだトークンは、戻し入れるためにしか回収されません。緊急モードを参照してください。

請求の後に行われる、サイクルの残りの全量の償却の後は、そのサイクルに届くものはすべて、償却された額が初めから存在しなかったかのように、サイクルのすべてのホルダーの間で比例配分されます。それまでは、まだ支払いを受けていないホルダーに、請求した順に優先して渡っていました。マーケットのために保留されているものを何も残さない償却は、そのマーケットの時間枠の探索を終わらせます。

トークンは、自身のプールのものとは別のUniswapのPoolManagerに結び付けられた保有量レコーダーを受け付けません。そのようなレコーダーは、プールをホルダーとして数え、すべてのホルダーにその取り分の一部しか支払わないことになるからです。また、稼働中のトークンに指定されたレコーダーは、すべてのホルダーが動くまで、ホルダーの合計に等しい記録供給量ではなく、ホルダーの合計以上の記録供給量を保持します。

正規ブリッジでは、手数料は、キーパーが指定するベースフィー、つまり直近のベースフィーの2倍で見積もられ、超過分は返金されます。ガス価格なしで読み取られた見積もりはベースフィーをゼロと見なしており、長いバッチが失敗していました。リモートハブがキーパーを知るのは、バッチからだけです。最初のバッチより前は、StockFunのオーナーが最初のマーケットのミラーボールトを事前にデプロイし、キーパーがボールトを事前にデプロイできないマーケットは、アラートとともにそのバッチから外されます。キーパーは、ボールトの失敗を、Ethereum上とRobinhood Chain上とで別々に数えます。

2026-10-01の第2ラウンドについて:R2H-1は、清算の手段と、オーナーが移転の前にリモートハブを一時停止するという手順によってカバーされます。R2H-2は緩和されましたが、まだ未解決です。凍結されたミラーボールトが正規ブリッジのキューを恒久的に止めることはもうなく、バッチを組むのはキーパーだけですが、そのボールトへの配信は依然として全体が失敗するため、キーパーはそのマーケットを外さなければなりません。信頼モデルを参照してください。4巡目によって同日中に解決されました。後述を参照してください。

2026-10-05 — 1つの失敗が残りを止めることは決してない

同じ日に定められたファウンダーの設計ルール:何かが1つの機能を失敗させても、他の機能がその代償を払ってはならない。すべてが動き続けなければならず、すべてが、失われた資金を取り戻し、修正を受け入れるためのレバーを持たなければならない。ルールは2つの部分からなります。分離:1つの機能、マーケット、株式、サイクル、記録、受取人での失敗が、他をブロックすることは決してない。その項目は、イベントとともに、スキップされるか、未払い分として保持されるか、繰り延べられ、残りは先へ進む。レバー:一時的にであれ誤ってであれ、ETHやトークンを保有しうるすべてのコントラクトには、滞留したものを取り出すためのレバーがあり、すべてのモジュールは、アップグレード、またはそのモジュールを差し替えるsetterによって、修正を受け入れることができる。4回目の監査ループ以降、ループはあらゆる違反を欠陥として数えます。

唯一の意図的な例外:トークンから保有量レコーダーへの報告はブロックするままであり、報告が失敗すれば転送も失敗します。失敗してもよい報告にすると、ホルダーは自分の転送でその報告のガスを枯渇させることができ、そうすると記録はその動きを飛ばし、そのホルダーのエアドロップの取り分が増えてしまいます。レバーは即時です。トークンでのsetRecorder(0)か、レコーダーのその場でのアップグレードで、それぞれ1トランザクションで済みます。

受け入れた帰結:拒否された取り分は、残りを止める代わりにその受取人を待つこと。どのマーケットの負担ともされない緊急移転は、清算されるまで、その資産の支払いを待機させること。そして、トークンにレコーダーがない間、エアドロップはそのトークンのサイクルを開かず、その株式を保留すること。アーキテクチャを参照してください。

2026-10-05 — 監査ループの3巡目

同じ日に、操作の連続を対象とした3回目のループが行われました。単独では正しくても、ある順序やタイミングでは誤った結果になる操作です。各修正にはテストがあり、デプロイはされていません。

restoreは、エアドロップのコントラクトとリモートハブのUSDGのレールで、緊急移転が帳簿を裏付けるものを超えて持ち出した分をまず返済し、残りで帳簿を裏付けます。待機中の配信のトークンを戻しても、それで空になったマーケットに支払われることはもうありません。誰も請求する前にサイクルの負担として丸ごと償却された株式は、そのサイクルのリストから外れます。

稼働中のトークンに指定された保有量レコーダーは、切り替えの時点で新しい記録を始めます。エアドロップは切り替えより前に始まった時間枠を測定せず、その時間枠の株式は、そのレコーダーが全期間をカバーする最初の時間枠まで、保留されて待機します。また、トークンは切り替えの時点でのバーンアドレスの残高を報告します。それまでは、そのような時間枠は切り替えの時点からしか測定されず、切り替えの後に動いた者に過大に支払っていました。手順:まず、すでに閉じた時間枠のサイクルを開き、その後、時間枠が終わった直後に切り替えます。レコーダーをその場でアップグレードすることが、引き続きルールです。

$STOCKFUNのローンチのスクリプトは、ローンチの実行者をエアドロップから除外します。それまでは、エアドロップの最初のサイクルが、その保有分に対して支払っていました。ブリッジのスクリプトは、ファクトリーがすでに別のハブを指定している場合はデプロイの前に停止し、ハブを指定する前に株式を対応付けます。setBridgeHubは、登録済みのバスケットを運べないハブを拒否します。オフチェーンでは、レシートを読み取れないトランザクションはそのハッシュによって追跡され、二度送られることは決してありません。緊急移転の監視はイベントを分割して読み取り、失敗したときに1回、回復したときに1回アラートを出します。バッチのエントリーを組み立てられないマーケットは、1回のアラートとともに外されます。アプリでは、確認されていないトランザクションはそのハッシュを保持し(10回目の監査ループ以降は、そのnonceでマイニングされたものまで追跡され、ウォレットでのキャンセルが完了と読まれることは決してありません。後述)、終了モードが回収したプールは、価格も取引も表示しません。

2026-10-05 — 監査ループの4巡目:コードに入ったルール

同じ日に、4回目のループがファウンダーのルールをコードに組み込みました。各修正には回帰テストがあり、デプロイはされていません。

ブリッジの配信が別のマーケットをブロックすることは決してありません。これはR2H-2についてのオーナーの決定です。キャッシュレッグのトークンがミラーボールトへの受け渡しを拒否した取り分は、そのマーケットへの未払い分としてリモートハブにとどまり、他のマーケットには支払われます。正規ブリッジのレールでは、その取り分はキューを離れるため、その後ろの記録は支払われます。後で誰でもsweepでそれを支払うことができます。リモートハブでの緊急移転は1つのマーケットの負担とすることができ、そのマーケットの帳簿は同じ呼び出しの中で清算されます。請求は支払える分を支払います。帳簿が不足している株式や、転送が拒否される株式は、繰り延べられて支払われるべきものとして残り、claimManyは呼び出し元を除外しているサイクルをスキップします。購入の各レッグ、エアドロップへの送付の各株式、ブリッジバッチの各マーケットは、個別に進みます。ETHを拒否するボールトが、そのマーケットを止めることはもうありません。フックは支払えなかった分をそのボールトへの未払い分として保持し、ロックは手数料の回収のうち拒否された取り分をその受取人のために保持し、誰でもそれらを支払うことができます。ETHを受け取れないクリエイターのコントラクトは、別のアドレスへ請求します。Lensはボールトを1つずつ読み取ります。

あらゆる場所にレバー:モジュールが誤って保有しているもののレスキューが、誰のものも保持しないすべてのモジュールに、フックには紛れ込んだ資金に限って、ロックには保持している取り分を決して対象とせずに、バーナーにはそのETHについてもはやどのバーンもそれを使えなくなった後に限って、そして両方のトークンに設けられました。ボールト、ハブ、エアドロップのコントラクトは、緊急モードを保持します。

そのほか:Ondoのルーターは自身のファクトリーのボールトにだけ対応し(M-7)、すべてのルーターは自分自身を受取人とすることを拒否します(L-4)。正規ブリッジのレールの入金のチケットは、ベースフィーで価格が付けられます。$STOCKFUNのローンチのスクリプトは、ミントの前にローンチの実行者をリストに載せます。ストレージのチェックは、すべての構造体のあらゆる深さを比較します。同じ日に決定:M-2とR2F-1は現状のまま維持されます。緊急モードと信頼モデルを参照してください。

2026-10-05 — キーパーのエアドロップのステップと請求画面

同じ日に、ファウンダーの依頼により、新たな決定なしに書かれました。デプロイはされていません。キーパーは、各マーケットの株式を時間枠ごとに1回、デフォルトでは米国の取引時間の後に送ります。まず保留された株式を割り当て、次にサイクルを開き、その後に送付します。各株式と各マーケットは個別に処理され、Robinhood Chainからの各配信は計上されるまで追跡され、遅れた配信を再実行するためのコマンドを含むアラートが出されます。dappの請求画面は、ウォレットが請求できるものを時間枠ごとに一覧表示し、1トランザクションにつき最大10個の時間枠を請求します。コールドの状態で測定して、およそ340万〜350万ガスです。含まれていないもの:失敗した配信の最後のステップの自動実行。代わりにアラートがコマンドを示します。

その後、4回目のループでのオフチェーンの見直しが、キーパーに新しい役割を与えました:フックとロックが保持している債務の支払い、失敗したレッグ、繰り返しスキップされるマーケット、拒否された配信についてのアラート、各株式のレッグの個別の計画、再起動をまたぐ状態ファイル、そしてLP手数料の日次の回収です。アプリは、応答できないボールトについて「Figures unavailable」と表示します。キーパーとdappを参照してください。

2026-10-05 — 監査ループの5巡目

同じ日に、5回目のループが重大度の低い7つの問題を見つけ、それぞれテストとともに修正されました。デプロイはされていません。正規ブリッジの記録の負担とするリモートハブの移転は、入金が着地した記録のためのものです。拒否された取り分のために保持されていない資金を超える額は拒否され、入金が失われた記録は償却されます。残高を読み取れない株式が、エアドロップへの送付やその見積もりを止めることはもうなく、コードのないアダプターが見積もりを止めることもありません。管理者をプロキシのストレージに保持するファクトリーとリモートハブの実装コントラクトは、自身に送られたもののためのレバーとして、そのデプロイヤーを用います。ロックと両方のトークンには、誤って送られたv4のクレームとNFTのためのレスキューが加わります。ロックには依然として汎用の呼び出しはありません。ブリッジバッチは、ボールトにまだコードのないマーケットを外します。購入が資金をどう動かすかを誤って述べていたコメントは修正されました。緊急モードを参照してください。

2026-10-06 — 5回目のループでのオフチェーンの見直し

5回目のループでのオフチェーンのコードの見直しでは、重大度が中程度の問題が3つ、低い問題が16見つかり、それぞれ同日にテストとともに修正されました。デプロイはされていません。キーパーは今では2026-09-27のペースを守っています。ボールトのETHは、時間枠が閉じた後のキーパーの最初の周回でボールトがしきい値を保有していれば、エアドロップの時間枠ごとに1回変換されます。しきい値を下回る場合、ETHは次の時間枠を待ちます。それまでは、キーパーは、ボールトがしきい値を保有した時点で、取引時間中のどの周回でもそれを変換していました。キーパーが送るすべてのトランザクションは、そのレシートを待つ前に、nonceとともに状態ファイルに書き込まれます。そのため、待機中に停止されたキーパーがそれを再送することはありません。どのノードももう知らないトランザクションは、一定の期限の後に手放されます。1つの状態フォルダーを使うキーパーは一度に1つだけです。Ondoのレールでは、Ondoがボールトの許容幅を下回る価格を付ける購入が、失敗するために送られることはもうなく、そのためにアテステーションの代金が支払われることもありません。アダプターが応答しない株式は、それだけがエアドロップへの送付から外されます。

バスケットに含められる株式は最大5つです。これはStockFunのオーナーがアップグレードによって変更できる技術的な上限です。バスケットとともに増えるすべてのコストはこの規模まで測定されており、ローンチ時の3つのバスケットに含まれる株式は、それぞれ3つ、3つ、2つです。Lensは各ボールトの状態と、フックとロックがそのボールトに対して負っている額を含んでおり、そのアップグレードは、それを読み取るWorkerとアプリより先に本番に反映されます。$STOCKFUNのローンチのスクリプトは、2つ目のトークンをミントする代わりに、プロトコルのマーケットが指定される前に止まった実行を再開します。アプリは、ボールトに対して負われているETHをそのトレジャリーに含め、ブロックに取り込まれる前に計上される株式のために請求に余裕を残し、トークンが拒否した株式を記憶し、読み取れなかった数値を決してゼロとして表示しません。キーパー、バスケット、dappを参照してください。

2026-10-06 — 6回目の監査ループ

6回目のループでは、重大度の高い問題が1つ、低い問題が5つ見つかり、それぞれ同日にテストとともに修正されました。デプロイはされていません。テストネットで、またフォールバックとして使われる正規ブリッジでは、キーパーは、バッチのマーケットが計上された時点でそのバッチのチケットのリプレイをやめており、また、あるマーケットに別のバッチの資金が計上されることがありえました。そのため、自動実行を逃した入金が失効するおそれがありました。キーパーは今では、各チケットについて、その送金の計上に関係なく、実行されたと分かるまで監視し、まだ有効なものをリプレイし、デフォルトで6時間後にも実行されたと分からない場合や、失われた場合にアラートを出します。正規の送金を計上するのは、リモートハブ自身のイベントによってだけで、残高によって計上することは決してありません。

修正とともに、監査が推奨のデフォルトとして下した決定が1つあります。2026-09-27のペースがUSDCにも及ぶというものです。ボールトのUSDCは、Ethereum上で株式の購入に使われるものも、ブリッジで送られるものも、そのETHの各変換の後に1回、それ以外の場合は時間枠ごとに最大1回送られます。それまでは、ボールトに送られた数単位のUSDCによって、キーパーは周回のたびにトランザクションを、あるいはブリッジバッチ全体を送っていました。Robinhood Chain上での購入は、引き続き周回ごとに実行されます。ミラーボールトの残高は配信と寄付を区別できず、各購入の上限は、大きな配信を意図的に複数の周回に分散させるからです。ローカルとテストネットの実行では、同じスイッチで両方のペースをオフにします。

ほかに修正されたもの:送るものが何もないボールトについて、何も割り当てない保留株式の探索が毎日送られることはなくなりました。しきい値を下回るボールトは、時間枠が閉じた後に読み取った残高で確認されます。同日のそれより前には、ローカルのデプロイファイルが使用前にチェーンと照合されるようになりました。Lensがトレジャリーを読み取れない間、アプリは$STOCKFUNの価格に「(last read)」と印を付け、その間ワーカーはその価格を記録しません。同日に始まった次のループでは、各ボールトが作成時のルーターを保持しているにもかかわらず、キーパーがすべてのボールトを1つのルーターで見積もっていたことが判明しました。今では各ボールトは自身のルーターで見積もられます。キーパーを参照してください。

7回目のループ以降(後述)、「送るものがない」とは送る価値のあるものがないことを意味し、キーパーは各チケットを、まずその作成のレシートから読み取ります。

2026-10-06 — 7回目の監査ループ

7回目のループでは、重大度が中程度の問題が1つ、低い問題が14見つかり、それぞれ同日にテストとともに修正されました。デプロイはされていません。コントラクトには問題がありませんでした。正規ブリッジでは、キーパーは、チケットの作成のレシートを読み取る前に、そのチケットがまだ存在するかどうかを読み取っていました。2回の読み取りの間に作成された入金や、1ブロック違いの2つのノードに見られた入金は、まだ有効であるのに実行済みと見なされ、リプレイもアラートもないまま失効するおそれがありました。今では、キーパーはArbitrum SDKと同じ順序でそれらを読み取ります。まずレシート、次に自動実行、そして作成より前ではないブロックでのチケットです。

修正とともに、監査が推奨のデフォルトとして下した決定が1つあります。キーパーは、送付のコストに見合う価値のあるものだけをエアドロップへ送るというものです。LayerZeroのブリッジが運べないダストを上回る株式は、そのボールト自身のオラクルで、その価格フィードの最新の回答によって評価され、自身のLayerZeroの手数料、またはEthereum上での送付のガスのうち自身の分に見合う価値がなければなりません。そして、条件を満たした株式は、合わせて、送付全体と、時間枠のサイクルがまだ開かれていない場合はその開始とに見合う価値がなければなりません。そうでなければ、株式は、その後に貯まる分とともに、後の時間枠までボールトで待機します。キーパーが読み取れない価値は、以前と同様に、送付を通します。その倍率はキーパーの設定KEEPER_AIRDROP_MIN_VALUE_BPSで、デフォルトではコストの1倍、0にするとこのルールはオフになります。このルールが決めるのは株式がいつ出ていくかだけで、量も、対象も、行き先も決めません。それまでは、誰も取引しないマーケットのボールトにダストをわずかに上回る株式を贈ると、キーパーは毎日、その時間枠のサイクルを開き、LayerZeroのメッセージの代金を支払っていました。また、同じダストが「送るものがある」と数えられていたため、6回目のループで設けた保留株式の探索の制限は、ブリッジでは機能していませんでした。

ほかに修正されたもの:キーパーのすべてのログ探索は、チェーンの最新ブロックより数ブロック手前で止まるため、1〜2ブロック遅れたノードのせいでイベントを取りこぼすことは決してありません。キーパーは、各RPCが設定で指定されたチェーンに対応していることを確認し、そうでなければ起動を拒否します。アラートのWebhookには時間制限があり、その応答が読み取られ、Webhookが受け取らなかったアラートは保持されて再送されます。空の設定はそのデフォルト値になります。アプリのデータWorkerは、アップグレード可能な各コントラクトを個別に読み取るため、欠陥のあるアップグレードの後で失敗するコントラクトがあっても、$STOCKFUNトークンの数値が空白になることはもうありません。取引ログの読み取りが失敗し続ける間は、24時間の出来高を不明として表示し、各エンドポイントが自身のチェーンに対応していることを確認します。また、価格チャートは各点をその時刻に置きます。LensとWorkerのデータスキーマは変わりません。キーパーとdappを参照してください。

8回目のループ以降(後述)、自身の見積もりがゼロである株式についてはそのアダプターに問い合わせ、ローカルのレールでは時間枠の開始を一度だけ数え、チケットは最新ブロックより数ブロック手前で読み取られ、キーパーは、チェーンIDが設定されていない場合にそれを仮定することはもうありません。

2026-10-06 — Robinhood Chain上の価格フィードの保護

ローンチの計画には、オラクルがまだ備えていない2つの保護が挙げられており、どちらもRobinhoodのドキュメントが推奨するものでした。これらは、オフの状態から始まるStockFunのオーナーの設定として構築されていますが、デプロイはされていません。どちらも価格を差し止めることしかできず、決して変更することはありません。

  • コーポレートアクション。株式がコーポレートアクションの最中にある間、そのトークンはオラクルが一時停止中であることを示し、その価格フィードは最後の値を保ちます。その値は、トークンの乗数が変わる間も新しく見えることがあります。今では、オラクルはその株式の価格を差し止めます。その購入のレッグは単独で失敗し、その資金はその株式のために保持され、バスケットの他の株式は購入されます。このチェックは、Robinhoodレールのすべての株式について、株式ごとにオンになっています。そのため、回答を使えないトークンや、フラグが立ったままのトークンは、単独でオフにできます。応答しないトークンは一時停止していないものとして数えられます。Robinhoodはこのフラグを参考情報と呼んでおり、フィード自身の鮮度のチェックが引き続き主要なガードです。
  • シーケンサー。Robinhood Chainは、単一のシーケンサーを持つArbitrumのチェーンです。ChainlinkのL2シーケンサーのアップタイムフィードが与えられていれば、オラクルは、シーケンサーが停止している間、猶予期間(デフォルトで1時間)以内に復旧した間、またはフィードを読み取れない間、すべての価格を差し止めます。Robinhood Chainにはそのようなフィードが存在せず、Chainlinkは新しいネットワークにそれを追加しなくなっています。レールは、デプロイスクリプトが求める明示的な選択によって、このチェックをオフにしてデプロイされ、そのようなフィードがいつか公開されれば、StockFunのオーナーがそれを設定します。

Ethereum上では、どちらもオフのままです。Robinhoodレールを参照してください。

2026-10-06 — 8回目の監査ループ

8回目のループでは、重大度が中程度の問題が1つ、低い問題が8つ見つかり、それぞれ同日にテストとともに修正されました。デプロイはされていません。コントラクトと価格フィードの保護には問題がありませんでした。アプリがチェーンのバスケットのレジストリを読み取る前は、そのローンチのフォームは、設定されたバスケットを設定された番号で提示していました。バスケットを別の番号で並べるデプロイでは、クリエイターが、表示されたものとは別のバスケットで、取り消しのきかない形でマーケットをローンチすることがありえました。今では、フォームはチェーンから読み取ったバスケットだけを提示し、送信の直前に、選ばれたバスケットをファクトリーからもう一度読み取り、名前か株式が異なれば送信を拒否します。

ほかに修正されたもの:キーパーは、ブリッジバッチを含むブロックが数ブロックの深さになってからだけそのバッチを追跡するため、Ethereumの最新ブロックの再編成によって、決して存在しない識別子を監視し続けることはもうありません。ブリッジが運べないダストと、自身のLayerZeroの手数料を見積もれない株式とを区別し、後者を黙って捨てるのではなく、アラートとともに外すようになりました。異なるアラートごとに待機中のエントリーを1つだけ保持し、それが発生した回数と時刻を添えるため、毎サイクル繰り返されるアラートが単発のアラートを押し出すことはもうありません。RPCが対応しているチェーンを確認する前に、別のチェーンのために書かれた状態ファイルを脇に置くことはもうなく、両方のチェーンIDを必須とします。エンドポイントのすべてのノードが持っている、最新ブロックより数ブロック手前のブロックでチケットを読み取ります。そして、ローカルのレールでは、時間枠の開始を一度だけ数えます。キーパー、そのプリフライト、そのインスペクターは、価格フィードの保護に対応しました。オラクルがシーケンサーのために価格を差し止めている間、Robinhood Chain上での購入は1回のアラートとともに待機し、コーポレートアクションの最中の株式は単独で待機し、失敗として数えられることは決してありません。アプリのデータWorkerは取引ウィンドウを決して後戻りさせないため、数ブロック遅れたノードによって24時間の出来高がブロックを二度数えることはもうありません。そのRPCプロキシは、アドレスではないアドレスを拒否します。株式の価格が欠けている理由を公開し(データスキーマ8)、アプリがそれを表示します。そして取引パネルは、フックと同じく、アンチスナイプの期間中、ホワイトリストのウォレットに通常のタックスを課します。Lensは変わらず、Workerとアプリは、引き続きどちらを先にデプロイしても構いません。キーパーとdappを参照してください。

2026-10-06 — Glamsterdamのもとでのエアドロップ配信のガス

Sepoliaは、LayerZeroのテストネット実行(後述)の最中の2026-10-06に、EthereumのGlamsterdamアップグレードを有効にしました。Hoodiとメインネットにはまだ日程がありませんでした。このアップグレードは状態の増加の価格を改めます。コールドで書き込まれる新しいストレージスロットは、以前の22,100ガスに対して110,020ガスかかります。コントラクトとスクリプトの固定のガスの数値はすべてSepoliaで測定し直され、1組を除いてすべて成り立ちました。その1組とは、エアドロップの配信がEthereum上で受け取るガスです。ミラーボールトの送付はcomposeの数値を1つ(600,000)だけ運び、株式のOFTのlzReceiveは、そのOFTが強制するガスしか受け取っていませんでした。この実行の最初のサイクルの配信はすべて、LayerZeroのエグゼキューターでガスが尽き、手作業で実行されました。10回目の監査ループは、その後さらに2つを見つけました。デプロイスクリプト自身のガスと、バッチに対するブリッジのcomposeのガスです(後述)。

同日の創業者の決定:キーパーは各配信をシミュレーションしてそのガスを選び、そのガスは、StockFunのオーナーがリモートハブ上で設定する範囲内に収められます。それでも滞留した配信はキーパーが再実行し、2回目の失敗ではアラートを出します。コード化されていますが、メインネットにはデプロイされていません。

  • リモートハブは、2つのガスのポリシーを保持します。それぞれがデフォルト値、下限、上限からなります。株式のOFTが強制するガスに上乗せするlzReceiveのガスは650,000で、200,000〜1,500,000の範囲(setAirdropReceiveGas)、composeのガスは1,250,000で、600,000〜4,000,000の範囲(setAirdropComposeGas)です。ミラーボールトのsendToAirdrop(stocks, receiveGas, composeGas)は、キーパーが求める値に対してハブが認める値で送付し、ゼロはデフォルト値を意味します。株式だけを指定する呼び出しは、両方のデフォルト値を使います。ポリシーより前の状態からアップグレードされたハブは、両方が設定されるまで、すべての送付を拒否します
  • キーパーは、エンドポイントのアドレスから、Ethereum上で各株式のlzReceiveとcomposeをシミュレーションし、必要量に25 %を加えた値を求めます。シミュレーションを実行できない場合は、そのマーケットの直近の配信が使った値を、次にハブのデフォルト値を使います。LayerZeroのエグゼキューターが失敗させた後、または10分後にもエンドポイント上に保存されたままの配信は、キーパー自身の鍵から、シミュレーションした必要量に25 %を加えたガスで、デフォルトでは最大4,000,000ガスで再実行されます。実行できない配信には、手作業で実行するためのコマンドを添えてアラートが出され、2回目の失敗にはアラートが出され、二度と送られることはありません
  • アプリは、1トランザクションにつき10個ではなく5個の時間枠を請求し、時間枠がまだ受け取りうる株式1つごとに400,000ガスを残し、すべての書き込みトランザクションの見積もりに150,000ガスを加えていました。9回目の監査ループは、これを書き込みトランザクションごとの上限に置き換えました(後述)

この修正は、テストネット実行のリモートハブとミラーボールトにアップグレードによって適用され、その後のサイクルを支えました。キーパーとRobinhoodレールを参照してください。

2026-10-06 — LayerZeroのテストネット実行

プロトコルは、本番用のスクリプト、またはその本体を保ったテストネット用のラッパーによって、SepoliaとRobinhood Chainのテストネットに、テスト用の株式、テスト用のアダプター、テスト用のUSDG、モックのフィードとともに、167のトランザクションでデプロイされ(すべて成功)、13:50から19:07 UTCまで実行されました。1時間ごとの時間枠7つで、それぞれのETHが変換され、LayerZeroでブリッジされ、テスト用の株式に使われました。エアドロップのサイクル6つがLayerZeroで送り返され、最初の4つは5人のホルダーによって全額請求され、各支払いは、保有量レコーダーから計算した取り分とぴったり一致しました。インシデントの訓練は実際のメッセージの上で行われ、文書どおりに回復しましたが、2つの半分だけは例外でした。この実行は、LayerZeroの実際のエンドポイント、DVN、エグゼキューターの上でStockFunのコードが動くことを証明します。PaxosのUSDGのペア、Robinhoodの株式とそのアダプター、実際のフィードや流動性、そしてメインネットのガス、手数料、ファイナリティは証明しません。メインネットでの試行がまだ残っています。本番用のコードでこの実行が見つけたのは、Glamsterdamによる価格の改定(前述)と、9回目の監査ループの一部(後述)です。Robinhoodレールを参照してください。

2026-10-06 — 9回目の監査ループと検証者ゲート

9回目のループは、8回目のループの修正を見直し、LayerZeroのテストネット実行のオペレーターの発見を取り入れました。重大度が中程度の問題が2つ見つかりました。エアドロップの配信のガス(前述)と、アプリのデータWorkerがCloudflareのオブジェクトが追い出されるたびにRPCのフェイルオーバーを作り直していたことで、後者は、プライマリーRPCの停止中に、7分足らずで37のリクエストを送っていました。今では8つです。さらに、キーパー、Worker、テストネット用のスクリプト1つに重大度の低い問題が見つかり、それぞれ同日にテストとともに修正されました。キーパーは、自身のトランザクションの1つの後の1分間、それが変えたものを、そのトランザクションのブロックで読み取り、次に送るもののガスもそこで見積もります。そのため、1ブロック遅れたノードによって、変換の直後に送られたブリッジバッチが偽の失敗になることはもうありません。キーパーの各トランザクションは、見積もったガスに25 %を加えて送られます。届けられなかったアラートは、最後に発生した順に送られます。自身の実行が削除したチケットについて、まだ有効だとアラートを出すことはもうありません。どの日付にも収まらないチェーン上の時刻は「an unknown time」と読まれます。オラクルのエラーをデコードします。そして、そのプリフライトはテストネット実行のデプロイ上で動作します。WorkerはRobinhood Chain自身のブロック番号を記録します。

このループ以降、2つ目のエージェントが、各修正の変更を、プッシュされる前に、それまでのループが見つけた欠陥の種類、その多くは前のループの修正の中にあったものに照らして見直します。これが検証者ゲートです。それが見つけたものはレビューの発見と同じように修正され、その修正もまたゲートを通ります。このループでは、いくつかの修正に重大度の低い欠陥が見つかりました。その中には、誰でも発行できるアラートを信じていた再実行(今では、LayerZeroのエグゼキューターからのものしか信じません)や、失敗した実行を、その実行自身のブロックで判断していたため、そのブロックの再編成によって偽の2回目の失敗になりえた再実行があります。後者は今では、そのブロックが数ブロックの深さになるまで待ちます。すべて修正されています。

その後、このループでのWorkerとアプリの見直しで、重大度が中程度の問題がもう1つ見つかり、同日に修正されました。取引が、その時間の供給量のマークよりも多くの新しいストレージに出会ったとき、アプリが書き込みトランザクションの見積もりに上乗せする150,000ガスでは足りなくなるというものです。今では、すべての書き込みトランザクションは見積もりに50,000ガスを加えた値を受け取り、取引は、見積もりが見ることのできない、まだ起こりうる各書き込みのガスも、見積もりのブロックで読み取って受け取ります。見積もりが失敗した書き込みトランザクションは固定の上限で送られ、その場合ローンチは待機します。重大度の低い2つの発見も修正されました。推定値であるトレジャリーの額には、表示されるすべての場所で「+」が付き、読み取れない承認が、承認なしと見なされることは決してありません。このループはクリーンではなく、クリーンなループの数はゼロのままです。キーパーとdappを参照してください。

2026-10-06 — 10回目の監査ループ

10回目のループは、9回目のループの修正と、EthereumのGlamsterdamアップグレードに関する作業を、領域ごとにそれぞれの観点から見直しました。新しいガス価格のもとでのコントラクト、宛先で失敗するすべてのクロスチェーンメッセージ、数か月にわたるキーパー、実際のウォレットを使ったアプリ、そしてコードに照らした文書です。重大度が中程度の問題が3つと低い問題が6つ見つかり、それぞれ同日にテストとともに修正され、すべての修正は検証者ゲートで見直されました。メインネットにはデプロイされていません。ガスの観点では、コントラクトは両方の価格表のもとでクリーンでした。

  • Glamsterdamのもとでのデプロイ手順。文書化されたEthereumのデプロイは成功しえませんでした。デプロイツールは各トランザクションに、自身のローカルシミュレーションのガスを古い価格で与えていましたが、コントラクトの作成には今ではその4〜7倍が必要です。今では、すべてのブロードキャストが、前のトランザクションがマイニングされてから、各トランザクションのガスをノードに問い合わせます。Sepoliaで実地に確認されました
  • ブリッジバッチのcomposeのガス。ブリッジバッチのRobinhood Chain上の最後のステップは、バッチの中身にかかわらず、1つの固定のガスの数値(1,200,000)を受け取っていました。5つの株式からなる新しいマーケット4つでガスが尽き、その後それらのUSDGは何の記録もないままリモートハブに残り、同じマーケットを含む後のバッチもすべて同じように失敗しました。今ではガスは、基本分にマーケットごとの分を加えたもので、デフォルトはそれぞれ200,000と400,000、いずれもStockFunのオーナーの設定です。また、バッチが運ぶマーケットは最大17で、これによりメッセージはLayerZeroのサイズ制限内に、ガスはRobinhood Chainのトランザクションごとの制限内に収まります。キーパーはそれ以上は送らず、残りは次の周回に回し、最も長く待っているマーケットから先に送ります。追加のガスのコストはわずかです。LayerZeroのエグゼキューターはそれをRobinhood Chainのガス価格で請求し、テストネットでは100万ガスあたり0.00001 ETHです。停滞した送金についてのキーパーのアラートは、今ではバッチのメッセージがどの段階にあるかを示します。テストネットのアダプターは同日にアップグレードされ、次のバッチは新しいガスで通りました
  • 緊急移転の監視。キーパーは、監視するすべてのボールトを1つのログリクエストで指定していましたが、エンドポイントは上限を超えるリクエストを拒否します。レジストリがその上限を超えると、緊急移転は二度と中継されなくなるところでした。今ではそれらをグループに分けて指定し、グループの大きさは新しい設定で制限されます
  • より小さな修正。キーパーのエラーテキストは、RPCアドレスのうちホストだけを残します。各マーケットの読み取りは、周回ごとに1つずつではなく、Multicall3を通じて1回の呼び出しで100マーケットずつ行われます。アプリは、ウォレットがキャンセルまたは置き換えたトランザクションを追跡し、キャンセルを完了と表示することは決してなく、自身のトランザクションの後の1分間は、そのトランザクションのブロック以降のブロックで読み取ります。そのため、承認の直後の売却が、1ブロック遅れたノードに拒否されることはもうありません。また、2つの文書がコードに合わせて更新されました

米国の取引時間の後に送付するというデフォルトのもとで、キーパーは今では、取引時間の終了後に送るもののないボールトを、次の取引時間になって初めて読み取ります。これは、この節約の結果であり、新しい規則ではありません。取引時間の終了後に、いかなる購入とも関係なくボールトに渡された株式は、次の取引時間の送付とともに、後の時間枠に入ります。ボールト自身の購入がもたらすものは、引き続き、その日に終わった時間枠に入ります。

監査は、欠陥ではなく推奨事項も検討しました。請求がフックの手数料の積み立てのそれぞれに1 weiずつ残し、次の取引がそれらのストレージスロットをゼロから書き込む費用を決して払わなくて済むようにするものです。これは今は採用されていません。追加のガスは各請求の後の最初の取引にかかり、スロットあたり約104,000です。そのためのアプリのマージンは取引の上限を引き上げるだけで、支払う額を引き上げるものではありません。変更は請求のコードに及びますが、その形式的なルールは、プローバーの実行なしには再び証明できません。そして、フックとバーナーは、移行なしに、後からアップグレードでそれを取り入れることができます。このループはクリーンではなく、クリーンなループの数はゼロのままです。キーパー、Robinhoodレール、dappを参照してください。