github IntersectMBO/cardano-node 11.2.0

pre-release4 hours ago

Release Notes

Node version 11.2.0 is a pre-release version of cardano-node that is not yet recommended for use on mainnet. Its headline change is the move to the new cardano-config library for reading node configuration: the node now understands a versioned configuration "envelope" alongside the existing flat format, and the configuration files published for each network are now in the envelope format. It also extends the gRPC interface, continues the groundwork for the Dijkstra era, Leios and Peras, and fixes several operator-facing bugs.

Highlights:

  • New configuration format. Configurations are read through cardano-config.
    • Existing flat configurations still work.
    • The new envelope format ($schema / Version / MinNodeVersion / Configuration) is schema-validated.
    • New cardano-node config migrate, cardano-node config schema and cardano-node config resolve subcommands convert, describe and check a configuration.
    • The shipped network configs are now enveloped and cannot be read by nodes older than 11.2.
  • gRPC over HTTP/2. The gRPC server can now listen on a TCP address/port, in plaintext (h2c) or with TLS (--grpc-listen-address/--grpc-listen-port, --grpc-tls-*), instead of only a unix socket.
  • New gRPC methods ReadMempool, WatchMempool and ReadEraSummary, plus server reflection.
  • Node-to-client versions older than NodeToClientV_23 are no longer supported. Clients (wallets, indexers, tools) must be built against a version of the network libraries that speaks NodeToClientV_23 (shipped since node 10.7.0).
  • Ledger snapshots are now taken by default every 40 * k slots with no offset (once a day on mainnet).
  • The node traces the resolved snapshot policy at startup, and warns if it is implausible for the network's slot length.
  • Continued Dijkstra-era work:
    • cardano-cli supports sub-transactions and guard credentials.
    • cardano-submit-api accepts Dijkstra transactions.
    • The CIP-0168 Plutus builtins have a cost model.
  • Groundwork for Leios and Peras (off by default).

Known issues

Breaking changes

  • Configuration files: the published mainnet-config.json/.yaml (and other network configs) are in the cardano-config envelope format and are not readable by pre-11.2 nodes. Flat configurations remain supported by 11.2.0; use cardano-node config migrate to convert one.
  • Docker: CARDANO_CONFIG_JSON_MERGE is a plain deep merge, so a merge document written for the flat shape silently does nothing against an enveloped config. Nest keys under Configuration.<Section> (e.g. {"Configuration":{"HermodTracing":{"TraceOptions":…}}}); see nix/docker/README.md.
  • Node-to-client: NodeToClientV_16 – NodeToClientV_22 were removed, along with the queries only they could reach: GetProposedPParamsUpdates, GetStakeDistribution (use GetStakeDistribution2) and GetPoolDistr (use GetPoolDistr2).
  • NixOS service: blsKeys (added in 11.1) is replaced by a single blsKey; multiple keys go in one file as a JSON array of text envelopes.
  • Tracing: log consumers should note the changes listed in the "Tracing" changelog below (mempool "tx" field is now hex CBOR, renamed DelegAccountAlreadyRegistered failure, new namespaces; trace forwarding config change).
  • cardano-cli: node issue-pop-BLS and node key-hash-BLS were removed. Proof-of-possession is built into stake-pool registration-certificate --bls-signing-key-file.
  • cardano-cli: --script-valid/--script-invalid were removed from the Dijkstra transaction build* commands (Conway unaffected).

Release Benchmarks

System Testing

Technical Specification

Minimum System Requirements
  • An Intel or AMD x86 processor with two or more cores, at 1.6GHz or faster (2GHz or faster for a stake pool or relay)
  • Or, for MacOS, an Apple Silicon processor
  • 24GB of RAM when running with the InMemory backend, 8GB when running with the OnDisk backend (pending confirmation)
  • 300GB of free storage (350GB recommended for future growth)
