| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Ouroboros.Consensus.HardFork.History.EraParams
Synopsis
- data EraParams = EraParams {}
- data SafeZone
- data SafeBeforeEpoch
- noLowerBoundSafeZone :: Word64 -> SafeZone
- defaultEraParams :: SecurityParam -> SlotLength -> EraParams
- safeBeforeEpoch :: SafeZone -> Maybe SafeBeforeEpoch
- maxSafeBeforeEpoch :: SafeBeforeEpoch -> EpochNo -> EpochNo
API
Parameters that can vary across hard forks
Constructors
| EraParams | |
Fields
| |
Instances
| Eq EraParams Source # | |
| Show EraParams Source # | |
| Generic EraParams Source # | |
| NoThunks EraParams Source # | |
| Serialise EraParams Source # | |
| type Rep EraParams Source # | |
Defined in Ouroboros.Consensus.HardFork.History.EraParams type Rep EraParams = D1 ('MetaData "EraParams" "Ouroboros.Consensus.HardFork.History.EraParams" "ouroboros-consensus-0.1.0.0-GfJNvFcM6lj2s5utKAUPEp" 'False) (C1 ('MetaCons "EraParams" 'PrefixI 'True) (S1 ('MetaSel ('Just "eraEpochSize") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 EpochSize) :*: (S1 ('MetaSel ('Just "eraSlotLength") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 SlotLength) :*: S1 ('MetaSel ('Just "eraSafeZone") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 SafeZone)))) | |
Zone in which it is guaranteed that no hard fork can take place
Constructors
| StandardSafeZone !Word64 !SafeBeforeEpoch | Standard safe zone We record
|
| UnsafeIndefiniteSafeZone | Pretend the transition to the next era will not take place. This constructor is marked as unsafe because it effectively extends the safe zone of this era indefinitely into the future. This means that we might reach invalid conclusions when doing
This is safe when the code is simply not yet ready to transition to the next era, because in that case, we can be sure that blocks that come in are still from this era. It also means that we can always produce a block, no matter how far ahead of the current ledger we are. If the code is ready for the transition, just awaiting an update
proposal, then This constructor can be regarded as an " extreme " version of
|
Instances
| Eq SafeZone Source # | |
| Show SafeZone Source # | |
| Generic SafeZone Source # | |
| NoThunks SafeZone Source # | |
| Serialise SafeZone Source # | |
| type Rep SafeZone Source # | |
Defined in Ouroboros.Consensus.HardFork.History.EraParams type Rep SafeZone = D1 ('MetaData "SafeZone" "Ouroboros.Consensus.HardFork.History.EraParams" "ouroboros-consensus-0.1.0.0-GfJNvFcM6lj2s5utKAUPEp" 'False) (C1 ('MetaCons "StandardSafeZone" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Word64) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 SafeBeforeEpoch)) :+: C1 ('MetaCons "UnsafeIndefiniteSafeZone" 'PrefixI 'False) (U1 :: Type -> Type)) | |
data SafeBeforeEpoch Source #
Lower bound on when a transition can take place
Constructors
| NoLowerBound | No such lower bound is known |
| LowerBound !EpochNo |
Often such a value is available, since a new era is planned only after the current era has already been running for a while. For example, at the time of writing, we know the Byron to Shelley transition cannot happen before epoch 180, since we are currently already in epoch 179. Moreover, for epoch transitions that have already taken place, the
exact Providing this value is strictly an optimization; for example, it will
reduce the frequency with which |
Instances
noLowerBoundSafeZone :: Word64 -> SafeZone Source #
The safe zone with given safeFromTip and NoLowerBound
Defaults
defaultEraParams :: SecurityParam -> SlotLength -> EraParams Source #
Default EraParams
We set
- epoch size to
10kslots - the safe zone to
2kslots - the upper bound to
NoLowerBound
This is primarily useful for tests.
Queries
safeBeforeEpoch :: SafeZone -> Maybe SafeBeforeEpoch Source #
Returns Nothing if the era is unbounded.
maxSafeBeforeEpoch :: SafeBeforeEpoch -> EpochNo -> EpochNo Source #