Skip to main content

· One min read
Damian Nadales

High level summary

  • Work is ongoing on improving the Genesis tests. In particular, a centralized chain-sync-jumping model was developed to help troubleshoot test failures, which proved difficult to do using the decentralized model.
  • The Consensus team had its representative in the Node Diversity workshop. The report can be found in this link.
  • Collaborated with the Ouroboros Phalanx/Anti-Grinding Innovation Team, as an initial step in providing engineer input on the design.

· 2 min read
Jean-Philippe Raynaud

High level overview

This week, the Mithril team started rolling out incremental certification of the Cardano database (also known as Cardano node database v2), which has been activated on the pre-release-preview test network.

They also completed adapting the infrastructure to support the aggregator’s prototype ‘follower’ mode and focused on signing ancillary files in the Cardano database snapshots using an IOG key. Work also continued on the proof of concept for the Mithril/ALBA aggregation proof system.

Finally, the team continued refactoring the STM cryptographic library to improve clarity and started refactoring the aggregator’s command configuration.

Low level overview

  • Published a dev blog post about the Certification of Cardano node database v2
  • Completed the issue Adapt infrastructure for multiple aggregators with leader/follower signer registration #2391
  • Completed the issue Wrong computation of size of immutable files in Cardano DB v2 #2415
  • Completed the issue Adapt the aggregator dashboard with origin in Grafana #2422
  • Worked on the issue Sign ancillary files with IOG key #2362
  • Worked on the issue Re-organize STM library structure #2369
  • Worked on the issue Mithril/ALBA aggregation proof system PoC #2403
  • Worked on the issue Rollout Cardano Database v2 feature #2409
  • Worked on the issue Aggregator stress test is failing #2408
  • Worked on the issue Simplify the configuration of commands in aggregator #2384
  • Worked on the issue DMQ signature diffusion prototype #2402

· 2 min read
Ziyang Liu

High level summary

We made significant improvements 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.