Platforms
  • Linux 64-bit (Ubuntu 20.04 LTS, 22.04 LTS, 24.04 LTS, 26.04 LTS; Mint 20, 21, 21.1, 21.2, 21.3, 22, 22.1, 22.2; Debian 11, 12, 13)
  • Windows 64-bit (10, 11)
  • MacOS 10.15, 11 (Big Sur), 12 (Monterey), 13 (Ventura), 14 (Sonoma), 15 (Sequoia), 26 (Tahoe)
GHC/Cabal supported versions
  • GHC 9.6
  • Cabal 3.8/3.12
Supported roles
Platform Block Production Relay Client (Desktop)
Linux 🟢 🟢 🟢
Windows 🟥 🟥 🟢
MacOS 🟥 🟥 🟢
Downloads

Documentation

Sign-off

Role Approval
Technical Steering Committee (Intersect) 🟢
Product Committee (Intersect) 🟢
Test Engineer N/A
Performance Engineer N/A
Site Reliability Engineer 🟢
Release Engineer 🟢
Legend
  • 🟢 - signed / agreed / supported
  • 🟥 - not agreed / unsupported

Changelogs

cardano-node
  • The node reads its configuration through cardano-config. Two dialects are understood: the legacy flat format (read by both the node's own parser and cardano-config, with any divergence reported as a non-fatal warning) and the new cardano-config envelope, resolved by cardano-config alone. New subcommands cardano-node config migrate, cardano-node config schema and cardano-node config resolve (the latter also reports divergences between the two parsers for a flat config). (#6677)
  • The shipped network configurations were refreshed for the 11.2 series and moved to the envelope format. Release tarballs ship the enveloped config. (#6677)
  • mainnet-config.yaml drops LastKnownBlockVersion-* and is no longer readable by a pre-11.2 node. (#6677)
  • The gRPC server can listen over HTTP/2 instead of only a unix socket: --grpc-listen-address/--grpc-listen-port (config RpcListenAddress/RpcListenPort), and TLS via --grpc-tls-certificate/--grpc-tls-private-key/--grpc-tls-chain-certificate. Conflicting or incomplete combinations are rejected at parse time. (#6668)
  • Standard handles now always use UTF-8, independent of the system code page or locale. On Windows, stdout traces were written in the legacy code page, so JSON lines were not valid UTF-8, and characters outside that code page (e.g. in a non-ASCII host name or TraceOptionNodeName) crashed the node at startup. The same crash happened on Linux under a non-UTF-8 locale such as LC_ALL=C. (#6711)
  • Tracing changes visible to log consumers, now that the consensus tracing instances are used instead of the node's own copy:
    • mempool rejections always carry errdetails;
    • the detailed "tx" field of mempool traces is now the CBOR in hex;
    • new namespaces Mempool.CapacityChanged, Snapshot.ConfiguredSnapshotPolicy, Snapshot.ImplausibleSnapshotPolicy, RPC.SubmitService.ReadMempool.Span and RPC.SubmitService.WatchMempool.Span;
    • the Peras certificate inclusion and vote forging tracers are wired, under Peras.Cert.Inclusion and Peras.Vote.Forging;
    • the ledger predicate failure kind for an already-registered delegation account is now DelegAccountAlreadyRegistered.
      (#6677)
  • slotsMissed_int no longer counts the slots that elapse while block forging is disabled; the first leadership check after forging is re-enabled starts a new run of slots. Genuine gaps while forging is enabled are still counted. (#6698)
  • Docker: the node entrypoint's relative-path rewriting now handles enveloped configs. (#6677)
  • Docker: CARDANO_CONFIG_JSON_MERGE documents must use the enveloped shape (see nix/docker/README.md). (#6677)
  • NixOS service: new configFormat option ("legacy", the default, or "enveloped") to choose the generated config dialect. (#6677)
  • NixOS service: new lsmExportPath option, for the LSM snapshot export consumed by Mithril signing. (#6677)
  • NixOS service: new immutableDatabasePath and volatileDatabasePath options. (#6677)
  • NixOS service: blsKeys is replaced by a single blsKey. (#6677)
  • The Mithril signer bundled in the x86_64-linux tarball was bumped to the v2642.0 release (signer 1.2.5). (#6677)
cardano-tracer
  • Standard handles now always use UTF-8 (on Windows also the console code page), independent of the system code page or locale. (#6731)
  • trace-forward 2.5.1 fixes a small memory leak in the acceptor. (#6740)
cardano-submit-api
  • Fixed cardano-submit-api rejecting Dijkstra era transactions with a TxCmdTxReadError decoding error. Transactions from every Shelley-based era, including Dijkstra, are now decoded and submitted to the node. (#6725)
cardano-testnet
  • New --enable-tracer option starts cardano-tracer and has all testnet nodes forward their traces to it, with --prometheus-listen-address/--prometheus-listen-port to bind its Prometheus server. (#6710, #6723)
  • When the network is ready, cardano-testnet cardano writes a machine-readable manifest.json (sockets, ports, key paths, genesis files, wallet addresses) into the output directory, with a JSON Schema in cardano-testnet/schemas/manifest.schema.json. (#6693)
  • New --enable-grpc-http to serve each node's gRPC endpoint over HTTP (h2c), with --grpc-listen-address and --grpc-listen-port-base; endpoints are printed in the startup summary. (#6685)
  • Testnet node configurations are written in the cardano-config format, with genesis hashes refreshed on every start. Breaking for library users: createConfigJson, createConfigJsonNoHash, getByronGenesisHash, getShelleyGenesisHash, GenesisHashesPolicy and SubmitApiConf's configPath were removed. (#6677)
  • nix run .#cardano-testnet is self-contained. (#6684)
cardano-cli
  • Added Dijkstra sub-transaction commands: build-raw, sign and txid. Top-level transaction build-raw accepts signed sub-transactions through repeatable --signed-sub-tx-file options. Sub-transaction builders support guard credentials and required top-level guards.
  • Added Plutus V4 reference-script options to Dijkstra transaction and sub-transaction builders. Sub-transactions support native scripts and Plutus V4; Plutus V1–V3 script files are rejected.
  • Added --direct-deposit STAKE_ADDRESS+LOVELACE to Dijkstra transaction builders and sub-transaction build-raw, with duplicate-recipient validation, automatic fee balancing, and deposit details in transaction views.
  • Added BLS voting-key registration through stake-pool registration-certificate --bls-signing-key-file, mandatory from Dijkstra onwards. Removed node issue-pop-BLS and node key-hash-BLS; node key-gen-BLS remains available.
  • Added Leios protocol-parameter update options and exposed --spec-dijkstra in testnet genesis help.
  • Removed --script-valid and --script-invalid from Dijkstra transaction builders; Conway retains both options.
  • debug check-node-configuration accepts legacy flat and new cardano-config configurations. Genesis hashes are required and genesis files are fully decoded and validated. Experimental hard forks require a Dijkstra genesis file and hash. The success message now goes to stderr.
  • Added repeatable --tx-in-collateral to compatible transaction signed-transaction.
  • Fixed relay IPv4 address rendering, redeemer indexing, and transaction build-estimate balancing with no outputs or multi-asset input values.
  • Improved era and script handling: CARDANO_ERA accepts Dijkstra and case-insensitive names; address and policy-ID commands accept Plutus V4 and native guard scripts; unsupported reference-script languages produce an error instead of being silently dropped.
  • Updated to API 11.11 and its validated, insertion-ordered transaction guards.
cardano-api
  • Added experimental Dijkstra sub-transaction construction, signing, serialisation and embedding. Unified transaction body content across top-level transactions and sub-transactions, with Dijkstra fields for guards, direct deposits and account-balance intervals.
  • Added native-script guards and native/Plutus V4 guard witnesses, including fee estimation and balancing. Guard collections now use insertion-ordered TxGuards; callers should use mkTxGuards and handle validation errors.
  • Added BLS stake-pool voting-key registration and Leios protocol-parameter updates.
  • Added Plutus V4 reference and auxiliary scripts for Dijkstra. Unsupported script languages now fail explicitly during decoding or transaction construction.
  • readNodeConfig and initialLedgerState use cardano-config, accepting both configuration formats and requiring genesis hashes. readNodeConfig loads genesis files and returns configuration warnings and structured errors. NodeConfig no longer has a FromJSON instance.
  • Fixed fee estimation for voting transactions, pool registrations and key guards; redeemer pointer indexing; multi-asset and output-free balancing; non-canonical inline-datum decoding; and Dijkstra ledger-event processing.
  • Extended createCompatibleTx with Plutus spending scripts and corrected missing script witnesses and overwritten proposal reference inputs.
  • Library migration changes include removal of deprecated ProtocolParameters and several era case combinators, extraction of key types and serialisation into cardano-keys, and changes to HasTextEnvelope instances and getKesPeriod.
cardano-rpc
  • New ReadMempool method on the UTxO RPC submit service. It returns the transactions currently in the node's mempool. PR #1348
    • New WatchMempool method on the UTxO RPC submit service. It streams transactions as they enter the node's mempool, optionally filtered by a transaction predicate. PR
      #1350
    • SearchUtxos now rejects a predicate that names more than 20,000 address terms with INVALID_ARGUMENT; repeated addresses count towards the limit. ReadUtxos already had the same limit on its
      keys. PR #1358
Network
  • Removed NodeToClientV_16 – NodeToClientV_22.
  • Fixed an inbound governor stall where a stale MuxFinished for a superseded connection could block it indefinitely. It is now ignored and traced as TrStaleMuxFinished.
  • Fixed a race where a responder could start before its connection was registered.
  • Reworked churn and hot-demotion scoring. Decisions carry their scores in traces, and there are new peerSelection.churn.* gauges.
  • Fairer warm→hot promotion of recently demoted peers.
  • Local root changes (addresses, advertise flag) apply immediately instead of waiting for DNS re-resolution.
  • network-mux: messages are chunk-encoded in the protocol's own thread up to a soft buffer limit, reducing memory retention.
  • network-mux: the message length moved from TraceChannelSendStart to TraceChannelSendEnd.
  • Tx-submission duration counters no longer truncate sub-millisecond waits.
Consensus
  • Node-to-client versions below NodeToClientV_23 were pruned, along with GetProposedPParamsUpdates, GetStakeDistribution and GetPoolDistr (CBOR tags 4, 5 and 21 are now rejected).
  • The default (Mithril) snapshot policy now takes a snapshot every 40 * k slots with no offset, instead of every 432,000 slots with an offset of 388,800: one snapshot a day on mainnet, one in five landing on an epoch boundary.
  • Snapshots are written by a dedicated background thread, decoupled from LedgerDB garbage collection.
  • The resolved snapshot policy is traced at startup (ConfiguredSnapshotPolicy).
  • An ImplausibleSnapshotPolicy warning is emitted when the write delay or rate limit is at least as long as the interval, which mainly matters on networks with short slots.
  • The hard fork combinator mempool re-encodes a transaction from its origin era into the current era, instead of translating it through every intermediate era.
  • Tracing a Dijkstra block that failed validation no longer crashes the tracing thread.
  • db-truncater gains --leios to truncate the LeiosDB along with the ImmutableDB.
  • Groundwork for Leios (endorser-block mempool measure, LeiosDB), disabled by default.
  • Groundwork for Peras (epoch context, voting committee, vote/cert tracers), disabled by default.
Ledger
  • IPv4 relay addresses are encoded in network byte order (the fix already shipped in 11.1.3).
  • New protocol parameter for future eras: CIP-50 maximum pledge leverage (no effect before it is set).
  • New protocol parameter for future eras: CIP-23 minimum pool margin (no effect before it is set).
  • From protocol version 12 (Dijkstra): CertifiedVRF, Text and tuple decoders accept indefinite-length encodings.
  • From protocol version 12 (Dijkstra): LeiosCert rejects an oversized signers bitfield.
  • Dijkstra-era progress:
    • CIP-164 Leios committee selection with BLS-keyed stake pool snapshots;
    • new Leios protocol parameters;
    • Peras protocol parameters (certificate validation disabled);
    • sub-transactions with their own execution-unit/fee accounting;
    • a per-transaction is_valid flag in the block body.
  • cardano-ledger-api adds queryNonMyopicMemberRewards.
  • cardano-ledger-api exposes a pool's BLS key.
  • API changes across eras:
    • predicate failure constructors renamed (e.g. StakeKeyAlreadyRegisteredDELEG → DelegAccountAlreadyRegistered);
    • era type parameter on PoolCert/StakePoolParams;
    • transaction-level-aware Plutus LedgerTxInfo;
    • more ToJSON/FromJSON instances.
Plutus
  • Plutus V4 is now ready to use (requires protocol version 12). This release does not include new primitives - V4 currently has the same set of primitives as V1-V3 on mainnet. New primitives will be enabled at a later release.
  • The CIP-0168 builtins keepPolicies/dropPolicies get a cost model (8 parameters).
  • keepPolicies/dropPolicies fail on a Value with more than 8191 policies.
  • Value caches per-currency negative-amount counts, making keepPolicies/dropPolicies logarithmic in the size of the Value; the costing of insertCoin, unionValue, scaleValue and unValueData was updated accordingly.
  • UPLC now supports using case on Data. This only supports Data objects of the form Constr i args. The tag i selects the branch. Matching on any other Datab object fails. Here, Constris a constructor ofData, not to be confused with the constrAST node. Requires Plutus Core 1.2.0 (if using Plinth, add{-# OPTIONS_GHC -fplugin-opt Plinth.Plugin:target-version=1.2.0 #-}` ).
Tracing
  • Config change: TraceOptionForwarder.connQueueSize and TraceOptionForwarder.disconnQueueSize have been replaced by a single TraceOptionForwarder.queueSize. To migrate without behaviour change, pick the higher of both previous values for it.
  • Expose Prometheus label sets as # TYPE ... gauge for full conformance with text exposition format (fixes #6706).
  • Safeguard against some Windows systems not properly setting up their terminals for UTF-8 output (fixes #6711).
  • The slotsMissed_int metric no longer counts the slots that elapse while block forging is disabled (fixes #6698).
  • Addressed stale BlockFetch.Decision trace namespaces, so the actually emitted PeersFetch and PeerStarvedUs messages can now be configured (fixes #6667).
  • Fixed a small memory leak when using trace forwarding.
  • Tracing changes visible to log consumers:
    • Mempool rejections always carry errdetails
    • The detailed "tx" field of mempool traces is now the CBOR in hex
    • New namespaces Mempool.CapacityChanged,
      Snapshot.ConfiguredSnapshotPolicy, Snapshot.ImplausibleSnapshotPolicy,
      RPC.SubmitService.ReadMempool.Span and
      RPC.SubmitService.WatchMempool.Span
    • Peras certificate inclusion and vote forging traces under Peras.Cert.Inclusion and Peras.Vote.Forging
    • The ledger predicate failure kind for an already-registered delegation account is now DelegAccountAlreadyRegistered

Detailed Changelogs

Details

Package changelogs

Package Version Changelog
Win32-network 0.2.0.1 ChangeLog.md
acts-generic 0.1.1.0 CHANGELOG.md
base-deriving-via 0.1.0.2 CHANGELOG.md
basement 0.0.16
byron-spec-chain 1.0.2.0 CHANGELOG.md
byron-spec-ledger 1.1.1.0 CHANGELOG.md
cardano-addresses 4.0.8 ChangeLog.md
cardano-api 11.11.0.0 CHANGELOG.md
cardano-base 0.1.7.1 CHANGELOG.md
cardano-binary 1.9.1.0 CHANGELOG.md
cardano-cli 11.6.0.0 CHANGELOG.md
cardano-config 2.2.3.0 CHANGELOG.md
cardano-crypto 1.4.0
cardano-crypto-class 2.6.0.0 CHANGELOG.md
cardano-crypto-leios 0.3.0.0 CHANGELOG.md
cardano-crypto-praos 2.2.4.0 CHANGELOG.md
cardano-crypto-wrapper 1.8.0.0 CHANGELOG.md
cardano-data 1.4.0.0 CHANGELOG.md
cardano-diffusion 1.3.0.1 CHANGELOG.md
cardano-git-rev 0.2.2.1
cardano-keys 11.0.0.0 CHANGELOG.md
cardano-ledger-allegra 1.10.2.0 CHANGELOG.md
cardano-ledger-alonzo 1.17.0.0 CHANGELOG.md
cardano-ledger-api 1.15.0.0 CHANGELOG.md
cardano-ledger-babbage 1.15.0.0 CHANGELOG.md
cardano-ledger-binary 1.10.1.0 CHANGELOG.md
cardano-ledger-byron 1.3.0.0 CHANGELOG.md
cardano-ledger-conway 1.24.0.0 CHANGELOG.md
cardano-ledger-core 1.22.0.0 CHANGELOG.md
cardano-ledger-dijkstra 0.4.0.0 CHANGELOG.md
cardano-ledger-mary 1.11.1.0 CHANGELOG.md
cardano-ledger-shelley 1.20.0.0 CHANGELOG.md
cardano-ledger-shelley-test 1.10.0.0 CHANGELOG.md
cardano-prelude 0.2.2.0 ChangeLog.md
cardano-prelude-test 0.1.0.5
cardano-protocol 0.2.0.0 CHANGELOG.md
cardano-protocol-tpraos 1.6.0.1 CHANGELOG.md
cardano-rpc 11.5.0.0 CHANGELOG.md
cardano-slotting 0.2.2.0 CHANGELOG.md
cardano-strict-containers 0.1.6.0 CHANGELOG.md
digest 0.0.2.1.0.0.0.1 CHANGELOG.md
dmq-node 0.7.2.2 CHANGELOG.md
ekg-core 0.1.2.0
ekg-forward 1.4 CHANGELOG.md
ekg-json 0.1.1.1
ekg-wai 0.1.2.0
foundation 0.0.30
fs-api 0.4.0.0 CHANGELOG.md
fs-sim 0.5.0.1 CHANGELOG.md
heapwords 0.1.0.2 CHANGELOG.md
hedgehog 1.7 CHANGELOG.md
hedgehog-extras 0.10.1.0 CHANGELOG.md
io-classes 1.8.0.1 CHANGELOG.md
io-sim 1.8.0.1 CHANGELOG.md
kes-agent 1.4.0.0 CHANGELOG.md
libsystemd-journal 1.4.6.0 Changelog.md
measures 0.1.0.3 CHANGELOG.md
monoidal-synchronisation 0.1.0.8 CHANGELOG.md
network-mux 1.0.0.0 CHANGELOG.md
non-integral 1.0.0.0 CHANGELOG.md
optparse-applicative 0.19.0.0 CHANGELOG.md
optparse-applicative-fork 0.19.0.0 CHANGELOG.md
ouroboros-consensus 5.2.0.0 CHANGELOG.md
ouroboros-network 2.0.0.0 CHANGELOG.md
plutus-core 1.71.0.0 CHANGELOG.md
plutus-ledger-api 1.71.0.0 CHANGELOG.md
plutus-metatheory 1.71.0.0 CHANGELOG.md
plutus-tx 1.71.0.0 CHANGELOG.md
plutus-tx-plugin 1.71.0.0 CHANGELOG.md
prettyprinter-configurable 1.36.0.0
quickcheck-monoids 0.1.1.0 CHANGELOG.md
servant-server 0.20.3.0 CHANGELOG.md
small-steps 1.2.0.0 CHANGELOG.md
snappy-c 0.1.3 CHANGELOG.md
sop-extras 0.4.2.0 CHANGELOG.md
streaming 0.2.4.0 changelog.md
strict-checked-vars 0.2.1.0 CHANGELOG.md
strict-sop-core 0.1.4.0 CHANGELOG.md
trace-dispatcher 2.13.2 CHANGELOG.md
trace-resources 0.2.4 CHANGELOG.md
validation-selective 0.2.0.0.0.0.0.0.1 CHANGELOG.md
vector-algorithms 0.9.1.0 CHANGELOG.md
vector-map 1.2.1.0 CHANGELOG.md

Don't miss a new cardano-node release

NewReleases is sending notifications on new releases.