{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE RoleAnnotations #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableSuperClasses #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module Cardano.Ledger.Dijkstra.Forecast (
  DijkstraForecast (..),
  DijkstraEraForecast (..),
) where

import Cardano.Ledger.BaseTypes (Milliseconds32, PositiveInterval, ProtVer, UnitInterval)
import Cardano.Ledger.Conway.Rules ()
import Cardano.Ledger.Core
import Cardano.Ledger.Dijkstra.Era (DijkstraEra)
import Cardano.Ledger.Dijkstra.Governance ()
import Cardano.Ledger.Dijkstra.PParams (
  DijkstraEraPParams,
  ppLeiosAnnouncementPeriodLengthL,
  ppLeiosCommitteeSizeL,
  ppLeiosDiffusionPeriodLengthL,
  ppLeiosQuorumStakeThresholdL,
  ppLeiosVotePeriodLengthL,
  ppMaxEndorserBlockExUnitsL,
  ppMaxEndorserBlockReferencesSizeL,
  ppMaxEndorserBlockTxsSizeL,
  ppMaxRefScriptSizePerEndorserBlockL,
  ppPerasBootstrapRoundL,
  ppPerasCertBoostL,
  ppPerasHealingFactorL,
  ppPerasMinCandidateBlockAgeL,
  ppPerasQuorumThresholdSafetyMarginL,
  ppPerasTargetCommitteeSizeL,
 )
import Cardano.Ledger.Dijkstra.Rules.Snap ()
import Cardano.Ledger.Dijkstra.State.CertState ()
import Cardano.Ledger.Plutus.ExUnits (OrdExUnits)
import Cardano.Ledger.Shelley.API.Forecast (
  EraForecast (..),
  Timeline (..),
 )
import Cardano.Ledger.Shelley.LedgerState (
  NewEpochState (..),
  curPParamsEpochStateL,
  esSnapshotsL,
  nesEsL,
  nesStakePoolDistrG,
 )
import Cardano.Ledger.State (
  EraGov,
  LeiosCommittee,
  PoolDistr (..),
  ssLeiosCommitteeL,
  ssStakeSetL,
 )
