node-2.0.0-rc.3
Pre-releaseMidnight Node 2.0.0-rc.3
Metadata
- Type of release: major (pre-release)
- Date: 2026-06-29
- Ships in bundle: TBD — pre-release, not bundled
- Git tag: node-2.0.0-rc.3
- Environment: All public networks at time of release. For the full compatibility matrix, see the release notes overview.
- Upgrade scope: binary only
- Reset required: Yes — new-ledger networks (dev/devnet/stagenet); rc.3 is not compatible with rc.2
- Governance action required: No
High-level summary
Binary-only pre-release. The sole change since 2.0.0-rc.2 is bumping the Midnight ledger patch set from 9.1.0.0-rc.2 to 9.1.0.0-rc.3 (#1738), with the node and toolkit adapted to the new ledger wiring. The runtime WASM is byte-identical to 2.0.0-rc.2 (spec_version 002_000_000, transaction_version 4, runtime metadata unchanged) — the ledger is reached via host calls, so this is a node/toolkit upgrade, not a runtime upgrade.
Audience
- Operators who run nodes on the development ledger line (dev, devnet, stagenet) and need the rc.3 binary.
- Developers who build transactions with the toolkit against ledger
9.1.0.0-rc.3. - Administrators who maintain genesis state and chain-specs for new-ledger networks (ledger-state encoding moved v17 → v18).
Dependencies
- Requires Midnight ledger
9.1.0.0-rc.3(crate tagcrate-ledger-9.1.0.0-rc.3). rc.3 is not compatible with rc.2.
Downstream impact (cascading effects): Tooling and tests that produce or consume serialized transactions/ledger state against this node must target ledger 9.1.0.0-rc.3; payloads built against rc.2 will not validate (intent signing envelope and verifier-key slots changed). Deployed networks (govnet, mainnet, perfnet, preprod, preview, qanet) read via the L7/L8 stacks and are unaffected.
For all other interop questions, see the bundle dependency matrix.
Deployment information
- Upgrade scope: binary only — new node and toolkit binaries; the runtime WASM is unchanged from
2.0.0-rc.2. - Reset required: Yes — for networks on the new ledger (dev/devnet/stagenet). rc.3 is not compatible with rc.2, so there is no fork path between the two; moving a new-ledger network from rc.2 to rc.3 requires a reset with a freshly generated genesis state + chain-spec (ledger-state encoding v17 → v18). Deployed networks read via L7/L8 and need no reset.
- Governance action required: No.
- Downtime / coordination: None for deployed networks. New-ledger dev networks need a fresh genesis/chain-spec before their next reset (devnet genesis is rebuilt AWS-side; no local seeds).
Artifacts
- Docker:
midnightntwrk/midnight-node:2.0.0-rc.3andmidnightntwrk/midnight-node-toolkit:2.0.0-rc.3 - Git tree hash:
c808ee588ab60999a2c185fef36093be871763b8
docker pull midnightntwrk/midnight-node:2.0.0-rc.3
docker pull midnightntwrk/midnight-node-toolkit:2.0.0-rc.3What changed
- Bumped the Midnight ledger patch set from
9.1.0.0-rc.2to9.1.0.0-rc.3, folding the L7/L8 (2.x) and L9 (3.x) crypto stacks into a singlezkircrate and adapting node + toolkit wiring (dual-stack contract verifier keys, intent-envelope dust signing,!Send-safe proving). - Replaced the
parallelism_factorcost-model parameter with threeFixedPointfactors (validation_factor,guaranteed_factor,fallible_factor) on new-ledger networks. - Bumped the ledger-state serialization encoding v17 → v18 and rebuilt undeployed genesis and
.mntest fixtures.
| Change | Upgrade Type | PR |
|---|---|---|
Bump ledger to 9.1.0.0-rc.3 (node + toolkit; runtime WASM unchanged) |
Node upgrade + Toolkit | #1738 |
New features
None
New features requiring configuration updates
None
Improvements
Bump ledger to 9.1.0.0-rc.3
Description: Updates the ledger patch set from the 9.1.0.0-rc.2 tags to 9.1.0.0-rc.3. rc.3 keeps the L7/L8 (2.x) vs L9 (3.x) crypto-stack split but folds both stacks into one zkir crate (midnight-zkir 2.2.0 proves V0/V1 and V2 circuits), retiring the rc.2-era frozen zkir-2.1.0 workspace dep. Node-side wiring adds [patch.crates-io] entries for midnight-base-crypto-derive and midnight-transient-crypto-old, and the dropped upstream verifier_key() is now provided locally so it works across all ledger versions. SingleUpdate gains IrInsert/IrRemove (on-chain IR maintenance, L9-only). The cost model swaps parallelism_factor: 4 for validation_factor: 0.25 / guaranteed_factor: 1.0 / fallible_factor: 1.0 on the new-ledger networks. Runtime metadata is not regenerated — the change is to ledger-parameter config and ledger-state encoding, not pallet storage or extrinsics. Node upgrade.
PR: #1738
Adapt toolkit to ledger 9.1.0.0-rc.3
Description: Three rc.3 ledger changes required toolkit adaptation. (1) ContractOperation is now dual-stack: it carries a v2 slot for 2.x keys (v1 / zk-stdlib-v1 circuits) and a v3 slot for 3.x keys (v2 circuits); the toolkit peeks the verifier-key serialization tag to pick the slot, fixing VerifierKeyNotSet on v1 test contracts. (2) dust_actions are folded into Intent::data_to_sign (the new IntentSigningEnvelope), so the toolkit now assembles the full intent before computing data_to_sign and signing — fixing InvalidDustRegistrationSignature and IntentSignatureVerificationFailure. (3) ledger 9's prover is !Send, so local and remote proving now drive the prove future inside a spawn_blocking current-thread runtime, preserving semaphore-bounded real parallelism. Toolkit.
PR: #1738
Deprecations
None
Breaking changes
rc.3 is not compatible with rc.2
What changed: The ledger bump changes the ledger-state serialization encoding (v17 → v18), the cost-model parameters, the intent signing envelope (dust folded into data_to_sign), and the contract verifier-key layout (dual-stack v2/v3 slots).
What breaks: A new-ledger network running rc.2 cannot fork or migrate to rc.3 — there is no upgrade path between the two pre-releases. Transactions and ledger state serialized against rc.2 will not validate or decode under rc.3.
Required actions:
- Reset new-ledger networks (dev/devnet/stagenet) and regenerate genesis state + chain-spec at the v18 encoding before running rc.3.
- Rebuild any toolkit-generated fixtures/transactions against ledger
9.1.0.0-rc.3. - Deployed networks (govnet, mainnet, perfnet, preprod, preview, qanet) read via L7/L8 and need no action.
Known issues
None
Links and references
- PRs: #1738
- Known issues board: open bugs
- GitHub release: node-2.0.0-rc.3
Fixed defect list
None
Other Changes
None