Skip to main content

· 2 min read
Jared Corduan

High level summary

The ledger team focused mainly on the conway ledger era and node integration. For conway, we completed a large structural change that now allows for delegation certificates to be parameterized by era, and introducing new certificates for the first time since Shelley. We also continue to build out our contraint based generators that we will use to property test the conway era. In particular, we can now generate an entire ledger state and a transaction which is balanced with respect to the ledger state.

Low level summary

Conway certificates

Certificiates are now abstracted as a type family in the ledger codebase. Moreover, there are new certificates in the Conway era to support CIP-1694, and MIR certificates have been removed.

Constraint based testing

Our plan for property testing in the conway era is to no longer use the trace generators, but instead generate ledger states and transactions based on constraints. We hit a milestone this week, namely the ability to generate a balanced transaction in the context of a ledger state, all based on our ever growing constaint language.

Integration work

Technical debt

· 2 min read
Jordan Millar

2023-05-05 - 2023-05-23

High level summary

  • Golden tests for cardano-cli command help output were added.
  • Documentation was updated with new libsodium installation instructions.
  • There were several updates for the cardano-cli:
    • Deletion of the deprecated shelley command group.
    • Addition of golden tests for CLI help.
    • An improvement to avoid bare IO in tests, allowing better error reporting in failed tests.
    • Generation of UTCTime test values without leap seconds (avoids erroneous test failures)
    • Support for signing transactions with GenesisDelegateSigningKey_ed25519_bip32.
  • The cardano-api underwent multiple refinements:
    • Implementing deposit handling when balancing transactions (necessary for Conway)
    • Cleaning up socket file path code.
  • Several changes were made to the cardano-testnet:
    • Adding golden tests for cardano-testnet help.
    • Removing all hardcoded yaml files in cardano-testnet
    • Improving cardano-testnet help output.
    • Parameterizing default yaml configuration value, allowing for easier hardforking to the era of choice.

docs

CI & project maintenance

Developer experience

cardano-cli

cardano-api

cardano-node

cardano-testnet

· 2 min read
Jean-Philippe Raynaud

High level overview

The Mithril team completed the implementation of the new certifier service of the aggregator, which is in charge of producing certificates for multi-signatures. They also finished implementing the interfaces defined to provide certification for the full immutable Cardano files snapshot and the Mithril stake distribution. Additionally, they have completed the refactoring of the multi-signer in the aggregator. The team also fixed the bug in the signer registration that was responsible for gaps during the signature phase for some signers, and they upgraded the Cardano node used in the Mithril testnets and devnet to version 1.35.7.

Finally, they have worked on designing a decentralized registration for the signers that takes place on the Cardano chain.

Low level overview

  • Worked on the epic that designs and implements generic signing/verification of entity services #780:
    • Completed the implementation of the Certifier service in the aggregator #850
    • Completed the implementation of the signable builder for the Mithril Stake Distribution #851
    • Completed the implementation of the artifact builder for the Mithril Stake Distribution #870
    • Completed the implementation of the signable builder for the Full Immutables Snapshot #852
    • Completed the implementation of the artifact builder for the Full Immutables Snapshot #871
    • Completed the adaptation of the aggregator runtime to use the signable builder service #853
    • Worked on the adaptation of the signer runtime to use the signable builder service #854
    • Completed the definition of the entity service interface for verification/restoration #868
    • Completed the refactoring of the OpenMessage type #878
  • Completed the epic that simplifies the multi-signer in the aggregator #398:
    • Completed the extraction of the single signature registration from the multi-signer #643
  • Completed the upgrade of the Cardano node to version 1.35.7 #881
  • Fixed the bug that created a discrepancy of the signer verification keys between signers and aggregators #873

· 2 min read
Damian Nadales

High level summary

During the past two weeks we made some important progress in the Genesis design. It seems the BlockFetch logic need not be modified for Genesis, although this needs to be confirmed. We started a DoS mitigation handbook and updated our conceptual component diagram to guide the Genesis design. We engaged with the IOG researchers to work on the Limit on Patience attack vector, work in this area is still ongoing. We sketched a design to decouple the CPU load of the node from its responsiveness to the socket. Finally, we discussed with Networking our approach to lower the performance impact of the BlockFetch decision logic, and got green light from them.

We migrated the consensus code to a new repository, splitting it from the ouroboros-network repository, and released version 0.6 of Consensus.

We also merged the mempool fairness improvement to main branch.

Another significant enhancement to our documentation was the addition of an explanation of the hardfork combinator forecast horizon.

See the sections below for more details.

Genesis

We reviewed the BlockFetch design documentation, and added some source-code comments that emphasize certain properties of the decisions the BlockFetch logic makes that are helping us confirm that Genesis does not require any changes to BlockFetch. We are waiting on input from our former system architect to verify this.

We migrated and updated the conceptual component diagram in the ouroboros-consensus repository which helps us situate the Genesis design and argument.

We engaged with the IOG researchers about the Genesis design. We sketched out a way to address the concern that the Limit on Patiente (LoP) attack vector duty cycle is indeed low, but it's still non-trivial to ultimately conclude it's sufficiently low.

We also sketched a design to decouple the CPU load of the node from its responsiveness to the socket, since the LoP is a relatively tight timeout, and node performance bugs inducing seconds-worth of latency are unfortunately familiar phenomena.

Fostering collaboration

We added an explanation of a question that we had to explain many times about the exact behavior of the hardfork combinator forecast horizon.

· 2 min read
Michael Karg
  • Benchmarking: The benchmarks and performance investigations for the new 8.0 release branch are ongoing.
  • New tracing: Performance optimization of the new tracing system is paying off and we could notably shrink its resource footprint.
  • Analysis pipeline: An exhaustive documentation and dataflow diagram for our analyses is being worked on.
  • Infrastructure: The plutus-apps flake input for cardano-node has finally been removed.
  • Nomad backend: A PR implementing placement of benchmarking clusters has been merged.

Benchmarking

The performance investigations on the 8.0 release branch have lead to pinpointing and addressing incosistent behaviour. For that, we created yet another local reproduction with the workbench's forge-stress benchmark.

Currently we're working on scaling up the dataset size (UTxO and delegations) on the AWS cluster to gain further insight into 8.0 and subsequent releases.

Additionally, we've refined the trace-bench family of profiles that target benchmarking our own new tracing system.

Tracing

Optimization of the tracing system has identified several locations where inefficient serializations were used; those were not originally intended to run on a performance-critical codepath. We've worked on improving those, as well as eliminating cases of redundant conversion between different serialization formats. This has brought down both memory and CPU impact of the tracing system.

Infrastructure & Analysis

Dataflow documentation

The LogObject CLI locli is at the heart of our analysis and reporting pipeline. To increase its accessibility and facilitate further development, we're creating a detailed and illustrated documentation of all dataflows that happen during analysis and reporting.

Remove redundant Plutus flake input

This step is the conclusion of porting Plutus benchmarking scripts to our own library. By finally removing the now unnecessary flake input, we simplify the dependency graph for cardano-node, as well as enable immediate feedback when developing Plutus benchmarks.

Nomad backend

Sophisticated placement of nodes across various regions of the globe is a cornerstone of the model cluster we use for benchmarking. This capability has now been added to the Nomad backend and can be controlled with Nomad job descriptions. A PR with this, along with various quality-of-life improvements, has been merged to master.