{-# LANGUAGE AllowAmbiguousTypes #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE OverloadedLists #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} module Test.Cardano.Ledger.Alonzo.Imp.UtxosSpec (spec) where import Cardano.Ledger.Alonzo.Core import Cardano.Ledger.Alonzo.Plutus.Evaluate (CollectError (NoCostModel)) import Cardano.Ledger.Alonzo.Rules ( AlonzoUtxosPredFailure (..), TagMismatchDescription (..), ) import Cardano.Ledger.Alonzo.Scripts (eraLanguages) import Cardano.Ledger.Alonzo.Tx (IsValid (..)) import Cardano.Ledger.Alonzo.TxWits (unRedeemersL) import Cardano.Ledger.Plutus.Data (Data (..)) import Cardano.Ledger.Plutus.Language (hashPlutusScript, withSLanguage) import Cardano.Ledger.Shelley.LedgerState (curPParamsEpochStateL, nesEsL) import qualified Data.Map.Strict as Map import qualified Data.Set as Set import Lens.Micro ((&), (.~), (<>~)) import qualified PlutusLedgerApi.Common as P import Test.Cardano.Ledger.Alonzo.ImpTest import Test.Cardano.Ledger.Imp.Common import Test.Cardano.Ledger.Plutus.Examples ( alwaysFailsWithDatum, alwaysSucceedsWithDatum, datumIsWellformed, inputsOutputsAreNotEmptyWithDatum, purposeIsWellformedWithDatum, redeemerSameAsDatum, ) spec :: forall era. ( AlonzoEraImp era , InjectRuleFailure "LEDGER" AlonzoUtxosPredFailure era ) => SpecWith (ImpInit (LedgerSpec era)) spec :: forall era. (AlonzoEraImp era, InjectRuleFailure "LEDGER" AlonzoUtxosPredFailure era) => SpecWith (ImpInit (LedgerSpec era)) spec = String -> SpecWith (ImpInit (LedgerSpec era)) -> SpecWith (ImpInit (LedgerSpec era)) forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "UTXOS" (SpecWith (ImpInit (LedgerSpec era)) -> SpecWith (ImpInit (LedgerSpec era))) -> SpecWith (ImpInit (LedgerSpec era)) -> SpecWith (ImpInit (LedgerSpec era)) forall a b. (a -> b) -> a -> b $ [Language] -> (Language -> SpecWith (ImpInit (LedgerSpec era))) -> SpecWith (ImpInit (LedgerSpec era)) forall (t :: * -> *) (m :: * -> *) a b. (Foldable t, Monad m) => t a -> (a -> m b) -> m () forM_ (forall era. AlonzoEraScript era => [Language] eraLanguages @era) ((Language -> SpecWith (ImpInit (LedgerSpec era))) -> SpecWith (ImpInit (LedgerSpec era))) -> (Language -> SpecWith (ImpInit (LedgerSpec era))) -> SpecWith (ImpInit (LedgerSpec era)) forall a b. (a -> b) -> a -> b $ \Language lang -> Language -> (forall {l :: Language}. PlutusLanguage l => SLanguage l -> SpecWith (ImpInit (LedgerSpec era))) -> SpecWith (ImpInit (LedgerSpec era)) forall a. Language -> (forall (l :: Language). PlutusLanguage l => SLanguage l -> a) -> a withSLanguage Language lang ((forall {l :: Language}. PlutusLanguage l => SLanguage l -> SpecWith (ImpInit (LedgerSpec era))) -> SpecWith (ImpInit (LedgerSpec era))) -> (forall {l :: Language}. PlutusLanguage l => SLanguage l -> SpecWith (ImpInit (LedgerSpec era))) -> SpecWith (ImpInit (LedgerSpec era)) forall a b. (a -> b) -> a -> b $ \SLanguage l slang -> String -> SpecWith (ImpInit (LedgerSpec era)) -> SpecWith (ImpInit (LedgerSpec era)) forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe (Language -> String forall a. Show a => a -> String show Language lang) (SpecWith (ImpInit (LedgerSpec era)) -> SpecWith (ImpInit (LedgerSpec era))) -> SpecWith (ImpInit (LedgerSpec era)) -> SpecWith (ImpInit (LedgerSpec era)) forall a b. (a -> b) -> a -> b $ do let redeemerSameAsDatumHash :: ScriptHash redeemerSameAsDatumHash = Plutus l -> ScriptHash forall (l :: Language). PlutusLanguage l => Plutus l -> ScriptHash hashPlutusScript (Plutus l -> ScriptHash) -> Plutus l -> ScriptHash forall a b. (a -> b) -> a -> b $ SLanguage l -> Plutus l forall (l :: Language). SLanguage l -> Plutus l redeemerSameAsDatum SLanguage l slang alwaysSucceedsWithDatumHash :: ScriptHash alwaysSucceedsWithDatumHash = Plutus l -> ScriptHash forall (l :: Language). PlutusLanguage l => Plutus l -> ScriptHash hashPlutusScript (Plutus l -> ScriptHash) -> Plutus l -> ScriptHash forall a b. (a -> b) -> a -> b $ SLanguage l -> Plutus l forall (l :: Language). SLanguage l -> Plutus l alwaysSucceedsWithDatum SLanguage l slang let scripts :: [(String, SLanguage l -> Plutus l)] scripts = [ (String "redeemerSameAsDatum", SLanguage l -> Plutus l forall (l :: Language). SLanguage l -> Plutus l redeemerSameAsDatum) , (String "purposeIsWellformedWithDatum", SLanguage l -> Plutus l forall (l :: Language). SLanguage l -> Plutus l purposeIsWellformedWithDatum) , (String "datumIsWellformed", SLanguage l -> Plutus l forall (l :: Language). SLanguage l -> Plutus l datumIsWellformed) , (String "inputsOutputsAreNotEmptyWithDatum", SLanguage l -> Plutus l forall (l :: Language). SLanguage l -> Plutus l inputsOutputsAreNotEmptyWithDatum) ] String -> SpecWith (ImpInit (LedgerSpec era)) -> SpecWith (ImpInit (LedgerSpec era)) forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "Spending scripts with a Datum" (SpecWith (ImpInit (LedgerSpec era)) -> SpecWith (ImpInit (LedgerSpec era))) -> SpecWith (ImpInit (LedgerSpec era)) -> SpecWith (ImpInit (LedgerSpec era)) forall a b. (a -> b) -> a -> b $ do [(String, SLanguage l -> Plutus l)] -> ((String, SLanguage l -> Plutus l) -> SpecWith (ImpInit (LedgerSpec era))) -> SpecWith (ImpInit (LedgerSpec era)) forall (t :: * -> *) (m :: * -> *) a b. (Foldable t, Monad m) => t a -> (a -> m b) -> m () forM_ [(String, SLanguage l -> Plutus l)] scripts (((String, SLanguage l -> Plutus l) -> SpecWith (ImpInit (LedgerSpec era))) -> SpecWith (ImpInit (LedgerSpec era))) -> ((String, SLanguage l -> Plutus l) -> SpecWith (ImpInit (LedgerSpec era))) -> SpecWith (ImpInit (LedgerSpec era)) forall a b. (a -> b) -> a -> b $ \(String name, SLanguage l -> Plutus l script) -> do String -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a. (HasCallStack, Example a) => String -> a -> SpecWith (Arg a) it String name (ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ()))) -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a b. (a -> b) -> a -> b $ do let sHash :: ScriptHash sHash = Plutus l -> ScriptHash forall (l :: Language). PlutusLanguage l => Plutus l -> ScriptHash hashPlutusScript (SLanguage l -> Plutus l script SLanguage l slang) TxIn txIn0 <- ScriptHash -> ImpTestM era TxIn forall era. (ShelleyEraImp era, HasCallStack) => ScriptHash -> ImpTestM era TxIn produceScript ScriptHash sHash String -> Tx era -> ImpM (LedgerSpec era) () forall era. (HasCallStack, ShelleyEraImp era) => String -> Tx era -> ImpTestM era () submitTxAnn_ String "Submit a transaction that consumes the script output" (Tx era -> ImpM (LedgerSpec era) ()) -> Tx era -> ImpM (LedgerSpec era) () forall a b. (a -> b) -> a -> b $ TxBody era -> Tx era forall era. EraTx era => TxBody era -> Tx era mkBasicTx TxBody era forall era. EraTxBody era => TxBody era mkBasicTxBody Tx era -> (Tx era -> Tx era) -> Tx era forall a b. a -> (a -> b) -> b & (TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era) forall era. EraTx era => Lens' (Tx era) (TxBody era) Lens' (Tx era) (TxBody era) bodyTxL ((TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era)) -> ((Set TxIn -> Identity (Set TxIn)) -> TxBody era -> Identity (TxBody era)) -> (Set TxIn -> Identity (Set TxIn)) -> Tx era -> Identity (Tx era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (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)) -> Tx era -> Identity (Tx era)) -> Set TxIn -> Tx era -> Tx era forall s t a b. ASetter s t a b -> b -> s -> t .~ TxIn -> Set TxIn forall a. a -> Set a Set.singleton TxIn txIn0 ImpM (LedgerSpec era) () forall era. (ShelleyEraImp era, HasCallStack) => ImpTestM era () passEpoch String -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a. (HasCallStack, Example a) => String -> a -> SpecWith (Arg a) it String "Valid transaction marked as invalid" (ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ()))) -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a b. (a -> b) -> a -> b $ do let tx :: Tx era tx = TxBody era -> Tx era forall era. EraTx era => TxBody era -> Tx era mkBasicTx TxBody era forall era. EraTxBody era => TxBody era mkBasicTxBody Tx era -> (Tx era -> Tx era) -> Tx era forall a b. a -> (a -> b) -> b & (IsValid -> Identity IsValid) -> Tx era -> Identity (Tx era) forall era. AlonzoEraTx era => Lens' (Tx era) IsValid Lens' (Tx era) IsValid isValidTxL ((IsValid -> Identity IsValid) -> Tx era -> Identity (Tx era)) -> IsValid -> Tx era -> Tx era forall s t a b. ASetter s t a b -> b -> s -> t .~ Bool -> IsValid IsValid Bool False Tx era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) -> ImpM (LedgerSpec era) () forall era. (HasCallStack, ShelleyEraImp era) => Tx era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) -> ImpTestM era () submitFailingTx Tx era tx [AlonzoUtxosPredFailure era -> EraRuleFailure "LEDGER" era forall (rule :: Symbol) (t :: * -> *) era. InjectRuleFailure rule t era => t era -> EraRuleFailure rule era injectFailure (IsValid -> TagMismatchDescription -> AlonzoUtxosPredFailure era forall era. IsValid -> TagMismatchDescription -> AlonzoUtxosPredFailure era ValidationTagMismatch (Bool -> IsValid IsValid Bool False) TagMismatchDescription PassedUnexpectedly)] String -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a. (HasCallStack, Example a) => String -> a -> SpecWith (Arg a) it String "Invalid transaction marked as valid" (ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ()))) -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a b. (a -> b) -> a -> b $ do TxIn txIn <- ScriptHash -> ImpTestM era TxIn forall era. (ShelleyEraImp era, HasCallStack) => ScriptHash -> ImpTestM era TxIn produceScript (ScriptHash -> ImpTestM era TxIn) -> (Plutus l -> ScriptHash) -> Plutus l -> ImpTestM era TxIn forall b c a. (b -> c) -> (a -> b) -> a -> c . Plutus l -> ScriptHash forall (l :: Language). PlutusLanguage l => Plutus l -> ScriptHash hashPlutusScript (Plutus l -> ImpTestM era TxIn) -> Plutus l -> ImpTestM era TxIn forall a b. (a -> b) -> a -> b $ SLanguage l -> Plutus l forall (l :: Language). SLanguage l -> Plutus l alwaysFailsWithDatum SLanguage l slang Tx era -> ImpM (LedgerSpec era) () forall era. (HasCallStack, AlonzoEraImp era, InjectRuleFailure "LEDGER" AlonzoUtxosPredFailure era) => Tx era -> ImpTestM era () submitPhase2Invalid_ (Tx era -> ImpM (LedgerSpec era) ()) -> Tx era -> ImpM (LedgerSpec era) () forall a b. (a -> b) -> a -> b $ TxBody era -> Tx era forall era. EraTx era => TxBody era -> Tx era mkBasicTx TxBody era forall era. EraTxBody era => TxBody era mkBasicTxBody Tx era -> (Tx era -> Tx era) -> Tx era forall a b. a -> (a -> b) -> b & (TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era) forall era. EraTx era => Lens' (Tx era) (TxBody era) Lens' (Tx era) (TxBody era) bodyTxL ((TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era)) -> ((Set TxIn -> Identity (Set TxIn)) -> TxBody era -> Identity (TxBody era)) -> (Set TxIn -> Identity (Set TxIn)) -> Tx era -> Identity (Tx era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (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)) -> Tx era -> Identity (Tx era)) -> Set TxIn -> Tx era -> Tx era forall s t a b. ASetter s t a b -> b -> s -> t .~ [Item (Set TxIn) TxIn txIn] String -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a. (HasCallStack, Example a) => String -> a -> SpecWith (Arg a) it String "Invalid plutus script fails in phase 2" (ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ()))) -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a b. (a -> b) -> a -> b $ do TxIn txIn0 <- ScriptHash -> ImpTestM era TxIn forall era. (ShelleyEraImp era, HasCallStack) => ScriptHash -> ImpTestM era TxIn produceScript ScriptHash redeemerSameAsDatumHash ExUnits exUnits <- SimpleGetter (NewEpochState era) ExUnits -> ImpTestM era ExUnits forall era a. SimpleGetter (NewEpochState era) a -> ImpTestM era a getsNES (SimpleGetter (NewEpochState era) ExUnits -> ImpTestM era ExUnits) -> SimpleGetter (NewEpochState era) ExUnits -> ImpTestM era ExUnits forall a b. (a -> b) -> a -> b $ (EpochState era -> Const r (EpochState era)) -> NewEpochState era -> Const r (NewEpochState era) forall era (f :: * -> *). Functor f => (EpochState era -> f (EpochState era)) -> NewEpochState era -> f (NewEpochState era) nesEsL ((EpochState era -> Const r (EpochState era)) -> NewEpochState era -> Const r (NewEpochState era)) -> ((ExUnits -> Const r ExUnits) -> EpochState era -> Const r (EpochState era)) -> (ExUnits -> Const r ExUnits) -> NewEpochState era -> Const r (NewEpochState era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (PParams era -> Const r (PParams era)) -> EpochState era -> Const r (EpochState era) forall era. EraGov era => Lens' (EpochState era) (PParams era) Lens' (EpochState era) (PParams era) curPParamsEpochStateL ((PParams era -> Const r (PParams era)) -> EpochState era -> Const r (EpochState era)) -> ((ExUnits -> Const r ExUnits) -> PParams era -> Const r (PParams era)) -> (ExUnits -> Const r ExUnits) -> EpochState era -> Const r (EpochState era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (ExUnits -> Const r ExUnits) -> PParams era -> Const r (PParams era) forall era. AlonzoEraPParams era => Lens' (PParams era) ExUnits Lens' (PParams era) ExUnits ppMaxTxExUnitsL String -> Tx era -> ImpM (LedgerSpec era) () forall era. (HasCallStack, ShelleyEraImp era) => String -> Tx era -> ImpTestM era () submitTxAnn_ String "Submitting consuming transaction" (Tx era -> ImpM (LedgerSpec era) ()) -> Tx era -> ImpM (LedgerSpec era) () forall a b. (a -> b) -> a -> b $ TxBody era -> Tx era forall era. EraTx era => TxBody era -> Tx era mkBasicTx TxBody era forall era. EraTxBody era => TxBody era mkBasicTxBody Tx era -> (Tx era -> Tx era) -> Tx era forall a b. a -> (a -> b) -> b & (TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era) forall era. EraTx era => Lens' (Tx era) (TxBody era) Lens' (Tx era) (TxBody era) bodyTxL ((TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era)) -> ((Set TxIn -> Identity (Set TxIn)) -> TxBody era -> Identity (TxBody era)) -> (Set TxIn -> Identity (Set TxIn)) -> Tx era -> Identity (Tx era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (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)) -> Tx era -> Identity (Tx era)) -> Set TxIn -> Tx era -> Tx era forall s t a b. ASetter s t a b -> b -> s -> t .~ TxIn -> Set TxIn forall a. a -> Set a Set.singleton TxIn txIn0 Tx era -> (Tx era -> Tx era) -> Tx era forall a b. a -> (a -> b) -> b & (IsValid -> Identity IsValid) -> Tx era -> Identity (Tx era) forall era. AlonzoEraTx era => Lens' (Tx era) IsValid Lens' (Tx era) IsValid isValidTxL ((IsValid -> Identity IsValid) -> Tx era -> Identity (Tx era)) -> IsValid -> Tx era -> Tx era forall s t a b. ASetter s t a b -> b -> s -> t .~ Bool -> IsValid IsValid Bool False 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 (PlutusPurpose AsIx era) (Data era, ExUnits) -> Identity (Map (PlutusPurpose AsIx era) (Data era, ExUnits))) -> TxWits era -> Identity (TxWits era)) -> (Map (PlutusPurpose AsIx era) (Data era, ExUnits) -> Identity (Map (PlutusPurpose AsIx era) (Data era, ExUnits))) -> 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)) -> TxWits era -> Identity (TxWits era)) -> ((Map (PlutusPurpose AsIx era) (Data era, ExUnits) -> Identity (Map (PlutusPurpose AsIx era) (Data era, ExUnits))) -> Redeemers era -> Identity (Redeemers era)) -> (Map (PlutusPurpose AsIx era) (Data era, ExUnits) -> Identity (Map (PlutusPurpose AsIx era) (Data era, ExUnits))) -> TxWits era -> Identity (TxWits era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (Map (PlutusPurpose AsIx era) (Data era, ExUnits) -> Identity (Map (PlutusPurpose AsIx era) (Data era, ExUnits))) -> Redeemers era -> Identity (Redeemers era) forall era. AlonzoEraScript era => Lens' (Redeemers era) (Map (PlutusPurpose AsIx era) (Data era, ExUnits)) Lens' (Redeemers era) (Map (PlutusPurpose AsIx era) (Data era, ExUnits)) unRedeemersL ((Map (PlutusPurpose AsIx era) (Data era, ExUnits) -> Identity (Map (PlutusPurpose AsIx era) (Data era, ExUnits))) -> Tx era -> Identity (Tx era)) -> Map (PlutusPurpose AsIx era) (Data era, ExUnits) -> Tx era -> Tx era forall s t a b. ASetter s t a b -> b -> s -> t .~ PlutusPurpose AsIx era -> (Data era, ExUnits) -> Map (PlutusPurpose AsIx era) (Data era, ExUnits) forall k a. k -> a -> Map k a Map.singleton (AsIx Word32 TxIn -> PlutusPurpose AsIx era forall era (f :: * -> * -> *). AlonzoEraScript era => f Word32 TxIn -> PlutusPurpose f era forall (f :: * -> * -> *). f Word32 TxIn -> PlutusPurpose f era mkSpendingPurpose (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 (Data -> Data era) -> Data -> Data era forall a b. (a -> b) -> a -> b $ Integer -> Data P.I Integer 32, ExUnits exUnits) String -> SpecWith (ImpInit (LedgerSpec era)) -> SpecWith (ImpInit (LedgerSpec era)) forall a. HasCallStack => String -> SpecWith a -> SpecWith a describe String "Scripts pass in phase 2" (SpecWith (ImpInit (LedgerSpec era)) -> SpecWith (ImpInit (LedgerSpec era))) -> SpecWith (ImpInit (LedgerSpec era)) -> SpecWith (ImpInit (LedgerSpec era)) forall a b. (a -> b) -> a -> b $ do let scripts' :: [(String, SLanguage l -> Plutus l)] scripts' = Int -> [(String, SLanguage l -> Plutus l)] -> [(String, SLanguage l -> Plutus l)] forall a. Int -> [a] -> [a] drop Int 1 [(String, SLanguage l -> Plutus l)] scripts [(String, SLanguage l -> Plutus l)] -> ((String, SLanguage l -> Plutus l) -> SpecWith (ImpInit (LedgerSpec era))) -> SpecWith (ImpInit (LedgerSpec era)) forall (t :: * -> *) (m :: * -> *) a b. (Foldable t, Monad m) => t a -> (a -> m b) -> m () forM_ [(String, SLanguage l -> Plutus l)] scripts' (((String, SLanguage l -> Plutus l) -> SpecWith (ImpInit (LedgerSpec era))) -> SpecWith (ImpInit (LedgerSpec era))) -> ((String, SLanguage l -> Plutus l) -> SpecWith (ImpInit (LedgerSpec era))) -> SpecWith (ImpInit (LedgerSpec era)) forall a b. (a -> b) -> a -> b $ \(String name, SLanguage l -> Plutus l script) -> do String -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a. (HasCallStack, Example a) => String -> a -> SpecWith (Arg a) it String name (ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ()))) -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a b. (a -> b) -> a -> b $ do let sHash :: ScriptHash sHash = Plutus l -> ScriptHash forall (l :: Language). PlutusLanguage l => Plutus l -> ScriptHash hashPlutusScript (SLanguage l -> Plutus l script SLanguage l slang) TxIn txIn0 <- ScriptHash -> ImpTestM era TxIn forall era. (ShelleyEraImp era, HasCallStack) => ScriptHash -> ImpTestM era TxIn produceScript ScriptHash sHash String -> Tx era -> ImpM (LedgerSpec era) () forall era. (HasCallStack, ShelleyEraImp era) => String -> Tx era -> ImpTestM era () submitTxAnn_ String "Submitting consuming transaction" (Tx era -> ImpM (LedgerSpec era) ()) -> Tx era -> ImpM (LedgerSpec era) () forall a b. (a -> b) -> a -> b $ TxBody era -> Tx era forall era. EraTx era => TxBody era -> Tx era mkBasicTx TxBody era forall era. EraTxBody era => TxBody era mkBasicTxBody Tx era -> (Tx era -> Tx era) -> Tx era forall a b. a -> (a -> b) -> b & (TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era) forall era. EraTx era => Lens' (Tx era) (TxBody era) Lens' (Tx era) (TxBody era) bodyTxL ((TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era)) -> ((Set TxIn -> Identity (Set TxIn)) -> TxBody era -> Identity (TxBody era)) -> (Set TxIn -> Identity (Set TxIn)) -> Tx era -> Identity (Tx era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (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)) -> Tx era -> Identity (Tx era)) -> Set TxIn -> Tx era -> Tx era forall s t a b. ASetter s t a b -> b -> s -> t .~ TxIn -> Set TxIn forall a. a -> Set a Set.singleton TxIn txIn0 String -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a. (HasCallStack, Example a) => String -> a -> SpecWith (Arg a) it String "No cost model" (ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ()))) -> ImpM (LedgerSpec era) () -> SpecWith (Arg (ImpM (LedgerSpec era) ())) forall a b. (a -> b) -> a -> b $ do TxIn txIn <- ScriptHash -> ImpTestM era TxIn forall era. (ShelleyEraImp era, HasCallStack) => ScriptHash -> ImpTestM era TxIn produceScript ScriptHash alwaysSucceedsWithDatumHash let tx :: Tx era tx = TxBody era -> Tx era forall era. EraTx era => TxBody era -> Tx era mkBasicTx TxBody era forall era. EraTxBody era => TxBody era mkBasicTxBody Tx era -> (Tx era -> Tx era) -> Tx era forall a b. a -> (a -> b) -> b & (TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era) forall era. EraTx era => Lens' (Tx era) (TxBody era) Lens' (Tx era) (TxBody era) bodyTxL ((TxBody era -> Identity (TxBody era)) -> Tx era -> Identity (Tx era)) -> ((Set TxIn -> Identity (Set TxIn)) -> TxBody era -> Identity (TxBody era)) -> (Set TxIn -> Identity (Set TxIn)) -> Tx era -> Identity (Tx era) forall b c a. (b -> c) -> (a -> b) -> a -> c . (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)) -> Tx era -> Identity (Tx era)) -> Set TxIn -> Tx era -> Tx era forall a s t. Monoid a => ASetter s t a a -> a -> s -> t <>~ [Item (Set TxIn) TxIn txIn] (PParams era -> PParams era) -> ImpM (LedgerSpec era) () forall era. ShelleyEraImp era => (PParams era -> PParams era) -> ImpTestM era () modifyPParams ((PParams era -> PParams era) -> ImpM (LedgerSpec era) ()) -> (PParams era -> PParams era) -> ImpM (LedgerSpec era) () forall a b. (a -> b) -> a -> 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 .~ CostModels forall a. Monoid a => a mempty Tx era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) -> ImpM (LedgerSpec era) () forall era. (HasCallStack, ShelleyEraImp era) => Tx era -> NonEmpty (PredicateFailure (EraRule "LEDGER" era)) -> ImpTestM era () submitFailingTx Tx era tx [AlonzoUtxosPredFailure era -> EraRuleFailure "LEDGER" era forall (rule :: Symbol) (t :: * -> *) era. InjectRuleFailure rule t era => t era -> EraRuleFailure rule era injectFailure ([CollectError era] -> AlonzoUtxosPredFailure era forall era. [CollectError era] -> AlonzoUtxosPredFailure era CollectErrors [Language -> CollectError era forall era. Language -> CollectError era NoCostModel Language lang])]