High level summary
During the past two weeks, the Consensus team finalized the QSM tests for the
backing store and Mempool on the UTxO-HD branch with important discoveries
regarding parallel QSM testing. We also worked with the Ledger team to envisage
the modifications that are required in Ledger and Consensus to accommodate the
changes in the crypto VRF and KES. The db-analyser
now supports bechmarking
the ledger operations, which will allow us to identify, debug, and profile
potential performance problems. We drafted a document that defines how to manage
the versions of Consensus-related packages. The top level documentation of
ouroboros-network
now features a description of the consensus components and
provides a hyperlinked map to the modules documentation.
Workstreams
UTxO HD prototype
Whereas we had passing sequential state-machine tests for the mempool, the parallel case proved to be more challenging than we thought. The operation of adding a list of transactions to the mempool is not atomic and, as a result, when adding a list of transactions, transactions from other processes can be added in between. The mempool implementation handles this correctly, however this required us to redesign the parallel model we had to take the lack of atomicity into account.
Backing store property tests
We finished refactoring the backing store property tests. The second review round is ongoing.
LSM tree implementation
We are working on benchmarking (in terms of time and number of IO operations) fetching/looking up data from disk.
Genesis
We worked on the design of a mechanism to prevent a DoS attack on our Genesis design related to rollbacks. This was arguably the biggest outstanding question.
During the discussions around Genesis, we noticed a design boundary that nicely delineates a fundamental component. We almost have a full Haskell prototype of it. It will be very nicely self-contained, perhaps even usable in the ultimate implementation!
New VRF and KES crypto integration
We collaborated with the Ledger team on preparing the ledger state and crypto types to avoid huge allocation on the epoch boundary when changing aspects of the crypto that will only manifest in headers, not in the ledger states.
Technical debt
We merged the pull-request that adds a support to db-analyser
for
benchmarking ledger operations. This will allow us to identify, debug, and
profile potential performance problems. The benchmark focus on the main 5 ledger
operations that are involved in chain syncing, block forging, and block
validation, namely:
- Forecast.
- Header tick.
- Header application.
- Block tick.
- Block application.
The following figure shows a plot of the benchmarking results for the first 65 million blocks (approximately) of the Cardano chain. The thin yellow lines under the x-axis show the epoch boundaries, whereas the thick yellow lines correspond to the era transitions.
As we can see in this figure, era and epoch boundaries require more computation time. The ledger team are aware of this problem, and we are working to improve this situation.
Fostering collaboration
We drafted a document motivating and defining how Consensus (and possibly other core teams) will/should manage our package versions. This pull-request garnered many great discussions from our team members and other teams too: Sebastian Nagel, Arnaud Bailly, Michael Peyton-Jones, Ziyang Liu, et al. We want to thank you all for your input, and we found this discussion very enlightening!
We merged the pull request that adds an overview of consensus to the top level documentation of ouroboros-network. This overview describes the consensus components and adds a hyperlinked map to the modules documentation.