{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -Wno-orphans #-}
module Cardano.Ledger.Alonzo.Genesis (
AlonzoGenesis (
AlonzoGenesisWrapper,
unAlonzoGenesisWrapper,
extraConfig,
AlonzoGenesis,
agCoinsPerUTxOWord,
agPlutusV1CostModel,
agPrices,
agMaxTxExUnits,
agMaxBlockExUnits,
agMaxValSize,
agCollateralPercentage,
agMaxCollateralInputs,
agExtraConfig
),
AlonzoExtraConfig (..),
) where
import Cardano.Ledger.Alonzo.Era (AlonzoEra)
import Cardano.Ledger.Alonzo.PParams (
CoinPerWord,
UpgradeAlonzoPParams (..),
)
import Cardano.Ledger.Alonzo.Scripts (
CostModel,
CostModels,
ExUnits (..),
Prices (..),
costModelsValid,
decodeCostModel,
decodeCostModelsLenient,
encodeCostModel,
flattenCostModels,
mkCostModels,
)
import Cardano.Ledger.BaseTypes (KeyValuePairs (..), ToKeyValuePairs (..))
import Cardano.Ledger.Binary (
DecCBOR (..),
EncCBOR (..),
FromCBOR (..),
ToCBOR (..),
decodeNullMaybe,
encodeNullMaybe,
)
import Cardano.Ledger.Binary.Coders
import Cardano.Ledger.Core
import Cardano.Ledger.Genesis (EraGenesis (..))
import Cardano.Ledger.Plutus (Language (PlutusV1))
import Cardano.Ledger.Plutus.CostModels (parseCostModels)
import Control.DeepSeq (NFData)
import Data.Aeson (FromJSON (..), ToJSON (..), (.:), (.:?), (.=))
import qualified Data.Aeson as Aeson
import Data.Functor.Identity (Identity)
import qualified Data.List as List
import qualified Data.Map.Strict as Map
import GHC.Generics (Generic)
import NoThunks.Class (NoThunks)
import Numeric.Natural (Natural)
data AlonzoGenesis = AlonzoGenesisWrapper
{ AlonzoGenesis -> UpgradeAlonzoPParams Identity
unAlonzoGenesisWrapper :: UpgradeAlonzoPParams Identity
, :: Maybe AlonzoExtraConfig
}
deriving stock (AlonzoGenesis -> AlonzoGenesis -> Bool
(AlonzoGenesis -> AlonzoGenesis -> Bool)
-> (AlonzoGenesis -> AlonzoGenesis -> Bool) -> Eq AlonzoGenesis
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: AlonzoGenesis -> AlonzoGenesis -> Bool
== :: AlonzoGenesis -> AlonzoGenesis -> Bool
$c/= :: AlonzoGenesis -> AlonzoGenesis -> Bool
/= :: AlonzoGenesis -> AlonzoGenesis -> Bool
Eq, Int -> AlonzoGenesis -> ShowS
[AlonzoGenesis] -> ShowS
AlonzoGenesis -> String
(Int -> AlonzoGenesis -> ShowS)
-> (AlonzoGenesis -> String)
-> ([AlonzoGenesis] -> ShowS)
-> Show AlonzoGenesis
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> AlonzoGenesis -> ShowS
showsPrec :: Int -> AlonzoGenesis -> ShowS
$cshow :: AlonzoGenesis -> String
show :: AlonzoGenesis -> String
$cshowList :: [AlonzoGenesis] -> ShowS
showList :: [AlonzoGenesis] -> ShowS
Show, (forall x. AlonzoGenesis -> Rep AlonzoGenesis x)
-> (forall x. Rep AlonzoGenesis x -> AlonzoGenesis)
-> Generic AlonzoGenesis
forall x. Rep AlonzoGenesis x -> AlonzoGenesis
forall x. AlonzoGenesis -> Rep AlonzoGenesis x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. AlonzoGenesis -> Rep AlonzoGenesis x
from :: forall x. AlonzoGenesis -> Rep AlonzoGenesis x
$cto :: forall x. Rep AlonzoGenesis x -> AlonzoGenesis
to :: forall x. Rep AlonzoGenesis x -> AlonzoGenesis
Generic)
deriving ([AlonzoGenesis] -> Value
[AlonzoGenesis] -> Encoding
AlonzoGenesis -> Bool
AlonzoGenesis -> Value
AlonzoGenesis -> Encoding
(AlonzoGenesis -> Value)
-> (AlonzoGenesis -> Encoding)
-> ([AlonzoGenesis] -> Value)
-> ([AlonzoGenesis] -> Encoding)
-> (AlonzoGenesis -> Bool)
-> ToJSON AlonzoGenesis
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> (a -> Bool)
-> ToJSON a
$ctoJSON :: AlonzoGenesis -> Value
toJSON :: AlonzoGenesis -> Value
$ctoEncoding :: AlonzoGenesis -> Encoding
toEncoding :: AlonzoGenesis -> Encoding
$ctoJSONList :: [AlonzoGenesis] -> Value
toJSONList :: [AlonzoGenesis] -> Value
$ctoEncodingList :: [AlonzoGenesis] -> Encoding
toEncodingList :: [AlonzoGenesis] -> Encoding
$comitField :: AlonzoGenesis -> Bool
omitField :: AlonzoGenesis -> Bool
ToJSON) via KeyValuePairs AlonzoGenesis
instance NoThunks AlonzoGenesis
instance NFData AlonzoGenesis
newtype =
{ AlonzoExtraConfig -> Maybe CostModels
aecCostModels :: Maybe CostModels
}
deriving (AlonzoExtraConfig -> AlonzoExtraConfig -> Bool
(AlonzoExtraConfig -> AlonzoExtraConfig -> Bool)
-> (AlonzoExtraConfig -> AlonzoExtraConfig -> Bool)
-> Eq AlonzoExtraConfig
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: AlonzoExtraConfig -> AlonzoExtraConfig -> Bool
== :: AlonzoExtraConfig -> AlonzoExtraConfig -> Bool
$c/= :: AlonzoExtraConfig -> AlonzoExtraConfig -> Bool
/= :: AlonzoExtraConfig -> AlonzoExtraConfig -> Bool
Eq)
deriving newtype (AlonzoExtraConfig -> ()
(AlonzoExtraConfig -> ()) -> NFData AlonzoExtraConfig
forall a. (a -> ()) -> NFData a
$crnf :: AlonzoExtraConfig -> ()
rnf :: AlonzoExtraConfig -> ()
NFData, Context -> AlonzoExtraConfig -> IO (Maybe ThunkInfo)
Proxy AlonzoExtraConfig -> String
(Context -> AlonzoExtraConfig -> IO (Maybe ThunkInfo))
-> (Context -> AlonzoExtraConfig -> IO (Maybe ThunkInfo))
-> (Proxy AlonzoExtraConfig -> String)
-> NoThunks AlonzoExtraConfig
forall a.
(Context -> a -> IO (Maybe ThunkInfo))
-> (Context -> a -> IO (Maybe ThunkInfo))
-> (Proxy a -> String)
-> NoThunks a
$cnoThunks :: Context -> AlonzoExtraConfig -> IO (Maybe ThunkInfo)
noThunks :: Context -> AlonzoExtraConfig -> IO (Maybe ThunkInfo)
$cwNoThunks :: Context -> AlonzoExtraConfig -> IO (Maybe ThunkInfo)
wNoThunks :: Context -> AlonzoExtraConfig -> IO (Maybe ThunkInfo)
$cshowTypeOf :: Proxy AlonzoExtraConfig -> String
showTypeOf :: Proxy AlonzoExtraConfig -> String
NoThunks, Int -> AlonzoExtraConfig -> ShowS
[AlonzoExtraConfig] -> ShowS
AlonzoExtraConfig -> String
(Int -> AlonzoExtraConfig -> ShowS)
-> (AlonzoExtraConfig -> String)
-> ([AlonzoExtraConfig] -> ShowS)
-> Show AlonzoExtraConfig
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> AlonzoExtraConfig -> ShowS
showsPrec :: Int -> AlonzoExtraConfig -> ShowS
$cshow :: AlonzoExtraConfig -> String
show :: AlonzoExtraConfig -> String
$cshowList :: [AlonzoExtraConfig] -> ShowS
showList :: [AlonzoExtraConfig] -> ShowS
Show)
instance DecCBOR AlonzoExtraConfig
instance EncCBOR AlonzoExtraConfig
instance FromCBOR AlonzoExtraConfig where
fromCBOR :: forall s. Decoder s AlonzoExtraConfig
fromCBOR =
forall era t s. Era era => Decoder s t -> Decoder s t
eraDecoder @AlonzoEra (Decoder s AlonzoExtraConfig -> Decoder s AlonzoExtraConfig)
-> Decoder s AlonzoExtraConfig -> Decoder s AlonzoExtraConfig
forall a b. (a -> b) -> a -> b
$
Decode (Closed Dense) AlonzoExtraConfig
-> Decoder s AlonzoExtraConfig
forall t (w :: Wrapped) s. Typeable t => Decode w t -> Decoder s t
decode (Decode (Closed Dense) AlonzoExtraConfig
-> Decoder s AlonzoExtraConfig)
-> Decode (Closed Dense) AlonzoExtraConfig
-> Decoder s AlonzoExtraConfig
forall a b. (a -> b) -> a -> b
$
(Maybe CostModels -> AlonzoExtraConfig)
-> Decode (Closed Dense) (Maybe CostModels -> AlonzoExtraConfig)
forall t. t -> Decode (Closed Dense) t
RecD Maybe CostModels -> AlonzoExtraConfig
AlonzoExtraConfig
Decode (Closed Dense) (Maybe CostModels -> AlonzoExtraConfig)
-> Decode (Closed Dense) (Maybe CostModels)
-> Decode (Closed Dense) AlonzoExtraConfig
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! (forall s. Decoder s (Maybe CostModels))
-> Decode (Closed Dense) (Maybe CostModels)
forall t. (forall s. Decoder s t) -> Decode (Closed Dense) t
D (Decoder s CostModels -> Decoder s (Maybe CostModels)
forall s a. Decoder s a -> Decoder s (Maybe a)
decodeNullMaybe Decoder s CostModels
forall s. Decoder s CostModels
decodeCostModelsLenient)
instance ToCBOR AlonzoExtraConfig where
toCBOR :: AlonzoExtraConfig -> Encoding
toCBOR x :: AlonzoExtraConfig
x@(AlonzoExtraConfig Maybe CostModels
_) =
let AlonzoExtraConfig {Maybe CostModels
aecCostModels :: AlonzoExtraConfig -> Maybe CostModels
aecCostModels :: Maybe CostModels
..} = AlonzoExtraConfig
x
in forall era t. (Era era, EncCBOR t) => t -> Encoding
toEraCBOR @AlonzoEra (Encoding -> Encoding)
-> (Encode (Closed Dense) AlonzoExtraConfig -> Encoding)
-> Encode (Closed Dense) AlonzoExtraConfig
-> Encoding
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Encode (Closed Dense) AlonzoExtraConfig -> Encoding
forall (w :: Wrapped) t. Encode w t -> Encoding
encode (Encode (Closed Dense) AlonzoExtraConfig -> Encoding)
-> Encode (Closed Dense) AlonzoExtraConfig -> Encoding
forall a b. (a -> b) -> a -> b
$
(Maybe CostModels -> AlonzoExtraConfig)
-> Encode (Closed Dense) (Maybe CostModels -> AlonzoExtraConfig)
forall t. t -> Encode (Closed Dense) t
Rec Maybe CostModels -> AlonzoExtraConfig
AlonzoExtraConfig
Encode (Closed Dense) (Maybe CostModels -> AlonzoExtraConfig)
-> Encode (Closed Dense) (Maybe CostModels)
-> Encode (Closed Dense) AlonzoExtraConfig
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> (Maybe CostModels -> Encoding)
-> Maybe CostModels -> Encode (Closed Dense) (Maybe CostModels)
forall t. (t -> Encoding) -> t -> Encode (Closed Dense) t
E ((CostModels -> Encoding) -> Maybe CostModels -> Encoding
forall a. (a -> Encoding) -> Maybe a -> Encoding
encodeNullMaybe CostModels -> Encoding
forall a. EncCBOR a => a -> Encoding
encCBOR) Maybe CostModels
aecCostModels
instance FromJSON AlonzoExtraConfig where
parseJSON :: Value -> Parser AlonzoExtraConfig
parseJSON = String
-> (Object -> Parser AlonzoExtraConfig)
-> Value
-> Parser AlonzoExtraConfig
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Aeson.withObject String
"Extra Config" ((Object -> Parser AlonzoExtraConfig)
-> Value -> Parser AlonzoExtraConfig)
-> (Object -> Parser AlonzoExtraConfig)
-> Value
-> Parser AlonzoExtraConfig
forall a b. (a -> b) -> a -> b
$ \Object
o ->
Object
o Object -> Key -> Parser (Maybe Value)
forall a. FromJSON a => Object -> Key -> Parser (Maybe a)
.:? Key
"costModels" Parser (Maybe Value)
-> (Maybe Value -> Parser AlonzoExtraConfig)
-> Parser AlonzoExtraConfig
forall a b. Parser a -> (a -> Parser b) -> Parser b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
Maybe Value
Nothing -> AlonzoExtraConfig -> Parser AlonzoExtraConfig
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (AlonzoExtraConfig -> Parser AlonzoExtraConfig)
-> AlonzoExtraConfig -> Parser AlonzoExtraConfig
forall a b. (a -> b) -> a -> b
$ Maybe CostModels -> AlonzoExtraConfig
AlonzoExtraConfig Maybe CostModels
forall a. Maybe a
Nothing
Just Value
val -> Maybe CostModels -> AlonzoExtraConfig
AlonzoExtraConfig (Maybe CostModels -> AlonzoExtraConfig)
-> (CostModels -> Maybe CostModels)
-> CostModels
-> AlonzoExtraConfig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CostModels -> Maybe CostModels
forall a. a -> Maybe a
Just (CostModels -> AlonzoExtraConfig)
-> Parser CostModels -> Parser AlonzoExtraConfig
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Bool -> [Language] -> Value -> Parser CostModels
parseCostModels Bool
True [] Value
val
instance ToJSON AlonzoExtraConfig where
toJSON :: AlonzoExtraConfig -> Value
toJSON (AlonzoExtraConfig Maybe CostModels
cms) = [Pair] -> Value
Aeson.object [Key
"costModels" Key -> Maybe CostModels -> Pair
forall v. ToJSON v => Key -> v -> Pair
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Maybe CostModels
cms]
pattern AlonzoGenesis ::
CoinPerWord ->
CostModel ->
Prices ->
ExUnits ->
ExUnits ->
Natural ->
Natural ->
Natural ->
Maybe AlonzoExtraConfig ->
AlonzoGenesis
pattern $mAlonzoGenesis :: forall {r}.
AlonzoGenesis
-> (CoinPerWord
-> CostModel
-> Prices
-> ExUnits
-> ExUnits
-> Natural
-> Natural
-> Natural
-> Maybe AlonzoExtraConfig
-> r)
-> ((# #) -> r)
-> r
$bAlonzoGenesis :: CoinPerWord
-> CostModel
-> Prices
-> ExUnits
-> ExUnits
-> Natural
-> Natural
-> Natural
-> Maybe AlonzoExtraConfig
-> AlonzoGenesis
AlonzoGenesis
{ AlonzoGenesis -> CoinPerWord
agCoinsPerUTxOWord
, AlonzoGenesis -> CostModel
agPlutusV1CostModel
, AlonzoGenesis -> Prices
agPrices
, AlonzoGenesis -> ExUnits
agMaxTxExUnits
, AlonzoGenesis -> ExUnits
agMaxBlockExUnits
, AlonzoGenesis -> Natural
agMaxValSize
, AlonzoGenesis -> Natural
agCollateralPercentage
, AlonzoGenesis -> Natural
agMaxCollateralInputs
,
} <-
AlonzoGenesisWrapper
{ unAlonzoGenesisWrapper =
UpgradeAlonzoPParams
{ uappCoinsPerUTxOWord = agCoinsPerUTxOWord
, uappPlutusV1CostModel = agPlutusV1CostModel
, uappPrices = agPrices
, uappMaxTxExUnits = agMaxTxExUnits
, uappMaxBlockExUnits = agMaxBlockExUnits
, uappMaxValSize = agMaxValSize
, uappCollateralPercentage = agCollateralPercentage
, uappMaxCollateralInputs = agMaxCollateralInputs
}
, extraConfig = agExtraConfig
}
where
AlonzoGenesis
CoinPerWord
coinsPerUTxOWord_
CostModel
costModels_
Prices
prices_
ExUnits
maxTxExUnits_
ExUnits
maxBlockExUnits_
Natural
maxValSize_
Natural
collateralPercentage_
Natural
maxCollateralInputs_
Maybe AlonzoExtraConfig
extraConfig_ =
UpgradeAlonzoPParams Identity
-> Maybe AlonzoExtraConfig -> AlonzoGenesis
AlonzoGenesisWrapper
( UpgradeAlonzoPParams
{ uappCoinsPerUTxOWord :: HKD Identity CoinPerWord
uappCoinsPerUTxOWord = HKD Identity CoinPerWord
CoinPerWord
coinsPerUTxOWord_
, uappPlutusV1CostModel :: HKD Identity CostModel
uappPlutusV1CostModel = HKD Identity CostModel
CostModel
costModels_
, uappPrices :: HKD Identity Prices
uappPrices = HKD Identity Prices
Prices
prices_
, uappMaxTxExUnits :: HKD Identity ExUnits
uappMaxTxExUnits = HKD Identity ExUnits
ExUnits
maxTxExUnits_
, uappMaxBlockExUnits :: HKD Identity ExUnits
uappMaxBlockExUnits = HKD Identity ExUnits
ExUnits
maxBlockExUnits_
, uappMaxValSize :: HKD Identity Natural
uappMaxValSize = Natural
HKD Identity Natural
maxValSize_
, uappCollateralPercentage :: HKD Identity Natural
uappCollateralPercentage = Natural
HKD Identity Natural
collateralPercentage_
, uappMaxCollateralInputs :: HKD Identity Natural
uappMaxCollateralInputs = Natural
HKD Identity Natural
maxCollateralInputs_
}
)
Maybe AlonzoExtraConfig
extraConfig_
{-# COMPLETE AlonzoGenesis #-}
instance EraGenesis AlonzoEra where
type Genesis AlonzoEra = AlonzoGenesis
instance DecCBOR AlonzoGenesis
instance EncCBOR AlonzoGenesis
instance FromCBOR AlonzoGenesis where
fromCBOR :: forall s. Decoder s AlonzoGenesis
fromCBOR =
forall era t s. Era era => Decoder s t -> Decoder s t
eraDecoder @AlonzoEra (Decoder s AlonzoGenesis -> Decoder s AlonzoGenesis)
-> Decoder s AlonzoGenesis -> Decoder s AlonzoGenesis
forall a b. (a -> b) -> a -> b
$
Decode (Closed Dense) AlonzoGenesis -> Decoder s AlonzoGenesis
forall t (w :: Wrapped) s. Typeable t => Decode w t -> Decoder s t
decode (Decode (Closed Dense) AlonzoGenesis -> Decoder s AlonzoGenesis)
-> Decode (Closed Dense) AlonzoGenesis -> Decoder s AlonzoGenesis
forall a b. (a -> b) -> a -> b
$
(CoinPerWord
-> CostModel
-> Prices
-> ExUnits
-> ExUnits
-> Natural
-> Natural
-> Natural
-> Maybe AlonzoExtraConfig
-> AlonzoGenesis)
-> Decode
(Closed Dense)
(CoinPerWord
-> CostModel
-> Prices
-> ExUnits
-> ExUnits
-> Natural
-> Natural
-> Natural
-> Maybe AlonzoExtraConfig
-> AlonzoGenesis)
forall t. t -> Decode (Closed Dense) t
RecD CoinPerWord
-> CostModel
-> Prices
-> ExUnits
-> ExUnits
-> Natural
-> Natural
-> Natural
-> Maybe AlonzoExtraConfig
-> AlonzoGenesis
AlonzoGenesis
Decode
(Closed Dense)
(CoinPerWord
-> CostModel
-> Prices
-> ExUnits
-> ExUnits
-> Natural
-> Natural
-> Natural
-> Maybe AlonzoExtraConfig
-> AlonzoGenesis)
-> Decode (Closed (ZonkAny 7)) CoinPerWord
-> Decode
(Closed Dense)
(CostModel
-> Prices
-> ExUnits
-> ExUnits
-> Natural
-> Natural
-> Natural
-> Maybe AlonzoExtraConfig
-> AlonzoGenesis)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny 7)) CoinPerWord
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
Decode
(Closed Dense)
(CostModel
-> Prices
-> ExUnits
-> ExUnits
-> Natural
-> Natural
-> Natural
-> Maybe AlonzoExtraConfig
-> AlonzoGenesis)
-> Decode (Closed Dense) CostModel
-> Decode
(Closed Dense)
(Prices
-> ExUnits
-> ExUnits
-> Natural
-> Natural
-> Natural
-> Maybe AlonzoExtraConfig
-> AlonzoGenesis)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! (forall s. Decoder s CostModel) -> Decode (Closed Dense) CostModel
forall t. (forall s. Decoder s t) -> Decode (Closed Dense) t
D (Language -> Decoder s CostModel
forall s. Language -> Decoder s CostModel
decodeCostModel Language
PlutusV1)
Decode
(Closed Dense)
(Prices
-> ExUnits
-> ExUnits
-> Natural
-> Natural
-> Natural
-> Maybe AlonzoExtraConfig
-> AlonzoGenesis)
-> Decode (Closed (ZonkAny 6)) Prices
-> Decode
(Closed Dense)
(ExUnits
-> ExUnits
-> Natural
-> Natural
-> Natural
-> Maybe AlonzoExtraConfig
-> AlonzoGenesis)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny 6)) Prices
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
Decode
(Closed Dense)
(ExUnits
-> ExUnits
-> Natural
-> Natural
-> Natural
-> Maybe AlonzoExtraConfig
-> AlonzoGenesis)
-> Decode (Closed (ZonkAny 5)) ExUnits
-> Decode
(Closed Dense)
(ExUnits
-> Natural
-> Natural
-> Natural
-> Maybe AlonzoExtraConfig
-> AlonzoGenesis)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny 5)) ExUnits
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
Decode
(Closed Dense)
(ExUnits
-> Natural
-> Natural
-> Natural
-> Maybe AlonzoExtraConfig
-> AlonzoGenesis)
-> Decode (Closed (ZonkAny 4)) ExUnits
-> Decode
(Closed Dense)
(Natural
-> Natural -> Natural -> Maybe AlonzoExtraConfig -> AlonzoGenesis)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny 4)) ExUnits
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
Decode
(Closed Dense)
(Natural
-> Natural -> Natural -> Maybe AlonzoExtraConfig -> AlonzoGenesis)
-> Decode (Closed (ZonkAny 3)) Natural
-> Decode
(Closed Dense)
(Natural -> Natural -> Maybe AlonzoExtraConfig -> AlonzoGenesis)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny 3)) Natural
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
Decode
(Closed Dense)
(Natural -> Natural -> Maybe AlonzoExtraConfig -> AlonzoGenesis)
-> Decode (Closed (ZonkAny 2)) Natural
-> Decode
(Closed Dense)
(Natural -> Maybe AlonzoExtraConfig -> AlonzoGenesis)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny 2)) Natural
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
Decode
(Closed Dense)
(Natural -> Maybe AlonzoExtraConfig -> AlonzoGenesis)
-> Decode (Closed (ZonkAny 1)) Natural
-> Decode (Closed Dense) (Maybe AlonzoExtraConfig -> AlonzoGenesis)
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny 1)) Natural
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
Decode (Closed Dense) (Maybe AlonzoExtraConfig -> AlonzoGenesis)
-> Decode (Closed (ZonkAny 0)) (Maybe AlonzoExtraConfig)
-> Decode (Closed Dense) AlonzoGenesis
forall a (w1 :: Wrapped) t (w :: Density).
Typeable a =>
Decode w1 (a -> t) -> Decode (Closed w) a -> Decode w1 t
<! Decode (Closed (ZonkAny 0)) (Maybe AlonzoExtraConfig)
forall t (w :: Wrapped). DecCBOR t => Decode w t
From
instance ToCBOR AlonzoGenesis where
toCBOR :: AlonzoGenesis -> Encoding
toCBOR x :: AlonzoGenesis
x@(AlonzoGenesis CoinPerWord
_ CostModel
_ Prices
_ ExUnits
_ ExUnits
_ Natural
_ Natural
_ Natural
_ Maybe AlonzoExtraConfig
_) =
let AlonzoGenesis {Natural
Maybe AlonzoExtraConfig
Prices
ExUnits
CostModel
CoinPerWord
agCoinsPerUTxOWord :: AlonzoGenesis -> CoinPerWord
agPlutusV1CostModel :: AlonzoGenesis -> CostModel
agPrices :: AlonzoGenesis -> Prices
agMaxTxExUnits :: AlonzoGenesis -> ExUnits
agMaxBlockExUnits :: AlonzoGenesis -> ExUnits
agMaxValSize :: AlonzoGenesis -> Natural
agCollateralPercentage :: AlonzoGenesis -> Natural
agMaxCollateralInputs :: AlonzoGenesis -> Natural
agExtraConfig :: AlonzoGenesis -> Maybe AlonzoExtraConfig
agCoinsPerUTxOWord :: CoinPerWord
agPlutusV1CostModel :: CostModel
agPrices :: Prices
agMaxTxExUnits :: ExUnits
agMaxBlockExUnits :: ExUnits
agMaxValSize :: Natural
agCollateralPercentage :: Natural
agMaxCollateralInputs :: Natural
agExtraConfig :: Maybe AlonzoExtraConfig
..} = AlonzoGenesis
x
in forall era t. (Era era, EncCBOR t) => t -> Encoding
toEraCBOR @AlonzoEra (Encoding -> Encoding)
-> (Encode (Closed Dense) AlonzoGenesis -> Encoding)
-> Encode (Closed Dense) AlonzoGenesis
-> Encoding
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Encode (Closed Dense) AlonzoGenesis -> Encoding
forall (w :: Wrapped) t. Encode w t -> Encoding
encode (Encode (Closed Dense) AlonzoGenesis -> Encoding)
-> Encode (Closed Dense) AlonzoGenesis -> Encoding
forall a b. (a -> b) -> a -> b
$
(CoinPerWord
-> CostModel
-> Prices
-> ExUnits
-> ExUnits
-> Natural
-> Natural
-> Natural
-> Maybe AlonzoExtraConfig
-> AlonzoGenesis)
-> Encode
(Closed Dense)
(CoinPerWord
-> CostModel
-> Prices
-> ExUnits
-> ExUnits
-> Natural
-> Natural
-> Natural
-> Maybe AlonzoExtraConfig
-> AlonzoGenesis)
forall t. t -> Encode (Closed Dense) t
Rec CoinPerWord
-> CostModel
-> Prices
-> ExUnits
-> ExUnits
-> Natural
-> Natural
-> Natural
-> Maybe AlonzoExtraConfig
-> AlonzoGenesis
AlonzoGenesis
Encode
(Closed Dense)
(CoinPerWord
-> CostModel
-> Prices
-> ExUnits
-> ExUnits
-> Natural
-> Natural
-> Natural
-> Maybe AlonzoExtraConfig
-> AlonzoGenesis)
-> Encode (Closed Dense) CoinPerWord
-> Encode
(Closed Dense)
(CostModel
-> Prices
-> ExUnits
-> ExUnits
-> Natural
-> Natural
-> Natural
-> Maybe AlonzoExtraConfig
-> AlonzoGenesis)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> CoinPerWord -> Encode (Closed Dense) CoinPerWord
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To CoinPerWord
agCoinsPerUTxOWord
Encode
(Closed Dense)
(CostModel
-> Prices
-> ExUnits
-> ExUnits
-> Natural
-> Natural
-> Natural
-> Maybe AlonzoExtraConfig
-> AlonzoGenesis)
-> Encode (Closed Dense) CostModel
-> Encode
(Closed Dense)
(Prices
-> ExUnits
-> ExUnits
-> Natural
-> Natural
-> Natural
-> Maybe AlonzoExtraConfig
-> AlonzoGenesis)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> (CostModel -> Encoding)
-> CostModel -> Encode (Closed Dense) CostModel
forall t. (t -> Encoding) -> t -> Encode (Closed Dense) t
E CostModel -> Encoding
encodeCostModel CostModel
agPlutusV1CostModel
Encode
(Closed Dense)
(Prices
-> ExUnits
-> ExUnits
-> Natural
-> Natural
-> Natural
-> Maybe AlonzoExtraConfig
-> AlonzoGenesis)
-> Encode (Closed Dense) Prices
-> Encode
(Closed Dense)
(ExUnits
-> ExUnits
-> Natural
-> Natural
-> Natural
-> Maybe AlonzoExtraConfig
-> AlonzoGenesis)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Prices -> Encode (Closed Dense) Prices
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Prices
agPrices
Encode
(Closed Dense)
(ExUnits
-> ExUnits
-> Natural
-> Natural
-> Natural
-> Maybe AlonzoExtraConfig
-> AlonzoGenesis)
-> Encode (Closed Dense) ExUnits
-> Encode
(Closed Dense)
(ExUnits
-> Natural
-> Natural
-> Natural
-> Maybe AlonzoExtraConfig
-> AlonzoGenesis)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> ExUnits -> Encode (Closed Dense) ExUnits
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To ExUnits
agMaxTxExUnits
Encode
(Closed Dense)
(ExUnits
-> Natural
-> Natural
-> Natural
-> Maybe AlonzoExtraConfig
-> AlonzoGenesis)
-> Encode (Closed Dense) ExUnits
-> Encode
(Closed Dense)
(Natural
-> Natural -> Natural -> Maybe AlonzoExtraConfig -> AlonzoGenesis)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> ExUnits -> Encode (Closed Dense) ExUnits
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To ExUnits
agMaxBlockExUnits
Encode
(Closed Dense)
(Natural
-> Natural -> Natural -> Maybe AlonzoExtraConfig -> AlonzoGenesis)
-> Encode (Closed Dense) Natural
-> Encode
(Closed Dense)
(Natural -> Natural -> Maybe AlonzoExtraConfig -> AlonzoGenesis)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Natural -> Encode (Closed Dense) Natural
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Natural
agMaxValSize
Encode
(Closed Dense)
(Natural -> Natural -> Maybe AlonzoExtraConfig -> AlonzoGenesis)
-> Encode (Closed Dense) Natural
-> Encode
(Closed Dense)
(Natural -> Maybe AlonzoExtraConfig -> AlonzoGenesis)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Natural -> Encode (Closed Dense) Natural
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Natural
agCollateralPercentage
Encode
(Closed Dense)
(Natural -> Maybe AlonzoExtraConfig -> AlonzoGenesis)
-> Encode (Closed Dense) Natural
-> Encode (Closed Dense) (Maybe AlonzoExtraConfig -> AlonzoGenesis)
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Natural -> Encode (Closed Dense) Natural
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Natural
agMaxCollateralInputs
Encode (Closed Dense) (Maybe AlonzoExtraConfig -> AlonzoGenesis)
-> Encode (Closed Dense) (Maybe AlonzoExtraConfig)
-> Encode (Closed Dense) AlonzoGenesis
forall (w :: Wrapped) a t (r :: Density).
Encode w (a -> t) -> Encode (Closed r) a -> Encode w t
!> Maybe AlonzoExtraConfig
-> Encode (Closed Dense) (Maybe AlonzoExtraConfig)
forall t. EncCBOR t => t -> Encode (Closed Dense) t
To Maybe AlonzoExtraConfig
agExtraConfig
instance FromJSON AlonzoGenesis where
parseJSON :: Value -> Parser AlonzoGenesis
parseJSON = String
-> (Object -> Parser AlonzoGenesis)
-> Value
-> Parser AlonzoGenesis
forall a. String -> (Object -> Parser a) -> Value -> Parser a
Aeson.withObject String
"Alonzo Genesis" ((Object -> Parser AlonzoGenesis) -> Value -> Parser AlonzoGenesis)
-> (Object -> Parser AlonzoGenesis)
-> Value
-> Parser AlonzoGenesis
forall a b. (a -> b) -> a -> b
$ \Object
o -> do
agCoinsPerUTxOWord <- Object
o Object -> Key -> Parser CoinPerWord
forall a. FromJSON a => Object -> Key -> Parser a
.: Key
"lovelacePerUTxOWord"
cms <- parseCostModels False [PlutusV1] =<< o .: "costModels"
agPrices <- o .: "executionPrices"
agMaxTxExUnits <- o .: "maxTxExUnits"
agMaxBlockExUnits <- o .: "maxBlockExUnits"
agMaxValSize <- o .: "maxValueSize"
agCollateralPercentage <- o .: "collateralPercentage"
agMaxCollateralInputs <- o .: "maxCollateralInputs"
agExtraConfig <- o .:? "extraConfig"
agPlutusV1CostModel <-
case Map.toList (costModelsValid cms) of
[] -> String -> Parser CostModel
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"Expected \"PlutusV1\" cost model to be supplied"
[(Language
PlutusV1, CostModel
pv1CostModel)] -> CostModel -> Parser CostModel
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure CostModel
pv1CostModel
[(Language, CostModel)]
_ ->
String -> Parser CostModel
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser CostModel) -> String -> Parser CostModel
forall a b. (a -> b) -> a -> b
$
String
"Only PlutusV1 CostModel is allowed in the AlonzoGenesis, but "
String -> ShowS
forall a. Semigroup a => a -> a -> a
<> String -> Context -> String
forall a. [a] -> [[a]] -> [a]
List.intercalate String
", " ((Word8 -> String) -> [Word8] -> Context
forall a b. (a -> b) -> [a] -> [b]
map Word8 -> String
forall a. Show a => a -> String
show ([Word8] -> Context)
-> (Map Word8 [Int64] -> [Word8]) -> Map Word8 [Int64] -> Context
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Map Word8 [Int64] -> [Word8]
forall k a. Map k a -> [k]
Map.keys (Map Word8 [Int64] -> Context) -> Map Word8 [Int64] -> Context
forall a b. (a -> b) -> a -> b
$ CostModels -> Map Word8 [Int64]
flattenCostModels CostModels
cms)
String -> ShowS
forall a. Semigroup a => a -> a -> a
<> String
" were supplied. Use \"extraConfig\" if you need to inject other cost models for testing."
return AlonzoGenesis {..}
instance ToKeyValuePairs AlonzoGenesis where
toKeyValuePairs :: forall e kv. KeyValue e kv => AlonzoGenesis -> [kv]
toKeyValuePairs AlonzoGenesis
ag =
[ Key
"lovelacePerUTxOWord" Key -> CoinPerWord -> kv
forall v. ToJSON v => Key -> v -> kv
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= AlonzoGenesis -> CoinPerWord
agCoinsPerUTxOWord AlonzoGenesis
ag
, Key
"costModels" Key -> CostModels -> kv
forall v. ToJSON v => Key -> v -> kv
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= Map Language CostModel -> CostModels
mkCostModels (Language -> CostModel -> Map Language CostModel
forall k a. k -> a -> Map k a
Map.singleton Language
PlutusV1 (CostModel -> Map Language CostModel)
-> CostModel -> Map Language CostModel
forall a b. (a -> b) -> a -> b
$ AlonzoGenesis -> CostModel
agPlutusV1CostModel AlonzoGenesis
ag)
, Key
"executionPrices" Key -> Prices -> kv
forall v. ToJSON v => Key -> v -> kv
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= AlonzoGenesis -> Prices
agPrices AlonzoGenesis
ag
, Key
"maxTxExUnits" Key -> ExUnits -> kv
forall v. ToJSON v => Key -> v -> kv
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= AlonzoGenesis -> ExUnits
agMaxTxExUnits AlonzoGenesis
ag
, Key
"maxBlockExUnits" Key -> ExUnits -> kv
forall v. ToJSON v => Key -> v -> kv
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= AlonzoGenesis -> ExUnits
agMaxBlockExUnits AlonzoGenesis
ag
, Key
"maxValueSize" Key -> Natural -> kv
forall v. ToJSON v => Key -> v -> kv
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= AlonzoGenesis -> Natural
agMaxValSize AlonzoGenesis
ag
, Key
"collateralPercentage" Key -> Natural -> kv
forall v. ToJSON v => Key -> v -> kv
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= AlonzoGenesis -> Natural
agCollateralPercentage AlonzoGenesis
ag
, Key
"maxCollateralInputs" Key -> Natural -> kv
forall v. ToJSON v => Key -> v -> kv
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= AlonzoGenesis -> Natural
agMaxCollateralInputs AlonzoGenesis
ag
]
[kv] -> [kv] -> [kv]
forall a. [a] -> [a] -> [a]
++ [Key
"extraConfig" Key -> AlonzoExtraConfig -> kv
forall v. ToJSON v => Key -> v -> kv
forall e kv v. (KeyValue e kv, ToJSON v) => Key -> v -> kv
.= AlonzoExtraConfig
extraConfig | Just AlonzoExtraConfig
extraConfig <- [AlonzoGenesis -> Maybe AlonzoExtraConfig
agExtraConfig AlonzoGenesis
ag]]