Skip to main content

· 2 min read
Ziyang Liu

High level summary

We made significant improves to Plinth (formerly Plutus Tx) in the past few weeks:

  • Plinth compiler improvements
    • Added compiler flag inline-callsite-growth, for setting the inlining threshold for callsites. 0 disables inlining a binding at a callsite if it increases the AST size; n allows inlining if the AST size grows by no more than n. Keep in mind that oing so does not mean the final program will be bigger, since inlining can often unlock further optimizations.
    • PlutusTx.Lift.liftCode and related functions now apply the default PIR and UPLC optimizations during code lifting. This could lead to significantly more efficient scripts when using lifting.
  • Plinth library improvements
    • Added module PlutusTx.BuiltinList, containing functions for operating on BuiltinList.
    • Augmented module PlutusTx.Data.List, adding more functions for operating on Data encoded List. This includes, among others, PlutusTx.Data.List.destructList, which takes a list along with a list of desired indices, and generates variables bound to the elements at those indices, as well as PlutusTx.Data.List.caseList and caseList', for matching on Lists.
    • Augmented module PlutusTx.Data.AssocMap, adding more functions for operating on Data encoded Map.

Additionally, we added two new pages to the Plinth user guide:

On the Plutus Core side, we made progress on features targeting the next Hard Fork. This includes

  • costing, conformance testing and metatheory for the dropList primitive
  • costing and metatheory of builtin arrays
  • costing for the modular exponentiation primitive
  • reviewing the CIP on builtin Value
  • investigating approaches for enabling casing on builtin types

Regarding certified compilation, we worked on adding more tests to the certifier and resolving the issues it uncovered

Low level summary

Key Pull Requests Merged

Issues In Progress

  • Caseing on values of built-in types
  • Costing for modular exponentiation (in plutus-private)
  • Costing of builtin functions operating on builtin arrays (in plutus-private)
  • Add negative certifier tests (in plutus-private)

· One min read
Marcin Szamotulski

Overview of sprint 85

High-level overview

Node Diversity Workshop

We participated in the Node Diversity workshop held in Paris by Tweag / Modus Create. We had a chance to talk with amaru and [goroboros] developers.

We were in particular interested in testing approach for the amaru node, which is described in a recent series of blog posts.

Tx-Submission

We continued working on tx-submission. We're analysing a test failure which prevents us from merging the PR.

Mithril

Armando Santos (Well-Typed) open a draft PR in which he's been working on implementation of the DMQ Node, see ouroboros-network#5109. Armando also wrote an update to the CIP#137 proposal.

Performance Imrpovements

  • We are reviewing PR with inbound governor performance improvements.

Pull requests

Opened

In review

Work in Progress

Merged

· 4 min read
Michael Karg

High level summary

  • Benchmarking: 10.3.1 release benchmarks.
  • Development: Plutus script calibration tool and profile maintenance updates about to be merged.
  • Infrastructure: Workbench simplification about to be merged.
  • New Tracing: System dependencies untangled; preparing 'Periodic tracer' feature for production.
  • Node Diversity: Participation in Conformance Testing workshop in Paris.

Low level overview

Benchmarking

We're currently running release benchmarks for the upcoming Node 10.3.1 version - a candidate for Mainnet release. Having taken previous measurements on the release integration branch, we expect the results to be closely aligned with these.

Node 10.3.1 will support two compiler versions, namely GHC8.10.7 and GHC9.6.5. As a consequence, we benchmark both Node builds and compare against the previous performance baseline 10.2. So far, the release benchmarks confirm performance improvements in both resource usage and block production metrics seen on the integration branch - for both compiler versions. A final report will be published on Cardano Updates.

Development

The first version of our new tool calibrate-script is about to be merged. It is part of the tx-generator project, and calibrates Plutus benchmarking scripts according to a range of constraints on the expected workload. The tool documents the result and all intermediate steps in a developer-friendly way. A CSV report is generated which shows all properties of some calibration at a glance: How much execution budget was given, and how much of each execution budget was used, was memory or CPU steps the limiting factor for the script, how large will the resulting transaction be and what will it cost and more. Apart from greatly speeding up development of Plutus benchmarks for our team, this tool can also be used to assess changes to Plutus cost models, or efficiency of different Plutus compiler outputs - without running a full benchmark.

Furthermore, the benchmarking profiles defined in cardano-profile have undergone a large maintenance cycle. Besides a cleanup, several profiles were fixed wrt. transaction fees or duration, others now run on a more appropriate performance baseline. There era-dependency of a profile requiring a minimum protocol version has been solved such that it's now impossible to construct incompatible profiles by definition - e.g. a PlutusV3 benchmark in any era prior to Conway. The correspondig PR is about to be merged shortly.

Infrastructure

A large PR simplifying the build of our performance workbench has been finalized and passed testing. The nix code has been greatly optimized to avoid redundant derivations and creating an abundance of nix store paths. This not only makes the workbench better maintainable, it greatly reduces time and size requirements for CI jobs. In testing, we could observe a speedup of 40% - 50% for CI. Additionally, this PR prepares for the future removal of GHC8.10 as a release compiler - which will reduce CI cost even more. The PR is currently under review and to be merged soon.

New Tracing

The work on untangling dependencies in the new tracing system has entered testing phase. The cardano-tracer service no longer depends on the Node - with common data types and typeclass instances having been refactored to a more basic package of the tracing system. Once merged, this will allow for the service to be built, released and operated independently of cardano-node, widening its range of use cases.

