TreasuryVault
マーケットごとに1つのボールトがあります。ボールトはすべての取引の2 %を受け取り、それをトークン化株式に変え、トークンのホルダーにエアドロップします。プロトコルで最も重いコントラクトであり、最も権限の少ないコントラクトでもあります。
持っていないもの
withdrawはありません。transferもありません。sweepもありません。オーナーもいません。これらの関数は現在の実装に存在せず、そのことは誰でも検証できます。呼び出す対象が何もないため、呼び出しは失敗します。2026-10-02以降、ボールト自体はアップグレード可能です。後述を参照してください。
変換サイクル
- 蓄積。取引に伴ってETHが入ってきます。24時間に1回、キーパーが確認する時点(エアドロップの時間枠が閉じた後の最初の周回)でボールトが少なくとも0.1 ETHを保有していれば、サイクルが始まります。それを下回ると、後でETHがしきい値を超えても、その日は何も発動しません。ガスとスリッページに処理が食われてしまうからです。キーパーは2026-10-06以降これを守っています。それまでは、ボールトがしきい値を保有した時点で変換していました。
- Ethereum上のUniswap v4でETH → USDC。ETH/USDフィードに対して50ベーシスポイントの許容幅を設けます。流動性の厚いペアなので、許容幅を狭くできます。金額はキーパーが指定し、しきい値以上、残高以下です。許容幅はその金額に基づいて計算されます。
- Curve経由でUSDC → USDGに変換し、その後LayerZero上のPaxosのOFTを通じて送ります。
- ミラーボールトが、Robinhood Chainのセカンダリープールで株式を購入します。独立したChainlinkフィードに対して200ベーシスポイントの許容幅を設けます。各株式は、その株式のために確保された資金から購入されます。
- エアドロップ。同じ日次サイクルの中で、キーパーは購入された株式をEthereum上のエアドロップのコントラクトへ送り、トークンのホルダーはそこで比例配分でそれを請求します。7回目の監査ループ以降(2026-10-06)、キーパーは、送付のコストに見合う価値になった時点で株式を送ります。そうでなければ、株式は後の時間枠までボールトで待機します。
ボールトは実際に受け取った量を測定し、その結果が、許容幅より緩くなることのないキーパーの最低額に届かなければ拒否します(2026-10-05以降。それまでは、結果は許容幅だけに照らしてチェックされていました)。キーパーも、レールも、提示された価格も信頼しません。
2026-10-05以降、株式を購入する両方のボールトで、購入の各レッグは個別に実行されます。失敗したレッグ(リバートするルート、凍結された株式、古いフィード、最低額を下回る出力、拒否された見積もり、そして2026-10-06以降のRobinhood Chain上では、コーポレートアクションのためにトークンがオラクルを一時停止している株式)は、その資金をその株式のために確保したままLegFailedを発行し、他のレッグは実行されます。呼び出しが失敗するのは、どのレッグも実行されなかった場合だけで、そのときは、レッグが1つだけの場合と同じように、最初のレッグの理由で失敗します。それまでは、1つのレッグが失敗すると購入全体が失敗していました。Robinhood Chain上では、オラクルのシーケンサーのチェックが設定されていれば、停止しているか復旧した直後のシーケンサーが、すべてのレッグを止めます(Robinhoodレールを参照してください)。このチェックは、Chainlinkがそのチェーンのアップタイムフィードを公開するまではオフです。
しきい値と2つの許容幅は、2026-10-05以降、StockFunのオーナーの設定のデフォルト値であり、すべてのボールトがその都度読み取ります。Ethereumのボールトはファクトリーの設定を、ミラーボールトの購入はリモートハブの設定を読み取ります。変更は、すべてのボールトの次の変換から適用されます。
金額と確保
2026-09-29のセキュリティ監査を受けて、2026-10-01以降は次のとおりです。
- 各ステップは、キーパーが指定する金額を使います。取引の場が許容幅の範囲内で吸収できる量より大きいボールトは、複数のサイクルにわたって分割して変換します。それ以前は、すべてのステップが残高の全額を使っており、取引の場の規模を超えて大きくなったボールトは二度と変換できませんでした。
- ETHのステップの許容幅は、その金額に基づいて計算されます。現在の残高に基づくのではありません。トランザクションが待機している間に取引によって加わるETHが、キーパーの最低額を無効にすることはもうありません。
- 資金は株式ごとに確保されます。届いた時点で、バスケットのウェイトに従って、バスケットの各株式のために取り置かれます。各株式は自分の確保分だけを使い、キーパーがスキップした株式は、それを後のために保持します。それ以前は、スキップされた株式の取り分がバスケット全体に改めて配分されていたため、キーパーはスキップによって、トレジャリーのほぼすべてを1つの株式に移すことができました。
株式を購入する2つのボールトは、どちらもこのように動作します。USDGを扱うRobinhood Chain上のミラーボールトと、USDCを扱う、ローカルのレール上のEthereumのボールトです。
どちらのボールトでも、2026-10-01のセキュリティパイプライン以降、資金を確保分より少なくする緊急移転が行われると、確保分はすべてゼロになります。残った分と、その後のすべての流入は、バスケットのウェイトに従って改めて配分されます。確保されていない資金だけ、あるいは別の資産を持ち出す緊急リカバリーでは、確保分はそのまま残ります。それ以前は、このリセットは、ボールトによる確保分の読み取りの中にしか存在しませんでした。古い確保分は次の流入とともに戻り、キーパーの呼び出しの順序がバスケットの構成比を決めていました。
キーパーの役割
トリガーすることだけです。キーパーはタイミングを選び、各ステップの金額を指定し、スワップのルートを提案し、最低額を提示します。ボールトは、その最低額が自身のオラクル許容幅より緩い場合、または金額がその株式のために確保された分を超える場合に、それを拒否します。キーパーは許容幅を上回る額を求めることはできても、下回る額を求めることは決してできません。2026-10-05以降、ボールトはキーパーの最低額を、実際に届いた量に対して適用します。
キーパーは各株式の確保分を全額使いますが、バスケットの最後の株式だけは例外で、n−1単位を残します(nは株式の数)。キーパーを参照してください。
任意のOndoレールでは、キーパーは各レッグについて、発行体が署名した見積もりをボールトに渡します。そのような見積もりは、提示した者なら誰にとっても有効です。そのため、2026-10-05以降、Ondoのルーターはファクトリーのボールト、つまりプロトコルのボールトと登録済みの各マーケットのボールトにだけ対応し、それ以外の者を拒否します(NotAVault)。他の誰も、キーパーの見積もりを使ってその変換を失敗させることはできません。また、プロトコルのすべてのルーターは、自分自身をスワップの受取人とすることを拒否するため、トランザクションとトランザクションの間に何も保有しません。
何を指定しようとも、キーパーは、資産を流用することも、別のバスケットを選ぶことも、ある株式の資金を別の株式に移すことも、許容幅を緩めることもできません。
エアドロップ
ボールトの株式の行き先は1つです。エアドロップのたびに、保有量に応じた比例配分でトークンのホルダーへ渡ります。配分は、誰も選ぶことのないルールのもとで残高から導かれます。クリエイターもキーパーも選びません。仕組みは2026-10-04以降コード化されていますが、デプロイされていません。エアドロップを参照してください。
ローカルのレールでは、ボールトが自ら株式を引き渡します。キーパーだけが呼び出せるsendToAirdrop(stocks)は、リストに載ったバスケットの各株式の残高の全量を、ファクトリーが指定し、その都度読み取られるエアドロップのコントラクトへ送ります。ボールトは正確な金額を承認し、コントラクトがそれを引き取ってマーケットの現在のサイクルに計上し、呼び出しが戻る前に承認は再び閉じられます。同じ株式を2回リストに載せたり、バスケット外の株式を載せたりすると、呼び出しは失敗します。残高のない株式はスキップされます。2026-10-05以降、各株式は個別に送られます。残高を読み取れない株式や、転送が拒否される株式(たとえば発行体による凍結)は、イベント(AirdropSendFailed)とともにボールトに残り、他の株式は送られます。どの株式も送られない場合、呼び出しは失敗し、その理由を示します。ブリッジハブに接続されたボールトは、この呼び出しを拒否します。その株式はRobinhood Chain上で購入・保有されており、ミラーボールトが各株式のLayerZeroアダプターを通じて、同じようにそれを送るからです。
クリエイターがトレジャリーの株式を売却して自分のトークンをバイバックし、バーンできるようにしていたクリエイターバイバック(buybackAndBurn(...))は、2026-09-27に廃止が決まり、2026-09-28にコードから削除されました。
ボールトが保有できるもの
ETH、USDC、USDG、そして自身のバスケットの株式です。さらに、任意のOndoレールでは、発行体のミントが払い戻すことのあるUSDonも加わります。ボールトはそれ以外のものを購入しません。これはコードから導かれることであり、不変条件としてこれをチェックするテストはありません。また、第三者が無関係なトークンをボールトのアドレスに送ることを妨げるものは何もありません。緊急モードは、そのようなトークンも、他の資産と同じように持ち出します。
USDCでいっぱいのボールトは、壊れているのではなく移動中です。3つの状態はいずれも、次のエアドロップを待つトレジャリーとして表示されます。分配されるのは、購入済みの株式だけです。
マーケットごとに1つのプロキシ
2026-10-02以降、各マーケットのボールトはそれぞれ独自のプロキシです。ボールトはマーケットとともに作成され、その時点でファクトリーが指定しているボールトの実装の前に置かれ、同じトランザクション内で、そのバスケット、そのマーケット、そしてその時点でファクトリーが指定しているルーター、オラクル、ブリッジハブとともに初期化されます。StockFunのオーナーは、ボールトを1つずつ、マーケットごとに、即時発効でアップグレードします。ファクトリーで指定された新しい実装が適用されるのは、その後に作成されるマーケットだけです。
Robinhood Chain上のミラーボールトも同じルールに従います。Robinhoodレールを参照してください。
緊急モード
2026-08-29以降、StockFunのオーナーは、ボールトからあらゆる資産を任意のアドレスへ移動でき、2026-10-05以降、この移転は事前告知なしの即時のものです。エアドロップと並んで、現在の実装が資産をボールトから出すことを認める唯一の方法であり、緊急モードで扱っています。