{-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UndecidableSuperClasses #-} {-# OPTIONS_GHC -Wno-orphans #-} module Cardano.Ledger.Dijkstra.Transition ( TransitionConfig (..), toDijkstraTransitionConfigPairs, ) where import Cardano.Ledger.Conway import Cardano.Ledger.Conway.Transition ( ConwayEraTransition, registerDRepsThenDelegs, toConwayTransitionConfigPairs, ) import Cardano.Ledger.Dijkstra.Era import Cardano.Ledger.Dijkstra.Genesis import Cardano.Ledger.Dijkstra.Translation () 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 DijkstraEra where data TransitionConfig DijkstraEra = DijkstraTransitionConfig { TransitionConfig DijkstraEra -> DijkstraGenesis dtcDijkstraGenesis :: !DijkstraGenesis , TransitionConfig DijkstraEra -> TransitionConfig ConwayEra dtcConwayTransitionConfig :: !(TransitionConfig ConwayEra) } deriving (Int -> TransitionConfig DijkstraEra -> ShowS [TransitionConfig DijkstraEra] -> ShowS TransitionConfig DijkstraEra -> String (Int -> TransitionConfig DijkstraEra -> ShowS) -> (TransitionConfig DijkstraEra -> String) -> ([TransitionConfig DijkstraEra] -> ShowS) -> Show (TransitionConfig DijkstraEra) forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> TransitionConfig DijkstraEra -> ShowS showsPrec :: Int -> TransitionConfig DijkstraEra -> ShowS $cshow :: TransitionConfig DijkstraEra -> String show :: TransitionConfig DijkstraEra -> String $cshowList :: [TransitionConfig DijkstraEra] -> ShowS showList :: [TransitionConfig DijkstraEra] -> ShowS Show, TransitionConfig DijkstraEra -> TransitionConfig DijkstraEra -> Bool (TransitionConfig DijkstraEra -> TransitionConfig DijkstraEra -> Bool) -> (TransitionConfig DijkstraEra -> TransitionConfig DijkstraEra -> Bool) -> Eq (TransitionConfig DijkstraEra) forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: TransitionConfig DijkstraEra -> TransitionConfig DijkstraEra -> Bool == :: TransitionConfig DijkstraEra -> TransitionConfig DijkstraEra -> Bool $c/= :: TransitionConfig DijkstraEra -> TransitionConfig DijkstraEra -> Bool /= :: TransitionConfig DijkstraEra -> TransitionConfig DijkstraEra -> Bool Eq, (forall x. TransitionConfig DijkstraEra -> Rep (TransitionConfig DijkstraEra) x) -> (forall x. Rep (TransitionConfig DijkstraEra) x -> TransitionConfig DijkstraEra) -> Generic (TransitionConfig DijkstraEra) forall x. Rep (TransitionConfig DijkstraEra) x -> TransitionConfig DijkstraEra forall x. TransitionConfig DijkstraEra -> Rep (TransitionConfig DijkstraEra) x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cfrom :: forall x. TransitionConfig DijkstraEra -> Rep (TransitionConfig DijkstraEra) x from :: forall x. TransitionConfig DijkstraEra -> Rep (TransitionConfig DijkstraEra) x $cto :: forall x. Rep (TransitionConfig DijkstraEra) x -> TransitionConfig DijkstraEra to :: forall x. Rep (TransitionConfig DijkstraEra) x -> TransitionConfig DijkstraEra Generic) mkTransitionConfig :: TranslationContext DijkstraEra -> TransitionConfig (PreviousEra DijkstraEra) -> TransitionConfig DijkstraEra mkTransitionConfig = TranslationContext DijkstraEra -> TransitionConfig (PreviousEra DijkstraEra) -> TransitionConfig DijkstraEra DijkstraGenesis -> TransitionConfig ConwayEra -> TransitionConfig DijkstraEra DijkstraTransitionConfig injectIntoTestState :: TransitionConfig DijkstraEra -> NewEpochState DijkstraEra -> NewEpochState DijkstraEra injectIntoTestState TransitionConfig DijkstraEra cfg = TransitionConfig DijkstraEra -> NewEpochState DijkstraEra -> NewEpochState DijkstraEra forall era. ConwayEraTransition era => TransitionConfig era -> NewEpochState era -> NewEpochState era registerDRepsThenDelegs TransitionConfig DijkstraEra cfg (NewEpochState DijkstraEra -> NewEpochState DijkstraEra) -> (NewEpochState DijkstraEra -> NewEpochState DijkstraEra) -> NewEpochState DijkstraEra -> NewEpochState DijkstraEra forall b c a. (b -> c) -> (a -> b) -> a -> c . TransitionConfig DijkstraEra -> NewEpochState DijkstraEra -> NewEpochState DijkstraEra forall era. EraTransition era => TransitionConfig era -> NewEpochState era -> NewEpochState era registerInitialFundsThenStaking TransitionConfig DijkstraEra cfg tcPreviousEraConfigL :: EraTransition (PreviousEra DijkstraEra) => Lens' (TransitionConfig DijkstraEra) (TransitionConfig (PreviousEra DijkstraEra)) tcPreviousEraConfigL = (TransitionConfig DijkstraEra -> TransitionConfig ConwayEra) -> (TransitionConfig DijkstraEra -> TransitionConfig ConwayEra -> TransitionConfig DijkstraEra) -> Lens (TransitionConfig DijkstraEra) (TransitionConfig DijkstraEra) (TransitionConfig ConwayEra) (TransitionConfig ConwayEra) forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b lens TransitionConfig DijkstraEra -> TransitionConfig ConwayEra dtcConwayTransitionConfig (\TransitionConfig DijkstraEra dtc TransitionConfig ConwayEra pc -> TransitionConfig DijkstraEra dtc {dtcConwayTransitionConfig = pc}) tcTranslationContextL :: Lens' (TransitionConfig DijkstraEra) (TranslationContext DijkstraEra) tcTranslationContextL = (TransitionConfig DijkstraEra -> DijkstraGenesis) -> (TransitionConfig DijkstraEra -> DijkstraGenesis -> TransitionConfig DijkstraEra) -> Lens (TransitionConfig DijkstraEra) (TransitionConfig DijkstraEra) DijkstraGenesis DijkstraGenesis forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b lens TransitionConfig DijkstraEra -> DijkstraGenesis dtcDijkstraGenesis (\TransitionConfig DijkstraEra dtc DijkstraGenesis ag -> TransitionConfig DijkstraEra dtc {dtcDijkstraGenesis = ag}) instance ConwayEraTransition DijkstraEra instance NoThunks (TransitionConfig DijkstraEra) instance ToJSON (TransitionConfig DijkstraEra) where toJSON :: TransitionConfig DijkstraEra -> Value toJSON = [Pair] -> Value object ([Pair] -> Value) -> (TransitionConfig DijkstraEra -> [Pair]) -> TransitionConfig DijkstraEra -> Value forall b c a. (b -> c) -> (a -> b) -> a -> c . TransitionConfig DijkstraEra -> [Pair] forall e a. KeyValue e a => TransitionConfig DijkstraEra -> [a] toDijkstraTransitionConfigPairs toEncoding :: TransitionConfig DijkstraEra -> Encoding toEncoding = Series -> Encoding pairs (Series -> Encoding) -> (TransitionConfig DijkstraEra -> Series) -> TransitionConfig DijkstraEra -> Encoding forall b c a. (b -> c) -> (a -> b) -> a -> c . [Series] -> Series forall a. Monoid a => [a] -> a mconcat ([Series] -> Series) -> (TransitionConfig DijkstraEra -> [Series]) -> TransitionConfig DijkstraEra -> Series forall b c a. (b -> c) -> (a -> b) -> a -> c . TransitionConfig DijkstraEra -> [Series] forall e a. KeyValue e a => TransitionConfig DijkstraEra -> [a] toDijkstraTransitionConfigPairs toDijkstraTransitionConfigPairs :: KeyValue e a => TransitionConfig DijkstraEra -> [a] toDijkstraTransitionConfigPairs :: forall e a. KeyValue e a => TransitionConfig DijkstraEra -> [a] toDijkstraTransitionConfigPairs TransitionConfig DijkstraEra dijkstraConfig = TransitionConfig ConwayEra -> [a] forall e a. KeyValue e a => TransitionConfig ConwayEra -> [a] toConwayTransitionConfigPairs TransitionConfig ConwayEra conwayConfig [a] -> [a] -> [a] forall a. [a] -> [a] -> [a] ++ [Key "dijkstra" 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 (DijkstraGenesis -> [Pair] forall a. DijkstraGenesis -> [a] toDijkstraGenesisPairs (TransitionConfig DijkstraEra dijkstraConfig TransitionConfig DijkstraEra -> Getting DijkstraGenesis (TransitionConfig DijkstraEra) DijkstraGenesis -> DijkstraGenesis forall s a. s -> Getting a s a -> a ^. (TranslationContext DijkstraEra -> Const DijkstraGenesis (TranslationContext DijkstraEra)) -> TransitionConfig DijkstraEra -> Const DijkstraGenesis (TransitionConfig DijkstraEra) Getting DijkstraGenesis (TransitionConfig DijkstraEra) DijkstraGenesis forall era. EraTransition era => Lens' (TransitionConfig era) (TranslationContext era) Lens' (TransitionConfig DijkstraEra) (TranslationContext DijkstraEra) tcTranslationContextL))] where conwayConfig :: TransitionConfig ConwayEra conwayConfig = TransitionConfig DijkstraEra dijkstraConfig TransitionConfig DijkstraEra -> Getting (TransitionConfig ConwayEra) (TransitionConfig DijkstraEra) (TransitionConfig ConwayEra) -> TransitionConfig ConwayEra forall s a. s -> Getting a s a -> a ^. (TransitionConfig (PreviousEra DijkstraEra) -> Const (TransitionConfig ConwayEra) (TransitionConfig (PreviousEra DijkstraEra))) -> TransitionConfig DijkstraEra -> Const (TransitionConfig ConwayEra) (TransitionConfig DijkstraEra) Getting (TransitionConfig ConwayEra) (TransitionConfig DijkstraEra) (TransitionConfig ConwayEra) forall era. (EraTransition era, EraTransition (PreviousEra era)) => Lens' (TransitionConfig era) (TransitionConfig (PreviousEra era)) Lens' (TransitionConfig DijkstraEra) (TransitionConfig (PreviousEra DijkstraEra)) tcPreviousEraConfigL instance FromJSON (TransitionConfig DijkstraEra) where parseJSON :: Value -> Parser (TransitionConfig DijkstraEra) parseJSON = String -> (Object -> Parser (TransitionConfig DijkstraEra)) -> Value -> Parser (TransitionConfig DijkstraEra) forall a. String -> (Object -> Parser a) -> Value -> Parser a withObject String "DijkstraTransitionConfig" ((Object -> Parser (TransitionConfig DijkstraEra)) -> Value -> Parser (TransitionConfig DijkstraEra)) -> (Object -> Parser (TransitionConfig DijkstraEra)) -> Value -> Parser (TransitionConfig DijkstraEra) forall a b. (a -> b) -> a -> b $ \Object o -> do DijkstraGenesis pc <- Value -> Parser DijkstraGenesis forall a. FromJSON a => Value -> Parser a parseJSON (Object -> Value Object Object o) TransitionConfig ConwayEra ag <- Object o Object -> Key -> Parser (TransitionConfig ConwayEra) forall a. FromJSON a => Object -> Key -> Parser a .: Key "dijkstra" TransitionConfig DijkstraEra -> Parser (TransitionConfig DijkstraEra) forall a. a -> Parser a forall (f :: * -> *) a. Applicative f => a -> f a pure (TransitionConfig DijkstraEra -> Parser (TransitionConfig DijkstraEra)) -> TransitionConfig DijkstraEra -> Parser (TransitionConfig DijkstraEra) forall a b. (a -> b) -> a -> b $ TranslationContext DijkstraEra -> TransitionConfig (PreviousEra DijkstraEra) -> TransitionConfig DijkstraEra forall era. EraTransition era => TranslationContext era -> TransitionConfig (PreviousEra era) -> TransitionConfig era mkTransitionConfig TranslationContext DijkstraEra DijkstraGenesis pc TransitionConfig (PreviousEra DijkstraEra) TransitionConfig ConwayEra ag