Skip to main content

· 2 min read
Jordan Millar

2025-03-15T00:00:00Z - 2025-03-31T00:00:00Z

High level summary

  • cardano-cli updates

    • Added mnemonic sentence support for key generation
    • Improved minting value representation in code
    • Removed deprecated shelley command group and related tests
    • Optimized command parsing by inlining subParser
    • Parallelized golden tests for help commands
    • Released v10.5.0.0
  • cardano-api improvements

    • Added mnemonic support
    • Introduced new witness API and improved minting policies
    • Added deserialization warnings for HashableScriptData
    • Removed deprecated ProtocolParameters
    • Released versions 10.11.0.0, 10.11.1.0, and 10.12.0.0
    • Added missing StakePool key conversion instance
  • cardano-testnet updates

    • Expose option to specify a node configuration file
    • Removed unused P2P enable option
    • Changed to file-based PID storage for testnet nodes

cardano-cli

cardano-api

cardano-node

cardano-testnet

  • None

docs

  • None

CI & project maintenance

  • None

· 5 min read
Michael Karg

High level summary

  • Benchmarking: Preliminary 10.3 benchmarks; GHC8 / GHC9 compiler version comparison; Plutus budget scaling; runtime parameter tuning on GHC9.
  • Development: Started new Plutus script calibration tool; maintenance updates to benchmarking profiles.
  • Infrastructure: Adjusted tooling to latest Cardano API version; simplification of performance workbench nearing completion.
  • New Tracing: Battle-tested metrics monitoring on mainnet; generalized nix service config for cardano-tracer.

Low level overview

Benchmarking

We've run and analyzed several benchmarks these last two weeks:

Preliminary 10.3 integration

As performance improvement is a stated goal for the 10.3 release, we became involved early in the release cycle. Benchmarking the earliest version of the 10.3 integration branch, we could already determine that the effort put in has yielded promising results and confirm improvements in both resource usage and block production metrics. A regular release benchmark will be performed, and published, from the final release tag.

Compiler versions: GHC9.6.5 vs. GHC8.10.7

So far, code generation with GHC9.6 has resulted in a performance regression for block production under heavy load - we've established that in various past benchmarks. The optimization efforts on 10.3 also focused on removing that performance blocker. Benchmarking the integration branch with the newer compiler version has now confirmed it has not only vanished; moreover, code generated with GHC9.6 even exhibited slightly more favourable performance characteristics. So in all likelihood, Node 10.3 will be the last release to support GHC8.10, and we will recommend GHC9.6 as the default build platform for it.

Plutus budget scaling

We've repeated several Plutus budget scaling benchmarks on Node version 10.3 / GHC9.6. By scaling execution budgets to 1.5x and 2x their current mainnet values, we can determine the performance impact on the network of potential increases of said budgets. We independently measured bumping the steps (CPU) limit with a CPU-intensive script, and bumping the memory limit with a script performing lots of allocations. We could observe the performance impact to correspond linearly with the limit bump in each case. This gives certainty and predictability of the impact when suggesting changes to mainnet protocol parameters.

Our team presented those findings and the data to the Parameter Comittee for discussion.

Runtime system (RTS) settings

The recommended RTS settings for cardano-node encompass number of CPU cores to use, behaviour of the allocator, and behaviour of the garbage collector. The recommended settings so far are tuned to GHC8.10's RTS - one cannot assume the same settings are optimal for GHC9.6's RTS, too. So we've started a series of short, exploratory benchmarks comparing a matrix of promising changes to update our recommendation in the future.

Development

We've started to develop a new tool that calibrates our Plutus benchmarking scripts given a range of constraints on the expected workload. These entail exhausting a certain budget (block or transaction), or calibrating for a constant number of transactions per block while exhausting available steps, or memory, budget(s). The result of that directly serves as input to our benchmarking profile definition. This tool may also be of wider interest, as it allows for modifying various inputs, such as Plutus cost models, or script serializations generated by different compilers or compiler versions. That way, one can compare at a glance how effective a given script makes use of the available budgets, given a specific cost model.

Additonally, our benchmarking profiles are currently undergoing a maintenance cycle. This means, setups for which motivation has ceased to exist are removed, several are updated to use the Voltaire performance baseline, others need to be tested for their conformity with the Plomin hard-fork protocol updates.

Infrastructure