import Cardano.Slotting.Slot (SlotInterval)
import Control.DeepSeq (NFData)
import Data.Maybe.Strict (StrictMaybe)
import Data.Word (Word16, Word32)
import GHC.Generics (Generic)
import Lens.Micro (Lens', lens, (^.))
import NoThunks.Class (NoThunks (..))

-- | Forecast data for Dijkstra era onward.
--
-- This includes:
-- * Praos fields
-- * Leios protocol parameters and the epoch's voting committee
-- * Peras protocol parameters
--
-- NOTE: The Leios fields are fixed at an epoch boundary. The committee is
-- seated on the stake snapshot by the SNAP rule, the rest are protocol
-- parameters. They are forecastable for the same reason the Praos fields are.
data DijkstraForecast (t :: Timeline) era = DijkstraForecast
  { forall (t :: Timeline) era. DijkstraForecast t era -> PoolDistr
dfPoolDistr :: !PoolDistr
  , forall (t :: Timeline) era. DijkstraForecast t era -> Word16
dfMaxBlockHeaderSize :: !Word16
  , forall (t :: Timeline) era. DijkstraForecast t era -> Word32
dfMaxBlockBodySize :: !Word32
  , forall (t :: Timeline) era. DijkstraForecast t era -> ProtVer
dfProtocolVersion :: !ProtVer
  , forall (t :: Timeline) era.
DijkstraForecast t era -> LeiosCommittee
dfLeiosCommittee :: !LeiosCommittee
  , forall (t :: Timeline) era. DijkstraForecast t era -> Word16
dfLeiosCommitteeSize :: !Word16
  , forall (t :: Timeline) era. DijkstraForecast t era -> UnitInterval
dfLeiosQuorumStakeThreshold :: !UnitInterval
  , forall (t :: Timeline) era.
DijkstraForecast t era -> Milliseconds32
dfLeiosAnnouncementPeriodLength :: !Milliseconds32
  , forall (t :: Timeline) era.
DijkstraForecast t era -> Milliseconds32
dfLeiosVotePeriodLength :: !Milliseconds32
  , forall (t :: Timeline) era.
DijkstraForecast t era -> Milliseconds32
dfLeiosDiffusionPeriodLength :: !Milliseconds32
  , forall (t :: Timeline) era. DijkstraForecast t era -> Word32
dfMaxEndorserBlockReferencesSize :: !Word32
  , forall (t :: Timeline) era. DijkstraForecast t era -> Word32
dfMaxEndorserBlockTxsSize :: !Word32
  , forall (t :: Timeline) era. DijkstraForecast t era -> OrdExUnits
dfMaxEndorserBlockExUnits :: !OrdExUnits
  , forall (t :: Timeline) era. DijkstraForecast t era -> Word32
dfMaxRefScriptSizePerEndorserBlock :: !Word32
  , forall (t :: Timeline) era. DijkstraForecast t era -> SlotInterval
dfPerasMinCandidateBlockAge :: !SlotInterval
  , forall (t :: Timeline) era.
DijkstraForecast t era -> PositiveInterval
dfPerasHealingFactor :: !PositiveInterval
  , forall (t :: Timeline) era. DijkstraForecast t era -> Word16
dfPerasCertBoost :: !Word16
  , forall (t :: Timeline) era. DijkstraForecast t era -> Word16
dfPerasTargetCommitteeSize :: !Word16
  , forall (t :: Timeline) era.
DijkstraForecast t era -> StrictMaybe Word32
dfPerasBootstrapRound :: !(StrictMaybe Word32)
  , forall (t :: Timeline) era. DijkstraForecast t era -> UnitInterval
dfPerasQuorumThresholdSafetyMargin :: !UnitInterval
  }
  deriving (DijkstraForecast t era -> DijkstraForecast t era -> Bool
(DijkstraForecast t era -> DijkstraForecast t era -> Bool)
-> (DijkstraForecast t era -> DijkstraForecast t era -> Bool)
-> Eq (DijkstraForecast t era)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall (t :: Timeline) era.
DijkstraForecast t era -> DijkstraForecast t era -> Bool
$c== :: forall (t :: Timeline) era.
DijkstraForecast t era -> DijkstraForecast t era -> Bool
== :: DijkstraForecast t era -> DijkstraForecast t era -> Bool
$c/= :: forall (t :: Timeline) era.
DijkstraForecast t era -> DijkstraForecast t era -> Bool
/= :: DijkstraForecast t era -> DijkstraForecast t era -> Bool
Eq, Int -> DijkstraForecast t era -> ShowS
[DijkstraForecast t era] -> ShowS
DijkstraForecast t era -> String
(Int -> DijkstraForecast t era -> ShowS)
-> (DijkstraForecast t era -> String)
-> ([DijkstraForecast t era] -> ShowS)
-> Show (DijkstraForecast t era)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall (t :: Timeline) era. Int -> DijkstraForecast t era -> ShowS
forall (t :: Timeline) era. [DijkstraForecast t era] -> ShowS
forall (t :: Timeline) era. DijkstraForecast t era -> String
$cshowsPrec :: forall (t :: Timeline) era. Int -> DijkstraForecast t era -> ShowS
showsPrec :: Int -> DijkstraForecast t era -> ShowS
$cshow :: forall (t :: Timeline) era. DijkstraForecast t era -> String
show :: DijkstraForecast t era -> String
$cshowList :: forall (t :: Timeline) era. [DijkstraForecast t era] -> ShowS
showList :: [DijkstraForecast t era] -> ShowS
Show, (forall x.
 DijkstraForecast t era -> Rep (DijkstraForecast t era) x)
-> (forall x.
    Rep (DijkstraForecast t era) x -> DijkstraForecast t era)
-> Generic (DijkstraForecast t era)
forall x. Rep (DijkstraForecast t era) x -> DijkstraForecast t era
forall x. DijkstraForecast t era -> Rep (DijkstraForecast t era) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall (t :: Timeline) era x.
Rep (DijkstraForecast t era) x -> DijkstraForecast t era
forall (t :: Timeline) era x.
DijkstraForecast t era -> Rep (DijkstraForecast t era) x
$cfrom :: forall (t :: Timeline) era x.
DijkstraForecast t era -> Rep (DijkstraForecast t era) x
from :: forall x. DijkstraForecast t era -> Rep (DijkstraForecast t era) x
$cto :: forall (t :: Timeline) era x.
Rep (DijkstraForecast t era) x -> DijkstraForecast t era
to :: forall x. Rep (DijkstraForecast t era) x -> DijkstraForecast t era
Generic)

type role DijkstraForecast phantom phantom

instance NFData (DijkstraForecast t era)

instance NoThunks (DijkstraForecast t era)

-- | Additional forecast fields available only in Leios eras.
class EraForecast era => DijkstraEraForecast era where
  leiosCommitteeForecastL :: Lens' (Forecast t era) LeiosCommittee
  leiosCommitteeSizeForecastL :: Lens' (Forecast t era) Word16
  leiosQuorumStakeThresholdForecastL :: Lens' (Forecast t era) UnitInterval
  leiosAnnouncementPeriodLengthForecastL :: Lens' (Forecast t era) Milliseconds32
  leiosVotePeriodLengthForecastL :: Lens' (Forecast t era) Milliseconds32
  leiosDiffusionPeriodLengthForecastL :: Lens' (Forecast t era) Milliseconds32
  maxEndorserBlockReferencesSizeForecastL :: Lens' (Forecast t era) Word32
  maxEndorserBlockTxsSizeForecastL :: Lens' (Forecast t era) Word32
  maxEndorserBlockExUnitsForecastL :: Lens' (Forecast t era) OrdExUnits
  maxRefScriptSizePerEndorserBlockForecastL :: Lens' (Forecast t era) Word32
  perasMinCandidateBlockAgeForecastL :: Lens' (Forecast t era) SlotInterval
  perasHealingFactorForecastL :: Lens' (Forecast t era) PositiveInterval
  perasCertBoostForecastL :: Lens' (Forecast t era) Word16
  perasTargetCommitteeSizeForecastL :: Lens' (Forecast t era) Word16
  perasBootstrapRoundForecastL :: Lens' (Forecast t era) (StrictMaybe Word32)
  perasQuorumThresholdSafetyMarginForecastL :: Lens' (Forecast t era) UnitInterval

mkDijkstraForecast ::
  (DijkstraEraPParams era, EraGov era) =>
  NewEpochState era ->
  DijkstraForecast t era
mkDijkstraForecast :: forall era (t :: Timeline).
(DijkstraEraPParams era, EraGov era) =>
NewEpochState era -> DijkstraForecast t era
mkDijkstraForecast NewEpochState era
nes =
  DijkstraForecast
    { dfPoolDistr :: PoolDistr
dfPoolDistr = NewEpochState era
nes NewEpochState era
-> Getting PoolDistr (NewEpochState era) PoolDistr -> PoolDistr
forall s a. s -> Getting a s a -> a
^. Getting PoolDistr (NewEpochState era) PoolDistr
forall era r. Getting r (NewEpochState era) PoolDistr
nesStakePoolDistrG
    , dfMaxBlockHeaderSize :: Word16
dfMaxBlockHeaderSize = PParams era
pp PParams era -> Getting Word16 (PParams era) Word16 -> Word16
forall s a. s -> Getting a s a -> a
^. Getting Word16 (PParams era) Word16
forall era. EraPParams era => Lens' (PParams era) Word16
Lens' (PParams era) Word16
ppMaxBHSizeL
    , dfMaxBlockBodySize :: Word32
dfMaxBlockBodySize = PParams era
pp PParams era -> Getting Word32 (PParams era) Word32 -> Word32
forall s a. s -> Getting a s a -> a
^. Getting Word32 (PParams era) Word32
forall era. EraPParams era => Lens' (PParams era) Word32
Lens' (PParams era) Word32
ppMaxBBSizeL
    , dfProtocolVersion :: ProtVer
dfProtocolVersion = PParams era
pp PParams era -> Getting ProtVer (PParams era) ProtVer -> ProtVer
forall s a. s -> Getting a s a -> a
^. Getting ProtVer (PParams era) ProtVer
forall era. EraPParams era => Lens' (PParams era) ProtVer
Lens' (PParams era) ProtVer
ppProtocolVersionL
    , dfLeiosCommittee :: LeiosCommittee
dfLeiosCommittee = NewEpochState era
nes NewEpochState era
-> Getting LeiosCommittee (NewEpochState era) LeiosCommittee
-> LeiosCommittee
forall s a. s -> Getting a s a -> a
^. (EpochState era -> Const LeiosCommittee (EpochState era))
-> NewEpochState era -> Const LeiosCommittee (NewEpochState era)
forall era (f :: * -> *).
Functor f =>
(EpochState era -> f (EpochState era))
-> NewEpochState era -> f (NewEpochState era)
nesEsL ((EpochState era -> Const LeiosCommittee (EpochState era))
 -> NewEpochState era -> Const LeiosCommittee (NewEpochState era))
-> ((LeiosCommittee -> Const LeiosCommittee LeiosCommittee)
    -> EpochState era -> Const LeiosCommittee (EpochState era))
-> Getting LeiosCommittee (NewEpochState era) LeiosCommittee
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SnapShots era -> Const LeiosCommittee (SnapShots era))
-> EpochState era -> Const LeiosCommittee (EpochState era)
forall era (f :: * -> *).
Functor f =>
(SnapShots era -> f (SnapShots era))
-> EpochState era -> f (EpochState era)
esSnapshotsL ((SnapShots era -> Const LeiosCommittee (SnapShots era))
 -> EpochState era -> Const LeiosCommittee (EpochState era))
-> ((LeiosCommittee -> Const LeiosCommittee LeiosCommittee)
    -> SnapShots era -> Const LeiosCommittee (SnapShots era))
-> (LeiosCommittee -> Const LeiosCommittee LeiosCommittee)
-> EpochState era
-> Const LeiosCommittee (EpochState era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (SetSnapShot -> Const LeiosCommittee SetSnapShot)
-> SnapShots era -> Const LeiosCommittee (SnapShots era)
forall era (f :: * -> *).
Functor f =>
(SetSnapShot -> f SetSnapShot)
-> SnapShots era -> f (SnapShots era)
ssStakeSetL ((SetSnapShot -> Const LeiosCommittee SetSnapShot)
 -> SnapShots era -> Const LeiosCommittee (SnapShots era))
-> ((LeiosCommittee -> Const LeiosCommittee LeiosCommittee)
    -> SetSnapShot -> Const LeiosCommittee SetSnapShot)
-> (LeiosCommittee -> Const LeiosCommittee LeiosCommittee)
-> SnapShots era
-> Const LeiosCommittee (SnapShots era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (LeiosCommittee -> Const LeiosCommittee LeiosCommittee)
-> SetSnapShot -> Const LeiosCommittee SetSnapShot
Lens' SetSnapShot LeiosCommittee
ssLeiosCommitteeL
    , dfLeiosCommitteeSize :: Word16
dfLeiosCommitteeSize = PParams era
pp PParams era -> Getting Word16 (PParams era) Word16 -> Word16
forall s a. s -> Getting a s a -> a
^. Getting Word16 (PParams era) Word16
forall era. DijkstraEraPParams era => Lens' (PParams era) Word16
Lens' (PParams era) Word16
ppLeiosCommitteeSizeL
    , dfLeiosQuorumStakeThreshold :: UnitInterval
dfLeiosQuorumStakeThreshold = PParams era
pp PParams era
-> Getting UnitInterval (PParams era) UnitInterval -> UnitInterval
forall s a. s -> Getting a s a -> a
^. Getting UnitInterval (PParams era) UnitInterval
forall era.
DijkstraEraPParams era =>
Lens' (PParams era) UnitInterval
Lens' (PParams era) UnitInterval
ppLeiosQuorumStakeThresholdL
    , dfLeiosAnnouncementPeriodLength :: Milliseconds32
dfLeiosAnnouncementPeriodLength = PParams era
pp PParams era
-> Getting Milliseconds32 (PParams era) Milliseconds32
-> Milliseconds32
forall s a. s -> Getting a s a -> a
^. Getting Milliseconds32 (PParams era) Milliseconds32
forall era.
DijkstraEraPParams era =>
Lens' (PParams era) Milliseconds32
Lens' (PParams era) Milliseconds32
ppLeiosAnnouncementPeriodLengthL
    , dfLeiosVotePeriodLength :: Milliseconds32
dfLeiosVotePeriodLength = PParams era
pp PParams era
-> Getting Milliseconds32 (PParams era) Milliseconds32
-> Milliseconds32
forall s a. s -> Getting a s a -> a
^. Getting Milliseconds32 (PParams era) Milliseconds32
forall era.
DijkstraEraPParams era =>
Lens' (PParams era) Milliseconds32
Lens' (PParams era) Milliseconds32
ppLeiosVotePeriodLengthL
    , dfLeiosDiffusionPeriodLength :: Milliseconds32
dfLeiosDiffusionPeriodLength = PParams era
pp PParams era
-> Getting Milliseconds32 (PParams era) Milliseconds32
-> Milliseconds32
forall s a. s -> Getting a s a -> a
^. Getting Milliseconds32 (PParams era) Milliseconds32
forall era.
DijkstraEraPParams era =>
Lens' (PParams era) Milliseconds32
Lens' (PParams era) Milliseconds32
ppLeiosDiffusionPeriodLengthL
    , dfMaxEndorserBlockReferencesSize :: Word32
dfMaxEndorserBlockReferencesSize = PParams era
pp PParams era -> Getting Word32 (PParams era) Word32 -> Word32
forall s a. s -> Getting a s a -> a
^. Getting Word32 (PParams era) Word32
forall era. DijkstraEraPParams era => Lens' (PParams era) Word32
Lens' (PParams era) Word32
ppMaxEndorserBlockReferencesSizeL
    , dfMaxEndorserBlockTxsSize :: Word32
dfMaxEndorserBlockTxsSize = PParams era
pp PParams era -> Getting Word32 (PParams era) Word32 -> Word32
forall s a. s -> Getting a s a -> a
^. Getting Word32 (PParams era) Word32
forall era. DijkstraEraPParams era => Lens' (PParams era) Word32
Lens' (PParams era) Word32
ppMaxEndorserBlockTxsSizeL
    , dfMaxEndorserBlockExUnits :: OrdExUnits
dfMaxEndorserBlockExUnits = PParams era
pp PParams era
-> Getting OrdExUnits (PParams era) OrdExUnits -> OrdExUnits
forall s a. s -> Getting a s a -> a
^. Getting OrdExUnits (PParams era) OrdExUnits
forall era.
DijkstraEraPParams era =>
Lens' (PParams era) OrdExUnits
Lens' (PParams era) OrdExUnits
ppMaxEndorserBlockExUnitsL
    , dfMaxRefScriptSizePerEndorserBlock :: Word32
dfMaxRefScriptSizePerEndorserBlock = PParams era
pp PParams era -> Getting Word32 (PParams era) Word32 -> Word32
forall s a. s -> Getting a s a -> a
^. Getting Word32 (PParams era) Word32
forall era. DijkstraEraPParams era => Lens' (PParams era) Word32
Lens' (PParams era) Word32
ppMaxRefScriptSizePerEndorserBlockL
    , dfPerasMinCandidateBlockAge :: SlotInterval
dfPerasMinCandidateBlockAge = PParams era
pp PParams era
-> Getting SlotInterval (PParams era) SlotInterval -> SlotInterval
forall s a. s -> Getting a s a -> a
^. Getting SlotInterval (PParams era) SlotInterval
forall era.
DijkstraEraPParams era =>
Lens' (PParams era) SlotInterval
Lens' (PParams era) SlotInterval
ppPerasMinCandidateBlockAgeL
    , dfPerasHealingFactor :: PositiveInterval
dfPerasHealingFactor = PParams era
pp PParams era
-> Getting PositiveInterval (PParams era) PositiveInterval
-> PositiveInterval
forall s a. s -> Getting a s a -> a
^. Getting PositiveInterval (PParams era) PositiveInterval
forall era.
DijkstraEraPParams era =>
Lens' (PParams era) PositiveInterval
Lens' (PParams era) PositiveInterval
ppPerasHealingFactorL
    , dfPerasCertBoost :: Word16
dfPerasCertBoost = PParams era
pp PParams era -> Getting Word16 (PParams era) Word16 -> Word16
forall s a. s -> Getting a s a -> a
^. Getting Word16 (PParams era) Word16
forall era. DijkstraEraPParams era => Lens' (PParams era) Word16
Lens' (PParams era) Word16
ppPerasCertBoostL
    , dfPerasTargetCommitteeSize :: Word16
dfPerasTargetCommitteeSize = PParams era
pp PParams era -> Getting Word16 (PParams era) Word16 -> Word16
forall s a. s -> Getting a s a -> a
^. Getting Word16 (PParams era) Word16
forall era. DijkstraEraPParams era => Lens' (PParams era) Word16
Lens' (PParams era) Word16
ppPerasTargetCommitteeSizeL
    , dfPerasBootstrapRound :: StrictMaybe Word32
dfPerasBootstrapRound = PParams era
pp PParams era
-> Getting (StrictMaybe Word32) (PParams era) (StrictMaybe Word32)
-> StrictMaybe Word32
forall s a. s -> Getting a s a -> a
^. Getting (StrictMaybe Word32) (PParams era) (StrictMaybe Word32)
forall era.
DijkstraEraPParams era =>
Lens' (PParams era) (StrictMaybe Word32)
Lens' (PParams era) (StrictMaybe Word32)
ppPerasBootstrapRoundL
    , dfPerasQuorumThresholdSafetyMargin :: UnitInterval
dfPerasQuorumThresholdSafetyMargin = PParams era
pp PParams era
-> Getting UnitInterval (PParams era) UnitInterval -> UnitInterval
forall s a. s -> Getting a s a -> a
^. Getting UnitInterval (PParams era) UnitInterval
forall era.
DijkstraEraPParams era =>
Lens' (PParams era) UnitInterval
Lens' (PParams era) UnitInterval
ppPerasQuorumThresholdSafetyMarginL
    }
  where
    pp :: PParams era
pp = NewEpochState era
nes NewEpochState era
-> Getting (PParams era) (NewEpochState era) (PParams era)
-> PParams era
forall s a. s -> Getting a s a -> a
^. (EpochState era -> Const (PParams era) (EpochState era))
-> NewEpochState era -> Const (PParams era) (NewEpochState era)
forall era (f :: * -> *).
Functor f =>
(EpochState era -> f (EpochState era))
-> NewEpochState era -> f (NewEpochState era)
nesEsL ((EpochState era -> Const (PParams era) (EpochState era))
 -> NewEpochState era -> Const (PParams era) (NewEpochState era))
-> ((PParams era -> Const (PParams era) (PParams era))
    -> EpochState era -> Const (PParams era) (EpochState era))
-> Getting (PParams era) (NewEpochState era) (PParams era)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (PParams era -> Const (PParams era) (PParams era))
-> EpochState era -> Const (PParams era) (EpochState era)
forall era. EraGov era => Lens' (EpochState era) (PParams era)
Lens' (EpochState era) (PParams era)
curPParamsEpochStateL

dfPoolDistrL :: Lens' (DijkstraForecast t era) PoolDistr
dfPoolDistrL :: forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(PoolDistr -> f PoolDistr)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfPoolDistrL = (DijkstraForecast t era -> PoolDistr)
-> (DijkstraForecast t era -> PoolDistr -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era)
     (DijkstraForecast t era)
     PoolDistr
     PoolDistr
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens DijkstraForecast t era -> PoolDistr
forall (t :: Timeline) era. DijkstraForecast t era -> PoolDistr
dfPoolDistr ((DijkstraForecast t era -> PoolDistr -> DijkstraForecast t era)
 -> Lens
      (DijkstraForecast t era)
      (DijkstraForecast t era)
      PoolDistr
      PoolDistr)
-> (DijkstraForecast t era -> PoolDistr -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era)
     (DijkstraForecast t era)
     PoolDistr
     PoolDistr
forall a b. (a -> b) -> a -> b
$ \DijkstraForecast t era
s PoolDistr
x -> DijkstraForecast t era
s {dfPoolDistr = x}

dfMaxBlockHeaderSizeL :: Lens' (DijkstraForecast t era) Word16
dfMaxBlockHeaderSizeL :: forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(Word16 -> f Word16)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfMaxBlockHeaderSizeL = (DijkstraForecast t era -> Word16)
-> (DijkstraForecast t era -> Word16 -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era) (DijkstraForecast t era) Word16 Word16
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens DijkstraForecast t era -> Word16
forall (t :: Timeline) era. DijkstraForecast t era -> Word16
dfMaxBlockHeaderSize ((DijkstraForecast t era -> Word16 -> DijkstraForecast t era)
 -> Lens
      (DijkstraForecast t era) (DijkstraForecast t era) Word16 Word16)
-> (DijkstraForecast t era -> Word16 -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era) (DijkstraForecast t era) Word16 Word16
forall a b. (a -> b) -> a -> b
$ \DijkstraForecast t era
s Word16
x -> DijkstraForecast t era
s {dfMaxBlockHeaderSize = x}

dfMaxBlockBodySizeL :: Lens' (DijkstraForecast t era) Word32
dfMaxBlockBodySizeL :: forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(Word32 -> f Word32)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfMaxBlockBodySizeL = (DijkstraForecast t era -> Word32)
-> (DijkstraForecast t era -> Word32 -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era) (DijkstraForecast t era) Word32 Word32
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens DijkstraForecast t era -> Word32
forall (t :: Timeline) era. DijkstraForecast t era -> Word32
dfMaxBlockBodySize ((DijkstraForecast t era -> Word32 -> DijkstraForecast t era)
 -> Lens
      (DijkstraForecast t era) (DijkstraForecast t era) Word32 Word32)
-> (DijkstraForecast t era -> Word32 -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era) (DijkstraForecast t era) Word32 Word32
forall a b. (a -> b) -> a -> b
$ \DijkstraForecast t era
s Word32
x -> DijkstraForecast t era
s {dfMaxBlockBodySize = x}

dfProtocolVersionL :: Lens' (DijkstraForecast t era) ProtVer
dfProtocolVersionL :: forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(ProtVer -> f ProtVer)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfProtocolVersionL = (DijkstraForecast t era -> ProtVer)
-> (DijkstraForecast t era -> ProtVer -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era) (DijkstraForecast t era) ProtVer ProtVer
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens DijkstraForecast t era -> ProtVer
forall (t :: Timeline) era. DijkstraForecast t era -> ProtVer
dfProtocolVersion ((DijkstraForecast t era -> ProtVer -> DijkstraForecast t era)
 -> Lens
      (DijkstraForecast t era) (DijkstraForecast t era) ProtVer ProtVer)
-> (DijkstraForecast t era -> ProtVer -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era) (DijkstraForecast t era) ProtVer ProtVer
forall a b. (a -> b) -> a -> b
$ \DijkstraForecast t era
s ProtVer
x -> DijkstraForecast t era
s {dfProtocolVersion = x}

dfLeiosCommitteeL :: Lens' (DijkstraForecast t era) LeiosCommittee
dfLeiosCommitteeL :: forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(LeiosCommittee -> f LeiosCommittee)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfLeiosCommitteeL = (DijkstraForecast t era -> LeiosCommittee)
-> (DijkstraForecast t era
    -> LeiosCommittee -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era)
     (DijkstraForecast t era)
     LeiosCommittee
     LeiosCommittee
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens DijkstraForecast t era -> LeiosCommittee
forall (t :: Timeline) era.
DijkstraForecast t era -> LeiosCommittee
dfLeiosCommittee ((DijkstraForecast t era
  -> LeiosCommittee -> DijkstraForecast t era)
 -> Lens
      (DijkstraForecast t era)
      (DijkstraForecast t era)
      LeiosCommittee
      LeiosCommittee)
-> (DijkstraForecast t era
    -> LeiosCommittee -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era)
     (DijkstraForecast t era)
     LeiosCommittee
     LeiosCommittee
forall a b. (a -> b) -> a -> b
$ \DijkstraForecast t era
s LeiosCommittee
x -> DijkstraForecast t era
s {dfLeiosCommittee = x}

dfLeiosCommitteeSizeL :: Lens' (DijkstraForecast t era) Word16
dfLeiosCommitteeSizeL :: forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(Word16 -> f Word16)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfLeiosCommitteeSizeL = (DijkstraForecast t era -> Word16)
-> (DijkstraForecast t era -> Word16 -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era) (DijkstraForecast t era) Word16 Word16
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens DijkstraForecast t era -> Word16
forall (t :: Timeline) era. DijkstraForecast t era -> Word16
dfLeiosCommitteeSize ((DijkstraForecast t era -> Word16 -> DijkstraForecast t era)
 -> Lens
      (DijkstraForecast t era) (DijkstraForecast t era) Word16 Word16)
-> (DijkstraForecast t era -> Word16 -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era) (DijkstraForecast t era) Word16 Word16
forall a b. (a -> b) -> a -> b
$ \DijkstraForecast t era
s Word16
x -> DijkstraForecast t era
s {dfLeiosCommitteeSize = x}

dfLeiosQuorumStakeThresholdL :: Lens' (DijkstraForecast t era) UnitInterval
dfLeiosQuorumStakeThresholdL :: forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(UnitInterval -> f UnitInterval)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfLeiosQuorumStakeThresholdL =
  (DijkstraForecast t era -> UnitInterval)
-> (DijkstraForecast t era
    -> UnitInterval -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era)
     (DijkstraForecast t era)
     UnitInterval
     UnitInterval
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens DijkstraForecast t era -> UnitInterval
forall (t :: Timeline) era. DijkstraForecast t era -> UnitInterval
dfLeiosQuorumStakeThreshold ((DijkstraForecast t era -> UnitInterval -> DijkstraForecast t era)
 -> Lens
      (DijkstraForecast t era)
      (DijkstraForecast t era)
      UnitInterval
      UnitInterval)
-> (DijkstraForecast t era
    -> UnitInterval -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era)
     (DijkstraForecast t era)
     UnitInterval
     UnitInterval
forall a b. (a -> b) -> a -> b
$ \DijkstraForecast t era
s UnitInterval
x -> DijkstraForecast t era
s {dfLeiosQuorumStakeThreshold = x}

dfLeiosAnnouncementPeriodLengthL :: Lens' (DijkstraForecast t era) Milliseconds32
dfLeiosAnnouncementPeriodLengthL :: forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(Milliseconds32 -> f Milliseconds32)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfLeiosAnnouncementPeriodLengthL =
  (DijkstraForecast t era -> Milliseconds32)
-> (DijkstraForecast t era
    -> Milliseconds32 -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era)
     (DijkstraForecast t era)
     Milliseconds32
     Milliseconds32
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens DijkstraForecast t era -> Milliseconds32
forall (t :: Timeline) era.
DijkstraForecast t era -> Milliseconds32
dfLeiosAnnouncementPeriodLength ((DijkstraForecast t era
  -> Milliseconds32 -> DijkstraForecast t era)
 -> Lens
      (DijkstraForecast t era)
      (DijkstraForecast t era)
      Milliseconds32
      Milliseconds32)
-> (DijkstraForecast t era
    -> Milliseconds32 -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era)
     (DijkstraForecast t era)
     Milliseconds32
     Milliseconds32
forall a b. (a -> b) -> a -> b
$ \DijkstraForecast t era
s Milliseconds32
x -> DijkstraForecast t era
s {dfLeiosAnnouncementPeriodLength = x}

dfLeiosVotePeriodLengthL :: Lens' (DijkstraForecast t era) Milliseconds32
dfLeiosVotePeriodLengthL :: forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(Milliseconds32 -> f Milliseconds32)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfLeiosVotePeriodLengthL =
  (DijkstraForecast t era -> Milliseconds32)
-> (DijkstraForecast t era
    -> Milliseconds32 -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era)
     (DijkstraForecast t era)
     Milliseconds32
     Milliseconds32
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens DijkstraForecast t era -> Milliseconds32
forall (t :: Timeline) era.
DijkstraForecast t era -> Milliseconds32
dfLeiosVotePeriodLength ((DijkstraForecast t era
  -> Milliseconds32 -> DijkstraForecast t era)
 -> Lens
      (DijkstraForecast t era)
      (DijkstraForecast t era)
      Milliseconds32
      Milliseconds32)
-> (DijkstraForecast t era
    -> Milliseconds32 -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era)
     (DijkstraForecast t era)
     Milliseconds32
     Milliseconds32
forall a b. (a -> b) -> a -> b
$ \DijkstraForecast t era
s Milliseconds32
x -> DijkstraForecast t era
s {dfLeiosVotePeriodLength = x}

dfLeiosDiffusionPeriodLengthL :: Lens' (DijkstraForecast t era) Milliseconds32
dfLeiosDiffusionPeriodLengthL :: forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(Milliseconds32 -> f Milliseconds32)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfLeiosDiffusionPeriodLengthL =
  (DijkstraForecast t era -> Milliseconds32)
-> (DijkstraForecast t era
    -> Milliseconds32 -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era)
     (DijkstraForecast t era)
     Milliseconds32
     Milliseconds32
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens DijkstraForecast t era -> Milliseconds32
forall (t :: Timeline) era.
DijkstraForecast t era -> Milliseconds32
dfLeiosDiffusionPeriodLength ((DijkstraForecast t era
  -> Milliseconds32 -> DijkstraForecast t era)
 -> Lens
      (DijkstraForecast t era)
      (DijkstraForecast t era)
      Milliseconds32
      Milliseconds32)
-> (DijkstraForecast t era
    -> Milliseconds32 -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era)
     (DijkstraForecast t era)
     Milliseconds32
     Milliseconds32
forall a b. (a -> b) -> a -> b
$ \DijkstraForecast t era
s Milliseconds32
x -> DijkstraForecast t era
s {dfLeiosDiffusionPeriodLength = x}

dfMaxEndorserBlockReferencesSizeL :: Lens' (DijkstraForecast t era) Word32
dfMaxEndorserBlockReferencesSizeL :: forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(Word32 -> f Word32)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfMaxEndorserBlockReferencesSizeL =
  (DijkstraForecast t era -> Word32)
-> (DijkstraForecast t era -> Word32 -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era) (DijkstraForecast t era) Word32 Word32
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens DijkstraForecast t era -> Word32
forall (t :: Timeline) era. DijkstraForecast t era -> Word32
dfMaxEndorserBlockReferencesSize ((DijkstraForecast t era -> Word32 -> DijkstraForecast t era)
 -> Lens
      (DijkstraForecast t era) (DijkstraForecast t era) Word32 Word32)
-> (DijkstraForecast t era -> Word32 -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era) (DijkstraForecast t era) Word32 Word32
forall a b. (a -> b) -> a -> b
$ \DijkstraForecast t era
s Word32
x -> DijkstraForecast t era
s {dfMaxEndorserBlockReferencesSize = x}

dfMaxEndorserBlockTxsSizeL :: Lens' (DijkstraForecast t era) Word32
dfMaxEndorserBlockTxsSizeL :: forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(Word32 -> f Word32)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfMaxEndorserBlockTxsSizeL =
  (DijkstraForecast t era -> Word32)
-> (DijkstraForecast t era -> Word32 -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era) (DijkstraForecast t era) Word32 Word32
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens DijkstraForecast t era -> Word32
forall (t :: Timeline) era. DijkstraForecast t era -> Word32
dfMaxEndorserBlockTxsSize ((DijkstraForecast t era -> Word32 -> DijkstraForecast t era)
 -> Lens
      (DijkstraForecast t era) (DijkstraForecast t era) Word32 Word32)
-> (DijkstraForecast t era -> Word32 -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era) (DijkstraForecast t era) Word32 Word32
forall a b. (a -> b) -> a -> b
$ \DijkstraForecast t era
s Word32
x -> DijkstraForecast t era
s {dfMaxEndorserBlockTxsSize = x}

dfMaxEndorserBlockExUnitsL :: Lens' (DijkstraForecast t era) OrdExUnits
dfMaxEndorserBlockExUnitsL :: forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(OrdExUnits -> f OrdExUnits)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfMaxEndorserBlockExUnitsL =
  (DijkstraForecast t era -> OrdExUnits)
-> (DijkstraForecast t era -> OrdExUnits -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era)
     (DijkstraForecast t era)
     OrdExUnits
     OrdExUnits
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens DijkstraForecast t era -> OrdExUnits
forall (t :: Timeline) era. DijkstraForecast t era -> OrdExUnits
dfMaxEndorserBlockExUnits ((DijkstraForecast t era -> OrdExUnits -> DijkstraForecast t era)
 -> Lens
      (DijkstraForecast t era)
      (DijkstraForecast t era)
      OrdExUnits
      OrdExUnits)
-> (DijkstraForecast t era -> OrdExUnits -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era)
     (DijkstraForecast t era)
     OrdExUnits
     OrdExUnits
forall a b. (a -> b) -> a -> b
$ \DijkstraForecast t era
s OrdExUnits
x -> DijkstraForecast t era
s {dfMaxEndorserBlockExUnits = x}

dfMaxRefScriptSizePerEndorserBlockL :: Lens' (DijkstraForecast t era) Word32
dfMaxRefScriptSizePerEndorserBlockL :: forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(Word32 -> f Word32)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfMaxRefScriptSizePerEndorserBlockL =
  (DijkstraForecast t era -> Word32)
-> (DijkstraForecast t era -> Word32 -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era) (DijkstraForecast t era) Word32 Word32
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens DijkstraForecast t era -> Word32
forall (t :: Timeline) era. DijkstraForecast t era -> Word32
dfMaxRefScriptSizePerEndorserBlock ((DijkstraForecast t era -> Word32 -> DijkstraForecast t era)
 -> Lens
      (DijkstraForecast t era) (DijkstraForecast t era) Word32 Word32)
-> (DijkstraForecast t era -> Word32 -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era) (DijkstraForecast t era) Word32 Word32
forall a b. (a -> b) -> a -> b
$ \DijkstraForecast t era
s Word32
x -> DijkstraForecast t era
s {dfMaxRefScriptSizePerEndorserBlock = x}

dfPerasMinCandidateBlockAgeL :: Lens' (DijkstraForecast t era) SlotInterval
dfPerasMinCandidateBlockAgeL :: forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(SlotInterval -> f SlotInterval)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfPerasMinCandidateBlockAgeL =
  (DijkstraForecast t era -> SlotInterval)
-> (DijkstraForecast t era
    -> SlotInterval -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era)
     (DijkstraForecast t era)
     SlotInterval
     SlotInterval
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens DijkstraForecast t era -> SlotInterval
forall (t :: Timeline) era. DijkstraForecast t era -> SlotInterval
dfPerasMinCandidateBlockAge ((DijkstraForecast t era -> SlotInterval -> DijkstraForecast t era)
 -> Lens
      (DijkstraForecast t era)
      (DijkstraForecast t era)
      SlotInterval
      SlotInterval)
-> (DijkstraForecast t era
    -> SlotInterval -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era)
     (DijkstraForecast t era)
     SlotInterval
     SlotInterval
forall a b. (a -> b) -> a -> b
$ \DijkstraForecast t era
s SlotInterval
x -> DijkstraForecast t era
s {dfPerasMinCandidateBlockAge = x}

dfPerasHealingFactorL :: Lens' (DijkstraForecast t era) PositiveInterval
dfPerasHealingFactorL :: forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(PositiveInterval -> f PositiveInterval)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfPerasHealingFactorL =
  (DijkstraForecast t era -> PositiveInterval)
-> (DijkstraForecast t era
    -> PositiveInterval -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era)
     (DijkstraForecast t era)
     PositiveInterval
     PositiveInterval
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens DijkstraForecast t era -> PositiveInterval
forall (t :: Timeline) era.
DijkstraForecast t era -> PositiveInterval
dfPerasHealingFactor ((DijkstraForecast t era
  -> PositiveInterval -> DijkstraForecast t era)
 -> Lens
      (DijkstraForecast t era)
      (DijkstraForecast t era)
      PositiveInterval
      PositiveInterval)
-> (DijkstraForecast t era
    -> PositiveInterval -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era)
     (DijkstraForecast t era)
     PositiveInterval
     PositiveInterval
forall a b. (a -> b) -> a -> b
$ \DijkstraForecast t era
s PositiveInterval
x -> DijkstraForecast t era
s {dfPerasHealingFactor = x}

dfPerasCertBoostL :: Lens' (DijkstraForecast t era) Word16
dfPerasCertBoostL :: forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(Word16 -> f Word16)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfPerasCertBoostL =
  (DijkstraForecast t era -> Word16)
-> (DijkstraForecast t era -> Word16 -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era) (DijkstraForecast t era) Word16 Word16
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens DijkstraForecast t era -> Word16
forall (t :: Timeline) era. DijkstraForecast t era -> Word16
dfPerasCertBoost ((DijkstraForecast t era -> Word16 -> DijkstraForecast t era)
 -> Lens
      (DijkstraForecast t era) (DijkstraForecast t era) Word16 Word16)
-> (DijkstraForecast t era -> Word16 -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era) (DijkstraForecast t era) Word16 Word16
forall a b. (a -> b) -> a -> b
$ \DijkstraForecast t era
s Word16
x -> DijkstraForecast t era
s {dfPerasCertBoost = x}

dfPerasTargetCommitteeSizeL :: Lens' (DijkstraForecast t era) Word16
dfPerasTargetCommitteeSizeL :: forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(Word16 -> f Word16)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfPerasTargetCommitteeSizeL =
  (DijkstraForecast t era -> Word16)
-> (DijkstraForecast t era -> Word16 -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era) (DijkstraForecast t era) Word16 Word16
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens DijkstraForecast t era -> Word16
forall (t :: Timeline) era. DijkstraForecast t era -> Word16
dfPerasTargetCommitteeSize ((DijkstraForecast t era -> Word16 -> DijkstraForecast t era)
 -> Lens
      (DijkstraForecast t era) (DijkstraForecast t era) Word16 Word16)
-> (DijkstraForecast t era -> Word16 -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era) (DijkstraForecast t era) Word16 Word16
forall a b. (a -> b) -> a -> b
$ \DijkstraForecast t era
s Word16
x -> DijkstraForecast t era
s {dfPerasTargetCommitteeSize = x}

dfPerasBootstrapRoundL :: Lens' (DijkstraForecast t era) (StrictMaybe Word32)
dfPerasBootstrapRoundL :: forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(StrictMaybe Word32 -> f (StrictMaybe Word32))
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfPerasBootstrapRoundL =
  (DijkstraForecast t era -> StrictMaybe Word32)
-> (DijkstraForecast t era
    -> StrictMaybe Word32 -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era)
     (DijkstraForecast t era)
     (StrictMaybe Word32)
     (StrictMaybe Word32)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens DijkstraForecast t era -> StrictMaybe Word32
forall (t :: Timeline) era.
DijkstraForecast t era -> StrictMaybe Word32
dfPerasBootstrapRound ((DijkstraForecast t era
  -> StrictMaybe Word32 -> DijkstraForecast t era)
 -> Lens
      (DijkstraForecast t era)
      (DijkstraForecast t era)
      (StrictMaybe Word32)
      (StrictMaybe Word32))
-> (DijkstraForecast t era
    -> StrictMaybe Word32 -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era)
     (DijkstraForecast t era)
     (StrictMaybe Word32)
     (StrictMaybe Word32)
forall a b. (a -> b) -> a -> b
$ \DijkstraForecast t era
s StrictMaybe Word32
x -> DijkstraForecast t era
s {dfPerasBootstrapRound = x}

dfPerasQuorumThresholdSafetyMarginL :: Lens' (DijkstraForecast t era) UnitInterval
dfPerasQuorumThresholdSafetyMarginL :: forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(UnitInterval -> f UnitInterval)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfPerasQuorumThresholdSafetyMarginL =
  (DijkstraForecast t era -> UnitInterval)
-> (DijkstraForecast t era
    -> UnitInterval -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era)
     (DijkstraForecast t era)
     UnitInterval
     UnitInterval
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens DijkstraForecast t era -> UnitInterval
forall (t :: Timeline) era. DijkstraForecast t era -> UnitInterval
dfPerasQuorumThresholdSafetyMargin ((DijkstraForecast t era -> UnitInterval -> DijkstraForecast t era)
 -> Lens
      (DijkstraForecast t era)
      (DijkstraForecast t era)
      UnitInterval
      UnitInterval)
-> (DijkstraForecast t era
    -> UnitInterval -> DijkstraForecast t era)
-> Lens
     (DijkstraForecast t era)
     (DijkstraForecast t era)
     UnitInterval
     UnitInterval
forall a b. (a -> b) -> a -> b
$ \DijkstraForecast t era
s UnitInterval
x -> DijkstraForecast t era
s {dfPerasQuorumThresholdSafetyMargin = x}

instance EraForecast DijkstraEra where
  type Forecast t DijkstraEra = DijkstraForecast t DijkstraEra
  mkForecast :: forall (t :: Timeline).
NewEpochState DijkstraEra -> Forecast t DijkstraEra
mkForecast = NewEpochState DijkstraEra -> Forecast t DijkstraEra
NewEpochState DijkstraEra -> DijkstraForecast t DijkstraEra
forall era (t :: Timeline).
(DijkstraEraPParams era, EraGov era) =>
NewEpochState era -> DijkstraForecast t era
mkDijkstraForecast
  poolDistrForecastL :: forall (t :: Timeline). Lens' (Forecast t DijkstraEra) PoolDistr
poolDistrForecastL = (PoolDistr -> f PoolDistr)
-> Forecast t DijkstraEra -> f (Forecast t DijkstraEra)
(PoolDistr -> f PoolDistr)
-> DijkstraForecast t DijkstraEra
-> f (DijkstraForecast t DijkstraEra)
forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(PoolDistr -> f PoolDistr)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfPoolDistrL
  maxBlockHeaderSizeForecastL :: forall (t :: Timeline). Lens' (Forecast t DijkstraEra) Word16
maxBlockHeaderSizeForecastL = (Word16 -> f Word16)
-> Forecast t DijkstraEra -> f (Forecast t DijkstraEra)
(Word16 -> f Word16)
-> DijkstraForecast t DijkstraEra
-> f (DijkstraForecast t DijkstraEra)
forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(Word16 -> f Word16)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfMaxBlockHeaderSizeL
  maxBlockBodySizeForecastL :: forall (t :: Timeline). Lens' (Forecast t DijkstraEra) Word32
maxBlockBodySizeForecastL = (Word32 -> f Word32)
-> Forecast t DijkstraEra -> f (Forecast t DijkstraEra)
(Word32 -> f Word32)
-> DijkstraForecast t DijkstraEra
-> f (DijkstraForecast t DijkstraEra)
forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(Word32 -> f Word32)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfMaxBlockBodySizeL
  protocolVersionForecastL :: forall (t :: Timeline). Lens' (Forecast t DijkstraEra) ProtVer
protocolVersionForecastL = (ProtVer -> f ProtVer)
-> Forecast t DijkstraEra -> f (Forecast t DijkstraEra)
(ProtVer -> f ProtVer)
-> DijkstraForecast t DijkstraEra
-> f (DijkstraForecast t DijkstraEra)
forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(ProtVer -> f ProtVer)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfProtocolVersionL

instance DijkstraEraForecast DijkstraEra where
  leiosCommitteeForecastL :: forall (t :: Timeline).
Lens' (Forecast t DijkstraEra) LeiosCommittee
leiosCommitteeForecastL = (LeiosCommittee -> f LeiosCommittee)
-> Forecast t DijkstraEra -> f (Forecast t DijkstraEra)
(LeiosCommittee -> f LeiosCommittee)
-> DijkstraForecast t DijkstraEra
-> f (DijkstraForecast t DijkstraEra)
forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(LeiosCommittee -> f LeiosCommittee)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfLeiosCommitteeL
  leiosCommitteeSizeForecastL :: forall (t :: Timeline). Lens' (Forecast t DijkstraEra) Word16
leiosCommitteeSizeForecastL = (Word16 -> f Word16)
-> Forecast t DijkstraEra -> f (Forecast t DijkstraEra)
(Word16 -> f Word16)
-> DijkstraForecast t DijkstraEra
-> f (DijkstraForecast t DijkstraEra)
forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(Word16 -> f Word16)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfLeiosCommitteeSizeL
  leiosQuorumStakeThresholdForecastL :: forall (t :: Timeline). Lens' (Forecast t DijkstraEra) UnitInterval
leiosQuorumStakeThresholdForecastL = (UnitInterval -> f UnitInterval)
-> Forecast t DijkstraEra -> f (Forecast t DijkstraEra)
(UnitInterval -> f UnitInterval)
-> DijkstraForecast t DijkstraEra
-> f (DijkstraForecast t DijkstraEra)
forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(UnitInterval -> f UnitInterval)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfLeiosQuorumStakeThresholdL
  leiosAnnouncementPeriodLengthForecastL :: forall (t :: Timeline).
Lens' (Forecast t DijkstraEra) Milliseconds32
leiosAnnouncementPeriodLengthForecastL = (Milliseconds32 -> f Milliseconds32)
-> Forecast t DijkstraEra -> f (Forecast t DijkstraEra)
(Milliseconds32 -> f Milliseconds32)
-> DijkstraForecast t DijkstraEra
-> f (DijkstraForecast t DijkstraEra)
forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(Milliseconds32 -> f Milliseconds32)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfLeiosAnnouncementPeriodLengthL
  leiosVotePeriodLengthForecastL :: forall (t :: Timeline).
Lens' (Forecast t DijkstraEra) Milliseconds32
leiosVotePeriodLengthForecastL = (Milliseconds32 -> f Milliseconds32)
-> Forecast t DijkstraEra -> f (Forecast t DijkstraEra)
(Milliseconds32 -> f Milliseconds32)
-> DijkstraForecast t DijkstraEra
-> f (DijkstraForecast t DijkstraEra)
forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(Milliseconds32 -> f Milliseconds32)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfLeiosVotePeriodLengthL
  leiosDiffusionPeriodLengthForecastL :: forall (t :: Timeline).
Lens' (Forecast t DijkstraEra) Milliseconds32
leiosDiffusionPeriodLengthForecastL = (Milliseconds32 -> f Milliseconds32)
-> Forecast t DijkstraEra -> f (Forecast t DijkstraEra)
(Milliseconds32 -> f Milliseconds32)
-> DijkstraForecast t DijkstraEra
-> f (DijkstraForecast t DijkstraEra)
forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(Milliseconds32 -> f Milliseconds32)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfLeiosDiffusionPeriodLengthL
  maxEndorserBlockReferencesSizeForecastL :: forall (t :: Timeline). Lens' (Forecast t DijkstraEra) Word32
maxEndorserBlockReferencesSizeForecastL = (Word32 -> f Word32)
-> Forecast t DijkstraEra -> f (Forecast t DijkstraEra)
(Word32 -> f Word32)
-> DijkstraForecast t DijkstraEra
-> f (DijkstraForecast t DijkstraEra)
forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(Word32 -> f Word32)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfMaxEndorserBlockReferencesSizeL
  maxEndorserBlockTxsSizeForecastL :: forall (t :: Timeline). Lens' (Forecast t DijkstraEra) Word32
maxEndorserBlockTxsSizeForecastL = (Word32 -> f Word32)
-> Forecast t DijkstraEra -> f (Forecast t DijkstraEra)
(Word32 -> f Word32)
-> DijkstraForecast t DijkstraEra
-> f (DijkstraForecast t DijkstraEra)
forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(Word32 -> f Word32)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfMaxEndorserBlockTxsSizeL
  maxEndorserBlockExUnitsForecastL :: forall (t :: Timeline). Lens' (Forecast t DijkstraEra) OrdExUnits
maxEndorserBlockExUnitsForecastL = (OrdExUnits -> f OrdExUnits)
-> Forecast t DijkstraEra -> f (Forecast t DijkstraEra)
(OrdExUnits -> f OrdExUnits)
-> DijkstraForecast t DijkstraEra
-> f (DijkstraForecast t DijkstraEra)
forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(OrdExUnits -> f OrdExUnits)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfMaxEndorserBlockExUnitsL
  maxRefScriptSizePerEndorserBlockForecastL :: forall (t :: Timeline). Lens' (Forecast t DijkstraEra) Word32
maxRefScriptSizePerEndorserBlockForecastL = (Word32 -> f Word32)
-> Forecast t DijkstraEra -> f (Forecast t DijkstraEra)
(Word32 -> f Word32)
-> DijkstraForecast t DijkstraEra
-> f (DijkstraForecast t DijkstraEra)
forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(Word32 -> f Word32)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfMaxRefScriptSizePerEndorserBlockL
  perasMinCandidateBlockAgeForecastL :: forall (t :: Timeline). Lens' (Forecast t DijkstraEra) SlotInterval
perasMinCandidateBlockAgeForecastL = (SlotInterval -> f SlotInterval)
-> Forecast t DijkstraEra -> f (Forecast t DijkstraEra)
(SlotInterval -> f SlotInterval)
-> DijkstraForecast t DijkstraEra
-> f (DijkstraForecast t DijkstraEra)
forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(SlotInterval -> f SlotInterval)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfPerasMinCandidateBlockAgeL
  perasHealingFactorForecastL :: forall (t :: Timeline).
Lens' (Forecast t DijkstraEra) PositiveInterval
perasHealingFactorForecastL = (PositiveInterval -> f PositiveInterval)
-> Forecast t DijkstraEra -> f (Forecast t DijkstraEra)
(PositiveInterval -> f PositiveInterval)
-> DijkstraForecast t DijkstraEra
-> f (DijkstraForecast t DijkstraEra)
forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(PositiveInterval -> f PositiveInterval)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfPerasHealingFactorL
  perasCertBoostForecastL :: forall (t :: Timeline). Lens' (Forecast t DijkstraEra) Word16
perasCertBoostForecastL = (Word16 -> f Word16)
-> Forecast t DijkstraEra -> f (Forecast t DijkstraEra)
(Word16 -> f Word16)
-> DijkstraForecast t DijkstraEra
-> f (DijkstraForecast t DijkstraEra)
forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(Word16 -> f Word16)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfPerasCertBoostL
  perasTargetCommitteeSizeForecastL :: forall (t :: Timeline). Lens' (Forecast t DijkstraEra) Word16
perasTargetCommitteeSizeForecastL = (Word16 -> f Word16)
-> Forecast t DijkstraEra -> f (Forecast t DijkstraEra)
(Word16 -> f Word16)
-> DijkstraForecast t DijkstraEra
-> f (DijkstraForecast t DijkstraEra)
forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(Word16 -> f Word16)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfPerasTargetCommitteeSizeL
  perasBootstrapRoundForecastL :: forall (t :: Timeline).
Lens' (Forecast t DijkstraEra) (StrictMaybe Word32)
perasBootstrapRoundForecastL = (StrictMaybe Word32 -> f (StrictMaybe Word32))
-> Forecast t DijkstraEra -> f (Forecast t DijkstraEra)
(StrictMaybe Word32 -> f (StrictMaybe Word32))
-> DijkstraForecast t DijkstraEra
-> f (DijkstraForecast t DijkstraEra)
forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(StrictMaybe Word32 -> f (StrictMaybe Word32))
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfPerasBootstrapRoundL
  perasQuorumThresholdSafetyMarginForecastL :: forall (t :: Timeline). Lens' (Forecast t DijkstraEra) UnitInterval
perasQuorumThresholdSafetyMarginForecastL = (UnitInterval -> f UnitInterval)
-> Forecast t DijkstraEra -> f (Forecast t DijkstraEra)
(UnitInterval -> f UnitInterval)
-> DijkstraForecast t DijkstraEra
-> f (DijkstraForecast t DijkstraEra)
forall (t :: Timeline) era (f :: * -> *).
Functor f =>
(UnitInterval -> f UnitInterval)
-> DijkstraForecast t era -> f (DijkstraForecast t era)
dfPerasQuorumThresholdSafetyMarginL