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 schemaandcardano-node config resolvesubcommands 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,WatchMempoolandReadEraSummary, plus server reflection. - Node-to-client versions older than
NodeToClientV_23are no longer supported. Clients (wallets, indexers, tools) must be built against a version of the network libraries that speaksNodeToClientV_23(shipped since node 10.7.0). - Ledger snapshots are now taken by default every
40 * kslots 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-clisupports sub-transactions and guard credentials.cardano-submit-apiaccepts 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; usecardano-node config migrateto convert one. - Docker:
CARDANO_CONFIG_JSON_MERGEis a plain deep merge, so a merge document written for the flat shape silently does nothing against an enveloped config. Nest keys underConfiguration.<Section>(e.g.{"Configuration":{"HermodTracing":{"TraceOptions":…}}}); seenix/docker/README.md. - Node-to-client:
NodeToClientV_16–NodeToClientV_22were removed, along with the queries only they could reach:GetProposedPParamsUpdates,GetStakeDistribution(useGetStakeDistribution2) andGetPoolDistr(useGetPoolDistr2). - NixOS service:
blsKeys(added in 11.1) is replaced by a singleblsKey; 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, renamedDelegAccountAlreadyRegisteredfailure, new namespaces; trace forwarding config change). - cardano-cli:
node issue-pop-BLSandnode key-hash-BLSwere removed. Proof-of-possession is built intostake-pool registration-certificate --bls-signing-key-file. - cardano-cli:
--script-valid/--script-invalidwere removed from the Dijkstratransaction 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
InMemorybackend, 8GB when running with theOnDiskbackend (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
- Pre-release configuration files
- Docker Images: cardano-node, cardano-tracer, cardano-submit-api
Documentation
- Cardano Node documentation
- The operators handbook may also be helpful for general queries.
- Networking options and related changes are listed on the topology section
- Cardano CLI
- Internal API docs for ledger, consensus and network
- Compatibility matrix
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 andcardano-config, with any divergence reported as a non-fatal warning) and the newcardano-configenvelope, resolved bycardano-configalone. New subcommandscardano-node config migrate,cardano-node config schemaandcardano-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.yamldropsLastKnownBlockVersion-*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(configRpcListenAddress/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 asLC_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.SpanandRPC.SubmitService.WatchMempool.Span; - the Peras certificate inclusion and vote forging tracers are wired, under
Peras.Cert.InclusionandPeras.Vote.Forging; - the ledger predicate failure kind for an already-registered delegation account is now
DelegAccountAlreadyRegistered.
(#6677)
- mempool rejections always carry
slotsMissed_intno 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_MERGEdocuments must use the enveloped shape (seenix/docker/README.md). (#6677) - NixOS service: new
configFormatoption ("legacy", the default, or"enveloped") to choose the generated config dialect. (#6677) - NixOS service: new
lsmExportPathoption, for the LSM snapshot export consumed by Mithril signing. (#6677) - NixOS service: new
immutableDatabasePathandvolatileDatabasePathoptions. (#6677) - NixOS service:
blsKeysis replaced by a singleblsKey. (#6677) - The Mithril signer bundled in the
x86_64-linuxtarball was bumped to the v2642.0 release (signer 1.2.5). (#6677)
cardano-tracer
cardano-submit-api
- Fixed
cardano-submit-apirejecting Dijkstra era transactions with aTxCmdTxReadErrordecoding error. Transactions from every Shelley-based era, including Dijkstra, are now decoded and submitted to the node. (#6725)
cardano-testnet
- New
--enable-traceroption startscardano-tracerand has all testnet nodes forward their traces to it, with--prometheus-listen-address/--prometheus-listen-portto bind its Prometheus server. (#6710, #6723) - When the network is ready,
cardano-testnet cardanowrites a machine-readablemanifest.json(sockets, ports, key paths, genesis files, wallet addresses) into the output directory, with a JSON Schema incardano-testnet/schemas/manifest.schema.json. (#6693) - New
--enable-grpc-httpto serve each node's gRPC endpoint over HTTP (h2c), with--grpc-listen-addressand--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,GenesisHashesPolicyandSubmitApiConf'sconfigPathwere removed. (#6677) nix run .#cardano-testnetis self-contained. (#6684)
cardano-cli
- Added Dijkstra sub-transaction commands:
build-raw,signandtxid. Top-leveltransaction build-rawaccepts signed sub-transactions through repeatable--signed-sub-tx-fileoptions. 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+LOVELACEto Dijkstra transaction builders and sub-transactionbuild-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. Removednode issue-pop-BLSandnode key-hash-BLS;node key-gen-BLSremains available. - Added Leios protocol-parameter update options and exposed
--spec-dijkstrain testnet genesis help. - Removed
--script-validand--script-invalidfrom Dijkstra transaction builders; Conway retains both options. debug check-node-configurationaccepts legacy flat and newcardano-configconfigurations. 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-collateraltocompatible transaction signed-transaction. - Fixed relay IPv4 address rendering, redeemer indexing, and
transaction build-estimatebalancing with no outputs or multi-asset input values. - Improved era and script handling:
CARDANO_ERAaccepts 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 usemkTxGuardsand 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.
readNodeConfigandinitialLedgerStateusecardano-config, accepting both configuration formats and requiring genesis hashes.readNodeConfigloads genesis files and returns configuration warnings and structured errors.NodeConfigno longer has aFromJSONinstance.- 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
createCompatibleTxwith Plutus spending scripts and corrected missing script witnesses and overwritten proposal reference inputs. - Library migration changes include removal of deprecated
ProtocolParametersand several era case combinators, extraction of key types and serialisation intocardano-keys, and changes toHasTextEnvelopeinstances andgetKesPeriod.
cardano-rpc
- New
ReadMempoolmethod on the UTxO RPC submit service. It returns the transactions currently in the node's mempool. PR #1348- New
WatchMempoolmethod on the UTxO RPC submit service. It streams transactions as they enter the node's mempool, optionally filtered by a transaction predicate. PR
#1350 SearchUtxosnow rejects a predicate that names more than 20,000 address terms withINVALID_ARGUMENT; repeated addresses count towards the limit.ReadUtxosalready had the same limit on its
keys. PR #1358
- New
Network
- Removed
NodeToClientV_16–NodeToClientV_22. - Fixed an inbound governor stall where a stale
MuxFinishedfor a superseded connection could block it indefinitely. It is now ignored and traced asTrStaleMuxFinished. - 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 fromTraceChannelSendStarttoTraceChannelSendEnd.- Tx-submission duration counters no longer truncate sub-millisecond waits.
Consensus
- Node-to-client versions below
NodeToClientV_23were pruned, along withGetProposedPParamsUpdates,GetStakeDistributionandGetPoolDistr(CBOR tags 4, 5 and 21 are now rejected). - The default (Mithril) snapshot policy now takes a snapshot every
40 * kslots 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
ImplausibleSnapshotPolicywarning 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-truncatergains--leiosto 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,Textand tuple decoders accept indefinite-length encodings. - From protocol version 12 (Dijkstra):
LeiosCertrejects 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_validflag in the block body.
cardano-ledger-apiaddsqueryNonMyopicMemberRewards.cardano-ledger-apiexposes a pool's BLS key.- API changes across eras:
- predicate failure constructors renamed (e.g.
StakeKeyAlreadyRegisteredDELEG→DelegAccountAlreadyRegistered); eratype parameter onPoolCert/StakePoolParams;- transaction-level-aware Plutus
LedgerTxInfo; - more
ToJSON/FromJSONinstances.
- predicate failure constructors renamed (e.g.
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/dropPoliciesget a cost model (8 parameters). keepPolicies/dropPoliciesfail on aValuewith more than 8191 policies.Valuecaches per-currency negative-amount counts, makingkeepPolicies/dropPolicieslogarithmic in the size of theValue; the costing ofinsertCoin,unionValue,scaleValueandunValueDatawas updated accordingly.- UPLC now supports using
caseonData. This only supportsDataobjects of the formConstr i args. The tagiselects the branch. Matching on any otherDatab object fails. Here,Constris a constructor ofData, not to be confused with theconstrAST 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.connQueueSizeandTraceOptionForwarder.disconnQueueSizehave been replaced by a singleTraceOptionForwarder.queueSize. To migrate without behaviour change, pick the higher of both previous values for it. - Expose Prometheus label sets as
# TYPE ... gaugefor 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_intmetric no longer counts the slots that elapse while block forging is disabled (fixes #6698). - Addressed stale
BlockFetch.Decisiontrace namespaces, so the actually emittedPeersFetchandPeerStarvedUsmessages 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.Spanand
RPC.SubmitService.WatchMempool.Span - Peras certificate inclusion and vote forging traces under
Peras.Cert.InclusionandPeras.Vote.Forging - The ledger predicate failure kind for an already-registered delegation account is now
DelegAccountAlreadyRegistered
- Mempool rejections always carry
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 |