Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Synopsis
- data BlockForging m blk = BlockForging {
- forgeLabel ∷ Text
- canBeLeader ∷ CanBeLeader (BlockProtocol blk)
- updateForgeState ∷ TopLevelConfig blk → SlotNo → Ticked (ChainDepState (BlockProtocol blk)) → m (ForgeStateUpdateInfo blk)
- checkCanForge ∷ TopLevelConfig blk → SlotNo → Ticked (ChainDepState (BlockProtocol blk)) → IsLeader (BlockProtocol blk) → ForgeStateInfo blk → Either (CannotForge blk) ()
- forgeBlock ∷ TopLevelConfig blk → BlockNo → SlotNo → TickedLedgerState blk → [Validated (GenTx blk)] → IsLeader (BlockProtocol blk) → m blk
- type family CannotForge blk ∷ Type
- type family ForgeStateInfo blk ∷ Type
- type family ForgeStateUpdateError blk ∷ Type
- data ForgeStateUpdateInfo blk
- data ShouldForge blk
- = ForgeStateUpdateError (ForgeStateUpdateError blk)
- | CannotForge (CannotForge blk)
- | NotLeader
- | ShouldForge (IsLeader (BlockProtocol blk))
- castForgeStateUpdateInfo ∷ (ForgeStateInfo blk ~ ForgeStateInfo blk', ForgeStateUpdateError blk ~ ForgeStateUpdateError blk') ⇒ ForgeStateUpdateInfo blk → ForgeStateUpdateInfo blk'
- checkShouldForge ∷ ∀ m blk. (Monad m, ConsensusProtocol (BlockProtocol blk), HasCallStack) ⇒ BlockForging m blk → Tracer m (ForgeStateInfo blk) → TopLevelConfig blk → SlotNo → Ticked (ChainDepState (BlockProtocol blk)) → m (ShouldForge blk)
- forgeStateUpdateInfoFromUpdateInfo ∷ UpdateInfo (ForgeStateInfo blk) (ForgeStateUpdateError blk) → ForgeStateUpdateInfo blk
- data UpdateInfo updated failed
- = Updated updated
- | UpdateFailed failed
Documentation
data BlockForging m blk Source #
Stateful wrapper around block production
NOTE: do not refer to the consensus or ledger config in the closure of this
record because they might contain an EpochInfo Identity
, which will be
incorrect when used as part of the hard fork combinator.
BlockForging | |
|
Instances
Functor m ⇒ Isomorphic (BlockForging m) Source # | |
Defined in Ouroboros.Consensus.HardFork.Combinator.Embed.Unary project ∷ NoHardForks blk ⇒ BlockForging m (HardForkBlock '[blk]) → BlockForging m blk Source # inject ∷ NoHardForks blk ⇒ BlockForging m blk → BlockForging m (HardForkBlock '[blk]) Source # |
type family CannotForge blk ∷ Type Source #
Information about why we cannot forge a block, although we are a leader
This should happen only rarely. An example might be that our hot key does not (yet/anymore) match the delegation state.
Instances
type CannotForge (HardForkBlock xs) Source # | |
type CannotForge (DualBlock m a) Source # | |
Defined in Ouroboros.Consensus.Ledger.Dual |
type family ForgeStateInfo blk ∷ Type Source #
Returned when a call to updateForgeState
succeeded and caused the forge
state to change. This info is traced.
Instances
type ForgeStateInfo (HardForkBlock xs) Source # | |
type ForgeStateInfo (DualBlock m a) Source # | |
Defined in Ouroboros.Consensus.Ledger.Dual |
type family ForgeStateUpdateError blk ∷ Type Source #
Returned when a call updateForgeState
failed, e.g., because the KES key
is no longer valid. This info is traced.
Instances
type ForgeStateUpdateError (HardForkBlock xs) Source # | |
type ForgeStateUpdateError (DualBlock m a) Source # | |
Defined in Ouroboros.Consensus.Ledger.Dual |
data ForgeStateUpdateInfo blk Source #
The result of updateForgeState
.
Note: the forge state itself is implicit and not reflected in the types.
ForgeStateUpdated (ForgeStateInfo blk) | NB The update might have not changed the forge state. |
ForgeStateUpdateFailed (ForgeStateUpdateError blk) | |
ForgeStateUpdateSuppressed | A node was prevented from forging for an artificial reason, such as testing, benchmarking, etc. It's artificial in that this constructor should never occur in a production deployment. |
Instances
Isomorphic ForgeStateUpdateInfo Source # | |
Defined in Ouroboros.Consensus.HardFork.Combinator.Embed.Unary project ∷ NoHardForks blk ⇒ ForgeStateUpdateInfo (HardForkBlock '[blk]) → ForgeStateUpdateInfo blk Source # inject ∷ NoHardForks blk ⇒ ForgeStateUpdateInfo blk → ForgeStateUpdateInfo (HardForkBlock '[blk]) Source # | |
(Show (ForgeStateInfo blk), Show (ForgeStateUpdateError blk)) ⇒ Show (ForgeStateUpdateInfo blk) Source # | |
Defined in Ouroboros.Consensus.Block.Forging showsPrec ∷ Int → ForgeStateUpdateInfo blk → ShowS # show ∷ ForgeStateUpdateInfo blk → String # showList ∷ [ForgeStateUpdateInfo blk] → ShowS # |
data ShouldForge blk Source #
ForgeStateUpdateError (ForgeStateUpdateError blk) | Before check whether we are a leader in this slot, we tried to update
our forge state ( E.g., we could not evolve our KES key. |
CannotForge (CannotForge blk) | We are a leader in this slot, but we cannot forge for a certain reason. E.g., our KES key is not yet valid in this slot or we are not the current delegate of the genesis key we have a delegation certificate from. |
NotLeader | We are not a leader in this slot |
ShouldForge (IsLeader (BlockProtocol blk)) | We are a leader in this slot and we should forge a block. |
castForgeStateUpdateInfo ∷ (ForgeStateInfo blk ~ ForgeStateInfo blk', ForgeStateUpdateError blk ~ ForgeStateUpdateError blk') ⇒ ForgeStateUpdateInfo blk → ForgeStateUpdateInfo blk' Source #
checkShouldForge ∷ ∀ m blk. (Monad m, ConsensusProtocol (BlockProtocol blk), HasCallStack) ⇒ BlockForging m blk → Tracer m (ForgeStateInfo blk) → TopLevelConfig blk → SlotNo → Ticked (ChainDepState (BlockProtocol blk)) → m (ShouldForge blk) Source #
forgeStateUpdateInfoFromUpdateInfo ∷ UpdateInfo (ForgeStateInfo blk) (ForgeStateUpdateError blk) → ForgeStateUpdateInfo blk Source #
Embed UpdateInfo
into ForgeStateUpdateInfo
UpdateInfo
data UpdateInfo updated failed Source #
The result of updating something, e.g., the forge state.
Updated updated | NOTE: The update may have induced no change. |
UpdateFailed failed |
Instances
(Show updated, Show failed) ⇒ Show (UpdateInfo updated failed) Source # | |
Defined in Ouroboros.Consensus.Block.Forging showsPrec ∷ Int → UpdateInfo updated failed → ShowS # show ∷ UpdateInfo updated failed → String # showList ∷ [UpdateInfo updated failed] → ShowS # |