IntersectMBO / IntersectMBO/ouroboros-consensus
Specify cross-era ticking/forecasting for Cardano
- Dominant language
- Haskell
- Stars
- 67
- Forks
- 43
- Avg merge
- 5d 13h
- Merged PRs (30d)
- 43
Description
Right now, the semantics of cross-era ticking/forecasting is purely implementation-defined, driven by whatever does not cause any concrete issues, rather than principled considerations.
- See [here](https://ouroboros-consensus.cardano.intersectmbo.org/docs/for-developers/HardWonWisdom/#how-does-cross-era-forecasting-work) for forecasting.
- See https://github.com/IntersectMBO/ouroboros-consensus/blob/106ce89c51e4b6d144b15d02bf78513e947817e6/ouroboros-consensus-cardano/src/ouroboros-consensus-cardano/Ouroboros/Consensus/Cardano/CanHardFork.hs#L708-L723 and #339 for an explanation why the current approach to ledger state ticking (**translate-then-tick**, ie first translate, then tick across the era/epoch boundary using the logic of the new era) is at the very least surprising in this case.
- Chain-dep state ticking is also underspecified (eg on the transition from TPraos to Praos, should the extra entropy nonce have been used if non-neutral?).
We should try to improve the situation here, and should be in a decent position for this as we now have a sizeable sample of era transitions whose requirements/particularities can guide our judgement. This requires input from the Ledger team, but the Consensus team can start by drafting a proposal. Possible outcomes are:
- Decide on how responsibility for the cross-era logic should be distributed across Consensus and Ledger. (Right now, it is a mix between the Ledger-provided `TranslateEra` instances, and how/when Consensus invokes them. At the very least, it should be clarified what the exact requirements/guarantees here are.)
- Very concrete example question: The ledger events of which era should be emitted when ticking across an era boundary?
- Enriching the existing specifications with cross-era behavior (eg in the existing Ledger specs PDFs, or in the [formal ledger specifications](https://github.com/input-output-hk/formal-ledger-specifications)).
Crucially, any semantics we decide on has to be compatible with mainnet.
Contributor guide
Assessment
This issue has not been assessed yet.