Model
available + locked. unsettled and quarantined
are reserved for future settlement modes and currently always zero.
Reading balances
How locked moves
| Event | available | locked |
|---|---|---|
| Order placed (BUY) | -notional | +notional |
| Order placed (SELL) | 0 | 0 |
| Order cancelled | +residual | -residual |
| Trade executed (BUY) | 0 | -notional |
| Trade executed (SELL) | +proceeds − fee | 0 |
| Order rejected | +full | -full |
| Market resolved | +residual | -residual |
| Withdrawal requested | -amount | +amount |
| Withdrawal confirmed on-chain | 0 | -amount |
| Withdrawal rejected / reverted | +amount | -amount |
SELL orders don’t move USDC
balances — they encumber the
outcome shares in vault_erc1155_locks instead. After you place a
SELL, your available and locked USDC are unchanged; what does
change is the available-to-promise outcome-share balance for the
underlying token. Inspect this via GET /api/me/positions (the
quantity reflects post-encumbrance available shares). When the
SELL fills on-chain, USDC proceeds land in available per the
table above.Append-only ledger
Every balance change is mirrored tobalance_events (append-only).
(user, token):
SUM(deltaAvailable) + SUM(deltaLocked) === current(available) + current(locked).