On Node 10.1, we've built a prototype of the 'Periodic tracer' feature. It decorrelates tracing ledger metrics from the start of a block producer's forging loop, thus removing competition on certain synchronization primitives. We've already shown in past benchmarks it had a positive impact on block production performance. This prototype is now being developed for production release, complete with configuration options, and we aim to land it in Node 10.4.

Node Diversity

We've contributed to the recent Conformance Testing workshop in Paris. The topic was how to approach detection and documentation of system behaviour across diverse Cardano Node implementations: Where is the behaviour conforming to some blueprint, where does it deviate - intentionally or accidentally. Our tracing system is the prime provider of observability - and all evidence of program execution could in theory be checked against a machine-readable model of the blueprint. This of course assumes observables are implemented uniformly across diverse Node projects, i.e. without changing semantics. Thankfully, our tracing system lead engineer Jürgen Nicklisch was able to join that workshop and add to the discussions around that approach.

· 3 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:

  • Cardano-node, cardano-cli, and db-sync versions are now set to 10.2.1 and 10.4.0.0, 13.6.0.5, respectively, in cardano-parts release v2025-04-03.

  • The blockfrost-platform is now in capkgs and cardano-parts default devShell, pkgs and cluster flakeModules.

  • ConsensusMode cardano-node configuration and supporting files were added to the baseline node configurations in iohk-nix and integrated into cardano-node for the 10.3.x [pre-]release. This will make experimenting with GenesisMode easier. Relevant files and info will be published to the Cardano Book soon.

Repository Work -- Merged

Capkgs:

  • Adds the blockfrost platform to capkgs capkgs-pr-4

  • Refactors and expands ci to support fork PRs gracefully. Adds a manual workflow dispatch option with pr_number input for maintainers to authorize a privileged ci run on a forked PR. Utilizes composite actions for easy re-use elsewhere. capkgs-pr-6

Cardano-parts

  • Sets node release to 10.2.1, cardano-cli release to 10.4.0.0, cardano-db-sync to 13.6.0.5 and mithril-cli to v2513.0. Adds profile-cardano-node-topology SRV record support for cardano-node producers. Fixes a process-compose node health check broken in newer versions of cardano-cli and adds node binary to the nixosCfgs system path. cardano-parts-release-v2025-04-03

  • Adds the blockfrost platform to shell, pkgs, and cluster cardano-parts flakeModules. Futures PRs will extend that to a blockfrost process-compose nix run job as well as dashboard for blockfrost deployments. cardano-parts-pr-62

  • Refactors and expands ci to support fork PRs gracefully. Adds a manual workflow dispatch option with pr_number input for maintainers to authorize a privileged ci run on a forked PR. Utilizes composite actions for easy re-use elsewhere. cardano-parts-pr-63

Cardano-mainnet

  • Rotates KES, adds bootstrap and stakepool resource specific tags for cost analysis, improves the demo recipes to dynamic waits to avoid brittle time delay failures. Includes the version bumps from cardano-parts release v2025-04-03. cardano-mainnet-pr-32

Cardano-node

  • Node 10.3.x release branch preparation: SRE contribution for iohk-nix PR#596 integration, CI tests fixup and docker cli arg bug fixup. cardano-node-pr-6143

Iohk-nix

  • Adds support for genesis mode in node with: node config for genesis mode and related options, checkpoint file for mainnet and updated peer snapshot files for all envs, checkpoint and peer snapshot files are now included in mkConfigHtml output iohk-nix-pr-596

Repository Work In Progress -- PRs and Branches

· 2 min read
Alexey Kuleshevich

High level summary

Major technical debt items have been taken care of during this period:

  • We've finalized the adjustment of mechanism of how we retain the original bytes of a transaction during deserialization, which will have positive impact on performance as well as correctness of our transaction deserializers. This was an especially necessary task to handle for the upcoming work on Nested Transactions
  • We finished adjusting the representation of CertState, which is the part of the ledger state responsible for managing the state of entities that are manipulated with transaction certificates. This representation now more accurately reflects the difference between pre vs post-Conway eras.
  • We did a minor performance improvement of transaction size calculation
  • Improved the MemoBytes interface to disallow unsafe construction and improved the consistency of transaction related modules.
  • Did AccountState type rename as preparation for potential promotion of reward accounts to full blown accounts, which might be needed for Leios later down the road.

We've also accomplished a very nice simplification to our constraint based generation framework. Fixed our example Plutus scripts that we use for testing. Got rid of a couple of redundant Byron test packages, which were causing rebuilds of the same code twice and caused unnecessary maintenance overhead. Besides that we also did some other minor quality of life improvements to the Ledger codebase.

Low level summary

Features

Testing

  • pull-4954 - Add expectTxSuccess to ShelleyEraImp and use it in trySubmitTx
  • pull-4958 - Update spec's code location
  • pull-4921 - Refactor the constrained generators to get rid of the Fn stuff
  • pull-4972 - Fix and bump cardano-ledger-executable-spec
  • pull-4923 - Update V3 scripts in plutus-preprocessor to use the new Data api

Infrastructure and releasing

  • pull-4956 - Convert byron test packages to sublibraries
  • pull-4957 - Add script for bumping CHANGELOGS post-release
  • pull-4965 - Expose Byron CDDLs in Test.Cardano.Chain.Binary.Cddl