ouroboros-consensus-0.1.0.1: Consensus layer for the Ouroboros blockchain protocol
Safe Haskell None
Language Haskell2010

Ouroboros.Consensus.Ledger.SupportsProtocol

Synopsis

Documentation

class ( BlockSupportsProtocol blk, UpdateLedger blk, ValidateEnvelope blk) => LedgerSupportsProtocol blk where Source #

Link protocol to ledger

Methods

protocolLedgerView :: LedgerConfig blk -> Ticked ( LedgerState blk) -> Ticked ( LedgerView ( BlockProtocol blk)) Source #

Extract ticked ledger view from ticked ledger state

See ledgerViewForecastAt for a discussion and precise definition of the relation between this and forecasting.

ledgerViewForecastAt :: HasCallStack => LedgerConfig blk -> LedgerState blk -> Forecast ( LedgerView ( BlockProtocol blk)) Source #

Get a forecast at the given ledger state.

This forecast can be used to validate headers of blocks within the range of the forecast. These blocks need to live on a chain that fits on the last applied block of the given ledger.

The range of the forecast should allow to validate a sufficient number of headers to validate an alternative chain longer than ours, so that chain selection can decide whether or not we prefer the alternative chain to our current chain. In addition, it would be helpful, though not essential, if we can look further ahead than that, as this would improve sync performance.

NOTE (difference between ledgerViewForecastAt and applyChainTick ): Both ledgerViewForecastAt and applyChainTick can be used to obtain a protocol ledger view for a future slot. The difference between the two is that applyChainTick assumes no blocks are present between the current ledger tip and the specified SlotNo , whereas ledgerViewForecastAt cannot make such an assumption. Thus, applyChainTick cannot fail, whereas the forecast returned by ledgerViewForecastAt might report an OutsideForecastRange for the same SlotNo . We expect the two functions to produce the same view whenever the SlotNo is in range, however. More precisely:

If

   forecastFor (ledgerViewForecastAt cfg st) for
== Just view

then

   protocolLedgerView cfg (applyChainTick cfg for st)
== view

See lemma_ledgerViewForecastAt_applyChainTick .