Skip to content

Commit d20248c

Browse files
committed
Glossary: update entry on the epoch structure
1 parent 52ca639 commit d20248c

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

docs/website/contents/for-developers/Glossary.md

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -137,22 +137,27 @@ In the latest Cardano era, each epoch lasts for 432000 slots (= 5 days).
137137

138138
The ledger rules take snapshots of the nonce and stake distribution at different points of time in the course of an epoch. A snapshot may only be _used_ when it has stabilized, which means that their block has become immutable (being older than `k` blocks). Currently, Cardano `mainnet` uses an epoch length of `10k/f` slots, divided into three parts:
139139

140-
- Part 1, length `4k/f` - At the beginning of this part, which forms the boundary with the previous epoch, the stake distribution snapshot is taken.
140+
Note that nothing in the implementation happens on the transition from Part 1 to Part 2 (in contrast to "from Part 2 to Part 3"), so there exist no concrete values for the individual length of these two phases. The length of Part 3 is however explicitly recorded in the implementation, so the length of Part 1 and Part 2 combined is `10k/f` minus the length of Part 3.
141+
142+
- Part 1, at least length `3k/f` - At the beginning of this part, which forms the boundary with the previous epoch, the stake distribution snapshot is taken.
141143
At the end of this part, the stake distribution has stabilized.
142144

143-
- Part 2, length `3k/f` - At the end of this part, the nonce snapshot is taken.
145+
- Part 2, at least length `k/f` - At the end of this part, the nonce snapshot is taken.
144146

145147
The nonce is snapshotted after the stake distribution to prevent _identity grinding_.
146148
However, this does not prevent _nonce grinding_.
147149

148150
It must contain at least one honest block (created by an honest party as defined above), so that the nonce cannot be solely influenced by the adversary – otherwise they could identity grind before Part 1, knowing what the nonce would be due to owning all the blocks up to its snapshot.
149151
This criterion is a minimum requirement and wildly unrealistic not to be satisfied with `mainnet` parameters.
150152

151-
The nonce snapshot could likely be taken earlier without sacrificing security, like after Part 1.
152-
Waiting another `3k/f` is playing it extra safe.
153+
The nonce snapshot could likely be taken earlier without sacrificing security, like already after `3k/f` after the start of the epoch.
154+
Waiting all the way until the start of Part 3 is playing it extra safe.
155+
156+
- Part 3, length `4k/f` since the Conway era, and `3k/f` for all prior Shelley-based eras - At the end of this part, the nonce snapshot has stabilized and can be used for the leader schedule of the next epoch.
153157

154-
- Part 3, length `3k/f` - At the end of this part, the nonce snapshot has stabilized and can be used for the leader schedule of the next epoch.
158+
Most importantly, Part 3 has to be at least `3k/f` slots (one stability window) long for the nonce to stabilize before the start of the next epoch (such that all pools agree on the leader schedule).
155159

160+
As advised by the IOG researchers, the nonce should be snapshotted even a bit earlier for intricate reasons related to Ouroboros Genesis. See erratum 17.3 in the [Shelley ledger specs](https://github.com/IntersectMBO/cardano-ledger/blob/master/README.md) for context.
156161

157162
## :Eventual consensus
158163

0 commit comments

Comments
 (0)