Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
-
class
(
BlockSupportsProtocol
blk,
UpdateLedger
blk,
ValidateEnvelope
blk) =>
LedgerSupportsProtocol
blk
where
- protocolLedgerView :: LedgerConfig blk -> Ticked ( LedgerState blk) -> Ticked ( LedgerView ( BlockProtocol blk))
- ledgerViewForecastAt :: HasCallStack => LedgerConfig blk -> LedgerState blk -> Forecast ( LedgerView ( BlockProtocol blk))
Documentation
class ( BlockSupportsProtocol blk, UpdateLedger blk, ValidateEnvelope blk) => LedgerSupportsProtocol blk where Source #
Link protocol to ledger
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
.
Instances
CanHardFork xs => LedgerSupportsProtocol ( HardForkBlock xs) Source # | |
Defined in Ouroboros.Consensus.HardFork.Combinator.Ledger protocolLedgerView :: LedgerConfig ( HardForkBlock xs) -> Ticked ( LedgerState ( HardForkBlock xs)) -> Ticked ( LedgerView ( BlockProtocol ( HardForkBlock xs))) Source # ledgerViewForecastAt :: LedgerConfig ( HardForkBlock xs) -> LedgerState ( HardForkBlock xs) -> Forecast ( LedgerView ( BlockProtocol ( HardForkBlock xs))) Source # |
|
Bridge m a => LedgerSupportsProtocol ( DualBlock m a) Source # | |
Defined in Ouroboros.Consensus.Ledger.Dual protocolLedgerView :: LedgerConfig ( DualBlock m a) -> Ticked ( LedgerState ( DualBlock m a)) -> Ticked ( LedgerView ( BlockProtocol ( DualBlock m a))) Source # ledgerViewForecastAt :: LedgerConfig ( DualBlock m a) -> LedgerState ( DualBlock m a) -> Forecast ( LedgerView ( BlockProtocol ( DualBlock m a))) Source # |