{-# LANGUAGE AllowAmbiguousTypes #-} {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE NumericUnderscores #-} {-# LANGUAGE OverloadedLists #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UndecidableInstances #-} {-# OPTIONS_GHC -Wno-deprecations #-} module Test.Cardano.Ledger.Examples.AlonzoAPI (tests, defaultPParams) where import Cardano.Ledger.Alonzo.Tx (alonzoMinFeeTx, hashData) import Cardano.Ledger.Alonzo.TxWits (AlonzoEraTxWits (..), TxDats (..), unTxDatsL) import Cardano.Ledger.BaseTypes (ProtVer (..), inject) import Cardano.Ledger.Coin (Coin (..)) import Cardano.Ledger.Conway.Core ( AlonzoEraPParams, AlonzoEraTxBody (..), AsIx (..), EraPParams (..), EraTxOut (..), PParams, emptyPParams, eraProtVerLow, ppCollateralPercentageL, ppCostModelsL, ppMaxBlockExUnitsL, ppMaxTxExUnitsL, ppMaxValSizeL, ppMinFeeAL, pattern SpendingPurpose, ) import Cardano.Ledger.Core (EraScript (..), EraTx (..), EraTxBody (..), 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.Shelley.Scripts (pattern RequireAllOf) import Cardano.Ledger.Tools (estimateMinFeeTx) import qualified Data.Map.Strict as Map import qualified Data.Set as Set import Lens.Micro ((&), (.~)) import qualified PlutusLedgerApi.V1 as PV1 import Test.Cardano.Ledger.Core.KeyPair (mkWitnessVKey) import Test.Cardano.Ledger.Examples.STSTestUtils ( EraModel (..), mkGenesisTxIn, mkSingleRedeemer, mkTxDats, someAddr, someKeys, ) import Test.Cardano.Ledger.Generic.ApplyTx (defaultPPs) import Test.Cardano.Ledger.Generic.Instances () import Test.Cardano.Ledger.Generic.Proof (AlonzoEra, Reflect (..)) import Test.Cardano.Ledger.Generic.TxGen () 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 -> TestTree) -> Assertion -> TestTree forall a b. (a -> b) -> a -> b $ forall era. (Reflect era, AlonzoEraTxWits era, AlonzoEraTxBody era, EraModel era) => Assertion testEstimateMinFee @AlonzoEra] testEstimateMinFee :: forall era. ( Reflect era , AlonzoEraTxWits era , AlonzoEraTxBody era , EraModel era ) => Assertion testEstimateMinFee :: forall era. (Reflect era, AlonzoEraTxWits era, AlonzoEraTxBody era, EraModel era) => Assertion testEstimateMinFee = forall era. EraTx era => PParams era -> Tx era -> Int -> Int -> Int -> Coin estimateMinFeeTx @era PParams era pparams Tx era validatingTxNoWits Int 1 Int 0 Int 0 Coin -> Coin -> Assertion forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion @?= PParams era -> Tx era -> Coin forall era. (EraTx era, AlonzoEraTxWits era, AlonzoEraPParams era) => PParams era -> Tx era -> Coin alonzoMinFeeTx PParams era pparams Tx era validatingTx where pparams :: PParams era pparams = PParams era -> PParams era forall era. AlonzoEraPParams era => PParams era -> PParams era defaultPPs PParams era forall era. EraPParams era => PParams era emptyPParams PParams era -> (PParams era -> PParams era) -> PParams era forall a b. a -> (a -> b) -> b & (Coin -> Identity Coin) -> PParams era -> Identity (PParams era) forall era. EraPParams era => Lens' (PParams era) Coin Lens' (PParams era) Coin ppMinFeeAL ((Coin -> Identity Coin) -> PParams era -> Identity (PParams era)) -> Coin -> PParams era -> PParams era forall s t a b. ASetter s t a b -> b -> s -> t .~ Integer -> Coin Coin Integer 1 dat :: Data era dat = Data -> Data era forall era. Era era => Data -> Data era Data (Integer -> Data PV1.I Integer 123) dataMap :: Map DataHash (Data era) dataMap = DataHash -> Data era -> Map DataHash (Data era) forall k a. k -> a -> Map k a Map.singleton (Data era -> DataHash forall era. Data era -> DataHash hashData Data era dat) Data era dat script :: Script era script = NativeScript era -> Script era forall era. EraScript era => NativeScript era -> Script era fromNativeScript (NativeScript era -> Script era) -> NativeScript era -> Script era forall a b. (a -> b) -> a -> b $ StrictSeq (NativeScript era) -> NativeScript era forall era. ShelleyEraScript era => StrictSeq (NativeScript era) -> NativeScript era RequireAllOf StrictSeq (NativeScript era) forall a. Monoid a => a mempty scriptMap :: Map ScriptHash (Script era) scriptMap = ScriptHash -> Script era -> Map ScriptHash (Script era) forall k a. k -> a -> Map k a Map.singleton (Script era -> ScriptHash forall era. EraScript era => Script era -> ScriptHash hashScript Script era script) Script era script validatingTxNoWits :: Tx era validatingTxNoWits = TxBody era -> Tx era forall era. EraTx era => TxBody era -> Tx era mkBasicTx TxBody era validatingBody Tx era -> (Tx era -> Tx era) -> Tx era forall a b. a -> (a -> b) -> b & (TxWits era -> Identity (TxWits era)) -> Tx era -> Identity (Tx era) forall era. EraTx era => Lens' (Tx era) (TxWits era) Lens' (Tx era) (TxWits era) witsTxL ((TxWits era -> Identity (TxWits era)) -> Tx era -> Identity (Tx era)) -> ((Map ScriptHash (Script era) -> Identity (Map ScriptHash (Script era))) -> TxWits era -> Identity (TxWits era)) -> (Map ScriptHash (Script era) -> Identity (Map ScriptHash (Script era))) -> Tx era -> Identity (Tx era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (Map ScriptHash (Script era) -> Identity (Map ScriptHash (Script era))) -> TxWits era -> Identity (TxWits era) forall era. EraTxWits era => Lens' (TxWits era) (Map ScriptHash (Script era)) Lens' (TxWits era) (Map ScriptHash (Script era)) scriptTxWitsL ((Map ScriptHash (Script era) -> Identity (Map ScriptHash (Script era))) -> Tx era -> Identity (Tx era)) -> Map ScriptHash (Script era) -> Tx era -> Tx era forall s t a b. ASetter s t a b -> b -> s -> t .~ [(Script era -> ScriptHash forall era. EraScript era => Script era -> ScriptHash hashScript Script era script, Script era script)] Tx era -> (Tx era -> Tx era) -> Tx era forall a b. a -> (a -> b) -> b & (TxWits era -> Identity (TxWits era)) -> Tx era -> Identity (Tx era) forall era. EraTx era => Lens' (Tx era) (TxWits era) Lens' (Tx era) (TxWits era) witsTxL ((TxWits era -> Identity (TxWits era)) -> Tx era -> Identity (Tx era)) -> ((TxDats era -> Identity (TxDats era)) -> TxWits era -> Identity (TxWits era)) -> (TxDats era -> Identity (TxDats era)) -> Tx era -> Identity (Tx era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (TxDats era -> Identity (TxDats era)) -> TxWits era -> Identity (TxWits era) forall era. AlonzoEraTxWits era => Lens' (TxWits era) (TxDats era) Lens' (TxWits era) (TxDats era) datsTxWitsL ((TxDats era -> Identity (TxDats era)) -> Tx era -> Identity (Tx era)) -> TxDats era -> Tx era -> Tx era forall s t a b. ASetter s t a b -> b -> s -> t .~ Map DataHash (Data era) -> TxDats era forall era. Era era => Map DataHash (Data era) -> TxDats era TxDats [(Data era -> DataHash forall era. Data era -> DataHash hashData Data era dat, Data era dat)] Tx era -> (Tx era -> Tx era) -> Tx era forall a b. a -> (a -> b) -> b & (TxWits era -> Identity (TxWits era)) -> Tx era -> Identity (Tx era) forall era. EraTx era => Lens' (Tx era) (TxWits era) Lens' (Tx era) (TxWits era) witsTxL ((TxWits era -> Identity (TxWits era)) -> Tx era -> Identity (Tx era)) -> ((Redeemers era -> Identity (Redeemers era)) -> TxWits era -> Identity (TxWits era)) -> (Redeemers era -> Identity (Redeemers era)) -> Tx era -> Identity (Tx era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (Redeemers era -> Identity (Redeemers era)) -> TxWits era -> Identity (TxWits era) forall era. AlonzoEraTxWits era => Lens' (TxWits era) (Redeemers era) Lens' (TxWits era) (Redeemers era) rdmrsTxWitsL ((Redeemers era -> Identity (Redeemers era)) -> Tx era -> Identity (Tx era)) -> Redeemers era -> Tx era -> Tx era forall s t a b. ASetter s t a b -> b -> s -> t .~ Redeemers era redeemers validatingTx :: Tx era validatingTx = TxBody era -> Tx era forall era. EraTx era => TxBody era -> Tx era mkBasicTx TxBody era validatingBody Tx era -> (Tx era -> Tx era) -> Tx era forall a b. a -> (a -> b) -> b & (TxWits era -> Identity (TxWits era)) -> Tx era -> Identity (Tx era) forall era. EraTx era => Lens' (Tx era) (TxWits era) Lens' (Tx era) (TxWits era) witsTxL ((TxWits era -> Identity (TxWits era)) -> Tx era -> Identity (Tx era)) -> ((Set (WitVKey 'Witness) -> Identity (Set (WitVKey 'Witness))) -> TxWits era -> Identity (TxWits era)) -> (Set (WitVKey 'Witness) -> Identity (Set (WitVKey 'Witness))) -> Tx era -> Identity (Tx era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (Set (WitVKey 'Witness) -> Identity (Set (WitVKey 'Witness))) -> TxWits era -> Identity (TxWits era) forall era. EraTxWits era => Lens' (TxWits era) (Set (WitVKey 'Witness)) Lens' (TxWits era) (Set (WitVKey 'Witness)) addrTxWitsL ((Set (WitVKey 'Witness) -> Identity (Set (WitVKey 'Witness))) -> Tx era -> Identity (Tx era)) -> Set (WitVKey 'Witness) -> Tx era -> Tx era forall s t a b. ASetter s t a b -> b -> s -> t .~ WitVKey 'Witness -> Set (WitVKey 'Witness) forall a. a -> Set a Set.singleton (SafeHash EraIndependentTxBody -> KeyPair 'Payment -> WitVKey 'Witness forall (kr :: KeyRole). SafeHash EraIndependentTxBody -> KeyPair kr -> WitVKey 'Witness mkWitnessVKey (TxBody era -> SafeHash EraIndependentTxBody forall x i. HashAnnotated x i => x -> SafeHash i hashAnnotated TxBody era validatingBody) KeyPair 'Payment someKeys) Tx era -> (Tx era -> Tx era) -> Tx era forall a b. a -> (a -> b) -> b & (TxWits era -> Identity (TxWits era)) -> Tx era -> Identity (Tx era) forall era. EraTx era => Lens' (Tx era) (TxWits era) Lens' (Tx era) (TxWits era) witsTxL ((TxWits era -> Identity (TxWits era)) -> Tx era -> Identity (Tx era)) -> ((Map ScriptHash (Script era) -> Identity (Map ScriptHash (Script era))) -> TxWits era -> Identity (TxWits era)) -> (Map ScriptHash (Script era) -> Identity (Map ScriptHash (Script era))) -> Tx era -> Identity (Tx era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (Map ScriptHash (Script era) -> Identity (Map ScriptHash (Script era))) -> TxWits era -> Identity (TxWits era) forall era. EraTxWits era => Lens' (TxWits era) (Map ScriptHash (Script era)) Lens' (TxWits era) (Map ScriptHash (Script era)) scriptTxWitsL ((Map ScriptHash (Script era) -> Identity (Map ScriptHash (Script era))) -> Tx era -> Identity (Tx era)) -> Map ScriptHash (Script era) -> Tx era -> Tx era forall s t a b. ASetter s t a b -> b -> s -> t .~ Map ScriptHash (Script era) scriptMap Tx era -> (Tx era -> Tx era) -> Tx era forall a b. a -> (a -> b) -> b & (TxWits era -> Identity (TxWits era)) -> Tx era -> Identity (Tx era) forall era. EraTx era => Lens' (Tx era) (TxWits era) Lens' (Tx era) (TxWits era) witsTxL ((TxWits era -> Identity (TxWits era)) -> Tx era -> Identity (Tx era)) -> ((Map DataHash (Data era) -> Identity (Map DataHash (Data era))) -> TxWits era -> Identity (TxWits era)) -> (Map DataHash (Data era) -> Identity (Map DataHash (Data era))) -> Tx era -> Identity (Tx era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (TxDats era -> Identity (TxDats era)) -> TxWits era -> Identity (TxWits era) forall era. AlonzoEraTxWits era => Lens' (TxWits era) (TxDats era) Lens' (TxWits era) (TxDats era) datsTxWitsL ((TxDats era -> Identity (TxDats era)) -> TxWits era -> Identity (TxWits era)) -> ((Map DataHash (Data era) -> Identity (Map DataHash (Data era))) -> TxDats era -> Identity (TxDats era)) -> (Map DataHash (Data era) -> Identity (Map DataHash (Data era))) -> TxWits era -> Identity (TxWits era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (Map DataHash (Data era) -> Identity (Map DataHash (Data era))) -> TxDats era -> Identity (TxDats era) forall era. Era era => Lens' (TxDats era) (Map DataHash (Data era)) Lens' (TxDats era) (Map DataHash (Data era)) unTxDatsL ((Map DataHash (Data era) -> Identity (Map DataHash (Data era))) -> Tx era -> Identity (Tx era)) -> Map DataHash (Data era) -> Tx era -> Tx era forall s t a b. ASetter s t a b -> b -> s -> t .~ Map DataHash (Data era) dataMap Tx era -> (Tx era -> Tx era) -> Tx era forall a b. a -> (a -> b) -> b & (TxWits era -> Identity (TxWits era)) -> Tx era -> Identity (Tx era) forall era. EraTx era => Lens' (Tx era) (TxWits era) Lens' (Tx era) (TxWits era) witsTxL ((TxWits era -> Identity (TxWits era)) -> Tx era -> Identity (Tx era)) -> ((Redeemers era -> Identity (Redeemers era)) -> TxWits era -> Identity (TxWits era)) -> (Redeemers era -> Identity (Redeemers era)) -> Tx era -> Identity (Tx era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (Redeemers era -> Identity (Redeemers era)) -> TxWits era -> Identity (TxWits era) forall era. AlonzoEraTxWits era => Lens' (TxWits era) (Redeemers era) Lens' (TxWits era) (Redeemers era) rdmrsTxWitsL ((Redeemers era -> Identity (Redeemers era)) -> Tx era -> Identity (Tx era)) -> Redeemers era -> Tx era -> Tx era forall s t a b. ASetter s t a b -> b -> s -> t .~ Redeemers era redeemers validatingBody :: TxBody era validatingBody = TxBody era forall era. EraTxBody era => TxBody era mkBasicTxBody TxBody era -> (TxBody era -> TxBody era) -> TxBody era forall a b. a -> (a -> b) -> b & (Set TxIn -> Identity (Set TxIn)) -> TxBody era -> Identity (TxBody era) forall era. EraTxBody era => Lens' (TxBody era) (Set TxIn) Lens' (TxBody era) (Set TxIn) inputsTxBodyL ((Set TxIn -> Identity (Set TxIn)) -> TxBody era -> Identity (TxBody era)) -> Set TxIn -> TxBody era -> TxBody era forall s t a b. ASetter s t a b -> b -> s -> t .~ [HasCallStack => Integer -> TxIn Integer -> TxIn mkGenesisTxIn Integer 1] TxBody era -> (TxBody era -> TxBody era) -> TxBody era forall a b. a -> (a -> b) -> b & (Set TxIn -> Identity (Set TxIn)) -> TxBody era -> Identity (TxBody era) forall era. AlonzoEraTxBody era => Lens' (TxBody era) (Set TxIn) Lens' (TxBody era) (Set TxIn) collateralInputsTxBodyL ((Set TxIn -> Identity (Set TxIn)) -> TxBody era -> Identity (TxBody era)) -> Set TxIn -> TxBody era -> TxBody era forall s t a b. ASetter s t a b -> b -> s -> t .~ [HasCallStack => Integer -> TxIn Integer -> TxIn mkGenesisTxIn Integer 11] TxBody era -> (TxBody era -> TxBody era) -> TxBody era forall a b. a -> (a -> b) -> b & (StrictSeq (TxOut era) -> Identity (StrictSeq (TxOut era))) -> TxBody era -> Identity (TxBody era) forall era. EraTxBody era => Lens' (TxBody era) (StrictSeq (TxOut era)) Lens' (TxBody era) (StrictSeq (TxOut era)) outputsTxBodyL ((StrictSeq (TxOut era) -> Identity (StrictSeq (TxOut era))) -> TxBody era -> Identity (TxBody era)) -> StrictSeq (TxOut era) -> TxBody era -> TxBody era forall s t a b. ASetter s t a b -> b -> s -> t .~ [forall era. (EraTxOut era, HasCallStack) => Addr -> Value era -> TxOut era mkBasicTxOut @era Addr someAddr (Coin -> Value era forall t s. Inject t s => t -> s inject (Coin -> Value era) -> Coin -> Value era forall a b. (a -> b) -> a -> b $ Integer -> Coin Coin Integer 4995)] TxBody era -> (TxBody era -> TxBody era) -> TxBody era forall a b. a -> (a -> b) -> b & (Coin -> Identity Coin) -> TxBody era -> Identity (TxBody era) forall era. EraTxBody era => Lens' (TxBody era) Coin Lens' (TxBody era) Coin feeTxBodyL ((Coin -> Identity Coin) -> TxBody era -> Identity (TxBody era)) -> Coin -> TxBody era -> TxBody era forall s t a b. ASetter s t a b -> b -> s -> t .~ Integer -> Coin Coin Integer 316 TxBody era -> (TxBody era -> TxBody era) -> TxBody era forall a b. a -> (a -> b) -> b & (StrictMaybe ScriptIntegrityHash -> Identity (StrictMaybe ScriptIntegrityHash)) -> TxBody era -> Identity (TxBody era) forall era. AlonzoEraTxBody era => Lens' (TxBody era) (StrictMaybe ScriptIntegrityHash) Lens' (TxBody era) (StrictMaybe ScriptIntegrityHash) scriptIntegrityHashTxBodyL ((StrictMaybe ScriptIntegrityHash -> Identity (StrictMaybe ScriptIntegrityHash)) -> TxBody era -> Identity (TxBody era)) -> StrictMaybe ScriptIntegrityHash -> TxBody era -> TxBody era forall s t a b. ASetter s t a b -> b -> s -> t .~ forall era. EraModel era => PParams era -> [Language] -> Redeemers era -> TxDats era -> StrictMaybe ScriptIntegrityHash newScriptIntegrityHash @era PParams era forall era. AlonzoEraPParams era => PParams era defaultPParams [Item [Language] Language PlutusV1] Redeemers era redeemers (Data era -> TxDats era forall era. Era era => Data era -> TxDats era mkTxDats (Data -> Data era forall era. Era era => Data -> Data era Data (Integer -> Data PV1.I Integer 123))) redeemers :: Redeemers era redeemers = PlutusPurpose AsIx era -> Data era -> Redeemers era forall era. AlonzoEraScript era => PlutusPurpose AsIx era -> Data era -> Redeemers era mkSingleRedeemer (AsIx Word32 TxIn -> PlutusPurpose AsIx era forall era (f :: * -> * -> *). AlonzoEraScript era => f Word32 TxIn -> PlutusPurpose f era SpendingPurpose (AsIx Word32 TxIn -> PlutusPurpose AsIx era) -> AsIx Word32 TxIn -> PlutusPurpose AsIx era forall a b. (a -> b) -> a -> b $ Word32 -> AsIx Word32 TxIn forall ix it. ix -> AsIx ix it AsIx Word32 0) (Data -> Data era forall era. Era era => Data -> Data era Data (Integer -> Data PV1.I Integer 42)) defaultPParams :: forall era. AlonzoEraPParams era => PParams era defaultPParams :: forall era. AlonzoEraPParams era => PParams era defaultPParams = forall era. EraPParams era => PParams era emptyPParams @era PParams era -> (PParams era -> PParams era) -> PParams era forall a b. a -> (a -> b) -> b & (CostModels -> Identity CostModels) -> PParams era -> Identity (PParams era) forall era. AlonzoEraPParams era => Lens' (PParams era) CostModels Lens' (PParams era) CostModels ppCostModelsL ((CostModels -> Identity CostModels) -> PParams era -> Identity (PParams era)) -> CostModels -> PParams era -> PParams era forall s t a b. ASetter s t a b -> b -> s -> t .~ HasCallStack => [Language] -> CostModels [Language] -> CostModels zeroTestingCostModels [Item [Language] Language PlutusV1] PParams era -> (PParams era -> PParams era) -> PParams era forall a b. a -> (a -> b) -> b & (Nat -> Identity Nat) -> PParams era -> Identity (PParams era) forall era. AlonzoEraPParams era => Lens' (PParams era) Nat Lens' (PParams era) Nat ppMaxValSizeL ((Nat -> Identity Nat) -> PParams era -> Identity (PParams era)) -> Nat -> PParams era -> PParams era forall s t a b. ASetter s t a b -> b -> s -> t .~ Nat 1_000_000_000 PParams era -> (PParams era -> PParams era) -> PParams era forall a b. a -> (a -> b) -> b & (ExUnits -> Identity ExUnits) -> PParams era -> Identity (PParams era) forall era. AlonzoEraPParams era => Lens' (PParams era) ExUnits Lens' (PParams era) ExUnits ppMaxTxExUnitsL ((ExUnits -> Identity ExUnits) -> PParams era -> Identity (PParams era)) -> ExUnits -> PParams era -> PParams era forall s t a b. ASetter s t a b -> b -> s -> t .~ Nat -> Nat -> ExUnits ExUnits Nat 1_000_000 Nat 1_000_000 PParams era -> (PParams era -> PParams era) -> PParams era forall a b. a -> (a -> b) -> b & (ExUnits -> Identity ExUnits) -> PParams era -> Identity (PParams era) forall era. AlonzoEraPParams era => Lens' (PParams era) ExUnits Lens' (PParams era) ExUnits ppMaxBlockExUnitsL ((ExUnits -> Identity ExUnits) -> PParams era -> Identity (PParams era)) -> ExUnits -> PParams era -> PParams era forall s t a b. ASetter s t a b -> b -> s -> t .~ Nat -> Nat -> ExUnits ExUnits Nat 1_000_000 Nat 1_000_000 PParams era -> (PParams era -> PParams era) -> PParams era forall a b. a -> (a -> b) -> b & (ProtVer -> Identity ProtVer) -> PParams era -> Identity (PParams era) forall era. EraPParams era => Lens' (PParams era) ProtVer Lens' (PParams era) ProtVer ppProtocolVersionL ((ProtVer -> Identity ProtVer) -> PParams era -> Identity (PParams era)) -> ProtVer -> PParams era -> PParams era forall s t a b. ASetter s t a b -> b -> s -> t .~ Version -> Nat -> ProtVer ProtVer (forall era. Era era => Version eraProtVerLow @era) Nat 0 PParams era -> (PParams era -> PParams era) -> PParams era forall a b. a -> (a -> b) -> b & (Nat -> Identity Nat) -> PParams era -> Identity (PParams era) forall era. AlonzoEraPParams era => Lens' (PParams era) Nat Lens' (PParams era) Nat ppCollateralPercentageL ((Nat -> Identity Nat) -> PParams era -> Identity (PParams era)) -> Nat -> PParams era -> PParams era forall s t a b. ASetter s t a b -> b -> s -> t .~ Nat 100