Safe Haskell | None |
---|---|
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 :: 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)
- forgeStateUpdateInfoFromUpdateInfo :: UpdateInfo ( ForgeStateInfo blk) ( ForgeStateUpdateError blk) -> ForgeStateUpdateInfo blk
-
data
UpdateInfo
updated failed
- = Updated updated
- | UpdateFailed failed
- takeLargestPrefixThatFits :: TxLimits blk => Overrides blk -> TickedLedgerState blk -> [ Validated ( GenTx blk)] -> [ Validated ( GenTx blk)]
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 |
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 :: 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 #
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 |
Selecting transaction sequence prefixes
takeLargestPrefixThatFits :: TxLimits blk => Overrides blk -> TickedLedgerState blk -> [ Validated ( GenTx blk)] -> [ Validated ( GenTx blk)] Source #
The prefix of transactions to include in the block
Filters out all transactions that do not fit the maximum size of total
transactions in a single block, which is determined by querying the ledger
state for the current limit and the given override. The result is the
pointwise minimum of the ledger-specific capacity and the result of the
override. In other words, the override can only reduce (parts of) the
TxMeasure
.