{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE TypeFamilies #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module Cardano.Ledger.Babbage.Transition (TransitionConfig (..), alonzoInjectCostModels) where

import Cardano.Ledger.Alonzo
import Cardano.Ledger.Alonzo.Transition
import Cardano.Ledger.Babbage.Era
import Cardano.Ledger.Babbage.State ()
import Cardano.Ledger.Babbage.Translation ()
import Cardano.Ledger.Genesis (NoGenesis (..))
import Cardano.Ledger.Shelley.Transition
import Lens.Micro
import NoThunks.Class (NoThunks (..))

instance EraTransition BabbageEra where
  newtype TransitionConfig BabbageEra = BabbageTransitionConfig
    { TransitionConfig BabbageEra -> TransitionConfig AlonzoEra
btcAlonzoTransitionConfig :: TransitionConfig AlonzoEra
    }
    deriving (Int -> TransitionConfig BabbageEra -> ShowS
[TransitionConfig BabbageEra] -> ShowS
TransitionConfig BabbageEra -> String
(Int -> TransitionConfig BabbageEra -> ShowS)
-> (TransitionConfig BabbageEra -> String)
-> ([TransitionConfig BabbageEra] -> ShowS)
-> Show (TransitionConfig BabbageEra)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TransitionConfig BabbageEra -> ShowS
showsPrec :: Int -> TransitionConfig BabbageEra -> ShowS
$cshow :: TransitionConfig BabbageEra -> String
show :: TransitionConfig BabbageEra -> String
$cshowList :: [TransitionConfig BabbageEra] -> ShowS
showList :: [TransitionConfig BabbageEra] -> ShowS
Show, TransitionConfig BabbageEra -> TransitionConfig BabbageEra -> Bool
(TransitionConfig BabbageEra
 -> TransitionConfig BabbageEra -> Bool)
-> (TransitionConfig BabbageEra
    -> TransitionConfig BabbageEra -> Bool)
-> Eq (TransitionConfig BabbageEra)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TransitionConfig BabbageEra -> TransitionConfig BabbageEra -> Bool
== :: TransitionConfig BabbageEra -> TransitionConfig BabbageEra -> Bool
$c/= :: TransitionConfig BabbageEra -> TransitionConfig BabbageEra -> Bool
/= :: TransitionConfig BabbageEra -> TransitionConfig BabbageEra -> Bool
Eq, Context -> TransitionConfig BabbageEra -> IO (Maybe ThunkInfo)
Proxy (TransitionConfig BabbageEra) -> String
(Context -> TransitionConfig BabbageEra -> IO (Maybe ThunkInfo))
-> (Context -> TransitionConfig BabbageEra -> IO (Maybe ThunkInfo))
-> (Proxy (TransitionConfig BabbageEra) -> String)
-> NoThunks (TransitionConfig BabbageEra)
forall a.
(Context -> a -> IO (Maybe ThunkInfo))
-> (Context -> a -> IO (Maybe ThunkInfo))
-> (Proxy a -> String)
-> NoThunks a
$cnoThunks :: Context -> TransitionConfig BabbageEra -> IO (Maybe ThunkInfo)
noThunks :: Context -> TransitionConfig BabbageEra -> IO (Maybe ThunkInfo)
$cwNoThunks :: Context -> TransitionConfig BabbageEra -> IO (Maybe ThunkInfo)
wNoThunks :: Context -> TransitionConfig BabbageEra -> IO (Maybe ThunkInfo)
$cshowTypeOf :: Proxy (TransitionConfig BabbageEra) -> String
showTypeOf :: Proxy (TransitionConfig BabbageEra) -> String
NoThunks)

  mkTransitionConfig :: TranslationContext BabbageEra
-> TransitionConfig (PreviousEra BabbageEra)
-> TransitionConfig BabbageEra
mkTransitionConfig TranslationContext BabbageEra
NoGenesis BabbageEra
NoGenesis = TransitionConfig (PreviousEra BabbageEra)
-> TransitionConfig BabbageEra
TransitionConfig AlonzoEra -> TransitionConfig BabbageEra
BabbageTransitionConfig

  injectIntoTestState :: TransitionConfig BabbageEra
-> NewEpochState BabbageEra -> NewEpochState BabbageEra
injectIntoTestState TransitionConfig BabbageEra
cfg = TransitionConfig BabbageEra
-> NewEpochState BabbageEra -> NewEpochState BabbageEra
forall era.
(EraTransition era, ShelleyEraAccounts era) =>
TransitionConfig era -> NewEpochState era -> NewEpochState era
shelleyRegisterInitialFundsThenStaking TransitionConfig BabbageEra
cfg (NewEpochState BabbageEra -> NewEpochState BabbageEra)
-> (NewEpochState BabbageEra -> NewEpochState BabbageEra)
-> NewEpochState BabbageEra
-> NewEpochState BabbageEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TransitionConfig AlonzoEra
-> NewEpochState BabbageEra -> NewEpochState BabbageEra
forall era.
(EraTransition era, AlonzoEraPParams era) =>
TransitionConfig AlonzoEra
-> NewEpochState era -> NewEpochState era
alonzoInjectCostModels (TransitionConfig BabbageEra
cfg TransitionConfig BabbageEra
-> Getting
     (TransitionConfig AlonzoEra)
     (TransitionConfig BabbageEra)
     (TransitionConfig AlonzoEra)
-> TransitionConfig AlonzoEra
forall s a. s -> Getting a s a -> a
^. (TransitionConfig (PreviousEra BabbageEra)
 -> Const
      (TransitionConfig AlonzoEra)
      (TransitionConfig (PreviousEra BabbageEra)))
-> TransitionConfig BabbageEra
-> Const (TransitionConfig AlonzoEra) (TransitionConfig BabbageEra)
Getting
  (TransitionConfig AlonzoEra)
  (TransitionConfig BabbageEra)
  (TransitionConfig AlonzoEra)
forall era.
(EraTransition era, EraTransition (PreviousEra era)) =>
Lens' (TransitionConfig era) (TransitionConfig (PreviousEra era))
Lens'
  (TransitionConfig BabbageEra)
  (TransitionConfig (PreviousEra BabbageEra))
tcPreviousEraConfigL)

  tcPreviousEraConfigL :: EraTransition (PreviousEra BabbageEra) =>
Lens'
  (TransitionConfig BabbageEra)
  (TransitionConfig (PreviousEra BabbageEra))
tcPreviousEraConfigL =
    (TransitionConfig BabbageEra -> TransitionConfig AlonzoEra)
-> (TransitionConfig BabbageEra
    -> TransitionConfig AlonzoEra -> TransitionConfig BabbageEra)
-> Lens
     (TransitionConfig BabbageEra)
     (TransitionConfig BabbageEra)
     (TransitionConfig AlonzoEra)
     (TransitionConfig AlonzoEra)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens TransitionConfig BabbageEra -> TransitionConfig AlonzoEra
btcAlonzoTransitionConfig (\TransitionConfig BabbageEra
btc TransitionConfig AlonzoEra
pc -> TransitionConfig BabbageEra
btc {btcAlonzoTransitionConfig = pc})

  tcTranslationContextL :: Lens' (TransitionConfig BabbageEra) (TranslationContext BabbageEra)
tcTranslationContextL = (TransitionConfig BabbageEra -> NoGenesis BabbageEra)
-> (TransitionConfig BabbageEra
    -> NoGenesis BabbageEra -> TransitionConfig BabbageEra)
-> Lens
     (TransitionConfig BabbageEra)
     (TransitionConfig BabbageEra)
     (NoGenesis BabbageEra)
     (NoGenesis BabbageEra)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens (NoGenesis BabbageEra
-> TransitionConfig BabbageEra -> NoGenesis BabbageEra
forall a b. a -> b -> a
const NoGenesis BabbageEra
forall era. NoGenesis era
NoGenesis) TransitionConfig BabbageEra
-> NoGenesis BabbageEra -> TransitionConfig BabbageEra
forall a b. a -> b -> a
const