Reference
Security and risks
What has been verified, what hasn't, what the admin can and cannot do, and the risks of using this unaudited protocol.
What has been done
- Test suite: the Solidity suite passes, covering the protocol lifecycle (deposit, split, trade, claim, recombine, redeem), the AMM curve and both YT flash routes, the order book’s price-time priority, and the ERC-3643 bond: permissioned transfers, issuer-funded coupons and maturity redemption. The SDK and app suites also pass.
- Property and invariant tests: fuzzed and invariant runs exercise random splits, transfers, claims, recombines, and redemptions under changing rates, checking that the escrow still covers what it owes.
- Live testnet checks: none yet. No market is deployed on BOT Chain at the time of writing, so there are no on-chain receipts to point at. The deploy script exercises the full path — issue, deposit, split, seed both venues, schedule and fund a coupon — and writes a manifest, but it has only been run against a local node. This page will be wrong the moment that changes; treat a missing address as missing evidence.
- Reproducible builds: Solidity dependencies are pinned by commit in
dependencies.lock.json, and the deploy script writes a manifest recording every address it created (see Deployed contracts). - Fixed-point arithmetic: Solidity has no floating-point type, so the curve is implemented entirely in WAD fixed-point integer series. The pricing arithmetic cannot silently regress to floating point.
What the admin can and cannot do
Admin authority is enforced independently by each contract:
- SY vault: its strategy is bound immutably at initialization, and the admin may only set a deposit cap. There is no rate setter, so the admin cannot touch the exchange rate.
- AMM, tokenizer, and orderbook: their configured admins may update their respective bounded fees. Every fee change emits an on-chain event. The app only enables a control when the connected wallet matches that contract’s stored admin.
- Cannot: upgrade contracts, move or freeze holder funds, manually set the exchange rate, mint holder tokens, or pause redemptions. Fee authority cannot bypass the on-chain ceilings.
The production rate path has no human in it: the SY rate is derived from the bond strategy’s holdings on every read, and no contract exposes a setter that could configure it any other way.
Risk register
| Risk | Posture |
|---|---|
| Contract defect (unaudited code) | The dominant risk. Immutable contracts make any defect permanent. Testing and internal audits reduce it; nothing eliminates it. Size positions accordingly. |
| Underlying failure (bond / issuer) | SY is a bond position, so a bond default or loss is an SY loss. The damage is contained to this one vault, and it is priced rather than blocked: PT redemptions cap at each holder’s fair share, and PT is paid before YT. |
| Price-feed manipulation | There is no external price feed to manipulate. The rate is derived from the bond strategy directly, and outside integrators get a 30-minute average with an explicit warming-up flag. |
| Thin liquidity | Trades in the current shallow pool move prices sharply. Every swap carries a minimum-received floor, so a stale quote cancels instead of filling badly. |
| Falling interest rates | If the bond’s effective rate falls, YT earns less than its price implied. That is the instrument working as designed, not failing: YT is the leveraged side. |
| Network / RPC availability | Reads go through BOT Chain JSON-RPC with failover across endpoints. Funds and state live on-chain; an RPC outage delays the app but cannot move or lose balances. Contract storage does not expire, so there is no rent or TTL to lapse. |
| Interest at the maturity boundary | The freeze pins the last rate recorded at or before maturity. Any small unrecorded tail goes predictably to PT (the senior claim), never to whoever transacts fastest. |
Reporting a vulnerability
Report security findings privately through GitHub’s security advisory flow in the project repository, not as a public issue.