The extensive work of simplifying the performance workbench is almost finished and about to enter testing phase. We have been moving away from scripting to declarative (Haskell) definitions of all benchmark profiles and workloads in past PRs. The simplification work now reaps the benefits of that: We can optimize away many recursive / redundant invocations or nix evaluations, we can collate many nix store paths into just a couple ones, reduce the workbench's overall closure size and complexity. Apart from saving significant resources and time for CI runners, this will reduce maintence effort necessary on our end.

Furthermore, we've done maintenance on our tooling by adjusting to the latest changes in cardano-api. This included porting the ProtocolParameters type and type class instances over to us, as our use case requires we continue supporting it. However, it's considered deprecated in the API, and so this unblocks the team for eventually removing it.

New Tracing

Having addressed all feature and change requests relevant for the Node 10.3 release, we performed thorough mainnet testing of the new system's metrics in a monitoring context. We relied on the extremely diligent and helpful feedback from the SRE team. This enabled us to iron out a couple of remaining inconsistencies - a big shout-out and thank you to John Lotoski.

Additionally, again with SRE, a nix service configuration (SVC) has been created for cardano-tracer that was generalized and aligned in structure with the existing cardano-node SVC. It was evolved from the existing SVC in our performance workbench, which however was tied tightly to our team's use case. With the general approach we hope other teams, and the community, can reliably and easily set up and deploy cardano-tracer.

· 2 min read
John Lotoski

High level summary

The SRE team continues work on Cardano environment improvements and general maintenance.

Some notable recent changes, updates or improvements include:

  • After upgrading hydra to new hardware and increasing eval concurrency for better ci throughput, an upstream hydra bug caused builds to frequently block in hydra's queue runner. The root caused was investigated and resolved with the fix to the issue pushed upstream.

  • A sizeable chunk of effort for this biweekly was invested in cardano-node's new tracing system, in particular between cardano-node, iohk-nix and cardano-parts repositories. Test machines were built and deployed using the latest tracing system changes intended for node 10.3 with comparisons between new tracing and legacy tracing metrics made and the few remaining discrepancies addressed by the performance and tracing team. New tracing system dashboards and alerts were prepared with recent changes. Configurations in each repo were prepared for a switch to the new tracing system as default. Readiness to migrate cardano-parts clusters to the new tracing system is close!

Repository Work -- Merged

Cardano-node

Repository Work In Progress -- PRs and Branches

· One min read
Alexey Kuleshevich

High level summary

Few minor touchups were implemented for the upcoming cardano-node-10.3 release. Other than that focus was mostly on removing redundant complexity and improvements to our test suites.

Low level summary

Features

  • pull-4924 - Make instantStake deserialization backwards compatible for Conway era
  • pull-4933 - Add required CBOR instances for NonZero
  • pull-4926 - Remove bytestring from Block type
  • pull-4938 - Remove redundant bytes memoization from WitVKey and BootstrapWitness

Testing

  • pull-4944 - Implement more Alonzo UTxOW Imp tests
  • pull-4953 - Implement the remaining Alonzo UTxOW test and remove the old module

Infrastructure and releasing

  • pull-4942 - Add bounds on cardano-crypto-wrapper in packages that also use crypton
  • pull-4946 - Post-release bump versions in changelogs and cabal-files
  • pull-4951 - Add a shellcheck workflow to GitHub CI

· 2 min read
Jean-Philippe Raynaud

High level overview

This week, the Mithril team created the pre-release for the 2513.0-pre distribution, which provides support for Cardano node v.10.2.1 and includes various bug fixes and improvements.

They implemented the aggregator's prototype 'slave' mode to support signer registration across multiple aggregators and started adapting the infrastructure to support it. They also focused on signing ancillary files in the Cardano database snapshots with an IOG key and worked on recording the origin of requests made to the aggregator API.

Finally, the team enhanced the handling of some aggregator functional errors to improve the accuracy of the signer metrics and kept refactoring the cryptographic library to improve clarity and maintainability.

Low level overview

  • Pre-released the new distribution 2513.0-pre
  • Completed the issue E2E tests adaptation for multiple aggregators #2361
  • Completed the issue Use a macro to implement the Source trait #2365
  • Completed the issue Upgrade to Cardano 10.2 #2333
  • Completed the issue Some error messages should be considered as warning in signer registration to aggregator #2363
  • Worked on the issue Sign ancillary files with IOG key #2362
  • Worked on the issue Release 2513 distribution #2332
  • Worked on the issue Record origin of client requests in metrics #2382
  • Worked on the issue Re-organize STM library structure #2369