Protocol design
SY wrapper
The bottom layer: a vault that turns an interest-earning deposit into a standardized token, so everything above it never needs to know where the interest comes from.
What it does
The SY vault (StandardizedYieldVault) accepts cash, wraps a tokenized bond through the BondStrategy adapter, and issues SY tokens (sSY) against the position. Withdrawals do the reverse: burn SY, redeem the bond back to cash. The design follows the widely used ERC-4626 vault shape, adapted for a Solidity vault rather than an NFT-style extension.
The vault’s one important export is exchangeRate(): how much cash one SY is worth right now. As the bond’s coupon and maturity cashflow accrue, the rate ticks up. Your SY balance never changes by itself; the value of each SY does.
Where the rate comes from
The exchange rate is derived on every read from the strategy’s real holdings: totalAssets × WAD / totalSupply. It is never cached, and no admin can set it: the vault has no rate setter. The BondStrategy values only the bonds and cash the vault itself put to work, so donated tokens cannot move the rate. If the number is wrong, the strategy’s valuation of the bond is wrong. There is no second data source (no “oracle”, in DeFi terms) that could be manipulated separately.
Because the position only holds an accretive bond, the rate is one-directional in normal operation: interest accrues, so it rises. The case where the bond itself suffers a loss is handled explicitly; see Settlement and maturity for how a falling rate is priced in rather than causing a freeze-up.
Why wrap at all?
A tokenized bond’s own transfer interface doesn’t expose a clean, vault-style share token, and the next yield source (a tokenized treasury fund, a different bond) won’t look the same either. The vault flattens every underlying into one simple surface: a token count and an exchange rate. The tokenizer and the AMM are written against that surface only. Neither of them knows the bond exists.
One SY vault exists per underlying. The live deployment has exactly one, whose ERC-20 symbol is sSY. Adding a future yield source means deploying a new vault and BondStrategy that speak the same interface, and nothing above them changes.
Layering
Frontend / SDK (@sidereal/sdk / SiderealClient)
|
AmmMarket (prices PT, SY, YT) + Orderbook
|
Tokenizer (issues sPT and sYT against locked SY)
|
StandardizedYieldVault (this page)
|
BondStrategy (IYieldStrategy)
|
ERC-3643 / ATS tokenized bondDependencies flow strictly downward. The vault doesn’t know about the AMM, and the AMM doesn’t know about the bond. If an underlying ever fails, the damage stops at the vault for that one underlying. It cannot spread to other markets.