Introducting Vault V2
Vault V2 operates alongside V1 and undergoing a security audit
What it is
Vault V2 is a tokenized vault on Stellar that holds one underlying asset (e.g., USDC) and issues a share token representing proportional ownership of the vault’s total assets. Unlike strategy vaults, Vault V2 uses a Treasury-separated custody model: all underlying tokens are stored in a dedicated Treasury account (multisig or MPC), while the contract implements deterministic ERC-4626–style mint/burn and conversion functions.
It provides a lightweight, composable accounting layer for higher-level systems such as OctoLend markets, RWA vaults, and automated strategies. Users deposit to mint shares and redeem shares to withdraw assets; all valuation and conversion logic is fully on-chain and mathematical.
Vault V2 leverages OpenZeppelin Stellar Contracts for Fungible Vaults with a minor modification being an external address as the treasury for curation purposes.
At a glance
- Permissionless Anyone can deploy and configure a Vault V2 instance.
- Non-custodial Assets live in the curator-controlled Treasury, not the contract.
- Deterministic math On-chain mint/redeem with fixed-point arithmetic and virtual offsets.
- Composable SAC shares integrate across Stellar DeFi.
- Immutable No upgradability; predictable long-term behaviour.
- Integration-ready Ideal as the accounting backbone for OctoLend, RWAs, and automated strategies.
Key properties
-
Treasury-separated custody Underlying assets are held in a designated Treasury account rather than the vault contract, improving composability with multisig/MPC governance.
-
Deterministic conversion math Shares/asset ratios are computed on-chain using fixed-point arithmetic with virtual offsets, stabilizing behaviour at low liquidity.
-
ERC-4626-like model for Stellar Implements deposit, mint, withdraw, redeem, and preview functions in a standardized, integration-friendly interface.
-
Composable SAC shares Vault shares are Stellar Asset Contract (SAC) tokens, compatible with Stellar wallets, AMMs, and DeFi protocols.
-
Immutable behaviour Conversion logic, custody model, and metadata are fixed at initialization.
-
Non-custodial Untangled never takes custody. Treasury is controlled by the curator or strategy owner (e.g., LOBSTR multisig, Fireblocks MPC).
How it works
Curation & strategy
Vault V2 itself does not perform strategy or valuation. Curators may choose to use it as the base tokenized layer for higher-level systems (e.g., OctoLend Lending Markets or RWA strategies). Also with treasury being an external address curators can also leverage its curation capabilities, just like in V1.
Deposits & Minting
Users deposit the underlying asset to mint shares:
- Vault calculates shares using convert_to_shares().
- Underlying tokens are transferred to the Treasury account.
- Vault mints SAC share tokens to the receiver.
Withdrawals & Redemption
Users burn shares to receive underlying assets:
- Vault computes required assets using convert_to_assets().
- Vault pulls tokens from the Treasury using transfer_from (Treasury must provide allowance).
- Shares are burned and assets are delivered to the user.
Conversion Logic
Conversion uses:
- Virtual total supply: totalSupply + 10^offset
- Virtual total assets: totalAssets + 1 These eliminate division-by-zero and ensure stable ratios from genesis to high-TVL operation. Rounding uses floor for predictable behaviour.
Total Assets
total_assets() returns the Treasury’s balance of the underlying token.
Roles
Treasury
The multisig or MPC account that holds all underlying assets. Must grant allowance to enable withdrawals/redemptions.
Vault Contract
Issues/burns shares, computes conversions, orchestrates transfers between itself and the Treasury.
Operator
Authorizes actions (deposit/mint/withdraw/redeem).
Vault V2 vs Vault V1
| Category | Vault V1 | Vault V2 |
|---|---|---|
| Custody model | Assets sit inside a strategy Treasury (multisig/MPC) controlled off-chain; vault contract holds no funds. | Same principle, but formalised: all assets must be stored in one fixed Treasury account. Shares always represent Treasury balance. |
| Withdraw model | Withdrawals are asynchronous, using epochs (batch processing) and distributor-set share price. | Withdrawals are synchronous, fully on-chain, using deterministic conversion math. No epochs, no price pushes. |
| Valuation model | NAV/share price updated off-chain by the Distributor and pushed on-chain. No NAV updates needed. | Vault V2 uses mathematical conversion based solely on Treasury balance + share supply. |
| Conversion function | Off-chain NAV determines shares; vault contract simply executes transfers. | Fully on-chain: convert_to_shares / convert_to_assets use virtual supply and virtual assets guards for stable ratios. |
| Virtual Supply Offset | Not used. | Uses totalSupply + 10^offset to avoid zero-supply division and support smooth genesis behaviour. |
| Virtual Asset Floor | Not used. | Uses (totalAssets + 1) to avoid division-by-zero and reduce rounding errors at low liquidity. |
| Fee model | Handled off-chain via share price updates. | None on-chain; strictly mechanical ERC-4626-style token vault. |
| Purpose | Multi-strategy yield aggregation vault. | Low-level tokenized vault primitive powering lending markets + on-chain accounting. |
| Redemption | Two-step: request → epoch settlement → claim. | One-step: synchronous redeem or withdraw. |
| Composability | Shares = SAC tokens; works across Stellar DeFi. | Shares = SAC tokens; same compatibility but deterministic accounting makes it suitable for automated systems (OctoLend). |