Skip to content

Commit 2a78ec8

Browse files
committed
ouroboros-consensus: Add PerasRoundLength
1 parent 1390449 commit 2a78ec8

File tree

10 files changed

+64
-17
lines changed

10 files changed

+64
-17
lines changed

ouroboros-consensus-cardano/src/byron/Ouroboros/Consensus/Byron/Ledger/Ledger.hs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,8 @@ byronEraParams genesis =
333333
, eraSlotLength = fromByronSlotLength $ genesisSlotLength genesis
334334
, eraSafeZone = HardFork.StandardSafeZone (2 * k)
335335
, eraGenesisWin = GenesisWindow (2 * k)
336+
, -- TODO(geo2a): revise this value
337+
eraPerasRoundLength = defaultPerasRoundLength
336338
}
337339
where
338340
k = unNonZero $ maxRollbacks $ genesisSecurityParam genesis
@@ -345,6 +347,8 @@ byronEraParamsNeverHardForks genesis =
345347
, eraSlotLength = fromByronSlotLength $ genesisSlotLength genesis
346348
, eraSafeZone = HardFork.UnsafeIndefiniteSafeZone
347349
, eraGenesisWin = GenesisWindow (2 * Gen.unBlockCount (Gen.configK genesis))
350+
, -- TODO(geo2a): revise this value
351+
eraPerasRoundLength = defaultPerasRoundLength
348352
}
349353

350354
instance HasHardForkHistory ByronBlock where

ouroboros-consensus-cardano/src/shelley/Ouroboros/Consensus/Shelley/Ledger/Ledger.hs

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ import Ouroboros.Consensus.Config
113113
import Ouroboros.Consensus.HardFork.Abstract
114114
import Ouroboros.Consensus.HardFork.Combinator.PartialConfig
115115
import qualified Ouroboros.Consensus.HardFork.History as HardFork
116+
import Ouroboros.Consensus.HardFork.History.EraParams (EraParams (eraPerasRoundLength))
116117
import Ouroboros.Consensus.HardFork.History.Util
117118
import Ouroboros.Consensus.HardFork.Simple
118119
import Ouroboros.Consensus.HeaderValidation
@@ -168,6 +169,8 @@ shelleyEraParams genesis =
168169
, eraSlotLength = mkSlotLength $ SL.fromNominalDiffTimeMicro $ SL.sgSlotLength genesis
169170
, eraSafeZone = HardFork.StandardSafeZone stabilityWindow
170171
, eraGenesisWin = GenesisWindow stabilityWindow
172+
, -- TODO(geo2a): revise this value
173+
eraPerasRoundLength = defaultPerasRoundLength
171174
}
172175
where
173176
stabilityWindow =
@@ -183,6 +186,8 @@ shelleyEraParamsNeverHardForks genesis =
183186
, eraSlotLength = mkSlotLength $ SL.fromNominalDiffTimeMicro $ SL.sgSlotLength genesis
184187
, eraSafeZone = HardFork.UnsafeIndefiniteSafeZone
185188
, eraGenesisWin = GenesisWindow stabilityWindow
189+
, -- TODO(geo2a): revise this value
190+
eraPerasRoundLength = defaultPerasRoundLength
186191
}
187192
where
188193
stabilityWindow =
@@ -340,11 +345,11 @@ instance
340345
internsFromMap $
341346
shelleyLedgerState st
342347
^. SL.nesEsL
343-
. SL.esLStateL
344-
. SL.lsCertStateL
345-
. SL.certDStateL
346-
. SL.dsUnifiedL
347-
. SL.umElemsL
348+
. SL.esLStateL
349+
. SL.lsCertStateL
350+
. SL.certDStateL
351+
. SL.dsUnifiedL
352+
. SL.umElemsL
348353
in LedgerTables . ValuesMK <$> (eraDecoder @era $ decodeMap decodeMemPack (decShareCBOR certInterns))
349354

