{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TypeFamilies #-} {-# OPTIONS_GHC -Wno-orphans #-} module Cardano.Ledger.Alonzo.Transition ( TransitionConfig (..), toAlonzoTransitionConfigPairs, ) where import Cardano.Ledger.Alonzo.Era import Cardano.Ledger.Alonzo.Genesis (AlonzoGenesis, toAlonzoGenesisPairs) import Cardano.Ledger.Alonzo.Translation () import Cardano.Ledger.Mary import Cardano.Ledger.Mary.Transition (TransitionConfig (MaryTransitionConfig)) import Cardano.Ledger.Shelley.Transition import Data.Aeson ( FromJSON (..), KeyValue (..), ToJSON (..), Value (..), object, pairs, withObject, (.:), ) import GHC.Generics import Lens.Micro import NoThunks.Class (NoThunks (..)) instance EraTransition AlonzoEra where data TransitionConfig AlonzoEra = AlonzoTransitionConfig { TransitionConfig AlonzoEra -> AlonzoGenesis atcAlonzoGenesis :: !AlonzoGenesis , TransitionConfig AlonzoEra -> TransitionConfig MaryEra atcMaryTransitionConfig :: !(TransitionConfig MaryEra) } deriving (Int -> TransitionConfig AlonzoEra -> ShowS [TransitionConfig AlonzoEra] -> ShowS TransitionConfig AlonzoEra -> String (Int -> TransitionConfig AlonzoEra -> ShowS) -> (TransitionConfig AlonzoEra -> String) -> ([TransitionConfig AlonzoEra] -> ShowS) -> Show (TransitionConfig AlonzoEra) forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> TransitionConfig AlonzoEra -> ShowS showsPrec :: Int -> TransitionConfig AlonzoEra -> ShowS $cshow :: TransitionConfig AlonzoEra -> String show :: TransitionConfig AlonzoEra -> String $cshowList :: [TransitionConfig AlonzoEra] -> ShowS showList :: [TransitionConfig AlonzoEra] -> ShowS Show, TransitionConfig AlonzoEra -> TransitionConfig AlonzoEra -> Bool (TransitionConfig AlonzoEra -> TransitionConfig AlonzoEra -> Bool) -> (TransitionConfig AlonzoEra -> TransitionConfig AlonzoEra -> Bool) -> Eq (TransitionConfig AlonzoEra) forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: TransitionConfig AlonzoEra -> TransitionConfig AlonzoEra -> Bool == :: TransitionConfig AlonzoEra -> TransitionConfig AlonzoEra -> Bool $c/= :: TransitionConfig AlonzoEra -> TransitionConfig AlonzoEra -> Bool /= :: TransitionConfig AlonzoEra -> TransitionConfig AlonzoEra -> Bool Eq, (forall x. TransitionConfig AlonzoEra -> Rep (TransitionConfig AlonzoEra) x) -> (forall x. Rep (TransitionConfig AlonzoEra) x -> TransitionConfig AlonzoEra) -> Generic (TransitionConfig AlonzoEra) forall x. Rep (TransitionConfig AlonzoEra) x -> TransitionConfig AlonzoEra forall x. TransitionConfig AlonzoEra -> Rep (TransitionConfig AlonzoEra) x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cfrom :: forall x. TransitionConfig AlonzoEra -> Rep (TransitionConfig AlonzoEra) x from :: forall x. TransitionConfig AlonzoEra -> Rep (TransitionConfig AlonzoEra) x $cto :: forall x. Rep (TransitionConfig AlonzoEra) x -> TransitionConfig AlonzoEra to :: forall x. Rep (TransitionConfig AlonzoEra) x -> TransitionConfig AlonzoEra Generic) mkTransitionConfig :: TranslationContext AlonzoEra -> TransitionConfig (PreviousEra AlonzoEra) -> TransitionConfig AlonzoEra mkTransitionConfig = TranslationContext AlonzoEra -> TransitionConfig (PreviousEra AlonzoEra) -> TransitionConfig AlonzoEra AlonzoGenesis -> TransitionConfig MaryEra -> TransitionConfig AlonzoEra AlonzoTransitionConfig injectIntoTestState :: TransitionConfig AlonzoEra -> NewEpochState AlonzoEra -> NewEpochState AlonzoEra injectIntoTestState = TransitionConfig AlonzoEra -> NewEpochState AlonzoEra -> NewEpochState AlonzoEra forall era. EraTransition era => TransitionConfig era -> NewEpochState era -> NewEpochState era registerInitialFundsThenStaking tcPreviousEraConfigL :: EraTransition (PreviousEra AlonzoEra) => Lens' (TransitionConfig AlonzoEra) (TransitionConfig (PreviousEra AlonzoEra)) tcPreviousEraConfigL = (TransitionConfig AlonzoEra -> TransitionConfig MaryEra) -> (TransitionConfig AlonzoEra -> TransitionConfig MaryEra -> TransitionConfig AlonzoEra) -> Lens (TransitionConfig AlonzoEra) (TransitionConfig AlonzoEra) (TransitionConfig MaryEra) (TransitionConfig MaryEra) forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b lens TransitionConfig AlonzoEra -> TransitionConfig MaryEra atcMaryTransitionConfig (\TransitionConfig AlonzoEra atc TransitionConfig MaryEra pc -> TransitionConfig AlonzoEra atc {atcMaryTransitionConfig = pc}) tcTranslationContextL :: Lens' (TransitionConfig AlonzoEra) (TranslationContext AlonzoEra) tcTranslationContextL = (TransitionConfig AlonzoEra -> AlonzoGenesis) -> (TransitionConfig AlonzoEra -> AlonzoGenesis -> TransitionConfig AlonzoEra) -> Lens (TransitionConfig AlonzoEra) (TransitionConfig AlonzoEra) AlonzoGenesis AlonzoGenesis forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b lens TransitionConfig AlonzoEra -> AlonzoGenesis atcAlonzoGenesis (\TransitionConfig AlonzoEra atc AlonzoGenesis ag -> TransitionConfig AlonzoEra atc {atcAlonzoGenesis = ag}) instance NoThunks (TransitionConfig AlonzoEra) instance ToJSON (TransitionConfig AlonzoEra) where toJSON :: TransitionConfig AlonzoEra -> Value toJSON = [Pair] -> Value object ([Pair] -> Value) -> (TransitionConfig AlonzoEra -> [Pair]) -> TransitionConfig AlonzoEra -> Value forall b c a. (b -> c) -> (a -> b) -> a -> c . TransitionConfig AlonzoEra -> [Pair] forall e a. KeyValue e a => TransitionConfig AlonzoEra -> [a] toAlonzoTransitionConfigPairs toEncoding :: TransitionConfig AlonzoEra -> Encoding toEncoding = Series -> Encoding pairs (Series -> Encoding) -> (TransitionConfig AlonzoEra -> Series) -> TransitionConfig AlonzoEra -> Encoding forall b c a. (b -> c) -> (a -> b) -> a -> c . [Series] -> Series forall a. Monoid a => [a] -> a mconcat ([Series] -> Series) -> (TransitionConfig AlonzoEra -> [Series]) -> TransitionConfig AlonzoEra -> Series forall b c a. (b -> c) -> (a -> b) -> a -> c . TransitionConfig AlonzoEra -> [Series] forall e a. KeyValue e a => TransitionConfig AlonzoEra -> [a] toAlonzoTransitionConfigPairs toAlonzoTransitionConfigPairs :: KeyValue e a => TransitionConfig AlonzoEra -> [a] toAlonzoTransitionConfigPairs :: forall e a. KeyValue e a => TransitionConfig AlonzoEra -> [a] toAlonzoTransitionConfigPairs TransitionConfig AlonzoEra alonzoConfig = TransitionConfig ShelleyEra -> [a] forall e a. KeyValue e a => TransitionConfig ShelleyEra -> [a] toShelleyTransitionConfigPairs TransitionConfig ShelleyEra shelleyConfig [a] -> [a] -> [a] forall a. [a] -> [a] -> [a] ++ [Key "alonzo" Key -> Value -> a forall v. ToJSON v => Key -> v -> a forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv .= [Pair] -> Value object (AlonzoGenesis -> [Pair] forall e a. KeyValue e a => AlonzoGenesis -> [a] toAlonzoGenesisPairs (TransitionConfig AlonzoEra alonzoConfig TransitionConfig AlonzoEra -> Getting AlonzoGenesis (TransitionConfig AlonzoEra) AlonzoGenesis -> AlonzoGenesis forall s a. s -> Getting a s a -> a ^. (TranslationContext AlonzoEra -> Const AlonzoGenesis (TranslationContext AlonzoEra)) -> TransitionConfig AlonzoEra -> Const AlonzoGenesis (TransitionConfig AlonzoEra) Getting AlonzoGenesis (TransitionConfig AlonzoEra) AlonzoGenesis forall era. EraTransition era => Lens' (TransitionConfig era) (TranslationContext era) Lens' (TransitionConfig AlonzoEra) (TranslationContext AlonzoEra) tcTranslationContextL))] where maryConfig :: TransitionConfig MaryEra maryConfig = TransitionConfig AlonzoEra alonzoConfig TransitionConfig AlonzoEra -> Getting (TransitionConfig MaryEra) (TransitionConfig AlonzoEra) (TransitionConfig MaryEra) -> TransitionConfig MaryEra forall s a. s -> Getting a s a -> a ^. (TransitionConfig (PreviousEra AlonzoEra) -> Const (TransitionConfig MaryEra) (TransitionConfig (PreviousEra AlonzoEra))) -> TransitionConfig AlonzoEra -> Const (TransitionConfig MaryEra) (TransitionConfig AlonzoEra) Getting (TransitionConfig MaryEra) (TransitionConfig AlonzoEra) (TransitionConfig MaryEra) forall era. (EraTransition era, EraTransition (PreviousEra era)) => Lens' (TransitionConfig era) (TransitionConfig (PreviousEra era)) Lens' (TransitionConfig AlonzoEra) (TransitionConfig (PreviousEra AlonzoEra)) tcPreviousEraConfigL allegraConfig :: TransitionConfig AllegraEra allegraConfig = TransitionConfig MaryEra maryConfig TransitionConfig MaryEra -> Getting (TransitionConfig AllegraEra) (TransitionConfig MaryEra) (TransitionConfig AllegraEra) -> TransitionConfig AllegraEra forall s a. s -> Getting a s a -> a ^. Getting (TransitionConfig AllegraEra) (TransitionConfig MaryEra) (TransitionConfig AllegraEra) (TransitionConfig (PreviousEra MaryEra) -> Const (TransitionConfig AllegraEra) (TransitionConfig (PreviousEra MaryEra))) -> TransitionConfig MaryEra -> Const (TransitionConfig AllegraEra) (TransitionConfig MaryEra) forall era. (EraTransition era, EraTransition (PreviousEra era)) => Lens' (TransitionConfig era) (TransitionConfig (PreviousEra era)) Lens' (TransitionConfig MaryEra) (TransitionConfig (PreviousEra MaryEra)) tcPreviousEraConfigL shelleyConfig :: TransitionConfig ShelleyEra shelleyConfig = TransitionConfig AllegraEra allegraConfig TransitionConfig AllegraEra -> Getting (TransitionConfig ShelleyEra) (TransitionConfig AllegraEra) (TransitionConfig ShelleyEra) -> TransitionConfig ShelleyEra forall s a. s -> Getting a s a -> a ^. (TransitionConfig (PreviousEra AllegraEra) -> Const (TransitionConfig ShelleyEra) (TransitionConfig (PreviousEra AllegraEra))) -> TransitionConfig AllegraEra -> Const (TransitionConfig ShelleyEra) (TransitionConfig AllegraEra) Getting (TransitionConfig ShelleyEra) (TransitionConfig AllegraEra) (TransitionConfig ShelleyEra) forall era. (EraTransition era, EraTransition (PreviousEra era)) => Lens' (TransitionConfig era) (TransitionConfig (PreviousEra era)) Lens' (TransitionConfig AllegraEra) (TransitionConfig (PreviousEra AllegraEra)) tcPreviousEraConfigL instance FromJSON (TransitionConfig AlonzoEra) where parseJSON :: Value -> Parser (TransitionConfig AlonzoEra) parseJSON = String -> (Object -> Parser (TransitionConfig AlonzoEra)) -> Value -> Parser (TransitionConfig AlonzoEra) forall a. String -> (Object -> Parser a) -> Value -> Parser a withObject String "AlonzoTransitionConfig" ((Object -> Parser (TransitionConfig AlonzoEra)) -> Value -> Parser (TransitionConfig AlonzoEra)) -> (Object -> Parser (TransitionConfig AlonzoEra)) -> Value -> Parser (TransitionConfig AlonzoEra) forall a b. (a -> b) -> a -> b $ \Object o -> do AlonzoGenesis pc <- Value -> Parser AlonzoGenesis forall a. FromJSON a => Value -> Parser a parseJSON (Object -> Value Object Object o) TransitionConfig MaryEra ag <- Object o Object -> Key -> Parser (TransitionConfig MaryEra) forall a. FromJSON a => Object -> Key -> Parser a .: Key "alonzo" TransitionConfig AlonzoEra -> Parser (TransitionConfig AlonzoEra) forall a. a -> Parser a forall (f :: * -> *) a. Applicative f => a -> f a pure (TransitionConfig AlonzoEra -> Parser (TransitionConfig AlonzoEra)) -> TransitionConfig AlonzoEra -> Parser (TransitionConfig AlonzoEra) forall a b. (a -> b) -> a -> b $ TranslationContext AlonzoEra -> TransitionConfig (PreviousEra AlonzoEra) -> TransitionConfig AlonzoEra forall era. EraTransition era => TranslationContext era -> TransitionConfig (PreviousEra era) -> TransitionConfig era mkTransitionConfig TranslationContext AlonzoEra AlonzoGenesis pc TransitionConfig (PreviousEra AlonzoEra) TransitionConfig MaryEra ag