Docs · trust model

Security & invariants

Security here isn't a promise in a PDF — it's five invariants the test suite hammers on every path, plus a deliberately boring admin surface.

The five invariants

#InvariantPlain English
INV1BackingFor every asset, the vault's balance always covers supply × units. One token is never worth less than its basket.
INV2No drainTokens leave the vault only via redemption or whitelisted rebalance swaps. There is no arbitrary transfer, sweep, or rescue function.
INV3Redeem livenessNo admin action can block redemption. Pausing mint, zeroing the rebalancer, dropping the cap — redeem still works.
INV4Closed setThe asset list is fixed at construction. A rebalance can never introduce a new token.
INV5Bounded guardianThe guardian can pause mint, lower the cap, and rotate roles. It can never move balances, change units, or touch redemption.

Who can do what

ActorCanCannot
Guardianpause/unpause mint · lower supply cap · set fee recipient · rotate rebalancer/guardianwithdraw · pause redeem · raise the cap back up · change rails or the asset set
Agent (rebalancer)call rebalance() within whitelist, slippage cap, turnover cap, cooldownwithdraw · mint · touch any other function
Holdermint (when open) · transfer · redeem anytime

How it's tested

The suite is 95 tests across six files — unit, fuzz, invariant, adversarial, and fork:

  • Invariant fuzzing — INV1/INV2 hold across hundreds of thousands of random mint/redeem/rebalance sequences (2 × 128k calls, zero reverts).
  • Adversarial suite — reentrant router, router that over-pulls funds (EvilRouter), frozen-asset tokens, exact-wei boundary attacks on every rail.
  • Fork tests— mint/redeem against real Robinhood Chain state (chain 4663) with the real stock tokens' ERC-20 semantics.
  • Real-basket suite — the actual 6-asset Frontier configuration at real prices, not just toy 2-asset setups.

Known limitations, stated plainly

  • Issuer risk is inherited. Tokenized stocks are debt instruments of Robinhood Assets (Jersey) Ltd — holders are creditors, not shareholders. An issuer freeze on one asset blocks whole-basket redemption until it lifts.
  • Oracles gate rebalance, not redemption. A broken feed can pause good rebalancing; it cannot lock your exit.
  • Testnet ≠ mainnet. Current deployment is testnet with mock feeds. Mainnet ships after a final hardening pass (sequencer-uptime check, oracle-pause handling, route fork-testing against live pools).