Changelog
Building a new client? Skip this section. Everything here describes how the wire USED to behave. The current contract is the API reference, and it is already correct.
Read a page here when you have a client written against an older release and it started failing, or when you want to know at which block a behaviour changed.
How a change reaches the chain
One release moves every behaviour at ONE height. The chain gains one boundary per release, not one per change, so a page here covers a whole release rather than a single field.
The pin sits one block ABOVE the swap height. The outgoing binary commits the swap block and only then halts, so that block still runs the old rules. Pinning at the swap height itself would make the live chain and a replay of it disagree about that one block.
{"type":"account_state","address":"0x…"} carries the live height, so you can
check where the chain is against any boundary below.
Entries
| Entry | What it covers |
|---|---|
| Migrations | Five breaking changes to the READ surface, newest first, each with a checklist. Signed /exchange actions are unchanged by all five. |
| Ids and wire shapes | oid and tid became decimal-digit strings, order_status gained its fill legs and terminal states, a fill labels its fee token, margin and funding moved onto one plane. Two rows corrupt data silently rather than erroring. |
| Next release (height not pinned yet) | Ships with the next node release after 0.9.7. A split standard account trades on its two wallets with no reservation, and kinds 1–3 of user_set_abstraction are refused on it. account_state drops reservations from a split account. An unfunded spot order is refused with insufficient spot balance, and a short usd_class_transfer from the spot wallet is refused with the same message instead of insufficient spot USDC balance. The same release re-signs vault_modify, adds a parked per-order status and a NONCE_REPLAYED verdict, dedups cloid per leg, and turns three silent accepts into refusals. |
| Block 5,710,001 | The two-wallet standard account, one force-close vote for both legs, start_position on the size plane, reservations and split on account_state. |
| Block 13,350,001 | A future-nonce refusal, TWAP slices that fill, cancel-all reaching TWAP parents, an isolated extend that posts margin, a bounded EVM block, the buyback drip. |
| Block 7,400,000 | An admission rule that refuses over-levered orders, a delist that cancels resting orders, the contract CoreWriter lane, permissionless spot deployment, randomized TWAP slices. |
See also
- Versioning — the policy: what counts as breaking, and the notice period
- API reference — the current contract