Skip to main content

64 posts tagged with "consensus"

View All Tags

· 2 min read
Kevin Hammond

Blocks from the future

We identified two issues relating to "blocks from the future".

  1. Blocks from the near future
  2. Blocks from the far future

While blocks from the near future have been known to occur on mainnet as a result of clock skew/misconfiguration, there are no known instances on mainnet of blocks from the far future. In both cases, restarting an affected node would resolve the issue.

What is meant by a Block from the Future?

A node considers a block to be from the future if its slot is ahead of the current slot. Ouroboros Praos mandates that all chains containing blocks from the future (at that time) are ignored during chain selection. As Praos assumes that all nodes have access to perfectly synchronized clocks, this will never cause nodes to disregard blocks that have been minted by other honest nodes. In an actual real-world deployment, this assumption is unrealistic due to the imperfections of protocols like NTP as well as leap seconds.

The issues that were identified meant that blocks from the future could potentially be used by malicious actors to create denial-of-service attacks.

Both issues were fixed by Cardano node 8.8 or later, and were eradicated at the Chang hard fork.

Further Details

Report on Blocks from the Near Future

Report on Blocks from the Far Future

· One min read
Damian Nadales

High level summary

  • Added a snapshot-converter tool, which will be merged soon. This tool converts non-UTXO-HD ledger snapshots, into UTXO-HD ones, so that the user does not have to replay from Genesis when using an UTXO-HD capable node. This patch also solves an issue with deserialization of TxOuts in Conway in the UTxO-HD implementation.
  • Solved a memory leak in the UTxO-HD implementation. This patch will be benchmarked this week.
  • Wrote a test for adding large txs to the mempool.
  • Expanded the Mempool capacity beyond just byte size.
  • @amesgen discovered and advised on a Conway ledger snapshot deserialization bug.

· One min read
Damian Nadales

High level summary

During the past week the team:

  • Incorporated minor improvements to the ChainSync client test (#529).
  • Documented tasks of a caught-up node (#1215), which can be useful for SPOs.
  • Tweag presented the last Genesis SoW to the Consensus team. The next steps are reviews and phased (opt-in) rollout.

Regarding the two problems found during UTXO-HD benchmarks, namely, increase in heap size (#1192) and a newly found race condition (#1193), #1208 fixed the race condition and was merged, however #1194 showed no improvements so it will not be merged yet.

· One min read
Damian Nadales

High level summary

The Consensus team started working on the goals for the third quarter of 2024, which can be found here.

  • Improved behavior of db-truncater (#1203).
  • Exposed more information on EmptySlot error (#1196).
  • Added a trace message when the Consensus database is not clean (#1198).
  • Added support for storing immutable and volatile databases in different paths (#1199).

We're also working on rebasing the UTXO-HD feature branch atop 9.1. The benchmarks of the in-memory showed an increase in heap size (#1192) and exposed a race condition (#1193). There are proposed fixes which will be benchmarked soon:

  • Heap size increase mitigation: #1194.
  • Forkers race condition fix: #1208.

· One min read
Damian Nadales

High level summary

  • Assisted with Node release 9.0:
    • Performed security audits, engaged with other teams, implemented improvements, and released Consensus packages.
  • We are now running additional NoThunks tests, which help us safeguard against memory leaks in the node.
  • Reviewed Milestone 13 of Genesis, which improves the code documentation of Genesis, and implements some fixes and optimizations.