Thesettlementlayerforthemachineeconomy.

Network

Upgrades halt by height, by governance vote

Governance upgrades and hard forks

A named plan stops the old binary, and the new one mounts the stores it adds.

You schedule an upgrade as a governance software-upgrade proposal naming a plan and a block height. At that height the running paxd writes data/upgrade-info.json and stops; the new binary reads it, mounts the stores that plan adds, and runs module migrations. Rehearse the whole halt and resume on a disposable single-validator fork of exported state first, and keep a rollback binary plus a data snapshot on every host.

What it does

Protocol upgrades on the Paxeer chain go through a governance software-upgrade proposal that names an upgrade and a block height. Each name embedded in node/tags gets a registered handler, 106 of them, the newest v6.6; when the plan height is reached the running binary writes data/upgrade-info.json and stops, and the new binary reads that file, mounts the module stores that the named plan adds, and runs module migrations. A rehearsal script reproduces the same halt and resume on a disposable single-validator fork built from a stopped node's exported state. A separate chain-scoped hard-fork manager is wired into BeginBlock for height-triggered handlers.

Key capabilities

  • Registers an upgrade handler for each of the 106 names embedded in node/tags, up to v6.6.
  • Mounts new module stores by plan name: the custody store at v6.5, five stores at v6.6.
  • Runs module migrations for every registered upgrade; three upgrades also change a chain parameter.
  • Computes the halt height from a measured block rate, submits the proposal, and confirms the scheduled plan.
  • Rehearses the halt and the resume on a disposable single-validator fork of exported chain state.
  • Executes height-triggered hard-fork handlers from BeginBlock, filtered by chain identifier.

Who it's for

Validator and node operators upgrading paxd, and protocol engineers adding modules at a fork.

Why it matters

The stores a new module needs are added only by the governance plan, so an upgrade either takes effect on every node at the same height or does not take effect at all. The rehearsal script proves the new binary halts and resumes over real exported state before the live network stops, and the runbook keeps a rollback binary and a data snapshot on every host.

Differentiators

The store upgrade is selected by plan name, so one binary carries both the already-applied v6.5 store set and the pending v6.6 set and picks the one the upgrade file names. The rehearsal script rebuilds a single-validator chain from a stopped node's export, requires the old binary to halt with the UPGRADE NEEDED log line at exactly the plan height, checks that every added module reports a module version, calls a view on each of the five LayerX precompiles 0x1013 to 0x1017, and writes both binary hashes to rehearsal-result.env.

Outcomes

  • Take an upgrade at the same height as every other node.
  • Prove the halt and resume on exported state before the network stops.
  • Track submission deadlines from a measured block rate, not a guess.

Technical notes

  • The halt is scheduled by height only. halt-time and halt-height are both ruled out: only the governance plan makes the old binary write data/upgrade-info.json, and only that file makes the new binary add the stores. A node stopped any other way comes back up without them.
  • Governance defaults in code: 48 h voting period, 24 h expedited; quorum 0.334, threshold 0.5, veto threshold 0.334; expedited quorum and threshold 0.667.
  • Submission deadlines, with the default 1800 s margin: standard at T_halt − 48 h − margin, expedited at T_halt − 24 h − margin. The block rate is re-measured 24 h out; if the projected time of the height has drifted more than 30 minutes the plan is cancelled and re-proposed, and the height is never edited on nodes.
  • Rollback requires every validator at once and is unsafe once any validator has signed the halt height on the new binary. The previous libwasmvm stays installed because rollback needs it.
  • The rehearsal needs a spare machine and a copy of a full node's data taken while that node was stopped; --check validates flags and required tools without touching anything.
  • Only three upgrades do anything beyond migrations: 1.2.3beta sets the community tax to zero, v6.0.2 sets the minimum transactions in a block to 10, and v6.0.5 sets max gas wanted to 50,000,000. 1.2.3beta is absent from node/tags, so that handler is never registered and its branch cannot run.
  • The hard-fork manager is constructed and called from BeginBlock, but no handler is registered with it and the only chain identifier it defines is pax-hard-fork-test, so it has no effect on the live chain.
# dry run: prints every paxd command, both halt-height estimates and the submission deadlines
platform/hosted/paxeer/gov-upgrade.sh --rpc <rpc> --key <operator> --target-utc "$T_HALT_UTC" \
  --upgrade-info '{"binaries":{"linux/amd64":"<release URL>?checksum=sha256:<sha256>"}}' \
  --voter <operator-1> --voter <operator-2>
platform/hosted/paxeer/gov-upgrade.sh ... --execute      # submit, vote, wait, confirm
paxd q upgrade plan --node <rpc> -o json                 # name v6.6, height H

More in Network

Build on Paxeer.

Give your agent a wallet, set its policy, and settle your first call on LayerX.