Der TreasuryVault
Ein Vault pro Markt. Er erhält 2 % jedes Trades und verwandelt sie in tokenisierte Aktien, die per Airdrop an die Holder des Tokens verteilt werden. Er ist der schwerste Contract des Protokolls und derjenige mit den wenigsten Befugnissen.
Was er nicht hat
Kein withdraw. Kein transfer. Kein sweep. Kein Owner. Diese Funktionen existieren in der
aktuellen Implementierung nicht, was jeder überprüfen kann: Ein Aufruf schlägt fehl, weil es
nichts aufzurufen gibt. Seit dem 2026-10-02 ist der Vault selbst upgradebar: siehe unten.
Der Konvertierungszyklus
- Akkumulation. ETH kommt mit den Trades herein. Einmal alle 24 Stunden startet der Zyklus, wenn der Vault bei der Prüfung durch den Keeper, bei dessen erstem Durchlauf nach dem Schließen des Airdrop-Zeitfensters, mindestens 0,1 ETH hält; darunter wird an diesem Tag nichts ausgelöst, auch wenn das ETH die Schwelle später überschreitet — Gas und Slippage würden die Operation auffressen. Der Keeper hält sich seit dem 2026-10-06 daran; bis dahin konvertierte er, sobald der Vault die Schwelle hielt.
- ETH → USDC auf Uniswap v4 auf Ethereum, begrenzt auf 50 Basispunkte gegenüber dem ETH/USD-Feed. Tiefes Paar, daher kann die Grenze eng sein. Der Keeper nennt den Betrag, mindestens die Schwelle und höchstens den Saldo, und die Grenze wird auf diesen Betrag berechnet.
- USDC → USDG über Curve, dann über das OFT von Paxos auf LayerZero.
- Kauf der Aktien auf den Sekundär-Pools von Robinhood Chain, durch den Spiegel-Vault, begrenzt auf 200 Basispunkte gegenüber einem unabhängigen Chainlink-Feed, jede Aktie aus dem für sie reservierten Cash.
- Airdrop. Im selben täglichen Zyklus sendet der Keeper die gekauften Aktien an den Airdrop-Contract auf Ethereum, wo die Holder des Tokens sie pro rata claimen. Seit der siebten Audit-Schleife, am 2026-10-06, sendet er sie, sobald sie so viel wert sind, wie ihr Senden kostet; sonst warten sie im Vault auf ein späteres Zeitfenster.
Der Vault misst, was er tatsächlich erhält, und lehnt ab, wenn das Ergebnis unter dem Mindestbetrag des Keepers liegt, der nie lockerer ist als die Grenze (seit dem 2026-10-05; bis dahin wurde das Ergebnis allein an der Grenze geprüft). Er vertraut weder dem Keeper noch der Rail noch dem genannten Preis.
Seit dem 2026-10-05 läuft jedes Kauf-Leg für sich, auf beiden Vaults, die Aktien kaufen. Ein
Leg, das fehlschlägt — eine Route, die revertiert, eine eingefrorene Aktie, ein veralteter
Feed, ein Ergebnis unter dem Mindestbetrag, ein abgelehntes Preisangebot und, seit dem
2026-10-06 auf Robinhood Chain, eine Aktie, deren Token sein Oracle für eine
Kapitalmaßnahme pausiert —, behält sein Cash für seine Aktie reserviert und emittiert
LegFailed, und die anderen Legs laufen. Nur wenn kein Leg läuft, schlägt der Aufruf fehl,
mit dem Grund des ersten Legs, wie es ein einzelnes Leg täte. Bis dahin ließ ein
fehlschlagendes Leg den ganzen Kauf fehlschlagen. Auf Robinhood Chain hält mit gesetzter
Sequencer-Prüfung des Oracles ein ausgefallener oder gerade wieder laufender Sequencer
jedes Leg zurück (siehe Die Robinhood-Rail); diese Prüfung ist aus,
bis Chainlink einen Uptime-Feed für die Chain veröffentlicht.
Die Schwelle und beide Grenzen sind seit dem 2026-10-05 die Standardwerte von Einstellungen des Owners von StockFun, die jeder Vault live liest: die der Factory für die Vaults auf Ethereum, die des Remote-Hubs für die Käufe der Spiegel-Vaults. Eine Änderung gilt für die nächste Konvertierung jedes Vaults.
Beträge und Reservierungen
Seit dem 2026-10-01, nach dem Security-Audit vom 2026-09-29:
- Jeder Schritt gibt einen Betrag aus, den der Keeper nennt. Ein Vault, der größer ist, als sein Handelsplatz innerhalb der Grenze aufnehmen kann, konvertiert in Tranchen, über mehrere Zyklen. Vorher gab jeder Schritt den gesamten Saldo aus, und ein Vault, der seinem Handelsplatz entwachsen war, konnte nie wieder konvertieren.
- Die Grenze des ETH-Schritts wird auf diesen Betrag berechnet, nicht auf den aktuellen Saldo. Das ETH, das Trades hinzufügen, während die Transaktion wartet, macht den Mindestbetrag des Keepers nicht mehr ungültig.
- Das Cash wird Aktie für Aktie reserviert. Sobald es eingeht, wird es für jede Aktie des Baskets zu den Gewichtungen des Baskets zurückgelegt. Jede Aktie gibt nur ihre eigene Reservierung aus, und eine Aktie, die der Keeper überspringt, behält sie für später. Vorher wurde der Anteil einer übersprungenen Aktie erneut auf den ganzen Basket verteilt: Durch Überspringen konnte ein Keeper fast die gesamte Treasury in eine einzige Aktie verschieben.
Beide Vaults, die Aktien kaufen, arbeiten so: der Spiegel-Vault auf Robinhood Chain, in USDG, und der Vault auf Ethereum auf der lokalen Rail, in USDC.
In beiden setzt seit der Security-Pipeline vom 2026-10-01 ein Notfall-Transfer, der das Cash unter die Reservierungen senkt, diese alle auf null: Was übrig bleibt, und jeder spätere Eingang, wird neu zu den Gewichtungen des Baskets aufgeteilt. Eine Notfall-Recovery, die nur nicht reserviertes Cash oder ein anderes Asset nimmt, lässt sie bestehen. Vorher existierte das Zurücksetzen nur beim Auslesen der Reservierungen durch den Vault: Die alten Reservierungen kehrten mit dem nächsten Eingang zurück, und die Reihenfolge der Aufrufe des Keepers bestimmte die Mischung des Baskets.
Die Rolle des Keepers
Auslösen, sonst nichts. Er wählt den Zeitpunkt, nennt den Betrag jedes Schritts, schlägt Swap-Routen vor und liefert Mindestbeträge — die der Vault ablehnt, wenn sie lockerer sind als seine eigene Oracle-Grenze oder wenn ein Betrag übersteigt, was für diese Aktie reserviert ist. Der Keeper kann mehr verlangen als die Grenze, nie weniger. Seit dem 2026-10-05 wendet der Vault den Mindestbetrag des Keepers auf das an, was tatsächlich ankommt.
Der Keeper gibt die Reservierung jeder Aktie vollständig aus, außer bei der letzten Aktie des Baskets, bei der er n−1 Einheiten zurückhält, wobei n die Anzahl der Aktien ist: siehe Der Keeper.
Auf der optionalen Ondo-Rail übergibt der Keeper dem Vault für jedes Leg ein vom Emittenten
signiertes Preisangebot. Ein solches Angebot gilt für jeden, der es vorlegt; deshalb bedient
der Ondo-Router seit dem 2026-10-05 nur die Vaults der Factory, den Protokoll-Vault und den
jedes registrierten Marktes, und lehnt jeden anderen ab (NotAVault): Niemand sonst kann das
Angebot des Keepers verbrauchen und diese Konvertierung fehlschlagen lassen. Und jeder Router
des Protokolls lehnt sich selbst als Empfänger eines Swaps ab, sodass er zwischen
Transaktionen nichts hält.
Was immer er nennt, der Keeper kann kein Asset umleiten, keinen anderen Basket wählen, nicht das Cash einer Aktie zu einer anderen verschieben und keine Grenze lockern.
Der Airdrop
Die Aktien des Vaults haben ein einziges Ziel: die Holder des Tokens, bei jedem Airdrop, pro rata zu ihrem Bestand. Die Aufteilung ergibt sich aus den Salden nach einer Regel, die niemand wählt — weder der Creator noch der Keeper. Der Mechanismus ist seit dem 2026-10-04 programmiert, nicht deployt: siehe Der Airdrop.
Auf der lokalen Rail übergibt der Vault seine Aktien selbst. sendToAirdrop(stocks), nur für
den Keeper, sendet den gesamten Saldo jeder gelisteten Aktie des Baskets an den
Airdrop-Contract, den die Factory benennt, live gelesen. Der Vault erteilt Freigaben über die
exakten Beträge, der Contract zieht sie ein und schreibt sie dem aktuellen Zyklus des Marktes
gut, und die Freigaben werden wieder geschlossen, bevor der Aufruf zurückkehrt. Eine Aktie,
die doppelt oder außerhalb des Baskets gelistet ist, lässt den Aufruf fehlschlagen; eine
Aktie ohne Saldo wird übersprungen. Seit dem 2026-10-05 geht jede Aktie für sich: Eine, deren
Saldo nicht gelesen werden kann oder deren Transfer abgelehnt wird, etwa weil ihr Emittent
sie eingefroren hat, bleibt mit einem Event (AirdropSendFailed) im Vault, und die anderen
gehen; geht keine Aktie, schlägt der Aufruf fehl und nennt den Grund. Ein Vault, der mit dem
Bridge-Hub verdrahtet ist, verweigert diesen Aufruf: Seine Aktien werden auf Robinhood Chain
gekauft und gehalten, wo der Spiegel-Vault sie auf dieselbe Weise sendet, über den
LayerZero-Adapter jeder Aktie.
Der Creator-Buyback, buybackAndBurn(...), mit dem ein Creator Aktien der Treasury verkaufen
konnte, um seinen Token zurückzukaufen und zu verbrennen, wurde am 2026-09-27 abgeschafft und
am 2026-09-28 aus dem Code entfernt.
Was ein Vault halten kann
ETH, USDC, USDG und die Aktien seines Baskets, dazu, auf der optionalen Ondo-Rail, das USDon, das ein Mint beim Emittenten erstatten kann. Ein Vault kauft nichts anderes. Das ergibt sich aus dem Code; kein Test prüft es als Invariante, und nichts hindert einen Dritten daran, einen fremden Token an die Adresse eines Vaults zu senden. Der Notfallmodus holt einen solchen Token heraus wie jedes andere Asset.
Ein Vault voller USDC ist nicht defekt: Er ist im Transit. Alle drei Zustände werden als die Treasury angezeigt, die auf den nächsten Airdrop wartet; verteilt werden nur Aktien, sobald sie gekauft sind.
Ein Proxy pro Markt
Seit dem 2026-10-02 ist der Vault jedes Marktes ein eigener Proxy. Er wird mit dem Markt erstellt, vor der Vault-Implementierung, die die Factory zu diesem Zeitpunkt benennt, und in derselben Transaktion initialisiert, mit seinem Basket, seinem Markt sowie dem Router, dem Oracle und dem Bridge-Hub, die die Factory dann benennt. Der Owner von StockFun upgradet die Vaults einzeln, Markt für Markt, mit sofortiger Wirkung. Eine neue Implementierung, die in der Factory benannt wird, erreicht nur die danach erstellten Märkte.
Die Spiegel-Vaults auf Robinhood Chain folgen derselben Regel: siehe Die Robinhood-Rail.
Notfallmodus
Seit dem 2026-08-29 kann der Owner von StockFun jedes Asset aus einem Vault an eine beliebige Adresse bewegen; seit dem 2026-10-05 erfolgt der Transfer sofort, ohne vorherige Ankündigung. Zusammen mit dem Airdrop ist das der einzige Weg, auf dem die aktuelle Implementierung Assets einen Vault verlassen lässt, und er wird in Notfallmodus behandelt.