Repository navigation
node-2.1.200-rc.1
Pre-releasenode 2.1.200-rc.1
Metadata
- Release type: patch
- Version delta 2.1.101 to 2.1.200-rc.1 changes the patch digit only; the tag ships node, toolkit and runtime all at 2.1.200 (commit 07086ad).
- Date: 2026-11-11 (pre-release published at the tag; release body)
- Sister-line note: — No parallel line: this release follows node 2.1.101 on the 2.x line.
- Environment: Preview, Preprod and Mainnet. A pre-release, intended for every network once QA accepts it (owner-confirmed 2026-11-11).
- Released artifact(s): https://github.com/midnightntwrk/midnight-node/releases/tag/node-2.1.200-rc.1; node and toolkit binaries, runtime wasm builds and two container images ship at this tag, see Artifacts below.
- Component class: core/infra
- Upgrade scope: binary + runtime (detail under Deployment information)
- Reset required: No (detail under Deployment information)
- Governance action required: Yes, a federated-authority motion (detail under Deployment information)
High-level summary
This is a pre-release build for Preview, Preprod and Mainnet; it is not a production release.
node 2.1.200-rc.1 is a runtime release on top of node 2.1.101. The runtime's cap on the DAG nodes a transaction may declare rises from 1,024 to 8,192 and becomes a storage value that Root can change without a further runtime upgrade (commit 07086ad). The node and toolkit move to ledger 9.1.0.2-rc.0, which changes how clients construct transactions and lets clients load a trie shape already present in chain state (commit 09df349).
Audience
These notes are for:
- Validators and block producers, who upgrade binaries and then follow the runtime upgrade.
- Full Node Operators running node 2.1.101.
- External integrators and wallet developers whose contract calls were refused for declaring more than 1,024 nodes, and anyone decoding runtime metadata.
- The Midnight Foundation, which coordinates the runtime upgrade.
Dependencies
Component-local hard requirements:
- None for the runtime upgrade itself. The 2.1.200 runtime imports the same 63 host functions as the 2.1.100 runtime, so a node 2.1.101 binary can execute it; binaries and runtime need no ordering (commit ef01f38).
- Between node-2.1.101 and this release no file under
node/src,ledger/src/host_apiorprimitiveschanges, and the ledger 9.1.0.2-rc.0 changes are client-side transaction construction plus a flag the node never sets, so 2.1.101 and 2.1.200-rc.1 binaries validate blocks identically (commit 09df349).
Downstream impact (cascading effects).
- Runtime metadata changes:
Midnightgains the storage valueMaxTransactionNodes, the callset_max_transaction_nodes(call index 2) and the errorMaxTransactionNodesExceedsItemCap(index 15); theMaxTransactionNodesruntime constant is removed. Clients that read the constant must read the storage value instead (commit 07086ad). transaction_versionstays at 4, so extrinsics built against the 2.1.100 metadata keep their encoding (commit ef01f38).- Contract calls declaring up to 8,192 DAG nodes are accepted once the new runtime is enacted; the 2.1.100 runtime refused anything above 1,024 (commit 07086ad).
- The toolkit at this tag decodes blocks from the 2.1.200 runtime and keeps decoding 2.1.100 blocks (commit 07086ad).
Tested-with versions
Build pins — not QA-verified. Read from
Cargo.lockandCOMPACTC_VERSIONat commit ef01f38, andsrtool-digest.jsonat the tag.
Rows that changed since node 2.1.101 are marked in the Source column.
| Component | Tested-with version | Source |
|---|---|---|
midnight-ledger (ledger 8, historical blocks) |
8.1.3 |
crates.io (commit ef01f38) |
midnight-zswap (ledger 8) |
8.1.3 |
crates.io (commit ef01f38) |
midnight-onchain-runtime / -state / -vm (ledger 8) |
3.1.2 / 3.0.2 / 3.1.2 |
crates.io (commit ef01f38) |
midnight-coin-structure (ledger 8) |
2.0.2 |
crates.io (commit ef01f38) |
midnight-storage (ledger 8) |
2.0.5 |
crates.io (commit ef01f38) |
midnight-transient-crypto (ledger 8) |
2.2.0 |
crates.io (commit ef01f38) |
midnight-ledger-v9 (ledger 9) |
1.0.2 |
changed: ledger tag crate-ledger-9.1.0.2-rc.0 at bfd7adffca38 (commit 09df349) |
midnight-ledger-static (ledger 8 and 9) |
9.0.0 / 10.0.0 |
crates.io (commit ef01f38) |
midnight-zswap (ledger 9) |
9.0.1 |
crates.io (commit ef01f38) |
midnight-onchain-runtime / -state / -vm (ledger 9) |
4.0.1 |
crates.io (commit ef01f38) |
midnight-coin-structure (ledger 9) |
3.0.1 |
crates.io (commit ef01f38) |
midnight-storage (ledger 9) |
3.1.0 |
changed: ledger tag storage-3.1.0-rc.0 at 4586496ae410 (commit 09df349) |
midnight-transient-crypto (ledger 9) |
3.1.0 |
changed: ledger tag transient-crypto-3.1.0-rc.0 at 61f1a4beee38 (commit 09df349) |
midnight-base-crypto / -derive (shared) |
1.1.1 / 1.1.0 |
crates.io (commit ef01f38) |
midnight-serialize (shared) |
1.2.1 |
crates.io (commit ef01f38) |
midnight-storage-core / -macros (shared) |
1.2.3 / 1.0.1 |
crates.io (commit ef01f38) |
midnight-zkir |
2.2.0 / 3.2.0 |
2.2.0 crates.io; 3.2.0 changed source: midnight-zkir tag zkir-3.2.0 at 446c7fecc6bd (commit 09df349) |
midnight-proofs |
0.7.2 / 0.8.2 |
crates.io (commit ef01f38) |
midnight-circuits |
6.2.1 / 7.3.0 |
crates.io (commit ef01f38) |
midnight-zk-stdlib |
1.2.1 / 2.4.0 |
crates.io (commit ef01f38) |
midnight-curves |
0.2.1 / 0.3.1 |
crates.io (commit ef01f38) |
polkadot-sdk |
stable2606 |
Midnight fork, branch stable2606 at 6b0ce4838600 (commit ef01f38) |
parity-db |
0.5.4 |
Midnight fork, branch master at d44ef4fafd15 (commit ef01f38) |
wasmtime |
36.0.19 |
crates.io (commit ef01f38) |
partner-chains |
sidechain-domain 1.8.1 |
vendored in-tree (commit ef01f38) |
| Compact compiler | 0.35.0 |
COMPACTC_VERSION (commit ef01f38) |
| Rust toolchain (runtime build) | rustc 1.98.1 |
srtool, srtool-digest.json (release body) |
Deployment information
- Upgrade scope: binary + runtime. The runtime's
srtool-digest.jsongivesspec_version2001200 andtransaction_version4 (release body).- Runtime metadata:
subwasm diffbetween the 2.1.100 and 2.1.200-rc.1 compact runtimes reports the change as compatible with notransaction_versionbump required. In pallet 5,Midnight, it adds the callset_max_transaction_nodes(index 2), the errorMaxTransactionNodesExceedsItemCap(index 15) and the storage valueMaxTransactionNodes(default 8,192), and removes the constantMaxTransactionNodes. The only other difference is theSystemversion constant, which carriesspec_version. No pallet or existing call is removed or re-indexed (commit 07086ad).
- Runtime metadata:
- Reset required: No. The
res/directory, which holds the chain specs and config presets, is unchanged between node-2.1.101 and this release (commit ef01f38). The new storage value needs no migration: it reads as 8,192 until Root sets it (commit 07086ad). - Governance action required: Yes. A federated-authority motion enacts the runtime upgrade (owner-confirmed 2026-11-11). After enactment, changing the node cap is a Root call,
set_max_transaction_nodes(commit 07086ad). - Downtime / coordination: None. Binaries can be upgraded on a rolling basis with no downtime, before or after the federated-authority motion enacts the runtime, because both binaries run both runtimes; see Dependencies (commit ef01f38).
Artifacts
Binaries, with sha256 from SHA256SUMS at the tag (release body):
midnight-node-2.1.200-rc.1-linux-amd64.tar.gz: node binary, linux/amd64,sha256:f873f15e07b88291cd992e7656fdb59a795cfa84a4e10aa69d594759eed4d9bbmidnight-node-2.1.200-rc.1-linux-arm64.tar.gz: node binary, linux/arm64,sha256:88c280bdd513bbd02a1078d74ca38dc584fd02a7fe858fb3f6eeb96036ef64e6midnight-node-toolkit-2.1.200-rc.1-linux-amd64.tar.gz: toolkit binary, linux/amd64,sha256:412ce9a4665ebf55d70557126e65d8322b518bb72c60b25cb4c9751be841e3f1midnight-node-toolkit-2.1.200-rc.1-linux-arm64.tar.gz: toolkit binary, linux/arm64,sha256:1bfe390051b5a5dc97d9f038feea7cd4f984b1ed7d67faefc4e49e2e1a711c30
Runtime (hashes from srtool-digest.json and SHA256SUMS at the tag):
midnight_node_runtime-2.1.200-rc.1.compact.compressed.wasm: the runtime to enact, 560384 bytes, blake2-2560x7bc8f3faa45331e9b8e02e8cdcd1213492a617bdb93ce55f25db7a7cd9d3ed53, sha2560x202ea7484a2302dabc7b9982261206710348bf6ce186506decd927a2f87fa7a5, proposal hash0xa388816e2bea21fb72bda5a5923ee80629a12620278ab5bef83b3496f2074879midnight_node_runtime-2.1.200-rc.1.compact.wasm: compact, uncompressed, blake2-2560x99ce76cf649194ed1ecdf162f46b4f21b01a4cc01ee3b19db7d2acb8ecc1d264, sha2560xf3720cf4d71ea019e5d2339061a3fbd4347478e471cab66e505566f437b6a10bmidnight_node_runtime-2.1.200-rc.1.wasm: full build,sha256:81478d121d1bc0d3f15a23114233527c4372fabc9f7869a73e30236161039125srtool-digest.json: attestation of the deterministic runtime build (srtool 0.18.5, rustc 1.98.1)
Verification: SHA256SUMS lists the checksums for the tarballs and runtime builds above.
Images (Docker Hub, digests read from the registry on 2026-11-11):
midnightntwrk/midnight-node:2.1.200-rc.1: node image, multi-arch indexsha256:b4d9f1ba00ea82df0029e06f84e45209cf71c108b83c4a3630fb164a93dd797e; linux/amd64sha256:a3d67f6f3fa8f1934bec8dc78cad13d5376c265caa6d26adf14d51d732485cc7, linux/arm64sha256:33eecbef4de23adc811237919d115bc741660c537d3ea618e3ad2900ac481ef3midnightntwrk/midnight-node-toolkit:2.1.200-rc.1: toolkit image, multi-arch indexsha256:27d2a3950652684032c7fda392b302b19a1fae655be55b60efb7ae26c4117572; linux/amd64sha256:9a6ead4ba17185df4ebc45ac3b8d9d0a0c6e3c7a764a5feeed1b03cc6b597e66, linux/arm64sha256:7a6a64130fdc444eaf658173c57c193e248ad86929acb32aed541e84c2e6c6c7
Per-architecture tags 2.1.200-rc.1-amd64 and 2.1.200-rc.1-arm64 exist for both images and point at the per-architecture digests above.
What changed
- Runtime upgrade. The cap on the DAG nodes a transaction may declare rises from 1,024 to 8,192 and moves from a runtime constant to a
pallet-midnightstorage value that Root can set. (PR #2421) - Runtime upgrade. Runtime
spec_versionmoves from 2001100 to 2001200; the runtime and metadata crates move to 2.1.200. (commit 07086ad) - Node upgrade. Ledger 9 moves from 9.1.0.1 to 9.1.0.2-rc.0:
midnight-ledger-v91.0.2,midnight-storage3.1.0 andmidnight-transient-crypto3.1.0, each pinned to a per-crate tag in the public ledger repository because none is on crates.io yet. Ledger 8 stays on 8.1.3. (PR #2425) - Node upgrade. The node crate and
docs/openrpc.jsonmove to 2.1.200. (commit 07086ad) - Toolkit. The toolkit moves to 2.1.200, gains a 2.1.200 runtime in its block fetcher and keeps decoding 2.1.100 blocks. (commit 07086ad)
New features
governable transaction node cap
Runtime upgrade.
Description: MaxTransactionNodes, the most DAG nodes a transaction may declare before the ledger deserializes it, is now a pallet-midnight storage value with a default of 8,192. Root changes it with the new call set_max_transaction_nodes, with no runtime upgrade. The call refuses a value that would admit more operations than MaxDecodedTxItems, so the node cap always binds before the item cap. (commit 07086ad)
New features requiring configuration updates
None
Improvements
ledger 9.1.0.2-rc.0
Node upgrade + Toolkit.
Description: Transaction construction in the ledger now partitions transcripts against a mock transaction's size and time-to-dismiss, takes an expected TransactionShape, and rehearses calls with the widest commitment-tree indices. This is client-side construction code, used by the toolkit. midnight-transient-crypto gains PureGeneratorPedersen::smallest_representable. (PR #2425)
client-only loading of short extension chains
Node upgrade.
Description: midnight-storage gains ALLOW_SHORT_EXTENSION_CHAINS, a thread-local that lets clients load tries holding an extension shorter than 255 nibbles whose child is another extension. The node never sets it, and without it the trie canonicity check is unchanged, so node validation behaves as before. (commit 09df349)
ledger crate sources
Node upgrade.
Description: midnight-zkir 3.2.0 now resolves from the zkir-3.2.0 tag of the midnight-zkir repository instead of crates.io, because the ledger crate names it as a git dependency; its source is identical to the registry crate. scoped-tls 1.0.1 is a new dependency of midnight-storage. Each new ledger tag descends from the commit the previous crates.io crate was published from, and a source comparison against the previous registry crates shows no fix removed. (commit 09df349)
Deprecations
None
Breaking changes
None
Known issues
verifier key removal transactions are rejected as overspent
Description: A contract maintenance transaction that removes a verifier key (VerifierKeyRemove) and is balanced by a client using ledger version 9.1.0.0 is rejected with Custom error: 138 (BalanceCheckOverspend), because the client prices it lower than the runtime does (issue #2375). The issue was still open on 2026-11-11.
Workaround (if any): Bump the client's ledger version to 9.1.0.1 (issue #2375).
filtered transactions enter blocks in safe mode
Description: While the chain is in safe mode, filtered send_mn_transaction extrinsics still enter the pool and are included as failed extrinsics (issue #2205). The issue was still open on 2026-11-11.
Workaround (if any): None needed: block space is always reserved for governance actions.
reset_members reports more weight than it declares
Description: When both governance committees change in one block, the reset_members inherent reports more weight than it declares and nodes log a post-dispatch weight warning (issue #2226). The issue was still open on 2026-11-11.
Workaround (if any): None known.
ledger storage is not garbage-collected
Description: Every block's ledger state root is persisted and nothing collects old roots, so ledger storage grows with the chain (issue #2294). This release adds no ledger garbage collection.
Workaround (if any): None; provision disk for continued growth (issue #2294).
preview chain spec has no boot nodes
Description: The Preview chain spec lists no boot nodes, so a Preview node started without --bootnodes stays idle with no peers (issue #2236). The chain specs are unchanged in this release (commit ef01f38).
Workaround (if any): Pass the Preview boot nodes listed at https://docs.midnight.network/nodes/boot-node with --bootnodes (issue #2236).
malformed transactions logged at error level
Description: A malformed transaction submitted through RPC is logged at error level, which can trip error-rate alerting on public RPC nodes (issue #2242). The issue was still open on 2026-11-11.
Workaround (if any): None; alerting on node error logs may need to tolerate these lines (issue #2242).
toolkit cannot sync against Preview
Toolkit.
Description: Toolkit commands that build a wallet or ledger context against Preview abort while replaying a transaction the chain accepted (issue #2070). The issue was still open on 2026-11-11 and its fix is not in this release.
Workaround (if any): None known.
Links and references
- PRs: #2421, #2425
- Engineering docs: https://github.com/midnightntwrk/midnight-node/blob/node-2.1.200-rc.1/docs/security/image-signing.md (image signing)
- Known issues board: https://github.com/midnightntwrk/midnight-node/issues
- Public schema: https://github.com/midnightntwrk/midnight-node/blob/node-2.1.200-rc.1/docs/openrpc.json
- API documentation: the node serves the same document at runtime through the
rpc.discoverJSON-RPC method (commit ef01f38). - Ledger release: https://github.com/midnightntwrk/midnight-ledger/releases/tag/ledger-9.1.0.2-rc.0
Fixed defect list
The following defects were fixed in node 2.1.200-rc.1, relative to node 2.1.101.
| Defect number | Description |
|---|---|
| issue 2386 | The runtime refused valid transactions declaring more than 1,024 DAG nodes: 54 transactions already accepted on Preview, Preprod and Mainnet (largest 2,023 nodes) and a compiler-generated contract call declaring 6,287. The cap is now 8,192 (commit 07086ad; issue #2386). |