Skip to main content

Activation notice — block 5,710,001

info

LIVE 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. This page is the record of what changed at that boundary, because a client written against the older behaviour breaks on the rows below.

{"type":"account_state","address":"0x…"} carries the live height if you need to check where the chain is.

Part of the split rules below is already superseded. Read the standard-mode split before you code to them.

Several behaviours move at ONE height, so the chain gains one boundary rather than several. The rows below are the ones a caller can observe. Anything else in the release changes no request, response, or rejection you can see.

Why the pin is one block above the swap. The outgoing binary commits block 5,710,000 and only then halts, so that block still runs the old rules. Pinning the change at the swap height itself would mean the live chain and a replay of it disagreed about that one 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, and usd_class_transfer is the only lane that crosses. An account already in standard at the swap keeps one balance until it leaves the mode and enters again. The full rule set is the standard-mode split.

SurfaceBelow the heightAt and above
usd_class_transferRefused on every accountAccepted by a split standard account; refused on every other
spot_margin_open, split accountRefused: spot margin is not available in standard mode
user_set_abstraction kind: 2, split accountSets a spot reservationRefused: spot has its own wallet in standard mode; no spot reservation
user_set_abstraction kind: 0, value: 0, split accountRefused while the spot wallet is below zero: spot wallet is negative; cannot leave standard mode
USDC send_asset / sub_account_spot_transfer, split legDebits the pool, insufficient free collateral / insufficient cross collateralDebits the spot wallet, insufficient spot balance
account_state.splitAbsenttrue / false on a standard account
account_state.reservations.spot, split accountPooled rowreserved: "0", available = the spot wallet
account_state.spot.balances USDC row, split accountPerp margin inside totalThe spot wallet alone

A split account's perp bankruptcy cannot reach its spot wallet; the insurance fund and ADL absorb it.

One governance vote closes both legs

A quorum-met force_close_position closed only the long leg, so a hedge account kept its short and the action reported success. At and above the height one vote closes each leg the account holds: a hedge account gets two liquidation records per vote, max_size caps each leg on its own, and 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

SurfaceBelow the heightAt and above
user_fills[*].start_position, spot rowA bare "0"Zero at the market's sz_decimals, the same plane as sz ("0.00" on a two-decimal market)
user_fills aggregate: trueIgnoredFolds one order's legs into one row; see aggregate
user_fills[*].dir, spot rowRead as if a perpStates the spot direction
account_state.reservationsAbsent in every modePresent on a standard account
Node stream node_fills, each recordCarries ntl, the fill's notional in whole USDC
Faucet grant the reserve cannot pay200, nothing creditedRefused

Nothing else moves

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.