A prize funded by interest, on a deposit that never leaves your control
Principal is delegated to a validator and returned 1:1. The yield that principal earns is pooled, and each epoch the whole pot goes to one depositor instead of a fraction of it to everyone.
The settings it runs on
These are the settings the pool runs on today.
Governance can adjust these within compiled ceilings. Any interface reads the current values live from the ProjectX API.
Four phases, and the pool is only ever in one of them
An epoch closes, a winner is drawn, a price is checked, the prize is converted and paid. Each transition is a separate on-chain transaction, so a failure in one stage cannot corrupt another.
- 1Open
Deposits and withdrawals are accepted. Yield accrues on the stake ladder.
OPEN - 2Draw
The epoch has closed. A winner is selected, weighted by stake.
AWAITING_DRAW - 3Price check
The oracle is read and the conversion rate is bounded before any swap.
AWAITING_SWAP - 4Settle
The prize is converted through the DEX and paid to the winner in USDC.
SWAP_IN_FLIGHT
What happens if a phase cannot complete
An epoch that closes with no yield, no depositors or no draw weight rolls over rather than aborting — the prize carries into the next epoch. This is deliberate: an abort would leave the pool stuck in a phase from which the harvest that creates a prize can never run. If the conversion cannot be made within the slippage bound, or the price feed is stale, settlement simply does not happen this epoch. In none of these paths is principal touched.
A ladder, not a lump
Sui staking rewards accrue per epoch and are only realised when a stake is withdrawn. Staking everything as one position would mean unstaking everything to harvest — so the pool stakes in tranches of staggered age.
- tranche 11/6 epochs
- tranche 22/6 epochs
- tranche 33/6 epochs
- tranche 44/6 epochs
- tranche 55/6 epochs
- tranche 6rotates
Each epoch the oldest mature tranche is unstaked, its yield harvested, and its principal restaked at the back of the ladder. Withdrawals are served from the liquid buffer first; only a withdrawal larger than the buffer reaches the ladder, and it takes from the head regardless of maturity — which resets that tranche’s clock.
Withdrawals come first
A 10% buffer stays liquid, so an ordinary withdrawal never has to disturb the ladder. A withdrawal larger than the buffer pulls from the ladder head immediately and regardless of maturity — your right to leave outranks the pool’s yield, every time, by design.
Yield is real, and it takes time
A tranche must sit for six complete Sui epochs before it is rotated and its rewards realised. On a young pool, or one being actively tested with withdrawals, harvests can legitimately return zero for a while. The protocol tracks consecutive zero-yield harvests and flags the anomaly rather than quietly reporting health.
Your chance is your share
Selection is proportional to stake. Twice the principal is twice the chance — never a guarantee, and never at anyone else's expense.
Randomness comes from Sui’s native on-chain source, consumed inside a non-public entry function so the drawn value cannot be read and acted on within the same transaction. Ineligible slots are resampled rather than skipped, which keeps the remaining distribution exactly proportional to principal.
A deposit made in epoch N becomes eligible to win in epoch N + 2. That waiting period is deliberate: without it, depositing immediately before a draw and withdrawing immediately after would be a way to buy a ticket without ever putting principal at work.
Losing costs nothing
If you are not drawn, your position is exactly what it was: the same principal, withdrawable on demand, entered in the next epoch. The only thing you forgo is the interest you would have earned on your own deposit — which is precisely what funds the prize.
The receipt cannot be taken from you
Your deposit receipt is a Move object with key and no store. No external transaction can transfer, sell, lend or wrap it — a whole class of drain exploits simply has no surface here.
The prize is converted at a rate the contract checks first
Winners are paid in USDC. Getting there means a price and a swap, and both are bounded before either runs.
Read the oracle
A Switchboard on-demand aggregator is pulled and validated: positive mean, sample age inside the freshness window, dispersion within the permitted band. A reading that fails any check stops settlement.
Bound the swap
The oracle price sets fair value; the contract will not accept an execution worse than 2% from it. A DEX quote outside that bound reverts the settlement rather than selling the prize badly.
Pay the winner
The converted USDC is paid to the drawn depositor, less the 2% conversion spread, and the settlement is emitted as an on-chain event with the realised rate and slippage.
The honest caveat
Settlement depends on two external systems — one price feed and one DEX pool. There is no feed redundancy today; it is a known limitation and it is on the roadmap. The failure mode is a delayed prize, not a lost deposit: if either system is unavailable, the epoch does not settle and the pot rolls forward.