Skip to content

node-2.1.200-rc.1

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 11 Nov 13:47
ef01f38

node 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_api or primitives changes, 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: Midnight gains the storage value MaxTransactionNodes, the call set_max_transaction_nodes (call index 2) and the error MaxTransactionNodesExceedsItemCap (index 15); the MaxTransactionNodes runtime constant is removed. Clients that read the constant must read the storage value instead (commit 07086ad).
  • transaction_version stays 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.lock and COMPACTC_VERSION at commit ef01f38, and srtool-digest.json at 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.json gives spec_version 2001200 and transaction_version 4 (release body).
    • Runtime metadata: subwasm diff between the 2.1.100 and 2.1.200-rc.1 compact runtimes reports the change as compatible with no transaction_version bump required. In pallet 5, Midnight, it adds the call set_max_transaction_nodes (index 2), the error MaxTransactionNodesExceedsItemCap (index 15) and the storage value MaxTransactionNodes (default 8,192), and removes the constant MaxTransactionNodes. The only other difference is the System version constant, which carries spec_version. No pallet or existing call is removed or re-indexed (commit 07086ad).
  • 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:f873f15e07b88291cd992e7656fdb59a795cfa84a4e10aa69d594759eed4d9bb
  • midnight-node-2.1.200-rc.1-linux-arm64.tar.gz: node binary, linux/arm64, sha256:88c280bdd513bbd02a1078d74ca38dc584fd02a7fe858fb3f6eeb96036ef64e6
  • midnight-node-toolkit-2.1.200-rc.1-linux-amd64.tar.gz: toolkit binary, linux/amd64, sha256:412ce9a4665ebf55d70557126e65d8322b518bb72c60b25cb4c9751be841e3f1
  • midnight-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-256 0x7bc8f3faa45331e9b8e02e8cdcd1213492a617bdb93ce55f25db7a7cd9d3ed53, sha256 0x202ea7484a2302dabc7b9982261206710348bf6ce186506decd927a2f87fa7a5, proposal hash 0xa388816e2bea21fb72bda5a5923ee80629a12620278ab5bef83b3496f2074879
  • midnight_node_runtime-2.1.200-rc.1.compact.wasm: compact, uncompressed, blake2-256 0x99ce76cf649194ed1ecdf162f46b4f21b01a4cc01ee3b19db7d2acb8ecc1d264, sha256 0xf3720cf4d71ea019e5d2339061a3fbd4347478e471cab66e505566f437b6a10b
  • midnight_node_runtime-2.1.200-rc.1.wasm: full build, sha256:81478d121d1bc0d3f15a23114233527c4372fabc9f7869a73e30236161039125
  • srtool-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 index sha256:b4d9f1ba00ea82df0029e06f84e45209cf71c108b83c4a3630fb164a93dd797e; linux/amd64 sha256:a3d67f6f3fa8f1934bec8dc78cad13d5376c265caa6d26adf14d51d732485cc7, linux/arm64 sha256:33eecbef4de23adc811237919d115bc741660c537d3ea618e3ad2900ac481ef3
  • midnightntwrk/midnight-node-toolkit:2.1.200-rc.1: toolkit image, multi-arch index sha256:27d2a3950652684032c7fda392b302b19a1fae655be55b60efb7ae26c4117572; linux/amd64 sha256:9a6ead4ba17185df4ebc45ac3b8d9d0a0c6e3c7a764a5feeed1b03cc6b597e66, linux/arm64 sha256: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-midnight storage value that Root can set. (PR #2421)
  • Runtime upgrade. Runtime spec_version moves 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-v9 1.0.2, midnight-storage 3.1.0 and midnight-transient-crypto 3.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.json move 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

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).