Release Notes - v0.70.13
v0.70.13
Section titled “v0.70.13”Title: Improve storage resilience, network compatibility, and node observability
Date: Not provided
Version: v0.70.13
Release: v0.70.13
This release improves SQLite storage maintenance, bootstrap validation, governance compatibility, protocol handling, network configuration, health monitoring, and operational diagnostics. It also updates Cardano node compatibility requirements and improves trusted Mithril import performance.
Recommended Network Compatibility ⚠️
Section titled “Recommended Network Compatibility ⚠️”| Network | Compatible |
|---|---|
| mainnet | ⛔ |
| preprod-testnet | ✅ |
| preview-testnet | ✅ |
| musashi | ✅ |
Important: The mainnet configuration now uses GenesisMode and requires Cardano node 11.1.0 or later.
✨ Highlights
Section titled “✨ Highlights”-
Improved SQLite WAL maintenance with periodic best effort
TRUNCATEcheckpoints that use dedicated connections with a250 mstimeout and stop safely during lifecycle changes. -
Recorded the current
RewardStakeCalculationVersionon imported reward snapshots, enabling fresh Mithril bootstraps to pass accounting-version validation. -
Prevented core storage truncation before the consumed UTxO retention floor, preserving the history required for valid queries.
-
Updated
GetGenesisConfigto use the compactNtC 21+layout while preserving legacy encoding for older or direct callers. -
Preserved typed DRep credential identity, added nullable governance proposal anchors through metadata migration v16, made SQLite migration expansion atomic, and improved conformance, replay state, and peer trace selection.
-
Rejected a mid chain first block after a rollback to origin, preventing the node from accepting an invalid chain restart.
-
Configured Koios with explicit dial, TLS, response header, and client timeouts so external requests fail within defined limits.
-
Cached reward live stake prepared statements with bounded retention within each transaction, reducing repeated statement preparation without retaining them indefinitely.
-
Accepted Byron outputs with a zero value while continuing to reject negative values with
OutputNegativeByronError. -
Resolved Dijkstra electing VRF keys at the captured slot while preserving existing Conway behavior.
-
Isolated BlockFetch endpoint test fixtures so endpoint behavior remains independent across tests.
-
Upgraded
gouroborostov0.205.2and updated the related address handling, keepalive behavior, and local transaction submission. -
Refreshed mainnet, preprod, and preview network configurations, topologies, snapshots, and Musashi logging.
-
Aggregated shared Koios reward accounts and reported discrepancies for each pool accurately.
-
Scaled optional block pipeline decode and validation workers to
GOMAXPROCSwithin the supported range of2to8, and corrected continuation audit and recovery rewind handling. -
Bounded hard fork summary durations and reported overflow errors instead of allowing summaries to exceed supported limits.
-
Detected classic quorum based hard forks proactively and kept successor horizons anchored to the live chain tip.
-
Expanded SQL observability with query duration histograms, and kept disk metric scrapes from blocking on SQLite writes.
-
Exposed
/health,/healthz, and/readyzon a dedicated configurable listener with Docker and Mithril health check integration. -
Deferred only the startup operational certificate KES plausibility check when confirmed history trails the wall clock while retaining runtime enforcement.
-
Disabled persisted checkout credentials in CI and required explicit authentication for benchmark publishing.
-
Relaxed only the Conway protocol version 9 check for vote delegation by an unregistered DRep.
-
Raised SQLite
wal_autocheckpointto10000pages and added metrics for SQL operations, WAL activity, and disk usage. -
Synchronized the
cardano-configscontainer image with its embedded configuration files. -
Parallelized trusted Mithril block decoding in ordered batches.
-
Added caching for
insertUtxoModelUTxO INSERT operations and asset ID lookups in SQLite and PostgreSQL while preserving MySQLRETURNINGbehavior through dialect-aware handling. The associatedBenchmarkInsertUtxoModelbenchmark reported approximately15–30%lowerns/opfor the cached path than the legacy one-shot path, but this result applies only to that benchmark and does not establish a universal performance guarantee. -
Enhanced chain selection with a
2-secondswitch-back cooldown, kept healthy in-flight block fetch batches when restarts extended a fork, and resynchronized after unrecoverable restart failures. -
Consolidated reward live stake refreshes so each unique stake credential refreshes only once per transaction.
-
Replaced the local DMQ phase 2 authenticator with the
gouroborosMessageAuthenticator, removeddmq.AuthenticatorandNewAuthenticator, and reserved node wiring for a future update. -
Documented environment-specific Mithril API mode bootstrap measurements in the README for Preprod and Preview, and identified the values as planning baselines rather than capacity guarantees.
-
Validated Shelley pointer address payloads during UTxO parsing and rejected malformed pointers.
-
Expanded deterministic Leios fetch regression coverage to test deadline boundaries.
-
Updated Antithesis scripts to obtain stake address key hashes with
cardano-cli latest stake-address key-hash. -
Gated API listener starts, bounded context monitors, and prevented lifecycle state from persisting across restarts.
-
Anchored forging header encoding and KES signing to a stable chain tip when available, and rejected non-genesis candidate slots that were not later than the live tip.
-
Raised the test genesis
maxLovelaceSupply, added preflight validation, corrected key ownership and Bash compatibility, and moved MinIO images to Quay. -
Reused transaction-scoped prepared statements for batched API transaction writes and used MySQL
LastInsertIdhandling. -
Reserved Leios fetch capacity before publishing claims, separated manifest and transaction claims, and released claims correctly.
-
Enforced Byron minimum implicit transaction fees using the active Byron fee policy and reported
FeeTooLowByronErrorwhen a transaction fell below the minimum.
Docs authored by Doc Holiday