350355
instance
@@ -459,10 +464,10 @@ slUtxoL :: SL.NewEpochState era -> SL.UTxO era -> (SL.UTxO era, SL.NewEpochState
459464
slUtxoL st vals =
460465
st
461466
& SL.nesEsL
462-
. SL.esLStateL
463-
. SL.lsUTxOStateL
464-
. SL.utxoL
465-
<<.~ vals
467+
. SL.esLStateL
468+
. SL.lsUTxOStateL
469+
. SL.utxoL
470+
<<.~ vals
466471

467472
{-------------------------------------------------------------------------------
468473
GetTip

ouroboros-consensus-diffusion/test/consensus-test/Test/Consensus/HardFork/Combinator.hs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,8 @@ prop_simple_hfc_convergence testSetup@TestSetup{..} =
164164
(History.StandardSafeZone (safeFromTipA k))
165165
(safeZoneB k)
166166
<*> pure (GenesisWindow ((unNonZero $ maxRollbacks k) * 2))
167+
-- TODO(geo2a): revise this value
168+
<*> pure defaultPerasRoundLength
167169

168170
shape :: History.Shape '[BlockA, BlockB]
169171
shape = History.Shape $ exactlyTwo eraParamsA eraParamsB

ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/Block/Abstract.hs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ module Ouroboros.Consensus.Block.Abstract
4141
-- * Ouroboros Genesis window
4242
, GenesisWindow (..)
4343

44+
-- * Ouroboros Peras round length
45+
, PerasRoundLength (..)
46+
, defaultPerasRoundLength
47+
4448
-- * Re-export basic definitions from @ouroboros-network@
4549
, ChainHash (..)
4650
, HasHeader (..)
@@ -300,3 +304,16 @@ succWithOrigin = withOrigin minBound succ
300304
newtype GenesisWindow = GenesisWindow {unGenesisWindow :: Word64}
301305
deriving stock (Show, Eq, Ord)
302306
deriving newtype (NoThunks, Num)
307+
308+
{-------------------------------------------------------------------------------
309+
Ouroboros Peras round length
310+
-------------------------------------------------------------------------------}
311+
312+
newtype PerasRoundLength = PerasRoundLength {unPerasRoundLength :: Word64}
313+
deriving stock (Show, Eq, Ord)
314+
deriving newtype (NoThunks, Num)
315+
316+
-- | See the Protocol parameters section of the Peras design report:
317+
-- https://tweag.github.io/cardano-peras/peras-design.pdf#section.2.1
318+
defaultPerasRoundLength :: PerasRoundLength
319+
defaultPerasRoundLength = 90

ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/HardFork/Abstract.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,6 @@ neverForksHardForkSummary ::
6767
LedgerState blk mk ->
6868
HardFork.Summary '[blk]
6969
neverForksHardForkSummary getParams cfg _st =
70-
HardFork.neverForksSummary eraEpochSize eraSlotLength eraGenesisWin
70+
HardFork.neverForksSummary eraEpochSize eraSlotLength eraGenesisWin eraPerasRoundLength
7171
where
7272
HardFork.EraParams{..} = getParams cfg

ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/HardFork/History/EraParams.hs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,8 @@ data EraParams = EraParams
136136
, eraSlotLength :: !SlotLength
137137
, eraSafeZone :: !SafeZone
138138
, eraGenesisWin :: !GenesisWindow
139+
-- TODO(geo2a): current Cardano mainnet eras will not have Peras. What should this value be for them?
140+
, eraPerasRoundLength :: !PerasRoundLength
139141
}
140142
deriving stock (Show, Eq, Generic)
141143
deriving anyclass NoThunks
@@ -152,11 +154,15 @@ data EraParams = EraParams
152154
defaultEraParams :: SecurityParam -> SlotLength -> EraParams
153155
defaultEraParams (SecurityParam k) slotLength =
154156
EraParams
155-
{ eraEpochSize = EpochSize (unNonZero k * 10)
157+
{ eraEpochSize = EpochSize epochSize
156158
, eraSlotLength = slotLength
157159
, eraSafeZone = StandardSafeZone (unNonZero k * 2)
158160
, eraGenesisWin = GenesisWindow (unNonZero k * 2)
161+
, -- TODO(geo2a): revise this value
162+
eraPerasRoundLength = defaultPerasRoundLength
159163
}
164+
where
165+
epochSize = unNonZero k * 10
160166

161167
-- | Zone in which it is guaranteed that no hard fork can take place
162168
data SafeZone
@@ -235,17 +241,19 @@ decodeSafeBeforeEpoch = do
235241
instance Serialise EraParams where
236242
encode EraParams{..} =
237243
mconcat $
238-
[ encodeListLen 4
244+
[ encodeListLen 5
239245
, encode (unEpochSize eraEpochSize)
240246
, encode eraSlotLength
241247
, encode eraSafeZone
242248
, encode (unGenesisWindow eraGenesisWin)
249+
, encode (unPerasRoundLength eraPerasRoundLength)
243250
]
244251

245252
decode = do
246-
enforceSize "EraParams" 4
253+
enforceSize "EraParams" 5
247254
eraEpochSize <- EpochSize <$> decode
248255
eraSlotLength <- decode
249256
eraSafeZone <- decode
250257
eraGenesisWin <- GenesisWindow <$> decode
258+
eraPerasRoundLength <- PerasRoundLength <$> decode
251259
return EraParams{..}

ouroboros-consensus/src/ouroboros-consensus/Ouroboros/Consensus/HardFork/History/Summary.hs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -219,8 +219,8 @@ newtype Summary xs = Summary {getSummary :: NonEmpty xs EraSummary}
219219
-------------------------------------------------------------------------------}
220220

221221
-- | 'Summary' for a ledger that never forks
222-
neverForksSummary :: EpochSize -> SlotLength -> GenesisWindow -> Summary '[x]
223-
neverForksSummary epochSize slotLen genesisWindow =
222+
neverForksSummary :: EpochSize -> SlotLength -> GenesisWindow -> PerasRoundLength -> Summary '[x]
223+
neverForksSummary epochSize slotLen genesisWindow perasRoundLength =
224224
Summary $
225225
NonEmptyOne $
226226
EraSummary
@@ -232,6 +232,7 @@ neverForksSummary epochSize slotLen genesisWindow =
232232
, eraSlotLength = slotLen
233233
, eraSafeZone = UnsafeIndefiniteSafeZone
234234
, eraGenesisWin = genesisWindow
235+
, eraPerasRoundLength = perasRoundLength
235236
}
236237
}
237238

