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

module Cardano.Ledger.Babbage.Transition (TransitionConfig (..)) 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 Data.Aeson (FromJSON (..), ToJSON (..))
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, [TransitionConfig BabbageEra] -> Value
[TransitionConfig BabbageEra] -> Encoding
TransitionConfig BabbageEra -> Bool
TransitionConfig BabbageEra -> Value
TransitionConfig BabbageEra -> Encoding
(TransitionConfig BabbageEra -> Value)
-> (TransitionConfig BabbageEra -> Encoding)
-> ([TransitionConfig BabbageEra] -> Value)
-> ([TransitionConfig BabbageEra] -> Encoding)
-> (TransitionConfig BabbageEra -> Bool)
-> ToJSON (TransitionConfig BabbageEra)
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> (a -> Bool)
-> ToJSON a
$ctoJSON :: TransitionConfig BabbageEra -> Value
toJSON :: TransitionConfig BabbageEra -> Value
$ctoEncoding :: TransitionConfig BabbageEra -> Encoding
toEncoding :: TransitionConfig BabbageEra -> Encoding
$ctoJSONList :: [TransitionConfig BabbageEra] -> Value
toJSONList :: [TransitionConfig BabbageEra] -> Value
$ctoEncodingList :: [TransitionConfig BabbageEra] -> Encoding
toEncodingList :: [TransitionConfig BabbageEra] -> Encoding
$comitField :: TransitionConfig BabbageEra -> Bool
omitField :: TransitionConfig BabbageEra -> Bool
ToJSON, Maybe (TransitionConfig BabbageEra)
Value -> Parser [TransitionConfig BabbageEra]
Value -> Parser (TransitionConfig BabbageEra)
(Value -> Parser (TransitionConfig BabbageEra))
-> (Value -> Parser [TransitionConfig BabbageEra])
-> Maybe (TransitionConfig BabbageEra)
-> FromJSON (TransitionConfig BabbageEra)
forall a.
(Value -> Parser a)
-> (Value -> Parser [a]) -> Maybe a -> FromJSON a
$cparseJSON :: Value -> Parser (TransitionConfig BabbageEra)
parseJSON :: Value -> Parser (TransitionConfig BabbageEra)
$cparseJSONList :: Value -> Parser [TransitionConfig BabbageEra]
parseJSONList :: Value -> Parser [TransitionConfig BabbageEra]
$comittedField :: Maybe (TransitionConfig BabbageEra)
omittedField :: Maybe (TransitionConfig BabbageEra)
FromJSON)

  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
-> NewEpochState BabbageEra -> NewEpochState BabbageEra
forall era.
EraTransition era =>
TransitionConfig era -> NewEpochState era -> NewEpochState era
registerInitialFundsThenStaking

  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 (TransitionConfig BabbageEra
 -> NoGenesis BabbageEra -> TransitionConfig BabbageEra)
-> (TransitionConfig BabbageEra -> TransitionConfig BabbageEra)
-> TransitionConfig BabbageEra
-> NoGenesis BabbageEra
-> TransitionConfig BabbageEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TransitionConfig BabbageEra -> TransitionConfig BabbageEra
forall a. a -> a
id)