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

Ouroboros.Consensus.HardFork.Combinator.Protocol.ChainSel

Description

Infrastructure for doing chain selection across eras

Documentation

data AcrossEraSelection :: Type -> Type -> Type where Source #

Constructors

CompareBlockNo :: AcrossEraSelection x y

Just compare block numbers

This is a useful default when two eras run totally different consensus protocols, and we just want to choose the longer chain.

SelectSameProtocol :: BlockProtocol x ~ BlockProtocol y => AcrossEraSelection x y

Two eras running the same protocol

In this case, we can just call compareCandidates even across eras. (The ChainSelConfig must also be the same in both eras: we assert this at the value level.)

NOTE: We require that the eras have the same protocol, not merely the same SelectView, because if we have two eras with different protocols that happen to use the same SelectView but a different way to compare chains, it's not clear how to do cross-era selection.

CustomChainSel :: (ChainSelConfig (BlockProtocol x) -> ChainSelConfig (BlockProtocol y) -> SelectView (BlockProtocol x) -> SelectView (BlockProtocol y) -> Ordering) -> AcrossEraSelection x y

Custom chain selection

This is the most general form, and allows to override chain selection for the specific combination of two eras with a custom comparison function.

data WithBlockNo (f :: k -> Type) (a :: k) Source #

Constructors

WithBlockNo 

Fields

Instances

Instances details
Show (f a) => Show (WithBlockNo f a) Source # 
Instance details

Defined in Ouroboros.Consensus.HardFork.Combinator.Protocol.ChainSel

Methods

showsPrec :: Int -> WithBlockNo f a -> ShowS #

show :: WithBlockNo f a -> String #

showList :: [WithBlockNo f a] -> ShowS #

mapWithBlockNo :: (f x -> g y) -> WithBlockNo f x -> WithBlockNo g y Source #