ouroboros-consensus/src/unstable-consensus-testlib/Test/Ouroboros/Storage/TestBlock.hs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -750,6 +750,8 @@ mkTestConfig k ChunkSize{chunkCanContainEBB, numRegularBlocks} =
750750
, eraSlotLength = slotLength
751751
, eraSafeZone = HardFork.StandardSafeZone (unNonZero (maxRollbacks k) * 2)
752752
, eraGenesisWin = GenesisWindow (unNonZero (maxRollbacks k) * 2)
753+
, -- TODO(geo2a): revise this value
754+
eraPerasRoundLength = defaultPerasRoundLength
753755
}
754756

755757
instance ImmutableEraParams TestBlock where

ouroboros-consensus/src/unstable-consensus-testlib/Test/Util/Orphans/Arbitrary.hs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -310,8 +310,13 @@ instance
310310
-------------------------------------------------------------------------------}
311311

312312
instance Arbitrary EraParams where
313-
arbitrary = EraParams <$> arbitrary <*> arbitrary <*> arbitrary <*> (GenesisWindow <$> arbitrary)
314-
313+
arbitrary =
314+
EraParams
315+
<$> arbitrary
316+
<*> arbitrary
317+
<*> arbitrary
318+
<*> (GenesisWindow <$> arbitrary)
319+
<*> (PerasRoundLength <$> arbitrary)
315320
instance Arbitrary SafeZone where
316321
arbitrary =
317322
oneof

ouroboros-consensus/test/consensus-test/Test/Consensus/HardFork/Infra.hs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import Ouroboros.Consensus.Block
3737
import Ouroboros.Consensus.BlockchainTime
3838
import qualified Ouroboros.Consensus.HardFork.History as HF
3939
import Test.QuickCheck
40+
import Ouroboros.Consensus.HardFork.History.EraParams (EraParams(eraPerasRoundLength))
4041

4142
{-------------------------------------------------------------------------------
4243
Generate hard fork shape
@@ -121,6 +122,8 @@ genEraParams = do
121122
eraSlotLength <- slotLengthFromSec <$> choose (1, 5)
122123
eraSafeZone <- genSafeZone
123124
eraGenesisWin <- GenesisWindow <$> choose (1, 10)
125+
-- TODO(geo2a): revise this value, needs to divide epoch size
126+
eraPerasRoundLength <- PerasRoundLength <$> choose (1, 10)
124127
return HF.EraParams{..}
125128
where
126129
genSafeZone :: Gen HF.SafeZone

0 commit comments

Comments
 (0)