Skip to main content

· 2 min read
Jean-Philippe Raynaud

High level overview

This week, the Mithril team continued implementing the incremental certification of the Cardano database. They enhanced the implementation of artifact production and upload, worked on the implementations of the client library and the WASM client, and kept adapting the explorer. Additionally, they have been preparing for the upcoming transition to the next 'Pythagoras' Mithril era, which is scheduled to occur in the following weeks.

Finally, the team optimized the compilation times of TLS dependencies in the nodes and started to work on updating the CI pipeline runners following their deprecation.

Low level overview

  • Completed the issue Incremental Cardano DB artifacts production enhancements #2234
  • Completed the issue Implement Incremental Cardano DB in WASM client #2247
  • Completed the issue Implement a retry mechanism for the FileUploader #2213
  • Completed the issue Incremental Cardano DB artifacts production enhancements #2234
  • Completed the issue Activate compression of aggregator HTTP responses #2225
  • Completed the issue OpenAPI examples check is not working #2235
  • Completed the issue Use native-tls-vendored feature of reqwest in crates #2252
  • Worked on the issue Implement Incremental Cardano DB in client library #2214
  • Worked on the issue Enhance Snapshotter to avoid file deletion on error if already exists #2215
  • Worked on the issue Upgrade the deprecated ubuntu-20 builders in CI #2216
  • Worked on the issue Update explorer for Incremental Cardano DB #2212
  • Worked on the issue Activate Pythagoras Mithril era #2034

· One min read
Noon van der Silk

High-level summary

The last few weeks have seen us finialising a copule of things; notably our experiments into running Hydra with a custom ledger (to support, for example, a custom plutus script operation you may be interested in). We have almost wrapped up incremental commits; just finishing the spec changes. We will then focus on a release, and some features that users have been wanting for a while around memory usage and resilience.

What did the team achieve?

  • Completed custom ledger experiment #1727, #1742, #1796
  • Restored hydra-explorer for 0.19 #12
  • Add deposit deadline command-line option #1798
  • Researched options for less-than-totaly consensus in a Hydra Head
  • Investigated resiliance to nodes offline #1780 and investigated solution #1786

What's next?

  • Start to investigate memory usage enhancements #1618
  • Final work on incremental commits #199; namely the spec changes #12
  • Finish Hydra explorer supporting multiple versions #1282
  • Plan the 0.20.0 release
  • Continue support Hydra Doom
  • Start work on API command to clear pending transactions #1284

· One min read
Damian Nadales

High level summary

Our quarterly objectives are now drafted and can be accessed here.

The team continued working on documentation improvements, enhancing the security of the Consensus layer, and being involved in the early stages of the Peras workstream.

