ouroboros-consensus-0.1.0.0: Consensus layer for the Ouroboros blockchain protocol
Safe HaskellNone
LanguageHaskell2010

Ouroboros.Consensus.Block.Forging

Synopsis

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.

Constructors

BlockForging 

Fields

Instances

Instances details
Functor m ⇒ Isomorphic (BlockForging m) Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Embed.Unary

Methods

projectNoHardForks blk ⇒ BlockForging m (HardForkBlock '[blk]) → BlockForging m blk Source #

injectNoHardForks 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

Instances details
type CannotForge (HardForkBlock xs) Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Forging

type CannotForge (DualBlock m a) Source # 
Instance details

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.

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.

data ForgeStateUpdateInfo blk Source #

The result of updateForgeState.

Note: the forge state itself is implicit and not reflected in the types.

Constructors

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.

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 (updateForgeState), but it failed. We will not check whether we are leader and will thus not forge a block either.

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 ∷ ∀ m blk. (Monad m, ConsensusProtocol (BlockProtocol blk), HasCallStack) ⇒ BlockForging m blk → Tracer m (ForgeStateInfo blk) → TopLevelConfig blk → SlotNoTicked (ChainDepState (BlockProtocol blk)) → m (ShouldForge blk) Source #

UpdateInfo

data UpdateInfo updated failed Source #

The result of updating something, e.g., the forge state.

Constructors

Updated updated

NOTE: The update may have induced no change.

UpdateFailed failed 

Instances

Instances details
(Show updated, Show failed) ⇒ Show (UpdateInfo updated failed) Source # 
Instance details

Defined in Ouroboros.Consensus.Block.Forging

Methods

showsPrecIntUpdateInfo updated failed → ShowS Source #

showUpdateInfo updated failed → String Source #

showList ∷ [UpdateInfo updated failed] → ShowS Source #

Selecting transaction sequence prefixes

takeLargestPrefixThatFitsTxLimits 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.