{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE StandaloneKindSignatures #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE UndecidableSuperClasses #-}
module Ouroboros.Consensus.Protocol.Praos2
( LeiosOnly (..)
, LeiosCrypto
, PerasOnly (..)
, Praos2
, ConsensusConfig (..)
) where
import Cardano.Ledger.Chain (ChainChecksPParams (..))
import Cardano.Ledger.Core (TranslationContext)
import qualified Cardano.Ledger.Dijkstra.Forecast as Dijkstra
import Cardano.Ledger.Dijkstra.Genesis (DijkstraGenesis (..))
import Cardano.Ledger.Dijkstra.PParams (UpgradeDijkstraPParams (..))
import qualified Cardano.Ledger.Shelley.API as SL
import Cardano.Ledger.State (emptyLeiosCommittee)
import Cardano.Protocol.Crypto (Crypto, StandardCrypto)
import qualified Cardano.Protocol.Leios.BlockHeader as LeiosCodec
import Data.Kind (Type)
import Data.Proxy (Proxy (Proxy))
import qualified Data.Strict.Either as Strict
import GHC.Generics (Generic)
import Lens.Micro ((^.))
import NoThunks.Class (NoThunks)
import Ouroboros.Consensus.Leios.Protocol (LeiosLedgerView (..), LeiosProtocol (..))
import Ouroboros.Consensus.Peras.Protocol (PerasLedgerView (..), PerasProtocol (..))
import Ouroboros.Consensus.Protocol.Abstract
import Ouroboros.Consensus.Protocol.PolyPraos
( WhyNotCertifiable (..)
, getContainsLeiosCertPolyPraos
, getLeiosAnnouncementPolyPraos
, getLeiosLedgerViewPolyPraos
, getPerasLedgerViewPolyPraos
, markUncertifiable
, validateLeiosAnnouncementPolyPraos
)
import Ouroboros.Consensus.Protocol.Praos
import Ouroboros.Consensus.Protocol.Praos.Common
( HasMaxMajorProtVer (..)
, PraosCanBeLeader
, PraosProtocolSupportsNode (..)
, PraosTiebreakerView
, ShelleyProtocolHeader
, TypeSwitch (..)
)
import Ouroboros.Consensus.Protocol.Praos.Orphans ()
import qualified Ouroboros.Consensus.Protocol.Praos.Views as Views
import Ouroboros.Consensus.Protocol.TPraos (TPraos)
type Praos2 :: Type -> Type
data Praos2 c
type instance (Praos2 c) = LeiosCodec.Header c
instance PolyPraosCrypto (Praos2 StandardCrypto) StandardCrypto
class (Crypto c, PolyPraosCrypto (Praos2 c) c) => LeiosCrypto c
instance LeiosCrypto StandardCrypto
newtype instance LeiosOnly (Praos2 c) a b = Praos2HasLeios b
deriving (LeiosOnly (Praos2 c) a b -> LeiosOnly (Praos2 c) a b -> Bool
(LeiosOnly (Praos2 c) a b -> LeiosOnly (Praos2 c) a b -> Bool)
-> (LeiosOnly (Praos2 c) a b -> LeiosOnly (Praos2 c) a b -> Bool)
-> Eq (LeiosOnly (Praos2 c) a b)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall c a b.
Eq b =>
LeiosOnly (Praos2 c) a b -> LeiosOnly (Praos2 c) a b -> Bool
$c== :: forall c a b.
Eq b =>
LeiosOnly (Praos2 c) a b -> LeiosOnly (Praos2 c) a b -> Bool
== :: LeiosOnly (Praos2 c) a b -> LeiosOnly (Praos2 c) a b -> Bool
$c/= :: forall c a b.
Eq b =>
LeiosOnly (Praos2 c) a b -> LeiosOnly (Praos2 c) a b -> Bool
/= :: LeiosOnly (Praos2 c) a b -> LeiosOnly (Praos2 c) a b -> Bool
Eq, (forall x.
LeiosOnly (Praos2 c) a b -> Rep (LeiosOnly (Praos2 c) a b) x)
-> (forall x.
Rep (LeiosOnly (Praos2 c) a b) x -> LeiosOnly (Praos2 c) a b)
-> Generic (LeiosOnly (Praos2 c) a b)
forall x.
Rep (LeiosOnly (Praos2 c) a b) x -> LeiosOnly (Praos2 c) a b
forall x.
LeiosOnly (Praos2 c) a b -> Rep (LeiosOnly (Praos2 c) a b) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall c a b x.
Rep (LeiosOnly (Praos2 c) a b) x -> LeiosOnly (Praos2 c) a b
forall c a b x.
LeiosOnly (Praos2 c) a b -> Rep (LeiosOnly (Praos2 c) a b) x
$cfrom :: forall c a b x.
LeiosOnly (Praos2 c) a b -> Rep (LeiosOnly (Praos2 c) a b) x
from :: forall x.
LeiosOnly (Praos2 c) a b -> Rep (LeiosOnly (Praos2 c) a b) x
$cto :: forall c a b x.
Rep (LeiosOnly (Praos2 c) a b) x -> LeiosOnly (Praos2 c) a b
to :: forall x.
Rep (LeiosOnly (Praos2 c) a b) x -> LeiosOnly (Praos2 c) a b
Generic, Int -> LeiosOnly (Praos2 c) a b -> ShowS
[LeiosOnly (Praos2 c) a b] -> ShowS
LeiosOnly (Praos2 c) a b -> String
(Int -> LeiosOnly (Praos2 c) a b -> ShowS)
-> (LeiosOnly (Praos2 c) a b -> String)
-> ([LeiosOnly (Praos2 c) a b] -> ShowS)
-> Show (LeiosOnly (Praos2 c) a b)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall c a b. Show b => Int -> LeiosOnly (Praos2 c) a b -> ShowS
forall c a b. Show b => [LeiosOnly (Praos2 c) a b] -> ShowS
forall c a b. Show b => LeiosOnly (Praos2 c) a b -> String
$cshowsPrec :: forall c a b. Show b => Int -> LeiosOnly (Praos2 c) a b -> ShowS
showsPrec :: Int -> LeiosOnly (Praos2 c) a b -> ShowS
$cshow :: forall c a b. Show b => LeiosOnly (Praos2 c) a b -> String
show :: LeiosOnly (Praos2 c) a b -> String
$cshowList :: forall c a b. Show b => [LeiosOnly (Praos2 c) a b] -> ShowS
showList :: [LeiosOnly (Praos2 c) a b] -> ShowS
Show)
deriving anyclass instance
NoThunks b => NoThunks (LeiosOnly (Praos2 c) a b)
instance Functor (LeiosOnly (Praos2 c) a) where
fmap :: forall a b.
(a -> b) -> LeiosOnly (Praos2 c) a a -> LeiosOnly (Praos2 c) a b
fmap a -> b
f (Praos2HasLeios a
b) = b -> LeiosOnly (Praos2 c) a b
forall c a b. b -> LeiosOnly (Praos2 c) a b
Praos2HasLeios (a -> b
f a
b)
instance Applicative (LeiosOnly (Praos2 c) a) where
pure :: forall a. a -> LeiosOnly (Praos2 c) a a
pure = a -> LeiosOnly (Praos2 c) a a
forall c a b. b -> LeiosOnly (Praos2 c) a b
Praos2HasLeios
Praos2HasLeios a -> b
f <*> :: forall a b.
LeiosOnly (Praos2 c) a (a -> b)
-> LeiosOnly (Praos2 c) a a -> LeiosOnly (Praos2 c) a b
<*> Praos2HasLeios a
b = b -> LeiosOnly (Praos2 c) a b
forall c a b. b -> LeiosOnly (Praos2 c) a b
Praos2HasLeios (a -> b
f a
b)
instance Foldable (LeiosOnly (Praos2 c) a) where
foldMap :: forall m a. Monoid m => (a -> m) -> LeiosOnly (Praos2 c) a a -> m
foldMap a -> m
f (Praos2HasLeios a
b) = a -> m
f a
b
instance Traversable (LeiosOnly (Praos2 c) a) where
traverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b)
-> LeiosOnly (Praos2 c) a a -> f (LeiosOnly (Praos2 c) a b)
traverse a -> f b
f (Praos2HasLeios a
b) = b -> LeiosOnly (Praos2 c) a b
forall c a b. b -> LeiosOnly (Praos2 c) a b
Praos2HasLeios (b -> LeiosOnly (Praos2 c) a b)
-> f b -> f (LeiosOnly (Praos2 c) a b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> f b
f a
b
instance TypeSwitch (LeiosOnly (Praos2 c)) where
typeSwitchL :: LeiosOnly (Praos2 c) (LeiosOnly (Praos2 c) () Void) ()
typeSwitchL = () -> LeiosOnly (Praos2 c) (LeiosOnly (Praos2 c) () Void) ()
forall c a b. b -> LeiosOnly (Praos2 c) a b
Praos2HasLeios ()
typeSwitchR :: LeiosOnly (Praos2 c) () (LeiosOnly (Praos2 c) Void ())
typeSwitchR = LeiosOnly (Praos2 c) Void ()
-> LeiosOnly (Praos2 c) () (LeiosOnly (Praos2 c) Void ())
forall c a b. b -> LeiosOnly (Praos2 c) a b
Praos2HasLeios (() -> LeiosOnly (Praos2 c) Void ()
forall c a b. b -> LeiosOnly (Praos2 c) a b
Praos2HasLeios ())
newtype instance PerasOnly (Praos2 c) a b = Praos2HasPeras b
deriving (PerasOnly (Praos2 c) a b -> PerasOnly (Praos2 c) a b -> Bool
(PerasOnly (Praos2 c) a b -> PerasOnly (Praos2 c) a b -> Bool)
-> (PerasOnly (Praos2 c) a b -> PerasOnly (Praos2 c) a b -> Bool)
-> Eq (PerasOnly (Praos2 c) a b)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall c a b.
Eq b =>
PerasOnly (Praos2 c) a b -> PerasOnly (Praos2 c) a b -> Bool
$c== :: forall c a b.
Eq b =>
PerasOnly (Praos2 c) a b -> PerasOnly (Praos2 c) a b -> Bool
== :: PerasOnly (Praos2 c) a b -> PerasOnly (Praos2 c) a b -> Bool
$c/= :: forall c a b.
Eq b =>
PerasOnly (Praos2 c) a b -> PerasOnly (Praos2 c) a b -> Bool
/= :: PerasOnly (Praos2 c) a b -> PerasOnly (Praos2 c) a b -> Bool
Eq, (forall x.
PerasOnly (Praos2 c) a b -> Rep (PerasOnly (Praos2 c) a b) x)
-> (forall x.
Rep (PerasOnly (Praos2 c) a b) x -> PerasOnly (Praos2 c) a b)
-> Generic (PerasOnly (Praos2 c) a b)
forall x.
Rep (PerasOnly (Praos2 c) a b) x -> PerasOnly (Praos2 c) a b
forall x.
PerasOnly (Praos2 c) a b -> Rep (PerasOnly (Praos2 c) a b) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall c a b x.
Rep (PerasOnly (Praos2 c) a b) x -> PerasOnly (Praos2 c) a b
forall c a b x.
PerasOnly (Praos2 c) a b -> Rep (PerasOnly (Praos2 c) a b) x
$cfrom :: forall c a b x.
PerasOnly (Praos2 c) a b -> Rep (PerasOnly (Praos2 c) a b) x
from :: forall x.
PerasOnly (Praos2 c) a b -> Rep (PerasOnly (Praos2 c) a b) x
$cto :: forall c a b x.
Rep (PerasOnly (Praos2 c) a b) x -> PerasOnly (Praos2 c) a b
to :: forall x.
Rep (PerasOnly (Praos2 c) a b) x -> PerasOnly (Praos2 c) a b
Generic, Int -> PerasOnly (Praos2 c) a b -> ShowS
[PerasOnly (Praos2 c) a b] -> ShowS
PerasOnly (Praos2 c) a b -> String
(Int -> PerasOnly (Praos2 c) a b -> ShowS)
-> (PerasOnly (Praos2 c) a b -> String)
-> ([PerasOnly (Praos2 c) a b] -> ShowS)
-> Show (PerasOnly (Praos2 c) a b)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall c a b. Show b => Int -> PerasOnly (Praos2 c) a b -> ShowS
forall c a b. Show b => [PerasOnly (Praos2 c) a b] -> ShowS
forall c a b. Show b => PerasOnly (Praos2 c) a b -> String
$cshowsPrec :: forall c a b. Show b => Int -> PerasOnly (Praos2 c) a b -> ShowS
showsPrec :: Int -> PerasOnly (Praos2 c) a b -> ShowS
$cshow :: forall c a b. Show b => PerasOnly (Praos2 c) a b -> String
show :: PerasOnly (Praos2 c) a b -> String
$cshowList :: forall c a b. Show b => [PerasOnly (Praos2 c) a b] -> ShowS
showList :: [PerasOnly (Praos2 c) a b] -> ShowS
Show)
deriving anyclass instance
NoThunks b => NoThunks (PerasOnly (Praos2 c) a b)
instance Functor (PerasOnly (Praos2 c) a) where
fmap :: forall a b.
(a -> b) -> PerasOnly (Praos2 c) a a -> PerasOnly (Praos2 c) a b
fmap a -> b
f (Praos2HasPeras a
b) = b -> PerasOnly (Praos2 c) a b
forall c a b. b -> PerasOnly (Praos2 c) a b
Praos2HasPeras (a -> b
f a
b)
instance Applicative (PerasOnly (Praos2 c) a) where
pure :: forall a. a -> PerasOnly (Praos2 c) a a
pure = a -> PerasOnly (Praos2 c) a a
forall c a b. b -> PerasOnly (Praos2 c) a b
Praos2HasPeras
Praos2HasPeras a -> b
f <*> :: forall a b.
PerasOnly (Praos2 c) a (a -> b)
-> PerasOnly (Praos2 c) a a -> PerasOnly (Praos2 c) a b
<*> Praos2HasPeras a
b = b -> PerasOnly (Praos2 c) a b
forall c a b. b -> PerasOnly (Praos2 c) a b
Praos2HasPeras (a -> b
f a
b)
instance Foldable (PerasOnly (Praos2 c) a) where
foldMap :: forall m a. Monoid m => (a -> m) -> PerasOnly (Praos2 c) a a -> m
foldMap a -> m
f (Praos2HasPeras a
b) = a -> m
f a
b
instance Traversable (PerasOnly (Praos2 c) a) where
traverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b)
-> PerasOnly (Praos2 c) a a -> f (PerasOnly (Praos2 c) a b)
traverse a -> f b
f (Praos2HasPeras a
b) = b -> PerasOnly (Praos2 c) a b
forall c a b. b -> PerasOnly (Praos2 c) a b
Praos2HasPeras (b -> PerasOnly (Praos2 c) a b)
-> f b -> f (PerasOnly (Praos2 c) a b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> f b
f a
b
instance TypeSwitch (PerasOnly (Praos2 c)) where
typeSwitchL :: PerasOnly (Praos2 c) (PerasOnly (Praos2 c) () Void) ()
typeSwitchL = () -> PerasOnly (Praos2 c) (PerasOnly (Praos2 c) () Void) ()
forall c a b. b -> PerasOnly (Praos2 c) a b
Praos2HasPeras ()
typeSwitchR :: PerasOnly (Praos2 c) () (PerasOnly (Praos2 c) Void ())
typeSwitchR = PerasOnly (Praos2 c) Void ()
-> PerasOnly (Praos2 c) () (PerasOnly (Praos2 c) Void ())
forall c a b. b -> PerasOnly (Praos2 c) a b
Praos2HasPeras (() -> PerasOnly (Praos2 c) Void ()
forall c a b. b -> PerasOnly (Praos2 c) a b
Praos2HasPeras ())
newtype instance ConsensusConfig (Praos2 c) = LeiosConfig
{ forall c. ConsensusConfig (Praos2 c) -> ConsensusConfig (Praos c)
leiosPraosConfig :: ConsensusConfig (Praos c)
}
deriving (forall x.
ConsensusConfig (Praos2 c) -> Rep (ConsensusConfig (Praos2 c)) x)
-> (forall x.
Rep (ConsensusConfig (Praos2 c)) x -> ConsensusConfig (Praos2 c))
-> Generic (ConsensusConfig (Praos2 c))
forall x.
Rep (ConsensusConfig (Praos2 c)) x -> ConsensusConfig (Praos2 c)
forall x.
ConsensusConfig (Praos2 c) -> Rep (ConsensusConfig (Praos2 c)) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall c x.
Rep (ConsensusConfig (Praos2 c)) x -> ConsensusConfig (Praos2 c)
forall c x.
ConsensusConfig (Praos2 c) -> Rep (ConsensusConfig (Praos2 c)) x
$cfrom :: forall c x.
ConsensusConfig (Praos2 c) -> Rep (ConsensusConfig (Praos2 c)) x
from :: forall x.
ConsensusConfig (Praos2 c) -> Rep (ConsensusConfig (Praos2 c)) x
$cto :: forall c x.
Rep (ConsensusConfig (Praos2 c)) x -> ConsensusConfig (Praos2 c)
to :: forall x.
Rep (ConsensusConfig (Praos2 c)) x -> ConsensusConfig (Praos2 c)
Generic
deriving newtype instance Crypto c => NoThunks (ConsensusConfig (Praos2 c))
instance HasMaxMajorProtVer (Praos2 c) where
protoMaxMajorPV :: ConsensusConfig (Praos2 c) -> MaxMajorProtVer
protoMaxMajorPV = PraosParams -> MaxMajorProtVer
praosMaxMajorPV (PraosParams -> MaxMajorProtVer)
-> (ConsensusConfig (Praos2 c) -> PraosParams)
-> ConsensusConfig (Praos2 c)
-> MaxMajorProtVer
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConsensusConfig (Praos c) -> PraosParams
forall c. ConsensusConfig (Praos c) -> PraosParams
praosParams (ConsensusConfig (Praos c) -> PraosParams)
-> (ConsensusConfig (Praos2 c) -> ConsensusConfig (Praos c))
-> ConsensusConfig (Praos2 c)
-> PraosParams
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConsensusConfig (Praos2 c) -> ConsensusConfig (Praos c)
forall c. ConsensusConfig (Praos2 c) -> ConsensusConfig (Praos c)
leiosPraosConfig
instance LeiosCrypto c => LeiosProtocol (Praos2 c) where
getLeiosAnnouncement :: forall (proxy :: * -> *).
proxy (Praos2 c)
-> ValidateView (Praos2 c) -> Maybe LeiosAnnouncement
getLeiosAnnouncement proxy (Praos2 c)
_proxy = ValidateView (Praos2 c) -> Maybe LeiosAnnouncement
PolyPraosValidateView (Praos2 c) c -> Maybe LeiosAnnouncement
forall proto c.
Foldable (WhenLeios proto) =>
PolyPraosValidateView proto c -> Maybe LeiosAnnouncement
getLeiosAnnouncementPolyPraos
getContainsLeiosCert :: forall (proxy :: * -> *).
proxy (Praos2 c) -> ValidateView (Praos2 c) -> Bool
getContainsLeiosCert proxy (Praos2 c)
_proxy = ValidateView (Praos2 c) -> Bool
PolyPraosValidateView (Praos2 c) c -> Bool
forall proto c.
Foldable (WhenLeios proto) =>
PolyPraosValidateView proto c -> Bool
getContainsLeiosCertPolyPraos
validateLeiosAnnouncement :: ConsensusConfig (Praos2 c)
-> ValidateView (Praos2 c)
-> SlotNo
-> Ticked (ChainDepState (Praos2 c))
-> Except (ValidationErr (Praos2 c)) OCINStaleness
validateLeiosAnnouncement (LeiosConfig (PraosConfig PraosParams
prms EpochInfo (Except PastHorizonException)
_ei)) ValidateView (Praos2 c)
b SlotNo
_slot =
PraosParams
-> PolyPraosValidateView (Praos2 c) c
-> Ticked (PolyPraosState (Praos2 c))
-> Except (PolyPraosValidationErr (Praos2 c) c) OCINStaleness
forall proto c.
(PolyPraosCrypto proto c, Applicative (WhenLeios proto),
Foldable (WhenLeios proto), TypeSwitch (LeiosOnly proto)) =>
PraosParams
-> PolyPraosValidateView proto c
-> Ticked (PolyPraosState proto)
-> Except (PolyPraosValidationErr proto c) OCINStaleness
validateLeiosAnnouncementPolyPraos PraosParams
prms ValidateView (Praos2 c)
PolyPraosValidateView (Praos2 c) c
b
getLeiosLedgerView :: forall (proxy :: * -> *).
proxy (Praos2 c) -> LedgerView (Praos2 c) -> Maybe LeiosLedgerView
getLeiosLedgerView proxy (Praos2 c)
_proxy = LedgerView (Praos2 c) -> Maybe LeiosLedgerView
PolyPraosLedgerView (Praos2 c) -> Maybe LeiosLedgerView
forall proto.
Foldable (WhenLeios proto) =>
PolyPraosLedgerView proto -> Maybe LeiosLedgerView
getLeiosLedgerViewPolyPraos
instance LeiosCrypto c => PerasProtocol (Praos2 c) where
getPerasLedgerView :: forall (proxy :: * -> *).
proxy (Praos2 c) -> LedgerView (Praos2 c) -> Maybe PerasLedgerView
getPerasLedgerView proxy (Praos2 c)
_proxy = LedgerView (Praos2 c) -> Maybe PerasLedgerView
PolyPraosLedgerView (Praos2 c) -> Maybe PerasLedgerView
forall proto.
Foldable (WhenPeras proto) =>
PolyPraosLedgerView proto -> Maybe PerasLedgerView
getPerasLedgerViewPolyPraos
instance LeiosCrypto c => ConsensusProtocol (Praos2 c) where
type ChainDepState (Praos2 c) = PolyPraosState (Praos2 c)
type IsLeader (Praos2 c) = PraosIsLeader c
type CanBeLeader (Praos2 c) = PraosCanBeLeader c
type TiebreakerView (Praos2 c) = PraosTiebreakerView c
type LedgerView (Praos2 c) = Views.PolyPraosLedgerView (Praos2 c)
type ValidationErr (Praos2 c) = PolyPraosValidationErr (Praos2 c) c
type ValidateView (Praos2 c) = Views.PolyPraosValidateView (Praos2 c) c
protocolSecurityParam :: ConsensusConfig (Praos2 c) -> SecurityParam
protocolSecurityParam = PraosParams -> SecurityParam
praosSecurityParam (PraosParams -> SecurityParam)
-> (ConsensusConfig (Praos2 c) -> PraosParams)
-> ConsensusConfig (Praos2 c)
-> SecurityParam
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConsensusConfig (Praos c) -> PraosParams
forall c. ConsensusConfig (Praos c) -> PraosParams
praosParams (ConsensusConfig (Praos c) -> PraosParams)
-> (ConsensusConfig (Praos2 c) -> ConsensusConfig (Praos c))
-> ConsensusConfig (Praos2 c)
-> PraosParams
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConsensusConfig (Praos2 c) -> ConsensusConfig (Praos c)
forall c. ConsensusConfig (Praos2 c) -> ConsensusConfig (Praos c)
leiosPraosConfig
checkIsLeader :: HasCallStack =>
ConsensusConfig (Praos2 c)
-> CanBeLeader (Praos2 c)
-> SlotNo
-> Ticked (ChainDepState (Praos2 c))
-> Maybe (IsLeader (Praos2 c))
checkIsLeader = PraosParams
-> PraosCanBeLeader c
-> SlotNo
-> Ticked (PolyPraosState (Praos2 c))
-> Maybe (PraosIsLeader c)
forall proto c.
PolyPraosCrypto proto c =>
PraosParams
-> PraosCanBeLeader c
-> SlotNo
-> Ticked (PolyPraosState proto)
-> Maybe (PraosIsLeader c)
checkIsLeaderPolyPraos (PraosParams
-> PraosCanBeLeader c
-> SlotNo
-> Ticked (PolyPraosState (Praos2 c))
-> Maybe (PraosIsLeader c))
-> (ConsensusConfig (Praos2 c) -> PraosParams)
-> ConsensusConfig (Praos2 c)
-> PraosCanBeLeader c
-> SlotNo
-> Ticked (PolyPraosState (Praos2 c))
-> Maybe (PraosIsLeader c)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConsensusConfig (Praos c) -> PraosParams
forall c. ConsensusConfig (Praos c) -> PraosParams
praosParams (ConsensusConfig (Praos c) -> PraosParams)
-> (ConsensusConfig (Praos2 c) -> ConsensusConfig (Praos c))
-> ConsensusConfig (Praos2 c)
-> PraosParams
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConsensusConfig (Praos2 c) -> ConsensusConfig (Praos c)
forall c. ConsensusConfig (Praos2 c) -> ConsensusConfig (Praos c)
leiosPraosConfig
tickChainDepState :: ConsensusConfig (Praos2 c)
-> LedgerView (Praos2 c)
-> SlotNo
-> ChainDepState (Praos2 c)
-> Ticked (ChainDepState (Praos2 c))
tickChainDepState = EpochInfo (Except PastHorizonException)
-> PolyPraosLedgerView (Praos2 c)
-> SlotNo
-> PolyPraosState (Praos2 c)
-> Ticked (PolyPraosState (Praos2 c))
forall proto.
Functor (WhenLeios proto) =>
EpochInfo (Except PastHorizonException)
-> PolyPraosLedgerView proto
-> SlotNo
-> PolyPraosState proto
-> Ticked (PolyPraosState proto)
tickChainDepStatePolyPraos (EpochInfo (Except PastHorizonException)
-> PolyPraosLedgerView (Praos2 c)
-> SlotNo
-> PolyPraosState (Praos2 c)
-> Ticked (PolyPraosState (Praos2 c)))
-> (ConsensusConfig (Praos2 c)
-> EpochInfo (Except PastHorizonException))
-> ConsensusConfig (Praos2 c)
-> PolyPraosLedgerView (Praos2 c)
-> SlotNo
-> PolyPraosState (Praos2 c)
-> Ticked (PolyPraosState (Praos2 c))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConsensusConfig (Praos c)
-> EpochInfo (Except PastHorizonException)
forall c.
ConsensusConfig (Praos c)
-> EpochInfo (Except PastHorizonException)
praosEpochInfo (ConsensusConfig (Praos c)
-> EpochInfo (Except PastHorizonException))
-> (ConsensusConfig (Praos2 c) -> ConsensusConfig (Praos c))
-> ConsensusConfig (Praos2 c)
-> EpochInfo (Except PastHorizonException)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConsensusConfig (Praos2 c) -> ConsensusConfig (Praos c)
forall c. ConsensusConfig (Praos2 c) -> ConsensusConfig (Praos c)
leiosPraosConfig
updateChainDepState :: HasCallStack =>
ConsensusConfig (Praos2 c)
-> ValidateView (Praos2 c)
-> SlotNo
-> Ticked (ChainDepState (Praos2 c))
-> Except (ValidationErr (Praos2 c)) (ChainDepState (Praos2 c))
updateChainDepState (LeiosConfig (PraosConfig PraosParams
prms EpochInfo (Except PastHorizonException)
ei)) = PraosParams
-> EpochInfo (Except PastHorizonException)
-> PolyPraosValidateView (Praos2 c) c
-> SlotNo
-> Ticked (PolyPraosState (Praos2 c))
-> Except
(PolyPraosValidationErr (Praos2 c) c) (PolyPraosState (Praos2 c))
forall proto c.
(PolyPraosCrypto proto c, Applicative (WhenLeios proto),
Foldable (WhenLeios proto), TypeSwitch (LeiosOnly proto)) =>
PraosParams
-> EpochInfo (Except PastHorizonException)
-> PolyPraosValidateView proto c
-> SlotNo
-> Ticked (PolyPraosState proto)
-> Except (PolyPraosValidationErr proto c) (PolyPraosState proto)
updateChainDepStatePolyPraos PraosParams
prms EpochInfo (Except PastHorizonException)
ei
reupdateChainDepState :: HasCallStack =>
ConsensusConfig (Praos2 c)
-> ValidateView (Praos2 c)
-> SlotNo
-> Ticked (ChainDepState (Praos2 c))
-> ChainDepState (Praos2 c)
reupdateChainDepState (LeiosConfig (PraosConfig PraosParams
prms EpochInfo (Except PastHorizonException)
ei)) = PraosParams
-> EpochInfo (Except PastHorizonException)
-> PolyPraosValidateView (Praos2 c) c
-> SlotNo
-> Ticked (PolyPraosState (Praos2 c))
-> PolyPraosState (Praos2 c)
forall proto c.
Functor (WhenLeios proto) =>
PraosParams
-> EpochInfo (Except PastHorizonException)
-> PolyPraosValidateView proto c
-> SlotNo
-> Ticked (PolyPraosState proto)
-> PolyPraosState proto
reupdateChainDepStatePolyPraos PraosParams
prms EpochInfo (Except PastHorizonException)
ei
instance Dijkstra.DijkstraEraForecast era => Views.ForecastToPolyPraosLedgerView (Praos2 c) era where
forecastToPolyPraosLedgerView :: forall (t :: Timeline).
EraForecast era =>
Forecast t era -> PolyPraosLedgerView (Praos2 c)
forecastToPolyPraosLedgerView (Forecast t era
f :: SL.Forecast t era) =
Views.PraosLedgerView
{ plvPoolDistr :: PoolDistr
Views.plvPoolDistr = Forecast t era
f Forecast t era
-> Getting PoolDistr (Forecast t era) PoolDistr -> PoolDistr
forall s a. s -> Getting a s a -> a
^. forall era (t :: Timeline).
EraForecast era =>
Lens' (Forecast t era) PoolDistr
SL.poolDistrForecastL @era @t
, plvMaxHeaderSize :: Word16
Views.plvMaxHeaderSize = ChainChecksPParams -> Word16
ccMaxBHSize ChainChecksPParams
cc
, plvMaxBodySize :: Word32
Views.plvMaxBodySize = ChainChecksPParams -> Word32
ccMaxBBSize ChainChecksPParams
cc
, plvProtocolVersion :: ProtVer
Views.plvProtocolVersion = ChainChecksPParams -> ProtVer
ccProtocolVersion ChainChecksPParams
cc
, plvLeios :: WhenLeios (Praos2 c) LeiosLedgerView
Views.plvLeios =
LeiosLedgerView -> WhenLeios (Praos2 c) LeiosLedgerView
forall c a b. b -> LeiosOnly (Praos2 c) a b
Praos2HasLeios
MkLeiosLedgerView
{ llvCommittee :: LeiosCommittee
llvCommittee = Forecast t era
f Forecast t era
-> Getting LeiosCommittee (Forecast t era) LeiosCommittee
-> LeiosCommittee
forall s a. s -> Getting a s a -> a
^. forall era (t :: Timeline).
DijkstraEraForecast era =>
Lens' (Forecast t era) LeiosCommittee
Dijkstra.leiosCommitteeForecastL @era @t
, llvQuorumStakeThreshold :: UnitInterval
llvQuorumStakeThreshold = Forecast t era
f Forecast t era
-> Getting UnitInterval (Forecast t era) UnitInterval
-> UnitInterval
forall s a. s -> Getting a s a -> a
^. forall era (t :: Timeline).
DijkstraEraForecast era =>
Lens' (Forecast t era) UnitInterval
Dijkstra.leiosQuorumStakeThresholdForecastL @era @t
, llvAnnouncementPeriod :: Milliseconds32
llvAnnouncementPeriod = Forecast t era
f Forecast t era
-> Getting Milliseconds32 (Forecast t era) Milliseconds32
-> Milliseconds32
forall s a. s -> Getting a s a -> a
^. forall era (t :: Timeline).
DijkstraEraForecast era =>
Lens' (Forecast t era) Milliseconds32
Dijkstra.leiosAnnouncementPeriodLengthForecastL @era @t
, llvVotePeriod :: Milliseconds32
llvVotePeriod = Forecast t era
f Forecast t era
-> Getting Milliseconds32 (Forecast t era) Milliseconds32
-> Milliseconds32
forall s a. s -> Getting a s a -> a
^. forall era (t :: Timeline).
DijkstraEraForecast era =>
Lens' (Forecast t era) Milliseconds32
Dijkstra.leiosVotePeriodLengthForecastL @era @t
, llvDiffusionPeriod :: Milliseconds32
llvDiffusionPeriod = Forecast t era
f Forecast t era
-> Getting Milliseconds32 (Forecast t era) Milliseconds32
-> Milliseconds32
forall s a. s -> Getting a s a -> a
^. forall era (t :: Timeline).
DijkstraEraForecast era =>
Lens' (Forecast t era) Milliseconds32
Dijkstra.leiosDiffusionPeriodLengthForecastL @era @t
, llvMaxEbBodySize :: Word32
llvMaxEbBodySize = Forecast t era
f Forecast t era -> Getting Word32 (Forecast t era) Word32 -> Word32
forall s a. s -> Getting a s a -> a
^. forall era (t :: Timeline).
DijkstraEraForecast era =>
Lens' (Forecast t era) Word32
Dijkstra.maxEndorserBlockReferencesSizeForecastL @era @t
, llvMaxEbTxsSize :: Word32
llvMaxEbTxsSize = Forecast t era
f Forecast t era -> Getting Word32 (Forecast t era) Word32 -> Word32
forall s a. s -> Getting a s a -> a
^. forall era (t :: Timeline).
DijkstraEraForecast era =>
Lens' (Forecast t era) Word32
Dijkstra.maxEndorserBlockTxsSizeForecastL @era @t
}
, plvPeras :: WhenPeras (Praos2 c) PerasLedgerView
Views.plvPeras =
PerasLedgerView -> WhenPeras (Praos2 c) PerasLedgerView
forall c a b. b -> PerasOnly (Praos2 c) a b
Praos2HasPeras
MkPerasLedgerView
{ plvMinCandidateBlockAge :: SlotInterval
plvMinCandidateBlockAge = Forecast t era
f Forecast t era
-> Getting SlotInterval (Forecast t era) SlotInterval
-> SlotInterval
forall s a. s -> Getting a s a -> a
^. forall era (t :: Timeline).
DijkstraEraForecast era =>
Lens' (Forecast t era) SlotInterval
Dijkstra.perasMinCandidateBlockAgeForecastL @era @t
, plvHealingFactor :: PositiveInterval
plvHealingFactor = Forecast t era
f Forecast t era
-> Getting PositiveInterval (Forecast t era) PositiveInterval
-> PositiveInterval
forall s a. s -> Getting a s a -> a
^. forall era (t :: Timeline).
DijkstraEraForecast era =>
Lens' (Forecast t era) PositiveInterval
Dijkstra.perasHealingFactorForecastL @era @t
, plvCertBoost :: Word16
plvCertBoost = Forecast t era
f Forecast t era -> Getting Word16 (Forecast t era) Word16 -> Word16
forall s a. s -> Getting a s a -> a
^. forall era (t :: Timeline).
DijkstraEraForecast era =>
Lens' (Forecast t era) Word16
Dijkstra.perasCertBoostForecastL @era @t
, plvTargetCommitteeSize :: Word16
plvTargetCommitteeSize = Forecast t era
f Forecast t era -> Getting Word16 (Forecast t era) Word16 -> Word16
forall s a. s -> Getting a s a -> a
^. forall era (t :: Timeline).
DijkstraEraForecast era =>
Lens' (Forecast t era) Word16
Dijkstra.perasTargetCommitteeSizeForecastL @era @t
, plvBootstrapRound :: StrictMaybe Word32
plvBootstrapRound = Forecast t era
f Forecast t era
-> Getting
(StrictMaybe Word32) (Forecast t era) (StrictMaybe Word32)
-> StrictMaybe Word32
forall s a. s -> Getting a s a -> a
^. forall era (t :: Timeline).
DijkstraEraForecast era =>
Lens' (Forecast t era) (StrictMaybe Word32)
Dijkstra.perasBootstrapRoundForecastL @era @t
, plvQuorumThresholdSafetyMargin :: UnitInterval
plvQuorumThresholdSafetyMargin = Forecast t era
f Forecast t era
-> Getting UnitInterval (Forecast t era) UnitInterval
-> UnitInterval
forall s a. s -> Getting a s a -> a
^. forall era (t :: Timeline).
DijkstraEraForecast era =>
Lens' (Forecast t era) UnitInterval
Dijkstra.perasQuorumThresholdSafetyMarginForecastL @era @t
}
}
where
cc :: ChainChecksPParams
cc = forall (t :: Timeline) era.
EraForecast era =>
Forecast t era -> ChainChecksPParams
SL.forecastChainChecks @t @era Forecast t era
f
instance
TranslationContext era ~ DijkstraGenesis =>
TranslateProto (Praos c) (Praos2 c) era
where
translateLedgerView :: Proxy (Praos c, Praos2 c, era)
-> TranslationContext era
-> LedgerView (Praos c)
-> LedgerView (Praos2 c)
translateLedgerView Proxy (Praos c, Praos2 c, era)
_prx DijkstraGenesis{dgUpgradePParams :: DijkstraGenesis -> UpgradeDijkstraPParams Identity DijkstraEra
dgUpgradePParams = UpgradeDijkstraPParams Identity DijkstraEra
upgrade} LedgerView (Praos c)
lv =
Views.PraosLedgerView
{ plvPoolDistr :: PoolDistr
Views.plvPoolDistr = PolyPraosLedgerView (Praos c) -> PoolDistr
forall proto. PolyPraosLedgerView proto -> PoolDistr
Views.plvPoolDistr LedgerView (Praos c)
PolyPraosLedgerView (Praos c)
lv
, plvMaxHeaderSize :: Word16
Views.plvMaxHeaderSize = PolyPraosLedgerView (Praos c) -> Word16
forall proto. PolyPraosLedgerView proto -> Word16
Views.plvMaxHeaderSize LedgerView (Praos c)
PolyPraosLedgerView (Praos c)
lv
, plvMaxBodySize :: Word32
Views.plvMaxBodySize = PolyPraosLedgerView (Praos c) -> Word32
forall proto. PolyPraosLedgerView proto -> Word32
Views.plvMaxBodySize LedgerView (Praos c)
PolyPraosLedgerView (Praos c)
lv
, plvProtocolVersion :: ProtVer
Views.plvProtocolVersion = PolyPraosLedgerView (Praos c) -> ProtVer
forall proto. PolyPraosLedgerView proto -> ProtVer
Views.plvProtocolVersion LedgerView (Praos c)
PolyPraosLedgerView (Praos c)
lv
, plvLeios :: WhenLeios (Praos2 c) LeiosLedgerView
Views.plvLeios =
LeiosLedgerView -> WhenLeios (Praos2 c) LeiosLedgerView
forall c a b. b -> LeiosOnly (Praos2 c) a b
Praos2HasLeios
MkLeiosLedgerView
{ llvCommittee :: LeiosCommittee
llvCommittee = LeiosCommittee
emptyLeiosCommittee
, llvQuorumStakeThreshold :: UnitInterval
llvQuorumStakeThreshold = UpgradeDijkstraPParams Identity DijkstraEra
-> HKD Identity UnitInterval
forall (f :: * -> *) era.
UpgradeDijkstraPParams f era -> HKD f UnitInterval
udppLeiosQuorumStakeThreshold UpgradeDijkstraPParams Identity DijkstraEra
upgrade
, llvAnnouncementPeriod :: Milliseconds32
llvAnnouncementPeriod = UpgradeDijkstraPParams Identity DijkstraEra
-> HKD Identity Milliseconds32
forall (f :: * -> *) era.
UpgradeDijkstraPParams f era -> HKD f Milliseconds32
udppLeiosAnnouncementPeriodLength UpgradeDijkstraPParams Identity DijkstraEra
upgrade
, llvVotePeriod :: Milliseconds32
llvVotePeriod = UpgradeDijkstraPParams Identity DijkstraEra
-> HKD Identity Milliseconds32
forall (f :: * -> *) era.
UpgradeDijkstraPParams f era -> HKD f Milliseconds32
udppLeiosVotePeriodLength UpgradeDijkstraPParams Identity DijkstraEra
upgrade
, llvDiffusionPeriod :: Milliseconds32
llvDiffusionPeriod = UpgradeDijkstraPParams Identity DijkstraEra
-> HKD Identity Milliseconds32
forall (f :: * -> *) era.
UpgradeDijkstraPParams f era -> HKD f Milliseconds32
udppLeiosDiffusionPeriodLength UpgradeDijkstraPParams Identity DijkstraEra
upgrade
, llvMaxEbBodySize :: Word32
llvMaxEbBodySize = UpgradeDijkstraPParams Identity DijkstraEra -> HKD Identity Word32
forall (f :: * -> *) era.
UpgradeDijkstraPParams f era -> HKD f Word32
udppMaxEndorserBlockReferencesSize UpgradeDijkstraPParams Identity DijkstraEra
upgrade
, llvMaxEbTxsSize :: Word32
llvMaxEbTxsSize = UpgradeDijkstraPParams Identity DijkstraEra -> HKD Identity Word32
forall (f :: * -> *) era.
UpgradeDijkstraPParams f era -> HKD f Word32
udppMaxEndorserBlockTxsSize UpgradeDijkstraPParams Identity DijkstraEra
upgrade
}
, plvPeras :: WhenPeras (Praos2 c) PerasLedgerView
Views.plvPeras =
PerasLedgerView -> WhenPeras (Praos2 c) PerasLedgerView
forall c a b. b -> PerasOnly (Praos2 c) a b
Praos2HasPeras
MkPerasLedgerView
{ plvMinCandidateBlockAge :: SlotInterval
plvMinCandidateBlockAge = UpgradeDijkstraPParams Identity DijkstraEra
-> HKD Identity SlotInterval
forall (f :: * -> *) era.
UpgradeDijkstraPParams f era -> HKD f SlotInterval
udppPerasMinCandidateBlockAge UpgradeDijkstraPParams Identity DijkstraEra
upgrade
, plvHealingFactor :: PositiveInterval
plvHealingFactor = UpgradeDijkstraPParams Identity DijkstraEra
-> HKD Identity PositiveInterval
forall (f :: * -> *) era.
UpgradeDijkstraPParams f era -> HKD f PositiveInterval
udppPerasHealingFactor UpgradeDijkstraPParams Identity DijkstraEra
upgrade
, plvCertBoost :: Word16
plvCertBoost = UpgradeDijkstraPParams Identity DijkstraEra -> HKD Identity Word16
forall (f :: * -> *) era.
UpgradeDijkstraPParams f era -> HKD f Word16
udppPerasCertBoost UpgradeDijkstraPParams Identity DijkstraEra
upgrade
, plvTargetCommitteeSize :: Word16
plvTargetCommitteeSize = UpgradeDijkstraPParams Identity DijkstraEra -> HKD Identity Word16
forall (f :: * -> *) era.
UpgradeDijkstraPParams f era -> HKD f Word16
udppPerasTargetCommitteeSize UpgradeDijkstraPParams Identity DijkstraEra
upgrade
, plvBootstrapRound :: StrictMaybe Word32
plvBootstrapRound = UpgradeDijkstraPParams Identity DijkstraEra
-> HKD Identity (StrictMaybe Word32)
forall (f :: * -> *) era.
UpgradeDijkstraPParams f era -> HKD f (StrictMaybe Word32)
udppPerasBootstrapRound UpgradeDijkstraPParams Identity DijkstraEra
upgrade
, plvQuorumThresholdSafetyMargin :: UnitInterval
plvQuorumThresholdSafetyMargin = UpgradeDijkstraPParams Identity DijkstraEra
-> HKD Identity UnitInterval
forall (f :: * -> *) era.
UpgradeDijkstraPParams f era -> HKD f UnitInterval
udppPerasQuorumThresholdSafetyMargin UpgradeDijkstraPParams Identity DijkstraEra
upgrade
}
}
translateChainDepState :: Proxy (Praos c, Praos2 c, era)
-> ChainDepState (Praos c) -> ChainDepState (Praos2 c)
translateChainDepState Proxy (Praos c, Praos2 c, era)
_ ChainDepState (Praos c)
st =
PraosState
{ praosStateLastSlot :: WithOrigin SlotNo
praosStateLastSlot = PolyPraosState (Praos c) -> WithOrigin SlotNo
forall proto. PolyPraosState proto -> WithOrigin SlotNo
praosStateLastSlot ChainDepState (Praos c)
PolyPraosState (Praos c)
st
, praosStateOCertCounters :: Map (KeyHash BlockIssuer) Word64
praosStateOCertCounters = PolyPraosState (Praos c) -> Map (KeyHash BlockIssuer) Word64
forall proto.
PolyPraosState proto -> Map (KeyHash BlockIssuer) Word64
praosStateOCertCounters ChainDepState (Praos c)
PolyPraosState (Praos c)
st
, praosStateEvolvingNonce :: Nonce
praosStateEvolvingNonce = PolyPraosState (Praos c) -> Nonce
forall proto. PolyPraosState proto -> Nonce
praosStateEvolvingNonce ChainDepState (Praos c)
PolyPraosState (Praos c)
st
, praosStateCandidateNonce :: Nonce
praosStateCandidateNonce = PolyPraosState (Praos c) -> Nonce
forall proto. PolyPraosState proto -> Nonce
praosStateCandidateNonce ChainDepState (Praos c)
PolyPraosState (Praos c)
st
, praosStateEpochNonce :: Nonce
praosStateEpochNonce = PolyPraosState (Praos c) -> Nonce
forall proto. PolyPraosState proto -> Nonce
praosStateEpochNonce ChainDepState (Praos c)
PolyPraosState (Praos c)
st
, praosStatePreviousEpochNonce :: Nonce
praosStatePreviousEpochNonce = PolyPraosState (Praos c) -> Nonce
forall proto. PolyPraosState proto -> Nonce
praosStatePreviousEpochNonce ChainDepState (Praos c)
PolyPraosState (Praos c)
st
, praosStateLabNonce :: Nonce
praosStateLabNonce = PolyPraosState (Praos c) -> Nonce
forall proto. PolyPraosState proto -> Nonce
praosStateLabNonce ChainDepState (Praos c)
PolyPraosState (Praos c)
st
, praosStateLastEpochBlockNonce :: Nonce
praosStateLastEpochBlockNonce = PolyPraosState (Praos c) -> Nonce
forall proto. PolyPraosState proto -> Nonce
praosStateLastEpochBlockNonce ChainDepState (Praos c)
PolyPraosState (Praos c)
st
, praosStateLeiosAnnouncement :: WhenLeios (Praos2 c) (Either WhyNotCertifiable LeiosAnnouncement)
praosStateLeiosAnnouncement = Either WhyNotCertifiable LeiosAnnouncement
-> WhenLeios
(Praos2 c) (Either WhyNotCertifiable LeiosAnnouncement)
forall c a b. b -> LeiosOnly (Praos2 c) a b
Praos2HasLeios (WhyNotCertifiable -> Either WhyNotCertifiable LeiosAnnouncement
forall a b. a -> Either a b
Strict.Left WhyNotCertifiable
NothingAnnounced)
}
instance TranslateProto (Praos2 c) (Praos2 c) era where
translateLedgerView :: Proxy (Praos2 c, Praos2 c, era)
-> TranslationContext era
-> LedgerView (Praos2 c)
-> LedgerView (Praos2 c)
translateLedgerView Proxy (Praos2 c, Praos2 c, era)
_prx TranslationContext era
_ctx = LedgerView (Praos2 c) -> LedgerView (Praos2 c)
PolyPraosLedgerView (Praos2 c) -> PolyPraosLedgerView (Praos2 c)
forall a. a -> a
id
translateChainDepState :: Proxy (Praos2 c, Praos2 c, era)
-> ChainDepState (Praos2 c) -> ChainDepState (Praos2 c)
translateChainDepState Proxy (Praos2 c, Praos2 c, era)
_ ChainDepState (Praos2 c)
st =
ChainDepState (Praos2 c)
st
{ praosStateLeiosAnnouncement =
markUncertifiable AnnouncedInPreviousEra <$> praosStateLeiosAnnouncement st
}
instance
forall c era.
TranslationContext era ~ DijkstraGenesis =>
TranslateProto (TPraos c) (Praos2 c) era
where
translateLedgerView :: Proxy (TPraos c, Praos2 c, era)
-> TranslationContext era
-> LedgerView (TPraos c)
-> LedgerView (Praos2 c)
translateLedgerView Proxy (TPraos c, Praos2 c, era)
_prx TranslationContext era
ctx =
Proxy (Praos c, Praos2 c, era)
-> TranslationContext era
-> LedgerView (Praos c)
-> LedgerView (Praos2 c)
forall protoFrom protoTo eraTo.
TranslateProto protoFrom protoTo eraTo =>
Proxy (protoFrom, protoTo, eraTo)
-> TranslationContext eraTo
-> LedgerView protoFrom
-> LedgerView protoTo
translateLedgerView (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @(Praos c, Praos2 c, era)) TranslationContext era
ctx
(PolyPraosLedgerView (Praos c) -> PolyPraosLedgerView (Praos2 c))
-> (TPraosLedgerView -> PolyPraosLedgerView (Praos c))
-> TPraosLedgerView
-> PolyPraosLedgerView (Praos2 c)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Proxy (TPraos c, Praos c, era)
-> TranslationContext era
-> LedgerView (TPraos c)
-> LedgerView (Praos c)
forall protoFrom protoTo eraTo.
TranslateProto protoFrom protoTo eraTo =>
Proxy (protoFrom, protoTo, eraTo)
-> TranslationContext eraTo
-> LedgerView protoFrom
-> LedgerView protoTo
translateLedgerView (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @(TPraos c, Praos c, era)) TranslationContext era
ctx
translateChainDepState :: Proxy (TPraos c, Praos2 c, era)
-> ChainDepState (TPraos c) -> ChainDepState (Praos2 c)
translateChainDepState Proxy (TPraos c, Praos2 c, era)
_ =
Proxy (Praos c, Praos2 c, era)
-> ChainDepState (Praos c) -> ChainDepState (Praos2 c)
forall protoFrom protoTo eraTo.
TranslateProto protoFrom protoTo eraTo =>
Proxy (protoFrom, protoTo, eraTo)
-> ChainDepState protoFrom -> ChainDepState protoTo
translateChainDepState (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @(Praos c, Praos2 c, era))
(PolyPraosState (Praos c) -> PolyPraosState (Praos2 c))
-> (TPraosState -> PolyPraosState (Praos c))
-> TPraosState
-> PolyPraosState (Praos2 c)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Proxy (TPraos c, Praos c, era)
-> ChainDepState (TPraos c) -> ChainDepState (Praos c)
forall protoFrom protoTo eraTo.
TranslateProto protoFrom protoTo eraTo =>
Proxy (protoFrom, protoTo, eraTo)
-> ChainDepState protoFrom -> ChainDepState protoTo
translateChainDepState (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @(TPraos c, Praos c, era))
instance LeiosCrypto c => PraosProtocolSupportsNode (Praos2 c) where
type PraosProtocolSupportsNodeCrypto (Praos2 c) = c
getPraosNonces :: forall (proxy :: * -> *).
proxy (Praos2 c) -> ChainDepState (Praos2 c) -> PraosNonces
getPraosNonces proxy (Praos2 c)
_prx = ChainDepState (Praos2 c) -> PraosNonces
PolyPraosState (Praos2 c) -> PraosNonces
forall proto. PolyPraosState proto -> PraosNonces
getPraosNoncesPolyPraos
getOpCertCounters :: forall (proxy :: * -> *).
proxy (Praos2 c)
-> ChainDepState (Praos2 c) -> Map (KeyHash BlockIssuer) Word64
getOpCertCounters proxy (Praos2 c)
_prx = ChainDepState (Praos2 c) -> Map (KeyHash BlockIssuer) Word64
PolyPraosState (Praos2 c) -> Map (KeyHash BlockIssuer) Word64
forall proto.
PolyPraosState proto -> Map (KeyHash BlockIssuer) Word64
getOpCertCountersPolyPraos