We are updating the UTXO-HD branch to make use of the forward-deserializability of transaction outputs (TxOuts) (see #1360, #1361, and #1362). We performed a local chain sync with a the latest version of an UTXO-HD enabled node, using the in-memory backend.

· 2 min read
Jean-Philippe Raynaud

High level overview

This week, the Mithril team continued implementing the incremental certification of the Cardano database. They completed the cloud synchronization of artifacts, introduced enhancements and optimizations for artifact production, and adapted the explorer to accommodate these changes. Additionally, they finalized the design for splitting the mithril-common crate and re-spun the testing-sanchonet network.

Other progress includes starting work on compressing aggregator HTTP responses, fixing a bug that prevented debug logs from being produced on the nodes, and resolving an issue with Prometheus data recording in the infrastructure.

Low level overview

  • Completed the issue Implement artifacts cloud synchronization in Incremental Cardano DB with GCP #2211
  • Completed the issue Design mithril-common split & re-organization in repository #2175
  • Completed the issue Upgrade testing-sanchonet for respin with Cardano 10.1.4 #2209
  • Completed the issue Mithril client does not work in Windows Power Shell #2199
  • Completed the issue Missing debug and info logs in Mithril nodes #2227
  • Completed the issue Signer does not handle properly signature signed entity timeout #2229
  • Completed the issue Grafana aggregator dashboard is not working on release networks #2230
  • Worked on the issue Incremental Cardano DB artifacts production enhancements #2234
  • Worked on the issue Update explorer for Incremental Cardano DB #2212
  • Worked on the issue Activate compression of aggregator HTTP responses #2225
  • Worked on the issue OpenAPI examples check is not working #2235
  • Worked on the issue Activate Pythagoras Mithril era #2034

· 4 min read
Marcin Szamotulski
Karl Knutsson

Overview of sprint 78 & sprint 79

Documentation

We reviewed the technical report. We closed a number of issues, the most important are:

And a few smaller issues:

This was done in the Network Spec Update PR, we also fixed many grammar & spelling errors network-spec: language.

SRV Record Support

We worked on SRV records support by ouroboros-network, issue #2780, PR 5018. We will merge it after reuasble diffusion.

Quering Network State through Node-to-Client Protocol

The aim is to make P2P network stake available through the Local State Query Mini-Protocol.

We opened a draft PR, also see the issue, where we mentioned all the branches where the work is progressing. See below for more technical details.

Extensible Ouroboros Network Diffusion Stack

The work stream reached the review phase. See issue#5016.

Tx-Submission

The Consensus team agreed to implement needed mempool performance optimisations and is making progress on them. See ouroboros-consensus#1359.

Ouroboros-Network-0.19 Release

We cut ouroboros-network-0.19 and 0.19.1 releases.

Configuration Changes for Block Propagation Times

Block propagation times are influenced by the number of TCP round trips required to transmit a block.

In mid-December, we published a post discussing configuration changes to the Linux IP stack. These adjustments involved increasing the initial TCP congestion window to 42 segments and ensuring that the congestion window remained open for idle connections.

IOG applied these changes to four stake pools located in Brazil, South Africa, Dubai, and Japan around December 15th.

The Cardano Foundation manages a standard peer-to-peer (P2P) node in Paris, which operates without manual connections to other Cardano Foundation nodes or IOG nodes. After implementing the configuration changes, we noted a statistically significant improvement in the propagation times for blocks larger than 10 segments (about 14,480 bytes) produced by IOG's pools.

Block Size (bytes)Improvement (ms)
14,480 - 28,960-132 to -78
28,960 - 57,920-197 to -130
>57,920-255 to -176
Block Propagation Times

These results demonstrate that a Stake Pool Operator (SPO) can enhance the propagation times of their own pool's blocks by applying config changes targeting TCP's congestion window.

Low-level summary

Querying Network State through Node-to-Client Protocol

In the first interaction, we will make it possible to query the node-to-node state through LocalStateQuery mini-protocol (part of the node-to-client protocol).

data ConnectionManagerState peeraddr = ConnectionManagerState {
connectionMap :: Map (ConnectionId peeraddr) AbstractState,
-- ^ map of connections, without outbound connections in
-- `ReservedOutboundSt` state.

registeredOutboundConnections :: Set peeraddr
-- ^ set of outbound connections in the `ReserverdOutboundSt` state.
}
deriving (Eq, Show)


data InboundState peeraddr = InboundState {
remoteHotSet :: !(Set (ConnectionId peeraddr)),
remoteWarmSet :: !(Set (ConnectionId peeraddr)),
remoteColdSet :: !(Set (ConnectionId peeraddr)),
remoteIdleSet :: !(Set (ConnectionId peeraddr))
}
deriving (Eq, Show)

data OutboundState peeraddr = OutboundState {
coldPeers :: Set peeraddr,
warmPeers :: Set peeraddr,
hotPeers :: Set peeraddr
}
deriving (Eq, Show)


data NetworkState peeraddr = NetworkState {
connectionManagerState :: ConnectionManagerState peeraddr,
inboundGovernorState :: InboundState peeraddr,
outboundGovernorState :: OutboundState peeraddr
}
deriving (Eq, Show)