What each word does
Two distinct things were both called “settle” in earlier versions of this dashboard. They mean different things and need different people to do them. The vocabulary below is the canonical mapping from UI label → underlying Move function ↗ on the deployed predict-testnet-4-16 bytecode.
market lifecycle · status pill meaning
| pill | full label | meaning |
|---|---|---|
| INACTIVE | WAITING FOR ORACLE | cap holder hasn't activated this oracle yet |
| ACTIVE | WAITING FOR EXPIRY | trading is open; waiting for the expiry timestamp |
| READY | READY TO SETTLE | expiry passed; cap holder needs to push the final price (settles the market) |
| SETTLED | SETTLED · REDEEMABLE | price frozen; positions can be redeemed permissionlessly by anyone |
actions · what each ui word triggers
Activate (oracle)
BS cap holderoracle::activate(oracle, &cap, clock)needs
OracleSVICap (1 of ~10 BS operator caps)
does
Marks the oracle as active so it can take position mints. Doesn't push prices yet — that's a separate call.
transitions
INACTIVE → ACTIVE
Push price update
BS cap holderoracle::update_prices(oracle, &cap, prices, clock)needs
OracleSVICap + signed price payload (off-chain)
does
Refreshes spot/forward. If the call lands AFTER expiry and the market isn't settled yet, this is the first post-expiry push and it ALSO freezes the settlement_price. That moment is what 'settling the market' means.
transitions
ACTIVE → ACTIVE (live update) · READY TO SETTLE → SETTLED (first post-expiry push)
Push SVI surface
BS cap holderoracle::update_svi(oracle, &cap, svi, clock)needs
OracleSVICap + new SVI params (a, b, ρ, m, σ)
does
Updates the volatility surface used by predict::trade_prices to quote binary marks. Refused once the oracle is past expiry.
transitions
no status change
Open position (mint)
Manager ownerpredict::mint<DUSDC>(predict, manager, oracle, key, qty, clock, ctx)needs
Owned PredictManager with DUSDC balance
does
Debits the live ask × qty from the manager's DUSDC balance. Adds (MarketKey → qty) to manager.positions table. Each contract pays up to 1 DUSDC at expiry if its side wins.
transitions
no market status change · creates / increments POSITION
Open vertical range
Manager ownerpredict::mint_range<DUSDC>(predict, manager, oracle, key, qty, clock, ctx)needs
Owned PredictManager with DUSDC balance
does
Same as mint, but for a bounded range (lower, higher] — pays 1 DUSDC if spot lands in band at settlement.
transitions
no market status change · creates / increments RANGE POSITION
Close position (owner, pre-settle)
Manager ownerpredict::redeem<DUSDC>(predict, manager, oracle, key, qty, clock, ctx)needs
Owned PredictManager + open position on this market
does
Closes the position at the current live bid. Payout deposits into the manager's DUSDC balance.
transitions
no market status change · decrements POSITION
Redeem position (anyone, post-settle)
Anyone — Bot K-redeem, the user themselves, or a third partypredict::redeem_permissionless<DUSDC>(predict, manager, oracle, key, qty, clock, ctx)needs
Market must be SETTLED
does
Pays the manager owner: 1 DUSDC per contract if the side won, 0 otherwise. The keeper (caller) gets nothing on-chain today — pure gas cost (~$0.0001 SUI). Emits PositionRedeemed with both `owner` and `executor` fields.
transitions
no market status change · POSITION → REDEEMED (entry removed from manager.positions)
Withdraw payout (owner)
Manager ownerpredict_manager::withdraw<DUSDC>(manager, amount, ctx)needs
Owned PredictManager with balance > 0
does
Pulls DUSDC coins out of the manager's internal BalanceManager to the owner's wallet.
transitions
n/a
currency
The only quote asset on the deployed Predict testnet is DUSDC — a synthetic USDC pegged 1:1 to USD for the test environment, 6 decimals.
Position quantity is in binary contracts. Each contract resolves to 1 DUSDC if its side wins at settlement, 0 DUSDC if it loses. So a position of 18 UP contracts at $63,000 has a max payout of 18 DUSDC.
On-chain coin type: 0xe95040085976bfd54a1a07225cd46c8a2b4e8e2b6732f140a0fc49850ba73e1a::dusdc::DUSDC