Activation notice: block 5,710,001
This page records what changed on chain 114514 at block 5,710,001.
In effect since block 5,710,001. Node 0.9.7 swapped in at block 5,710,000, and every rule below turned on one block later. The page records what changed at that boundary, because a client written against the older behavior breaks on the rows below.
{"type":"account_state","address":"0x…"} returns the current height. Use it to check where the chain is.
Part of the split rules below is already superseded. Read the standard-mode split and the rules node 0.9.10 changed before you code to them.
Several behaviors move at one height, so the chain gains one boundary. The rows below are the ones a caller can observe. The rest of the release changes no request, response or rejection that you can see.
The pin is one block above the swap. The outgoing binary commits block 5,710,000 and then halts, so that block still runs the old rules. A pin at the swap height itself would make the running chain and a replay of it disagree about that block.
The two-wallet standard account
An account that enters standard mode at or above the height holds two USDC wallets. Perp collateral stays in the perp wallet. Spot USDC moves to its own wallet. usd_class_transfer is the only lane that crosses between them. An account that is already in standard at the swap keeps one balance until it leaves the mode and enters again. The standard-mode split has the full rule set.
| Surface | Below the height | At and above |
|---|---|---|
usd_class_transfer | Refused on every account | Accepted by a split standard account; refused on every other |
spot_margin_open, split account | — | Refused: spot margin is not available in standard mode |
user_set_abstraction kind: 2, split account | Sets a spot reservation | Refused: spot has its own wallet in standard mode; no spot reservation |
user_set_abstraction kind: 0, value: 0, split account | — | Refused while the spot wallet is below zero: spot wallet is negative; cannot leave standard mode |
USDC send_asset / sub_account_spot_transfer, split leg | Debits the pool, insufficient free collateral / insufficient cross collateral | Debits the spot wallet, insufficient spot balance |
account_state.split | Absent | true / false on a standard account |
account_state.reservations.spot, split account | Pooled row | reserved: "0", available = the spot wallet |
account_state.spot.balances USDC row, split account | Perp margin inside total | The spot wallet alone |
The perp bankruptcy of a split account cannot reach its spot wallet. The insurance fund and ADL absorb it.
One governance vote closes both legs
Before the height, a force_close_position that met quorum closed only the long leg. A hedge account kept its short leg, and the action reported success. At and above the height, one vote closes each leg that the account holds. A hedge account gets two liquidation records per vote. max_size caps each leg on its own. The outcome summary reads forceClosePosition partial (quorum met): residual stays open when any leg keeps size. The vote payload does not change. See liquidation records.
Rows that change shape or meaning
| Surface | Below the height | At and above |
|---|---|---|
user_fills[*].start_position, spot row | A bare "0" | Zero at the market's sz_decimals, the same plane as sz ("0.00" on a two-decimal market) |
user_fills aggregate: true | Ignored | Folds one order's legs into one row; see aggregate |
user_fills[*].dir, spot row | Read as if a perp | States the spot direction |
account_state.reservations | Absent in every mode | Present on a standard account |
Node stream node_fills, each record | — | Carries ntl, the fill's notional in whole USDC |
| Faucet grant the reserve cannot pay | 200, nothing credited | Refused |
Unchanged
No /exchange action tag is added or removed. No snapshot or block field is renamed. Every EIP-712 type string is unchanged, so a signed action that verified below the height verifies above it.