Open nfrisby opened 2 months ago
For the record, translating txs etc from one era to the next also deserves a specification. But it's less error-prone, in our experience.
But there are plenty of subtleties buried in the implementation.
One such subtlety is on ticking from Babbage to Conway:
Therefore, in order to make sure that there are no disagreements regarding the stake distribution, we need to preserve the current behavior. The most direct way would be to keep the current hack, but we don't have to: I opened https://github.com/IntersectMBO/ouroboros-consensus/pull/1239 that re-implements the hack in a minimal fashion. It could be made even more minimal/finegrained by upstreaming the logic into Ledger.
EDIT: It has been properly fixed in https://github.com/IntersectMBO/ouroboros-consensus/pull/1297, see the PR description there for all of the gory details.
abacadaba9f12a8b5382fc370e4e7e69421fb59831bb4ecca3a11d9b
lost 100 ADA worth of delegation in epoch 508 instead of in epoch 509 due to the retirement of pointer addresses.This Issue is to create a proper specification of the relation that must hold between two ledger states X and Tick(X, S) --- X is the ledger state that results from applying the final block of some era, and S is the slot of the first block of the next era, which will be validated against the Tick(X, S) ledger state.
We also need sth similar for forecasting. E.g. one weird thing at the moment is that forecasting and ticking work differently/symmetrically:
Consensus requires that these things agree as long as forecasting is defined (the "forecasting lemma", see e.g. here), which isn't actually immediately obvious here.
The Consensus Team needs assistance with Issue https://github.com/IntersectMBO/ouroboros-consensus/issues/418.
Right now, there is no separate specification for how to tick/forecast ledger states across era boundaries, there is only code. Other than Byron-to-Shelley, it's "obvious for the most part". But there are plenty of subtleties buried in the implementation.
This Issue is to create a proper specification of the relation that must hold between two ledger states X and Tick(X, S) --- X is the ledger state that results from applying the final block of some era, and S is the slot of the first block of the next era, which will be validated against the Tick(X, S) ledger state.