| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Ouroboros.Consensus.Block.Forging
Contents
Synopsis
- type family CannotForge blk :: Type
- type family ForgeStateInfo blk :: Type
- type family ForgeStateUpdateError blk :: Type
- newtype ForgeStateUpdateInfo blk = ForgeStateUpdateInfo {
- getForgeStateUpdateInfo :: UpdateInfo (ForgeStateInfo blk) (ForgeStateInfo blk) (ForgeStateUpdateError blk)
- castForgeStateUpdateInfo :: (ForgeStateInfo blk ~ ForgeStateInfo blk', ForgeStateUpdateError blk ~ ForgeStateUpdateError blk') => ForgeStateUpdateInfo blk -> ForgeStateUpdateInfo blk'
- data BlockForging m blk = BlockForging {
- forgeLabel :: Text
- canBeLeader :: CanBeLeader (BlockProtocol blk)
- updateForgeState :: SlotNo -> m (ForgeStateUpdateInfo blk)
- checkCanForge :: forall p. BlockProtocol blk ~ p => TopLevelConfig blk -> SlotNo -> Ticked (ChainDepState p) -> IsLeader p -> ForgeStateInfo blk -> Either (CannotForge blk) ()
- forgeBlock :: TopLevelConfig blk -> BlockNo -> SlotNo -> TickedLedgerState blk -> [GenTx blk] -> IsLeader (BlockProtocol blk) -> m blk
- data ShouldForge blk
- = ForgeStateUpdateError (ForgeStateUpdateError blk)
- | CannotForge (CannotForge blk)
- | NotLeader
- | ShouldForge (IsLeader (BlockProtocol blk))
- checkShouldForge :: forall 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)
- data UpdateInfo updated unchanged failed
- = Updated updated
- | Unchanged unchanged
- | UpdateFailed failed
- castUpdateInfo :: (updated ~ updated', unchanged ~ unchanged', failed ~ failed') => UpdateInfo updated unchanged failed -> UpdateInfo updated' unchanged' failed'
Documentation
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 | |
newtype ForgeStateUpdateInfo blk Source #
The result of updateForgeState.
Note: the forge state itself is implicit and not reflected in the types.
Constructors
| ForgeStateUpdateInfo | |
Fields
| |
Instances
| Isomorphic ForgeStateUpdateInfo Source # | |
Defined in Ouroboros.Consensus.HardFork.Combinator.Unary Methods 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 Methods showsPrec :: Int -> ForgeStateUpdateInfo blk -> ShowS # show :: ForgeStateUpdateInfo blk -> String # showList :: [ForgeStateUpdateInfo blk] -> ShowS # | |
castForgeStateUpdateInfo :: (ForgeStateInfo blk ~ ForgeStateInfo blk', ForgeStateUpdateError blk ~ ForgeStateUpdateError blk') => ForgeStateUpdateInfo blk -> ForgeStateUpdateInfo blk' Source #
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.
Constructors
| BlockForging | |
Fields
| |
Instances
| Functor m => Isomorphic (BlockForging m) Source # | |
Defined in Ouroboros.Consensus.HardFork.Combinator.Unary Methods project :: NoHardForks blk => BlockForging m (HardForkBlock '[blk]) -> BlockForging m blk Source # inject :: NoHardForks blk => BlockForging m blk -> BlockForging m (HardForkBlock '[blk]) Source # | |
data ShouldForge blk Source #
Constructors
| 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. |
checkShouldForge :: forall 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 #
UpdateInfo
data UpdateInfo updated unchanged failed Source #
The result of updating something, e.g., the forge state.
Constructors
| Updated updated | |
| Unchanged unchanged | |
| UpdateFailed failed |
Instances
| (Show updated, Show unchanged, Show failed) => Show (UpdateInfo updated unchanged failed) Source # | |
Defined in Ouroboros.Consensus.Block.Forging Methods showsPrec :: Int -> UpdateInfo updated unchanged failed -> ShowS # show :: UpdateInfo updated unchanged failed -> String # showList :: [UpdateInfo updated unchanged failed] -> ShowS # | |
castUpdateInfo :: (updated ~ updated', unchanged ~ unchanged', failed ~ failed') => UpdateInfo updated unchanged failed -> UpdateInfo updated' unchanged' failed' Source #