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 independencies.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

RiskPosture
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 manipulationThere 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 liquidityTrades 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 ratesIf 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 availabilityReads 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 boundaryThe 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.