{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE NamedFieldPuns #-}
module Ouroboros.Cardano.Network.PeerSelection.Governor.Types where
import Cardano.Network.ConsensusMode (ConsensusMode (..))
import Cardano.Network.PeerSelection.Bootstrap (UseBootstrapPeers (..),
requiresBootstrapPeers)
import Cardano.Network.PeerSelection.LocalRootPeers
(OutboundConnectionsState (..))
import Cardano.Network.PeerSelection.PeerTrustable (PeerTrustable)
import Cardano.Network.Types (LedgerStateJudgement (..),
getNumberOfBigLedgerPeers)
import Control.Applicative (Alternative)
import Control.Concurrent.Class.MonadSTM
import Data.Set (Set)
import Data.Set qualified as Set
import Ouroboros.Cardano.Network.LedgerPeerConsensusInterface qualified as Cardano
import Ouroboros.Cardano.Network.PeerSelection.Governor.Monitor
(monitorBootstrapPeersFlag, monitorLedgerStateJudgement,
waitForSystemToQuiesce)
import Ouroboros.Cardano.Network.PeerSelection.Governor.Monitor qualified as Cardano
import Ouroboros.Cardano.Network.PeerSelection.Governor.PeerSelectionActions qualified as Cardano
import Ouroboros.Cardano.Network.PeerSelection.Governor.PeerSelectionState qualified as Cardano
import Ouroboros.Cardano.Network.PublicRootPeers qualified as Cardano
import Ouroboros.Network.PeerSelection.Governor (readAssociationMode)
import Ouroboros.Network.PeerSelection.Governor.Types (AssociationMode (..),
BootstrapPeersCriticalTimeoutError (..), ExtraGuardedDecisions (..),
PeerSelectionActions (..), PeerSelectionGovernorArgs (..),
PeerSelectionInterfaces (..), PeerSelectionSetsWithSizes,
PeerSelectionState (..), PeerSelectionView (..))
import Ouroboros.Network.PeerSelection.LedgerPeers
(LedgerPeersConsensusInterface (lpExtraAPI))
import Ouroboros.Network.PeerSelection.PublicRootPeers qualified as PublicRootPeers
import Ouroboros.Network.PeerSelection.State.EstablishedPeers qualified as EstablishedPeers
import Ouroboros.Network.PeerSelection.State.LocalRootPeers qualified as LocalRootPeers
data peeraddr =
{
forall peeraddr.
ExtraPeerSelectionSetsWithSizes peeraddr -> (Set peeraddr, Int)
viewKnownBootstrapPeers :: (Set peeraddr, Int)
, forall peeraddr.
ExtraPeerSelectionSetsWithSizes peeraddr -> (Set peeraddr, Int)
viewColdBootstrapPeersPromotions :: (Set peeraddr, Int)
, forall peeraddr.
ExtraPeerSelectionSetsWithSizes peeraddr -> (Set peeraddr, Int)
viewEstablishedBootstrapPeers :: (Set peeraddr, Int)
, forall peeraddr.
ExtraPeerSelectionSetsWithSizes peeraddr -> (Set peeraddr, Int)
viewWarmBootstrapPeersDemotions :: (Set peeraddr, Int)
, forall peeraddr.
ExtraPeerSelectionSetsWithSizes peeraddr -> (Set peeraddr, Int)
viewWarmBootstrapPeersPromotions :: (Set peeraddr, Int)
, forall peeraddr.
ExtraPeerSelectionSetsWithSizes peeraddr -> (Set peeraddr, Int)
viewActiveBootstrapPeers :: (Set peeraddr, Int)
, forall peeraddr.
ExtraPeerSelectionSetsWithSizes peeraddr -> (Set peeraddr, Int)
viewActiveBootstrapPeersDemotions :: (Set peeraddr, Int)
} deriving (ExtraPeerSelectionSetsWithSizes peeraddr
-> ExtraPeerSelectionSetsWithSizes peeraddr -> Bool
(ExtraPeerSelectionSetsWithSizes peeraddr
-> ExtraPeerSelectionSetsWithSizes peeraddr -> Bool)
-> (ExtraPeerSelectionSetsWithSizes peeraddr
-> ExtraPeerSelectionSetsWithSizes peeraddr -> Bool)
-> Eq (ExtraPeerSelectionSetsWithSizes peeraddr)
forall peeraddr.
Eq peeraddr =>
ExtraPeerSelectionSetsWithSizes peeraddr
-> ExtraPeerSelectionSetsWithSizes peeraddr -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall peeraddr.
Eq peeraddr =>
ExtraPeerSelectionSetsWithSizes peeraddr
-> ExtraPeerSelectionSetsWithSizes peeraddr -> Bool
== :: ExtraPeerSelectionSetsWithSizes peeraddr
-> ExtraPeerSelectionSetsWithSizes peeraddr -> Bool
$c/= :: forall peeraddr.
Eq peeraddr =>
ExtraPeerSelectionSetsWithSizes peeraddr
-> ExtraPeerSelectionSetsWithSizes peeraddr -> Bool
/= :: ExtraPeerSelectionSetsWithSizes peeraddr
-> ExtraPeerSelectionSetsWithSizes peeraddr -> Bool
Eq, Int -> ExtraPeerSelectionSetsWithSizes peeraddr -> ShowS
[ExtraPeerSelectionSetsWithSizes peeraddr] -> ShowS
ExtraPeerSelectionSetsWithSizes peeraddr -> String
(Int -> ExtraPeerSelectionSetsWithSizes peeraddr -> ShowS)
-> (ExtraPeerSelectionSetsWithSizes peeraddr -> String)
-> ([ExtraPeerSelectionSetsWithSizes peeraddr] -> ShowS)
-> Show (ExtraPeerSelectionSetsWithSizes peeraddr)
forall peeraddr.
Show peeraddr =>
Int -> ExtraPeerSelectionSetsWithSizes peeraddr -> ShowS
forall peeraddr.
Show peeraddr =>
[ExtraPeerSelectionSetsWithSizes peeraddr] -> ShowS
forall peeraddr.
Show peeraddr =>
ExtraPeerSelectionSetsWithSizes peeraddr -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall peeraddr.
Show peeraddr =>
Int -> ExtraPeerSelectionSetsWithSizes peeraddr -> ShowS
showsPrec :: Int -> ExtraPeerSelectionSetsWithSizes peeraddr -> ShowS
$cshow :: forall peeraddr.
Show peeraddr =>
ExtraPeerSelectionSetsWithSizes peeraddr -> String
show :: ExtraPeerSelectionSetsWithSizes peeraddr -> String
$cshowList :: forall peeraddr.
Show peeraddr =>
[ExtraPeerSelectionSetsWithSizes peeraddr] -> ShowS
showList :: [ExtraPeerSelectionSetsWithSizes peeraddr] -> ShowS
Show)
empty :: ExtraPeerSelectionSetsWithSizes peeraddr
empty :: forall peeraddr. ExtraPeerSelectionSetsWithSizes peeraddr
empty = ExtraPeerSelectionSetsWithSizes {
viewKnownBootstrapPeers :: (Set peeraddr, Int)
viewKnownBootstrapPeers = (Set peeraddr
forall a. Set a
Set.empty, Int
0)
, viewColdBootstrapPeersPromotions :: (Set peeraddr, Int)
viewColdBootstrapPeersPromotions = (Set peeraddr
forall a. Set a
Set.empty, Int
0)
, viewEstablishedBootstrapPeers :: (Set peeraddr, Int)
viewEstablishedBootstrapPeers = (Set peeraddr
forall a. Set a
Set.empty, Int
0)
, viewWarmBootstrapPeersDemotions :: (Set peeraddr, Int)
viewWarmBootstrapPeersDemotions = (Set peeraddr
forall a. Set a
Set.empty, Int
0)
, viewWarmBootstrapPeersPromotions :: (Set peeraddr, Int)
viewWarmBootstrapPeersPromotions = (Set peeraddr
forall a. Set a
Set.empty, Int
0)
, viewActiveBootstrapPeers :: (Set peeraddr, Int)
viewActiveBootstrapPeers = (Set peeraddr
forall a. Set a
Set.empty, Int
0)
, viewActiveBootstrapPeersDemotions :: (Set peeraddr, Int)
viewActiveBootstrapPeersDemotions = (Set peeraddr
forall a. Set a
Set.empty, Int
0)
}
cardanoPeerSelectionStatetoCounters
:: Ord peeraddr
=> PeerSelectionState
extraState
extraFlags
(Cardano.ExtraPeers peeraddr)
peeraddr
peerconn
-> ExtraPeerSelectionSetsWithSizes peeraddr
cardanoPeerSelectionStatetoCounters :: forall peeraddr extraState extraFlags peerconn.
Ord peeraddr =>
PeerSelectionState
extraState extraFlags (ExtraPeers peeraddr) peeraddr peerconn
-> ExtraPeerSelectionSetsWithSizes peeraddr
cardanoPeerSelectionStatetoCounters
PeerSelectionState {
EstablishedPeers peeraddr peerconn
establishedPeers :: EstablishedPeers peeraddr peerconn
establishedPeers :: forall extraState extraFlags extraPeers peeraddr peerconn.
PeerSelectionState
extraState extraFlags extraPeers peeraddr peerconn
-> EstablishedPeers peeraddr peerconn
establishedPeers,
Set peeraddr
activePeers :: Set peeraddr
activePeers :: forall extraState extraFlags extraPeers peeraddr peerconn.
PeerSelectionState
extraState extraFlags extraPeers peeraddr peerconn
-> Set peeraddr
activePeers,
PublicRootPeers (ExtraPeers peeraddr) peeraddr
publicRootPeers :: PublicRootPeers (ExtraPeers peeraddr) peeraddr
publicRootPeers :: forall extraState extraFlags extraPeers peeraddr peerconn.
PeerSelectionState
extraState extraFlags extraPeers peeraddr peerconn
-> PublicRootPeers extraPeers peeraddr
publicRootPeers,
Set peeraddr
inProgressPromoteCold :: Set peeraddr
inProgressPromoteCold :: forall extraState extraFlags extraPeers peeraddr peerconn.
PeerSelectionState
extraState extraFlags extraPeers peeraddr peerconn
-> Set peeraddr
inProgressPromoteCold,
Set peeraddr
inProgressPromoteWarm :: Set peeraddr
inProgressPromoteWarm :: forall extraState extraFlags extraPeers peeraddr peerconn.
PeerSelectionState
extraState extraFlags extraPeers peeraddr peerconn
-> Set peeraddr
inProgressPromoteWarm,
Set peeraddr
inProgressDemoteWarm :: Set peeraddr
inProgressDemoteWarm :: forall extraState extraFlags extraPeers peeraddr peerconn.
PeerSelectionState
extraState extraFlags extraPeers peeraddr peerconn
-> Set peeraddr
inProgressDemoteWarm,
Set peeraddr
inProgressDemoteHot :: Set peeraddr
inProgressDemoteHot :: forall extraState extraFlags extraPeers peeraddr peerconn.
PeerSelectionState
extraState extraFlags extraPeers peeraddr peerconn
-> Set peeraddr
inProgressDemoteHot
} =
ExtraPeerSelectionSetsWithSizes {
viewKnownBootstrapPeers :: (Set peeraddr, Int)
viewKnownBootstrapPeers = Set peeraddr -> (Set peeraddr, Int)
forall {a}. Set a -> (Set a, Int)
size Set peeraddr
knownBootstrapPeersSet
, viewColdBootstrapPeersPromotions :: (Set peeraddr, Int)
viewColdBootstrapPeersPromotions = Set peeraddr -> (Set peeraddr, Int)
forall {a}. Set a -> (Set a, Int)
size (Set peeraddr -> (Set peeraddr, Int))
-> Set peeraddr -> (Set peeraddr, Int)
forall a b. (a -> b) -> a -> b
$ Set peeraddr
knownBootstrapPeersSet
Set peeraddr -> Set peeraddr -> Set peeraddr
forall a. Ord a => Set a -> Set a -> Set a
`Set.intersection` Set peeraddr
inProgressPromoteCold
, viewEstablishedBootstrapPeers :: (Set peeraddr, Int)
viewEstablishedBootstrapPeers = Set peeraddr -> (Set peeraddr, Int)
forall {a}. Set a -> (Set a, Int)
size Set peeraddr
establishedBootstrapPeersSet
, viewWarmBootstrapPeersDemotions :: (Set peeraddr, Int)
viewWarmBootstrapPeersDemotions = Set peeraddr -> (Set peeraddr, Int)
forall {a}. Set a -> (Set a, Int)
size (Set peeraddr -> (Set peeraddr, Int))
-> Set peeraddr -> (Set peeraddr, Int)
forall a b. (a -> b) -> a -> b
$ Set peeraddr
establishedBootstrapPeersSet
Set peeraddr -> Set peeraddr -> Set peeraddr
forall a. Ord a => Set a -> Set a -> Set a
`Set.intersection` Set peeraddr
inProgressDemoteWarm
, viewWarmBootstrapPeersPromotions :: (Set peeraddr, Int)
viewWarmBootstrapPeersPromotions = Set peeraddr -> (Set peeraddr, Int)
forall {a}. Set a -> (Set a, Int)
size (Set peeraddr -> (Set peeraddr, Int))
-> Set peeraddr -> (Set peeraddr, Int)
forall a b. (a -> b) -> a -> b
$ Set peeraddr
establishedBootstrapPeersSet
Set peeraddr -> Set peeraddr -> Set peeraddr
forall a. Ord a => Set a -> Set a -> Set a
`Set.intersection` Set peeraddr
inProgressPromoteWarm
, viewActiveBootstrapPeers :: (Set peeraddr, Int)
viewActiveBootstrapPeers = Set peeraddr -> (Set peeraddr, Int)
forall {a}. Set a -> (Set a, Int)
size Set peeraddr
activeBootstrapPeersSet
, viewActiveBootstrapPeersDemotions :: (Set peeraddr, Int)
viewActiveBootstrapPeersDemotions = Set peeraddr -> (Set peeraddr, Int)
forall {a}. Set a -> (Set a, Int)
size (Set peeraddr -> (Set peeraddr, Int))
-> Set peeraddr -> (Set peeraddr, Int)
forall a b. (a -> b) -> a -> b
$ Set peeraddr
activeBootstrapPeersSet
Set peeraddr -> Set peeraddr -> Set peeraddr
forall a. Ord a => Set a -> Set a -> Set a
`Set.intersection` Set peeraddr
inProgressDemoteHot
}
where
size :: Set a -> (Set a, Int)
size Set a
s = (Set a
s, Set a -> Int
forall a. Set a -> Int
Set.size Set a
s)
establishedSet :: Set peeraddr
establishedSet = EstablishedPeers peeraddr peerconn -> Set peeraddr
forall peeraddr peerconn.
EstablishedPeers peeraddr peerconn -> Set peeraddr
EstablishedPeers.toSet EstablishedPeers peeraddr peerconn
establishedPeers
bigLedgerSet :: Set peeraddr
bigLedgerSet = PublicRootPeers (ExtraPeers peeraddr) peeraddr -> Set peeraddr
forall extraPeers peeraddr.
PublicRootPeers extraPeers peeraddr -> Set peeraddr
PublicRootPeers.getBigLedgerPeers PublicRootPeers (ExtraPeers peeraddr) peeraddr
publicRootPeers
establishedPeersSet :: Set peeraddr
establishedPeersSet = Set peeraddr
establishedSet Set peeraddr -> Set peeraddr -> Set peeraddr
forall a. Ord a => Set a -> Set a -> Set a
Set.\\ Set peeraddr
establishedBigLedgerPeersSet
activePeersSet :: Set peeraddr
activePeersSet = Set peeraddr
activePeers Set peeraddr -> Set peeraddr -> Set peeraddr
forall a. Ord a => Set a -> Set a -> Set a
Set.\\ Set peeraddr
activeBigLedgerPeersSet
establishedBigLedgerPeersSet :: Set peeraddr
establishedBigLedgerPeersSet = Set peeraddr
establishedSet Set peeraddr -> Set peeraddr -> Set peeraddr
forall a. Ord a => Set a -> Set a -> Set a
`Set.intersection` Set peeraddr
bigLedgerSet
activeBigLedgerPeersSet :: Set peeraddr
activeBigLedgerPeersSet = Set peeraddr
establishedBigLedgerPeersSet Set peeraddr -> Set peeraddr -> Set peeraddr
forall a. Ord a => Set a -> Set a -> Set a
`Set.intersection` Set peeraddr
activePeers
bootstrapSet :: Set peeraddr
bootstrapSet = PublicRootPeers (ExtraPeers peeraddr) peeraddr -> Set peeraddr
forall peeraddr.
PublicRootPeers (ExtraPeers peeraddr) peeraddr -> Set peeraddr
PublicRootPeers.getBootstrapPeers PublicRootPeers (ExtraPeers peeraddr) peeraddr
publicRootPeers
knownBootstrapPeersSet :: Set peeraddr
knownBootstrapPeersSet = Set peeraddr
bootstrapSet
establishedBootstrapPeersSet :: Set peeraddr
establishedBootstrapPeersSet = Set peeraddr
establishedPeersSet Set peeraddr -> Set peeraddr -> Set peeraddr
forall a. Ord a => Set a -> Set a -> Set a
`Set.intersection` Set peeraddr
bootstrapSet
activeBootstrapPeersSet :: Set peeraddr
activeBootstrapPeersSet = Set peeraddr
activePeersSet Set peeraddr -> Set peeraddr -> Set peeraddr
forall a. Ord a => Set a -> Set a -> Set a
`Set.intersection` Set peeraddr
bootstrapSet
outboundConnectionsState
:: Ord peeraddr
=> AssociationMode
-> PeerSelectionSetsWithSizes (ExtraPeerSelectionSetsWithSizes peeraddr) peeraddr
-> PeerSelectionState Cardano.ExtraState PeerTrustable extraPeers peeraddr peerconn
-> OutboundConnectionsState
outboundConnectionsState :: forall peeraddr extraPeers peerconn.
Ord peeraddr =>
AssociationMode
-> PeerSelectionSetsWithSizes
(ExtraPeerSelectionSetsWithSizes peeraddr) peeraddr
-> PeerSelectionState
ExtraState PeerTrustable extraPeers peeraddr peerconn
-> OutboundConnectionsState
outboundConnectionsState
AssociationMode
associationMode
PeerSelectionView {
viewEstablishedPeers :: forall extraViews a. PeerSelectionView extraViews a -> a
viewEstablishedPeers = (Set peeraddr
viewEstablishedPeers, Int
_),
viewActiveBigLedgerPeers :: forall extraViews a. PeerSelectionView extraViews a -> a
viewActiveBigLedgerPeers = (Set peeraddr
_, Int
activeNumBigLedgerPeers),
viewExtraViews :: forall extraViews a. PeerSelectionView extraViews a -> extraViews
viewExtraViews = ExtraPeerSelectionSetsWithSizes {
viewEstablishedBootstrapPeers :: forall peeraddr.
ExtraPeerSelectionSetsWithSizes peeraddr -> (Set peeraddr, Int)
viewEstablishedBootstrapPeers = (Set peeraddr
viewEstablishedBootstrapPeers, Int
_),
viewActiveBootstrapPeers :: forall peeraddr.
ExtraPeerSelectionSetsWithSizes peeraddr -> (Set peeraddr, Int)
viewActiveBootstrapPeers = (Set peeraddr
viewActiveBootstrapPeers, Int
_)
}
}
PeerSelectionState {
LocalRootPeers PeerTrustable peeraddr
localRootPeers :: LocalRootPeers PeerTrustable peeraddr
localRootPeers :: forall extraState extraFlags extraPeers peeraddr peerconn.
PeerSelectionState
extraState extraFlags extraPeers peeraddr peerconn
-> LocalRootPeers extraFlags peeraddr
localRootPeers,
extraState :: forall extraState extraFlags extraPeers peeraddr peerconn.
PeerSelectionState
extraState extraFlags extraPeers peeraddr peerconn
-> extraState
extraState = Cardano.ExtraState {
ConsensusMode
consensusMode :: ConsensusMode
consensusMode :: ExtraState -> ConsensusMode
Cardano.consensusMode,
UseBootstrapPeers
bootstrapPeersFlag :: UseBootstrapPeers
bootstrapPeersFlag :: ExtraState -> UseBootstrapPeers
Cardano.bootstrapPeersFlag,
NumberOfBigLedgerPeers
minNumberOfBigLedgerPeers :: NumberOfBigLedgerPeers
minNumberOfBigLedgerPeers :: ExtraState -> NumberOfBigLedgerPeers
Cardano.minNumberOfBigLedgerPeers
}
}
=
case (AssociationMode
associationMode, UseBootstrapPeers
bootstrapPeersFlag, ConsensusMode
consensusMode) of
(AssociationMode
LocalRootsOnly, UseBootstrapPeers
_, ConsensusMode
_)
|
Set peeraddr
viewEstablishedPeers Set peeraddr -> Set peeraddr -> Bool
forall a. Ord a => Set a -> Set a -> Bool
`Set.isSubsetOf` Set peeraddr
trustableLocalRootSet
-> OutboundConnectionsState
TrustedStateWithExternalPeers
| Bool
otherwise
-> OutboundConnectionsState
UntrustedState
(AssociationMode
Unrestricted, UseBootstrapPeers {}, ConsensusMode
_)
|
Set peeraddr
viewEstablishedPeers Set peeraddr -> Set peeraddr -> Bool
forall a. Ord a => Set a -> Set a -> Bool
`Set.isSubsetOf` (Set peeraddr
viewEstablishedBootstrapPeers Set peeraddr -> Set peeraddr -> Set peeraddr
forall a. Semigroup a => a -> a -> a
<> Set peeraddr
trustableLocalRootSet)
, Bool -> Bool
not (Set peeraddr -> Bool
forall a. Set a -> Bool
Set.null Set peeraddr
viewActiveBootstrapPeers)
-> OutboundConnectionsState
TrustedStateWithExternalPeers
| Bool
otherwise
-> OutboundConnectionsState
UntrustedState
(AssociationMode
Unrestricted, UseBootstrapPeers
DontUseBootstrapPeers, ConsensusMode
PraosMode)
-> OutboundConnectionsState
UntrustedState
(AssociationMode
Unrestricted, UseBootstrapPeers
DontUseBootstrapPeers, ConsensusMode
GenesisMode)
| Int
activeNumBigLedgerPeers Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= NumberOfBigLedgerPeers -> Int
getNumberOfBigLedgerPeers NumberOfBigLedgerPeers
minNumberOfBigLedgerPeers
-> OutboundConnectionsState
TrustedStateWithExternalPeers
| Bool
otherwise
-> OutboundConnectionsState
UntrustedState
where
trustableLocalRootSet :: Set peeraddr
trustableLocalRootSet = LocalRootPeers PeerTrustable peeraddr -> Set peeraddr
forall peeraddr.
LocalRootPeers PeerTrustable peeraddr -> Set peeraddr
LocalRootPeers.trustableKeysSet LocalRootPeers PeerTrustable peeraddr
localRootPeers
cardanoPeerSelectionGovernorArgs
:: ( MonadSTM m
, Alternative (STM m)
, Ord peeraddr
)
=> Cardano.ExtraPeerSelectionActions m
-> PeerSelectionGovernorArgs
Cardano.ExtraState
extraDebugState
PeerTrustable
(Cardano.ExtraPeers peeraddr)
(Cardano.LedgerPeersConsensusInterface m)
(ExtraPeerSelectionSetsWithSizes peeraddr)
peeraddr
peerconn
BootstrapPeersCriticalTimeoutError
m
cardanoPeerSelectionGovernorArgs :: forall (m :: * -> *) peeraddr extraDebugState peerconn.
(MonadSTM m, Alternative (STM m), Ord peeraddr) =>
ExtraPeerSelectionActions m
-> PeerSelectionGovernorArgs
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
(LedgerPeersConsensusInterface m)
(ExtraPeerSelectionSetsWithSizes peeraddr)
peeraddr
peerconn
BootstrapPeersCriticalTimeoutError
m
cardanoPeerSelectionGovernorArgs ExtraPeerSelectionActions m
extraActions =
PeerSelectionGovernorArgs {
abortGovernor :: Time
-> PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
-> Maybe BootstrapPeersCriticalTimeoutError
abortGovernor = \Time
blockedAt PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
st ->
case ExtraState -> Maybe Time
Cardano.bootstrapPeersTimeout (PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
-> ExtraState
forall extraState extraFlags extraPeers peeraddr peerconn.
PeerSelectionState
extraState extraFlags extraPeers peeraddr peerconn
-> extraState
extraState PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
st) of
Maybe Time
Nothing -> Maybe BootstrapPeersCriticalTimeoutError
forall a. Maybe a
Nothing
Just Time
t
| Time
blockedAt Time -> Time -> Bool
forall a. Ord a => a -> a -> Bool
>= Time
t -> BootstrapPeersCriticalTimeoutError
-> Maybe BootstrapPeersCriticalTimeoutError
forall a. a -> Maybe a
Just BootstrapPeersCriticalTimeoutError
BootstrapPeersCriticalTimeoutError
| Bool
otherwise -> Maybe BootstrapPeersCriticalTimeoutError
forall a. Maybe a
Nothing
, updateWithState :: PeerSelectionInterfaces
ExtraState
PeerTrustable
(ExtraPeers peeraddr)
(ExtraPeerSelectionSetsWithSizes peeraddr)
peeraddr
peerconn
m
-> PeerSelectionActions
ExtraState
PeerTrustable
(ExtraPeers peeraddr)
(LedgerPeersConsensusInterface m)
(ExtraPeerSelectionSetsWithSizes peeraddr)
peeraddr
peerconn
m
-> PeerSelectionSetsWithSizes
(ExtraPeerSelectionSetsWithSizes peeraddr) peeraddr
-> PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
-> STM m ()
updateWithState = \PeerSelectionInterfaces { STM m UseLedgerPeers
readUseLedgerPeers :: STM m UseLedgerPeers
readUseLedgerPeers :: forall extraState extraFlags extraPeers extraCounters peeraddr
peerconn (m :: * -> *).
PeerSelectionInterfaces
extraState extraFlags extraPeers extraCounters peeraddr peerconn m
-> STM m UseLedgerPeers
readUseLedgerPeers }
PeerSelectionActions { LedgerPeersConsensusInterface (LedgerPeersConsensusInterface m) m
getLedgerStateCtx :: LedgerPeersConsensusInterface (LedgerPeersConsensusInterface m) m
getLedgerStateCtx :: forall extraState extraFlags extraPeers extraAPI extraCounters
peeraddr peerconn (m :: * -> *).
PeerSelectionActions
extraState
extraFlags
extraPeers
extraAPI
extraCounters
peeraddr
peerconn
m
-> LedgerPeersConsensusInterface extraAPI m
getLedgerStateCtx,
PeerSharing
peerSharing :: PeerSharing
peerSharing :: forall extraState extraFlags extraPeers extraAPI extraCounters
peeraddr peerconn (m :: * -> *).
PeerSelectionActions
extraState
extraFlags
extraPeers
extraAPI
extraCounters
peeraddr
peerconn
m
-> PeerSharing
peerSharing }
PeerSelectionSetsWithSizes
(ExtraPeerSelectionSetsWithSizes peeraddr) peeraddr
psv PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
st -> do
associationMode <- STM m UseLedgerPeers
-> PeerSharing -> UseBootstrapPeers -> STM m AssociationMode
forall (m :: * -> *).
MonadSTM m =>
STM m UseLedgerPeers
-> PeerSharing -> UseBootstrapPeers -> STM m AssociationMode
readAssociationMode STM m UseLedgerPeers
readUseLedgerPeers
PeerSharing
peerSharing
(ExtraState -> UseBootstrapPeers
Cardano.bootstrapPeersFlag (PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
-> ExtraState
forall extraState extraFlags extraPeers peeraddr peerconn.
PeerSelectionState
extraState extraFlags extraPeers peeraddr peerconn
-> extraState
extraState PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
st))
Cardano.updateOutboundConnectionsState
(lpExtraAPI getLedgerStateCtx)
(outboundConnectionsState associationMode psv st)
, extraDecisions :: ExtraGuardedDecisions
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
(LedgerPeersConsensusInterface m)
(ExtraPeerSelectionSetsWithSizes peeraddr)
peeraddr
peerconn
m
extraDecisions =
ExtraGuardedDecisions {
preBlocking :: PeerSelectionPolicy peeraddr m
-> PeerSelectionActions
ExtraState
PeerTrustable
(ExtraPeers peeraddr)
(LedgerPeersConsensusInterface m)
(ExtraPeerSelectionSetsWithSizes peeraddr)
peeraddr
peerconn
m
-> PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
peeraddr
peerconn)
preBlocking = \PeerSelectionPolicy peeraddr m
_ PeerSelectionActions
ExtraState
PeerTrustable
(ExtraPeers peeraddr)
(LedgerPeersConsensusInterface m)
(ExtraPeerSelectionSetsWithSizes peeraddr)
peeraddr
peerconn
m
psa PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
pst ->
ExtraPeerSelectionActions m
-> PeerSelectionActions
ExtraState
PeerTrustable
(ExtraPeers peeraddr)
(LedgerPeersConsensusInterface m)
(ExtraPeerSelectionSetsWithSizes peeraddr)
peeraddr
peerconn
m
-> PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
peeraddr
peerconn)
forall (m :: * -> *) peeraddr extraFlags extraAPI extraCounters
peerconn extraDebugState.
(MonadSTM m, Ord peeraddr) =>
ExtraPeerSelectionActions m
-> PeerSelectionActions
ExtraState
extraFlags
(ExtraPeers peeraddr)
extraAPI
extraCounters
peeraddr
peerconn
m
-> PeerSelectionState
ExtraState extraFlags (ExtraPeers peeraddr) peeraddr peerconn
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
extraFlags
(ExtraPeers peeraddr)
peeraddr
peerconn)
monitorBootstrapPeersFlag ExtraPeerSelectionActions m
extraActions PeerSelectionActions
ExtraState
PeerTrustable
(ExtraPeers peeraddr)
(LedgerPeersConsensusInterface m)
(ExtraPeerSelectionSetsWithSizes peeraddr)
peeraddr
peerconn
m
psa PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
pst
Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
peeraddr
peerconn)
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
peeraddr
peerconn)
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
peeraddr
peerconn)
forall a. Semigroup a => a -> a -> a
<> PeerSelectionActions
ExtraState
PeerTrustable
(ExtraPeers peeraddr)
(LedgerPeersConsensusInterface m)
(ExtraPeerSelectionSetsWithSizes peeraddr)
peeraddr
peerconn
m
-> PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
peeraddr
peerconn)
forall (m :: * -> *) peeraddr extraFlags extraCounters peerconn
extraDebugState.
(MonadSTM m, Ord peeraddr) =>
PeerSelectionActions
ExtraState
extraFlags
(ExtraPeers peeraddr)
(LedgerPeersConsensusInterface m)
extraCounters
peeraddr
peerconn
m
-> PeerSelectionState
ExtraState extraFlags (ExtraPeers peeraddr) peeraddr peerconn
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
extraFlags
(ExtraPeers peeraddr)
peeraddr
peerconn)
monitorLedgerStateJudgement PeerSelectionActions
ExtraState
PeerTrustable
(ExtraPeers peeraddr)
(LedgerPeersConsensusInterface m)
(ExtraPeerSelectionSetsWithSizes peeraddr)
peeraddr
peerconn
m
psa PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
pst
Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
peeraddr
peerconn)
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
peeraddr
peerconn)
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
peeraddr
peerconn)
forall a. Semigroup a => a -> a -> a
<> PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
peeraddr
peerconn)
forall (m :: * -> *) peeraddr peerconn extraDebugState.
(MonadSTM m, Ord peeraddr) =>
PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
peeraddr
peerconn)
waitForSystemToQuiesce PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
pst
, postBlocking :: PeerSelectionPolicy peeraddr m
-> PeerSelectionActions
ExtraState
PeerTrustable
(ExtraPeers peeraddr)
(LedgerPeersConsensusInterface m)
(ExtraPeerSelectionSetsWithSizes peeraddr)
peeraddr
peerconn
m
-> PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
peeraddr
peerconn)
postBlocking = PeerSelectionPolicy peeraddr m
-> PeerSelectionActions
ExtraState
PeerTrustable
(ExtraPeers peeraddr)
(LedgerPeersConsensusInterface m)
(ExtraPeerSelectionSetsWithSizes peeraddr)
peeraddr
peerconn
m
-> PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
peeraddr
peerconn)
forall a. Monoid a => a
mempty
, postNonBlocking :: PeerSelectionPolicy peeraddr m
-> PeerSelectionActions
ExtraState
PeerTrustable
(ExtraPeers peeraddr)
(LedgerPeersConsensusInterface m)
(ExtraPeerSelectionSetsWithSizes peeraddr)
peeraddr
peerconn
m
-> PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
peeraddr
peerconn)
postNonBlocking = PeerSelectionPolicy peeraddr m
-> PeerSelectionActions
ExtraState
PeerTrustable
(ExtraPeers peeraddr)
(LedgerPeersConsensusInterface m)
(ExtraPeerSelectionSetsWithSizes peeraddr)
peeraddr
peerconn
m
-> PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
peeraddr
peerconn)
forall a. Monoid a => a
mempty
, customTargetsAction :: Maybe
(PeerSelectionPolicy peeraddr m
-> PeerSelectionActions
ExtraState
PeerTrustable
(ExtraPeers peeraddr)
(LedgerPeersConsensusInterface m)
(ExtraPeerSelectionSetsWithSizes peeraddr)
peeraddr
peerconn
m
-> PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
peeraddr
peerconn))
customTargetsAction = (PeerSelectionPolicy peeraddr m
-> PeerSelectionActions
ExtraState
PeerTrustable
(ExtraPeers peeraddr)
(LedgerPeersConsensusInterface m)
(ExtraPeerSelectionSetsWithSizes peeraddr)
peeraddr
peerconn
m
-> PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
peeraddr
peerconn))
-> Maybe
(PeerSelectionPolicy peeraddr m
-> PeerSelectionActions
ExtraState
PeerTrustable
(ExtraPeers peeraddr)
(LedgerPeersConsensusInterface m)
(ExtraPeerSelectionSetsWithSizes peeraddr)
peeraddr
peerconn
m
-> PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
peeraddr
peerconn))
forall a. a -> Maybe a
Just ((PeerSelectionPolicy peeraddr m
-> PeerSelectionActions
ExtraState
PeerTrustable
(ExtraPeers peeraddr)
(LedgerPeersConsensusInterface m)
(ExtraPeerSelectionSetsWithSizes peeraddr)
peeraddr
peerconn
m
-> PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
peeraddr
peerconn))
-> Maybe
(PeerSelectionPolicy peeraddr m
-> PeerSelectionActions
ExtraState
PeerTrustable
(ExtraPeers peeraddr)
(LedgerPeersConsensusInterface m)
(ExtraPeerSelectionSetsWithSizes peeraddr)
peeraddr
peerconn
m
-> PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
peeraddr
peerconn)))
-> (PeerSelectionPolicy peeraddr m
-> PeerSelectionActions
ExtraState
PeerTrustable
(ExtraPeers peeraddr)
(LedgerPeersConsensusInterface m)
(ExtraPeerSelectionSetsWithSizes peeraddr)
peeraddr
peerconn
m
-> PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
peeraddr
peerconn))
-> Maybe
(PeerSelectionPolicy peeraddr m
-> PeerSelectionActions
ExtraState
PeerTrustable
(ExtraPeers peeraddr)
(LedgerPeersConsensusInterface m)
(ExtraPeerSelectionSetsWithSizes peeraddr)
peeraddr
peerconn
m
-> PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
peeraddr
peerconn))
forall a b. (a -> b) -> a -> b
$ \PeerSelectionPolicy peeraddr m
_ -> ExtraPeerSelectionActions m
-> PeerSelectionActions
ExtraState
PeerTrustable
(ExtraPeers peeraddr)
(LedgerPeersConsensusInterface m)
(ExtraPeerSelectionSetsWithSizes peeraddr)
peeraddr
peerconn
m
-> PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
peeraddr
peerconn)
forall (m :: * -> *) peeraddr extraFlags extraPeers extraAPI
extraCounters peerconn extraDebugState.
(MonadSTM m, Ord peeraddr) =>
ExtraPeerSelectionActions m
-> PeerSelectionActions
ExtraState
extraFlags
extraPeers
extraAPI
extraCounters
peeraddr
peerconn
m
-> PeerSelectionState
ExtraState PeerTrustable extraPeers peeraddr peerconn
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
extraPeers
peeraddr
peerconn)
Cardano.targetPeers ExtraPeerSelectionActions m
extraActions
, customLocalRootsAction :: Maybe
(PeerSelectionPolicy peeraddr m
-> PeerSelectionActions
ExtraState
PeerTrustable
(ExtraPeers peeraddr)
(LedgerPeersConsensusInterface m)
(ExtraPeerSelectionSetsWithSizes peeraddr)
peeraddr
peerconn
m
-> PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
peeraddr
peerconn))
customLocalRootsAction = (PeerSelectionPolicy peeraddr m
-> PeerSelectionActions
ExtraState
PeerTrustable
(ExtraPeers peeraddr)
(LedgerPeersConsensusInterface m)
(ExtraPeerSelectionSetsWithSizes peeraddr)
peeraddr
peerconn
m
-> PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
peeraddr
peerconn))
-> Maybe
(PeerSelectionPolicy peeraddr m
-> PeerSelectionActions
ExtraState
PeerTrustable
(ExtraPeers peeraddr)
(LedgerPeersConsensusInterface m)
(ExtraPeerSelectionSetsWithSizes peeraddr)
peeraddr
peerconn
m
-> PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
peeraddr
peerconn))
forall a. a -> Maybe a
Just ((PeerSelectionPolicy peeraddr m
-> PeerSelectionActions
ExtraState
PeerTrustable
(ExtraPeers peeraddr)
(LedgerPeersConsensusInterface m)
(ExtraPeerSelectionSetsWithSizes peeraddr)
peeraddr
peerconn
m
-> PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
peeraddr
peerconn))
-> Maybe
(PeerSelectionPolicy peeraddr m
-> PeerSelectionActions
ExtraState
PeerTrustable
(ExtraPeers peeraddr)
(LedgerPeersConsensusInterface m)
(ExtraPeerSelectionSetsWithSizes peeraddr)
peeraddr
peerconn
m
-> PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
peeraddr
peerconn)))
-> (PeerSelectionPolicy peeraddr m
-> PeerSelectionActions
ExtraState
PeerTrustable
(ExtraPeers peeraddr)
(LedgerPeersConsensusInterface m)
(ExtraPeerSelectionSetsWithSizes peeraddr)
peeraddr
peerconn
m
-> PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
peeraddr
peerconn))
-> Maybe
(PeerSelectionPolicy peeraddr m
-> PeerSelectionActions
ExtraState
PeerTrustable
(ExtraPeers peeraddr)
(LedgerPeersConsensusInterface m)
(ExtraPeerSelectionSetsWithSizes peeraddr)
peeraddr
peerconn
m
-> PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
peeraddr
peerconn))
forall a b. (a -> b) -> a -> b
$ \PeerSelectionPolicy peeraddr m
_ -> PeerSelectionActions
ExtraState
PeerTrustable
(ExtraPeers peeraddr)
(LedgerPeersConsensusInterface m)
(ExtraPeerSelectionSetsWithSizes peeraddr)
peeraddr
peerconn
m
-> PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
peeraddr
peerconn)
forall extraDebugState extraAPI extraCounters peeraddr peerconn
(m :: * -> *).
(MonadSTM m, Ord peeraddr) =>
PeerSelectionActions
ExtraState
PeerTrustable
(ExtraPeers peeraddr)
extraAPI
extraCounters
peeraddr
peerconn
m
-> PeerSelectionState
ExtraState PeerTrustable (ExtraPeers peeraddr) peeraddr peerconn
-> Guarded
(STM m)
(TimedDecision
m
ExtraState
extraDebugState
PeerTrustable
(ExtraPeers peeraddr)
peeraddr
peerconn)
Cardano.localRoots
, enableProgressMakingActions :: ExtraState -> Bool
enableProgressMakingActions = \ExtraState
st ->
Bool -> Bool
not (UseBootstrapPeers -> LedgerStateJudgement -> Bool
requiresBootstrapPeers (ExtraState -> UseBootstrapPeers
Cardano.bootstrapPeersFlag ExtraState
st) (ExtraState -> LedgerStateJudgement
Cardano.ledgerStateJudgement ExtraState
st))
, ledgerPeerSnapshotExtraStateChange :: ExtraState -> ExtraState
ledgerPeerSnapshotExtraStateChange = \ExtraState
st ->
ExtraState
st { Cardano.ledgerStateJudgement = YoungEnough }
}
}