{-# LANGUAGE AllowAmbiguousTypes #-} {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE OverloadedLists #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UndecidableInstances #-} {-# OPTIONS_GHC -Wno-deprecations #-} module Test.Cardano.Ledger.Examples.AlonzoAPI (tests) where import Cardano.Ledger.Alonzo.Tx (alonzoMinFeeTx, hashData) import Cardano.Ledger.Alonzo.TxWits (TxDats (..)) import Cardano.Ledger.BaseTypes (ProtVer (..), inject, natVersion) import Cardano.Ledger.Coin (Coin (..)) import Cardano.Ledger.Conway.Core (AlonzoEraTxWits (..)) import Cardano.Ledger.Core (EraTx (..), EraTxWits (..), hashScript) import Cardano.Ledger.Plutus (ExUnits (..)) import Cardano.Ledger.Plutus.Data (Data (..)) import Cardano.Ledger.Plutus.Language (Language (..)) import Cardano.Ledger.SafeHash (hashAnnotated) import Cardano.Ledger.Tools (estimateMinFeeTx) import Lens.Micro ((&), (.~)) import qualified PlutusLedgerApi.V1 as PV1 import Test.Cardano.Ledger.Core.KeyPair (mkWitnessVKey) import Test.Cardano.Ledger.Examples.STSTestUtils ( mkGenesisTxIn, mkSingleRedeemer, mkTxDats, someAddr, someKeys, ) import Test.Cardano.Ledger.Generic.Fields ( PParamsField (..), TxBodyField (..), TxOutField (..), ) import Test.Cardano.Ledger.Generic.GenState (PlutusPurposeTag (..)) import Test.Cardano.Ledger.Generic.Proof import Test.Cardano.Ledger.Generic.Scriptic (Scriptic (..)) import Test.Cardano.Ledger.Generic.Updaters import Test.Cardano.Ledger.Plutus (zeroTestingCostModels) import Test.Tasty (TestTree, testGroup) import Test.Tasty.HUnit (Assertion, testCase, (@?=)) tests :: TestTree tests :: TestTree tests = TestName -> [TestTree] -> TestTree testGroup TestName "Alonzo API" [TestName -> Assertion -> TestTree testCase TestName "estimateMinFee" Assertion testEstimateMinFee] testEstimateMinFee :: Assertion testEstimateMinFee :: Assertion testEstimateMinFee = forall era. EraTx era => PParams era -> Tx era -> Int -> Int -> Int -> Coin estimateMinFeeTx @AlonzoEra PParams AlonzoEra pparams Tx AlonzoEra AlonzoTx AlonzoEra validatingTxNoWits Int 1 Int 0 Int 0 Coin -> Coin -> Assertion forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion @?= PParams AlonzoEra -> Tx AlonzoEra -> Coin forall era. (EraTx era, AlonzoEraTxWits era, AlonzoEraPParams era) => PParams era -> Tx era -> Coin alonzoMinFeeTx PParams AlonzoEra pparams Tx AlonzoEra AlonzoTx AlonzoEra validatingTx where pf :: Proof AlonzoEra pf = Proof AlonzoEra Alonzo pparams :: PParams AlonzoEra pparams = Proof AlonzoEra -> [PParamsField AlonzoEra] -> PParams AlonzoEra forall era. EraPParams era => Proof era -> [PParamsField era] -> PParams era newPParams Proof AlonzoEra pf ([PParamsField AlonzoEra] -> PParams AlonzoEra) -> [PParamsField AlonzoEra] -> PParams AlonzoEra forall a b. (a -> b) -> a -> b $ [PParamsField AlonzoEra] forall era. [PParamsField era] defaultPPs [PParamsField AlonzoEra] -> [PParamsField AlonzoEra] -> [PParamsField AlonzoEra] forall a. [a] -> [a] -> [a] ++ [Coin -> PParamsField AlonzoEra forall era. Coin -> PParamsField era MinfeeA (Integer -> Coin Coin Integer 1)] script :: Script AlonzoEra script = Natural -> Proof AlonzoEra -> Script AlonzoEra forall era. Scriptic era => Natural -> Proof era -> Script era always Natural 3 Proof AlonzoEra pf dat :: Data AlonzoEra dat = Data -> Data AlonzoEra forall era. Era era => Data -> Data era Data (Integer -> Data PV1.I Integer 123) validatingTxNoWits :: AlonzoTx AlonzoEra validatingTxNoWits = TxBody AlonzoEra -> Tx AlonzoEra forall era. EraTx era => TxBody era -> Tx era mkBasicTx TxBody AlonzoEra validatingBody AlonzoTx AlonzoEra -> (AlonzoTx AlonzoEra -> AlonzoTx AlonzoEra) -> AlonzoTx AlonzoEra forall a b. a -> (a -> b) -> b & (TxWits AlonzoEra -> Identity (TxWits AlonzoEra)) -> Tx AlonzoEra -> Identity (Tx AlonzoEra) (TxWits AlonzoEra -> Identity (TxWits AlonzoEra)) -> AlonzoTx AlonzoEra -> Identity (AlonzoTx AlonzoEra) forall era. EraTx era => Lens' (Tx era) (TxWits era) Lens' (Tx AlonzoEra) (TxWits AlonzoEra) witsTxL ((TxWits AlonzoEra -> Identity (TxWits AlonzoEra)) -> AlonzoTx AlonzoEra -> Identity (AlonzoTx AlonzoEra)) -> ((Map ScriptHash (Script AlonzoEra) -> Identity (Map ScriptHash (Script AlonzoEra))) -> TxWits AlonzoEra -> Identity (TxWits AlonzoEra)) -> (Map ScriptHash (Script AlonzoEra) -> Identity (Map ScriptHash (Script AlonzoEra))) -> AlonzoTx AlonzoEra -> Identity (AlonzoTx AlonzoEra) forall b c a. (b -> c) -> (a -> b) -> a -> c . (Map ScriptHash (Script AlonzoEra) -> Identity (Map ScriptHash (Script AlonzoEra))) -> TxWits AlonzoEra -> Identity (TxWits AlonzoEra) forall era. EraTxWits era => Lens' (TxWits era) (Map ScriptHash (Script era)) Lens' (TxWits AlonzoEra) (Map ScriptHash (Script AlonzoEra)) scriptTxWitsL ((Map ScriptHash (Script AlonzoEra) -> Identity (Map ScriptHash (Script AlonzoEra))) -> AlonzoTx AlonzoEra -> Identity (AlonzoTx AlonzoEra)) -> Map ScriptHash (Script AlonzoEra) -> AlonzoTx AlonzoEra -> AlonzoTx AlonzoEra forall s t a b. ASetter s t a b -> b -> s -> t .~ [(Script AlonzoEra -> ScriptHash forall era. EraScript era => Script era -> ScriptHash hashScript Script AlonzoEra AlonzoScript AlonzoEra script, AlonzoScript AlonzoEra script)] AlonzoTx AlonzoEra -> (AlonzoTx AlonzoEra -> AlonzoTx AlonzoEra) -> AlonzoTx AlonzoEra forall a b. a -> (a -> b) -> b & (TxWits AlonzoEra -> Identity (TxWits AlonzoEra)) -> Tx AlonzoEra -> Identity (Tx AlonzoEra) (TxWits AlonzoEra -> Identity (TxWits AlonzoEra)) -> AlonzoTx AlonzoEra -> Identity (AlonzoTx AlonzoEra) forall era. EraTx era => Lens' (Tx era) (TxWits era) Lens' (Tx AlonzoEra) (TxWits AlonzoEra) witsTxL ((TxWits AlonzoEra -> Identity (TxWits AlonzoEra)) -> AlonzoTx AlonzoEra -> Identity (AlonzoTx AlonzoEra)) -> ((TxDats AlonzoEra -> Identity (TxDats AlonzoEra)) -> TxWits AlonzoEra -> Identity (TxWits AlonzoEra)) -> (TxDats AlonzoEra -> Identity (TxDats AlonzoEra)) -> AlonzoTx AlonzoEra -> Identity (AlonzoTx AlonzoEra) forall b c a. (b -> c) -> (a -> b) -> a -> c . (TxDats AlonzoEra -> Identity (TxDats AlonzoEra)) -> TxWits AlonzoEra -> Identity (TxWits AlonzoEra) forall era. AlonzoEraTxWits era => Lens' (TxWits era) (TxDats era) Lens' (TxWits AlonzoEra) (TxDats AlonzoEra) datsTxWitsL ((TxDats AlonzoEra -> Identity (TxDats AlonzoEra)) -> AlonzoTx AlonzoEra -> Identity (AlonzoTx AlonzoEra)) -> TxDats AlonzoEra -> AlonzoTx AlonzoEra -> AlonzoTx AlonzoEra forall s t a b. ASetter s t a b -> b -> s -> t .~ Map DataHash (Data AlonzoEra) -> TxDats AlonzoEra forall era. Era era => Map DataHash (Data era) -> TxDats era TxDats [(Data AlonzoEra -> DataHash forall era. Data era -> DataHash hashData Data AlonzoEra dat, Data AlonzoEra dat)] AlonzoTx AlonzoEra -> (AlonzoTx AlonzoEra -> AlonzoTx AlonzoEra) -> AlonzoTx AlonzoEra forall a b. a -> (a -> b) -> b & (TxWits AlonzoEra -> Identity (TxWits AlonzoEra)) -> Tx AlonzoEra -> Identity (Tx AlonzoEra) (TxWits AlonzoEra -> Identity (TxWits AlonzoEra)) -> AlonzoTx AlonzoEra -> Identity (AlonzoTx AlonzoEra) forall era. EraTx era => Lens' (Tx era) (TxWits era) Lens' (Tx AlonzoEra) (TxWits AlonzoEra) witsTxL ((TxWits AlonzoEra -> Identity (TxWits AlonzoEra)) -> AlonzoTx AlonzoEra -> Identity (AlonzoTx AlonzoEra)) -> ((Redeemers AlonzoEra -> Identity (Redeemers AlonzoEra)) -> TxWits AlonzoEra -> Identity (TxWits AlonzoEra)) -> (Redeemers AlonzoEra -> Identity (Redeemers AlonzoEra)) -> AlonzoTx AlonzoEra -> Identity (AlonzoTx AlonzoEra) forall b c a. (b -> c) -> (a -> b) -> a -> c . (Redeemers AlonzoEra -> Identity (Redeemers AlonzoEra)) -> TxWits AlonzoEra -> Identity (TxWits AlonzoEra) forall era. AlonzoEraTxWits era => Lens' (TxWits era) (Redeemers era) Lens' (TxWits AlonzoEra) (Redeemers AlonzoEra) rdmrsTxWitsL ((Redeemers AlonzoEra -> Identity (Redeemers AlonzoEra)) -> AlonzoTx AlonzoEra -> Identity (AlonzoTx AlonzoEra)) -> Redeemers AlonzoEra -> AlonzoTx AlonzoEra -> AlonzoTx AlonzoEra forall s t a b. ASetter s t a b -> b -> s -> t .~ Redeemers AlonzoEra redeemers validatingTx :: AlonzoTx AlonzoEra validatingTx = AlonzoTx AlonzoEra validatingTxNoWits AlonzoTx AlonzoEra -> (AlonzoTx AlonzoEra -> AlonzoTx AlonzoEra) -> AlonzoTx AlonzoEra forall a b. a -> (a -> b) -> b & (TxWits AlonzoEra -> Identity (TxWits AlonzoEra)) -> Tx AlonzoEra -> Identity (Tx AlonzoEra) (TxWits AlonzoEra -> Identity (TxWits AlonzoEra)) -> AlonzoTx AlonzoEra -> Identity (AlonzoTx AlonzoEra) forall era. EraTx era => Lens' (Tx era) (TxWits era) Lens' (Tx AlonzoEra) (TxWits AlonzoEra) witsTxL ((TxWits AlonzoEra -> Identity (TxWits AlonzoEra)) -> AlonzoTx AlonzoEra -> Identity (AlonzoTx AlonzoEra)) -> ((Set (WitVKey 'Witness) -> Identity (Set (WitVKey 'Witness))) -> TxWits AlonzoEra -> Identity (TxWits AlonzoEra)) -> (Set (WitVKey 'Witness) -> Identity (Set (WitVKey 'Witness))) -> AlonzoTx AlonzoEra -> Identity (AlonzoTx AlonzoEra) forall b c a. (b -> c) -> (a -> b) -> a -> c . (Set (WitVKey 'Witness) -> Identity (Set (WitVKey 'Witness))) -> TxWits AlonzoEra -> Identity (TxWits AlonzoEra) forall era. EraTxWits era => Lens' (TxWits era) (Set (WitVKey 'Witness)) Lens' (TxWits AlonzoEra) (Set (WitVKey 'Witness)) addrTxWitsL ((Set (WitVKey 'Witness) -> Identity (Set (WitVKey 'Witness))) -> AlonzoTx AlonzoEra -> Identity (AlonzoTx AlonzoEra)) -> Set (WitVKey 'Witness) -> AlonzoTx AlonzoEra -> AlonzoTx AlonzoEra forall s t a b. ASetter s t a b -> b -> s -> t .~ [SafeHash EraIndependentTxBody -> KeyPair 'Payment -> WitVKey 'Witness forall (kr :: KeyRole). SafeHash EraIndependentTxBody -> KeyPair kr -> WitVKey 'Witness mkWitnessVKey (TxBody AlonzoEra -> SafeHash EraIndependentTxBody forall x i. HashAnnotated x i => x -> SafeHash i hashAnnotated TxBody AlonzoEra validatingBody) (Proof AlonzoEra -> KeyPair 'Payment forall era. Proof era -> KeyPair 'Payment someKeys Proof AlonzoEra pf)] AlonzoTx AlonzoEra -> (AlonzoTx AlonzoEra -> AlonzoTx AlonzoEra) -> AlonzoTx AlonzoEra forall a b. a -> (a -> b) -> b & (TxWits AlonzoEra -> Identity (TxWits AlonzoEra)) -> Tx AlonzoEra -> Identity (Tx AlonzoEra) (TxWits AlonzoEra -> Identity (TxWits AlonzoEra)) -> AlonzoTx AlonzoEra -> Identity (AlonzoTx AlonzoEra) forall era. EraTx era => Lens' (Tx era) (TxWits era) Lens' (Tx AlonzoEra) (TxWits AlonzoEra) witsTxL ((TxWits AlonzoEra -> Identity (TxWits AlonzoEra)) -> AlonzoTx AlonzoEra -> Identity (AlonzoTx AlonzoEra)) -> ((Map ScriptHash (Script AlonzoEra) -> Identity (Map ScriptHash (Script AlonzoEra))) -> TxWits AlonzoEra -> Identity (TxWits AlonzoEra)) -> (Map ScriptHash (Script AlonzoEra) -> Identity (Map ScriptHash (Script AlonzoEra))) -> AlonzoTx AlonzoEra -> Identity (AlonzoTx AlonzoEra) forall b c a. (b -> c) -> (a -> b) -> a -> c . (Map ScriptHash (Script AlonzoEra) -> Identity (Map ScriptHash (Script AlonzoEra))) -> TxWits AlonzoEra -> Identity (TxWits AlonzoEra) forall era. EraTxWits era => Lens' (TxWits era) (Map ScriptHash (Script era)) Lens' (TxWits AlonzoEra) (Map ScriptHash (Script AlonzoEra)) scriptTxWitsL ((Map ScriptHash (Script AlonzoEra) -> Identity (Map ScriptHash (Script AlonzoEra))) -> AlonzoTx AlonzoEra -> Identity (AlonzoTx AlonzoEra)) -> Map ScriptHash (Script AlonzoEra) -> AlonzoTx AlonzoEra -> AlonzoTx AlonzoEra forall s t a b. ASetter s t a b -> b -> s -> t .~ [(Script AlonzoEra -> ScriptHash forall era. EraScript era => Script era -> ScriptHash hashScript Script AlonzoEra AlonzoScript AlonzoEra script, AlonzoScript AlonzoEra script)] AlonzoTx AlonzoEra -> (AlonzoTx AlonzoEra -> AlonzoTx AlonzoEra) -> AlonzoTx AlonzoEra forall a b. a -> (a -> b) -> b & (TxWits AlonzoEra -> Identity (TxWits AlonzoEra)) -> Tx AlonzoEra -> Identity (Tx AlonzoEra) (TxWits AlonzoEra -> Identity (TxWits AlonzoEra)) -> AlonzoTx AlonzoEra -> Identity (AlonzoTx AlonzoEra) forall era. EraTx era => Lens' (Tx era) (TxWits era) Lens' (Tx AlonzoEra) (TxWits AlonzoEra) witsTxL ((TxWits AlonzoEra -> Identity (TxWits AlonzoEra)) -> AlonzoTx AlonzoEra -> Identity (AlonzoTx AlonzoEra)) -> ((TxDats AlonzoEra -> Identity (TxDats AlonzoEra)) -> TxWits AlonzoEra -> Identity (TxWits AlonzoEra)) -> (TxDats AlonzoEra -> Identity (TxDats AlonzoEra)) -> AlonzoTx AlonzoEra -> Identity (AlonzoTx AlonzoEra) forall b c a. (b -> c) -> (a -> b) -> a -> c . (TxDats AlonzoEra -> Identity (TxDats AlonzoEra)) -> TxWits AlonzoEra -> Identity (TxWits AlonzoEra) forall era. AlonzoEraTxWits era => Lens' (TxWits era) (TxDats era) Lens' (TxWits AlonzoEra) (TxDats AlonzoEra) datsTxWitsL ((TxDats AlonzoEra -> Identity (TxDats AlonzoEra)) -> AlonzoTx AlonzoEra -> Identity (AlonzoTx AlonzoEra)) -> TxDats AlonzoEra -> AlonzoTx AlonzoEra -> AlonzoTx AlonzoEra forall s t a b. ASetter s t a b -> b -> s -> t .~ [Item (TxDats AlonzoEra) Data AlonzoEra dat] AlonzoTx AlonzoEra -> (AlonzoTx AlonzoEra -> AlonzoTx AlonzoEra) -> AlonzoTx AlonzoEra forall a b. a -> (a -> b) -> b & (TxWits AlonzoEra -> Identity (TxWits AlonzoEra)) -> Tx AlonzoEra -> Identity (Tx AlonzoEra) (TxWits AlonzoEra -> Identity (TxWits AlonzoEra)) -> AlonzoTx AlonzoEra -> Identity (AlonzoTx AlonzoEra) forall era. EraTx era => Lens' (Tx era) (TxWits era) Lens' (Tx AlonzoEra) (TxWits AlonzoEra) witsTxL ((TxWits AlonzoEra -> Identity (TxWits AlonzoEra)) -> AlonzoTx AlonzoEra -> Identity (AlonzoTx AlonzoEra)) -> ((Redeemers AlonzoEra -> Identity (Redeemers AlonzoEra)) -> TxWits AlonzoEra -> Identity (TxWits AlonzoEra)) -> (Redeemers AlonzoEra -> Identity (Redeemers AlonzoEra)) -> AlonzoTx AlonzoEra -> Identity (AlonzoTx AlonzoEra) forall b c a. (b -> c) -> (a -> b) -> a -> c . (Redeemers AlonzoEra -> Identity (Redeemers AlonzoEra)) -> TxWits AlonzoEra -> Identity (TxWits AlonzoEra) forall era. AlonzoEraTxWits era => Lens' (TxWits era) (Redeemers era) Lens' (TxWits AlonzoEra) (Redeemers AlonzoEra) rdmrsTxWitsL ((Redeemers AlonzoEra -> Identity (Redeemers AlonzoEra)) -> AlonzoTx AlonzoEra -> Identity (AlonzoTx AlonzoEra)) -> Redeemers AlonzoEra -> AlonzoTx AlonzoEra -> AlonzoTx AlonzoEra forall s t a b. ASetter s t a b -> b -> s -> t .~ Redeemers AlonzoEra redeemers validatingBody :: TxBody AlonzoEra validatingBody = Proof AlonzoEra -> [TxBodyField AlonzoEra] -> TxBody AlonzoEra forall era. EraTxBody era => Proof era -> [TxBodyField era] -> TxBody era newTxBody Proof AlonzoEra pf [ [TxIn] -> TxBodyField AlonzoEra forall era. [TxIn] -> TxBodyField era Inputs' [HasCallStack => Integer -> TxIn Integer -> TxIn mkGenesisTxIn Integer 1] , [TxIn] -> TxBodyField AlonzoEra forall era. [TxIn] -> TxBodyField era Collateral' [HasCallStack => Integer -> TxIn Integer -> TxIn mkGenesisTxIn Integer 11] , [TxOut AlonzoEra] -> TxBodyField AlonzoEra forall era. [TxOut era] -> TxBodyField era Outputs' [Proof AlonzoEra -> [TxOutField AlonzoEra] -> TxOut AlonzoEra forall era. Proof era -> [TxOutField era] -> TxOut era newTxOut Proof AlonzoEra pf [Addr -> TxOutField AlonzoEra forall era. Addr -> TxOutField era Address (Proof AlonzoEra -> Addr forall era. Proof era -> Addr someAddr Proof AlonzoEra pf), Value AlonzoEra -> TxOutField AlonzoEra forall era. Value era -> TxOutField era Amount (Coin -> Value AlonzoEra forall t s. Inject t s => t -> s inject (Coin -> Value AlonzoEra) -> Coin -> Value AlonzoEra forall a b. (a -> b) -> a -> b $ Integer -> Coin Coin Integer 4995)]] , Coin -> TxBodyField AlonzoEra forall era. Coin -> TxBodyField era Txfee (Integer -> Coin Coin Integer 316) , StrictMaybe ScriptIntegrityHash -> TxBodyField AlonzoEra forall era. StrictMaybe ScriptIntegrityHash -> TxBodyField era WppHash ( Proof AlonzoEra -> PParams AlonzoEra -> [Language] -> Redeemers AlonzoEra -> TxDats AlonzoEra -> StrictMaybe ScriptIntegrityHash forall era. Proof era -> PParams era -> [Language] -> Redeemers era -> TxDats era -> StrictMaybe ScriptIntegrityHash newScriptIntegrityHash Proof AlonzoEra pf (Proof AlonzoEra -> [PParamsField AlonzoEra] -> PParams AlonzoEra forall era. EraPParams era => Proof era -> [PParamsField era] -> PParams era newPParams Proof AlonzoEra pf [PParamsField AlonzoEra] forall era. [PParamsField era] defaultPPs) [Item [Language] Language PlutusV1] Redeemers AlonzoEra redeemers (Data AlonzoEra -> TxDats AlonzoEra forall era. Era era => Data era -> TxDats era mkTxDats (Data -> Data AlonzoEra forall era. Era era => Data -> Data era Data (Integer -> Data PV1.I Integer 123))) ) ] redeemers :: Redeemers AlonzoEra redeemers = Proof AlonzoEra -> PlutusPurposeTag -> Data AlonzoEra -> Redeemers AlonzoEra forall era. Proof era -> PlutusPurposeTag -> Data era -> Redeemers era mkSingleRedeemer Proof AlonzoEra pf PlutusPurposeTag Spending (Data -> Data AlonzoEra forall era. Era era => Data -> Data era Data (Integer -> Data PV1.I Integer 42)) defaultPPs :: [PParamsField era] defaultPPs :: forall era. [PParamsField era] defaultPPs = [ CostModels -> PParamsField era forall era. CostModels -> PParamsField era Costmdls (CostModels -> PParamsField era) -> CostModels -> PParamsField era forall a b. (a -> b) -> a -> b $ HasCallStack => [Language] -> CostModels [Language] -> CostModels zeroTestingCostModels [Item [Language] Language PlutusV1] , Natural -> PParamsField era forall era. Natural -> PParamsField era MaxValSize Natural 1000000000 , ExUnits -> PParamsField era forall era. ExUnits -> PParamsField era MaxTxExUnits (ExUnits -> PParamsField era) -> ExUnits -> PParamsField era forall a b. (a -> b) -> a -> b $ Natural -> Natural -> ExUnits ExUnits Natural 1000000 Natural 1000000 , ExUnits -> PParamsField era forall era. ExUnits -> PParamsField era MaxBlockExUnits (ExUnits -> PParamsField era) -> ExUnits -> PParamsField era forall a b. (a -> b) -> a -> b $ Natural -> Natural -> ExUnits ExUnits Natural 1000000 Natural 1000000 , ProtVer -> PParamsField era forall era. ProtVer -> PParamsField era ProtocolVersion (ProtVer -> PParamsField era) -> ProtVer -> PParamsField era forall a b. (a -> b) -> a -> b $ Version -> Natural -> ProtVer ProtVer (forall (v :: Natural). (KnownNat v, MinVersion <= v, v <= MaxVersion) => Version natVersion @5) Natural 0 , Natural -> PParamsField era forall era. Natural -> PParamsField era CollateralPercentage Natural 100 ]