From 4d15ed4b0d3fa7ad2a98dacb8e9cc66ed37c1520 Mon Sep 17 00:00:00 2001 From: Jordan Millar Date: Fri, 13 Mar 2026 16:19:11 -0400 Subject: [PATCH 1/2] Split OnDiskPlutusScriptCliArgs and PlutusRefScriptCliArgs to remove NoScriptDatum Split both types into spending and non-spending constructors, pinning the spending constructors to Exp.TxInItem. This removes the OptionalDatum type family and all uses of NoScriptDatumAllowed in preparation for making NoScriptDatum uninhabitable in cardano-api. --- .../Cardano/CLI/Compatible/Transaction/Run.hs | 5 ++- .../Compatible/Transaction/ScriptWitness.hs | 5 ++- .../CLI/EraBased/Script/Certificate/Read.hs | 5 ++- .../CLI/EraBased/Script/Certificate/Type.hs | 4 +-- .../Cardano/CLI/EraBased/Script/Mint/Read.hs | 5 ++- .../Cardano/CLI/EraBased/Script/Mint/Type.hs | 5 ++- .../CLI/EraBased/Script/Proposal/Read.hs | 5 ++- .../CLI/EraBased/Script/Proposal/Type.hs | 5 ++- .../Cardano/CLI/EraBased/Script/Spend/Read.hs | 8 +++-- .../Cardano/CLI/EraBased/Script/Spend/Type.hs | 4 +-- .../src/Cardano/CLI/EraBased/Script/Type.hs | 34 +++++++++++-------- .../Cardano/CLI/EraBased/Script/Vote/Read.hs | 5 ++- .../Cardano/CLI/EraBased/Script/Vote/Type.hs | 5 ++- .../CLI/EraBased/Script/Withdrawal/Read.hs | 6 ++-- .../CLI/EraBased/Script/Withdrawal/Type.hs | 4 +-- 15 files changed, 52 insertions(+), 53 deletions(-) diff --git a/cardano-cli/src/Cardano/CLI/Compatible/Transaction/Run.hs b/cardano-cli/src/Cardano/CLI/Compatible/Transaction/Run.hs index 70e7e1e530..2d0c89ed67 100644 --- a/cardano-cli/src/Cardano/CLI/Compatible/Transaction/Run.hs +++ b/cardano-cli/src/Cardano/CLI/Compatible/Transaction/Run.hs @@ -156,7 +156,7 @@ readCertificateScriptWitnessSbe sbe (OnDiskSimpleScript scriptFp) = do readCertificateScriptWitnessSbe sbe ( OnDiskPlutusScript - (OnDiskPlutusScriptCliArgs scriptFp Exp.NoScriptDatumAllowed redeemerFile execUnits) + (OnDiskPlutusScriptCliArgsNonSpending scriptFp redeemerFile execUnits) ) = do let plutusScriptFp = unFile scriptFp Compatible.AnyPlutusScript plutusScriptVer (PlutusScriptSerialised sBytes) <- @@ -191,10 +191,9 @@ readCertificateScriptWitnessSbe readCertificateScriptWitnessSbe _ ( PlutusReferenceScript - ( PlutusRefScriptCliArgs + ( PlutusRefScriptCliArgsNonSpending refInput (AnySLanguage lang) - Exp.NoScriptDatumAllowed NoPolicyId redeemerFile execUnits diff --git a/cardano-cli/src/Cardano/CLI/Compatible/Transaction/ScriptWitness.hs b/cardano-cli/src/Cardano/CLI/Compatible/Transaction/ScriptWitness.hs index 895501b9ca..23345de5f8 100644 --- a/cardano-cli/src/Cardano/CLI/Compatible/Transaction/ScriptWitness.hs +++ b/cardano-cli/src/Cardano/CLI/Compatible/Transaction/ScriptWitness.hs @@ -74,7 +74,7 @@ readCertificateScriptWitness sbe certScriptReq = SimpleScriptWitness (sbeToSimpleScriptLanguageInEra sbe) $ SScript ss OnDiskPlutusScript - (OnDiskPlutusScriptCliArgs scriptFp Exp.NoScriptDatumAllowed redeemerFile execUnits) -> do + (OnDiskPlutusScriptCliArgsNonSpending scriptFp redeemerFile execUnits) -> do let plutusScriptFp = unFile scriptFp plutusScript <- readFilePlutusScript plutusScriptFp redeemer <- @@ -107,10 +107,9 @@ readCertificateScriptWitness sbe certScriptReq = (sbeToSimpleScriptLanguageInEra sbe) (SReferenceScript refTxIn) PlutusReferenceScript - ( PlutusRefScriptCliArgs + ( PlutusRefScriptCliArgsNonSpending refTxIn (AnySLanguage lang) - Exp.NoScriptDatumAllowed Exp.NoPolicyId redeemerFile execUnits diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Certificate/Read.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Certificate/Read.hs index 91bec4c800..8e9f13fc53 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Certificate/Read.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Certificate/Read.hs @@ -34,7 +34,7 @@ readCertificateScriptWitness (OnDiskSimpleScript scriptFp) = do AnySimpleScriptWitness . SScript <$> readFileSimpleScript sFp useEra readCertificateScriptWitness ( OnDiskPlutusScript - (OnDiskPlutusScriptCliArgs scriptFp Exp.NoScriptDatumAllowed redeemerFile execUnits) + (OnDiskPlutusScriptCliArgsNonSpending scriptFp redeemerFile execUnits) ) = do let plutusScriptFp = unFile scriptFp Exp.AnyPlutusScript script <- @@ -60,10 +60,9 @@ readCertificateScriptWitness AnyPlutusCertifyingScriptWitness sw readCertificateScriptWitness ( PlutusReferenceScript - ( PlutusRefScriptCliArgs + ( PlutusRefScriptCliArgsNonSpending refInput (AnySLanguage lang) - Exp.NoScriptDatumAllowed NoPolicyId redeemerFile execUnits diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Certificate/Type.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Certificate/Type.hs index 2458e719d0..3ab5c4a6e8 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Certificate/Type.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Certificate/Type.hs @@ -26,7 +26,7 @@ createSimpleOrPlutusScriptFromCliArgs -> Maybe (ScriptDataOrFile, ExecutionUnits) -> ScriptRequirements CertItem createSimpleOrPlutusScriptFromCliArgs scriptFp (Just (redeemer, execUnits)) = - OnDiskPlutusScript $ OnDiskPlutusScriptCliArgs scriptFp NoScriptDatumAllowed redeemer execUnits + OnDiskPlutusScript $ OnDiskPlutusScriptCliArgsNonSpending scriptFp redeemer execUnits createSimpleOrPlutusScriptFromCliArgs scriptFp Nothing = OnDiskSimpleScript scriptFp @@ -38,4 +38,4 @@ createPlutusReferenceScriptFromCliArgs -> ScriptRequirements CertItem createPlutusReferenceScriptFromCliArgs txIn l redeemer execUnits = PlutusReferenceScript $ - PlutusRefScriptCliArgs txIn l NoScriptDatumAllowed NoPolicyId redeemer execUnits + PlutusRefScriptCliArgsNonSpending txIn l NoPolicyId redeemer execUnits diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Mint/Read.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Mint/Read.hs index ba109ac91d..f5ad423248 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Mint/Read.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Mint/Read.hs @@ -36,7 +36,7 @@ readMintScriptWitness (OnDiskSimpleScript scriptFp) = do return (fromMaryPolicyID $ L.PolicyID sHash, AnyScriptWitnessSimple $ Exp.SScript s) readMintScriptWitness ( OnDiskPlutusScript - (OnDiskPlutusScriptCliArgs scriptFp Exp.NoScriptDatumAllowed redeemerFile execUnits) + (OnDiskPlutusScriptCliArgsNonSpending scriptFp redeemerFile execUnits) ) = do let plutusScriptFp = unFile scriptFp Exp.AnyPlutusScript script <- @@ -62,10 +62,9 @@ readMintScriptWitness ) readMintScriptWitness ( PlutusReferenceScript - ( PlutusRefScriptCliArgs + ( PlutusRefScriptCliArgsNonSpending refTxIn (AnySLanguage lang) - Exp.NoScriptDatumAllowed polId redeemerFile execUnits diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Mint/Type.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Mint/Type.hs index f9f424c8a9..4a38bc81c4 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Mint/Type.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Mint/Type.hs @@ -13,7 +13,6 @@ where import Cardano.Api import Cardano.Api.Experimental -import Cardano.Api.Experimental qualified as Exp import Cardano.CLI.EraBased.Script.Type import Cardano.CLI.Type.Common (AnySLanguage (..), ScriptDataOrFile) @@ -36,7 +35,7 @@ createSimpleOrPlutusScriptFromCliArgs scriptFp Nothing = OnDiskSimpleScript scriptFp createSimpleOrPlutusScriptFromCliArgs scriptFp (Just (redeemerFile, execUnits)) = OnDiskPlutusScript $ - OnDiskPlutusScriptCliArgs scriptFp Exp.NoScriptDatumAllowed redeemerFile execUnits + OnDiskPlutusScriptCliArgsNonSpending scriptFp redeemerFile execUnits createSimpleReferenceScriptFromCliArgs :: TxIn @@ -54,4 +53,4 @@ createPlutusReferenceScriptFromCliArgs -> ScriptRequirements MintItem createPlutusReferenceScriptFromCliArgs txin scriptVersion scriptData execUnits polid = PlutusReferenceScript $ - PlutusRefScriptCliArgs txin scriptVersion Exp.NoScriptDatumAllowed polid scriptData execUnits + PlutusRefScriptCliArgsNonSpending txin scriptVersion polid scriptData execUnits diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Proposal/Read.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Proposal/Read.hs index 3a0f8d03e8..13a566c510 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Proposal/Read.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Proposal/Read.hs @@ -54,7 +54,7 @@ readProposalScriptWitness (propFp, Just certScriptReq) = , s ) OnDiskPlutusScript - (OnDiskPlutusScriptCliArgs scriptFp Exp.NoScriptDatumAllowed redeemerFile execUnits) -> do + (OnDiskPlutusScriptCliArgsNonSpending scriptFp redeemerFile execUnits) -> do let plutusScriptFp = unFile scriptFp Exp.AnyPlutusScript plutusScript <- readFilePlutusScript @_ @era plutusScriptFp @@ -82,10 +82,9 @@ readProposalScriptWitness (propFp, Just certScriptReq) = , Exp.AnySimpleScriptWitness $ Exp.SReferenceScript refTxIn ) PlutusReferenceScript - ( PlutusRefScriptCliArgs + ( PlutusRefScriptCliArgsNonSpending refTxIn (AnySLanguage lang) - Exp.NoScriptDatumAllowed NoPolicyId redeemerFile execUnits diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Proposal/Type.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Proposal/Type.hs index 6a7d05f4dd..9becfd7424 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Proposal/Type.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Proposal/Type.hs @@ -11,7 +11,6 @@ where import Cardano.Api import Cardano.Api.Experimental -import Cardano.Api.Experimental qualified as Exp import Cardano.CLI.EraBased.Script.Type import Cardano.CLI.Type.Common (AnySLanguage (..), ScriptDataOrFile) @@ -21,7 +20,7 @@ createSimpleOrPlutusScriptFromCliArgs -> Maybe (ScriptDataOrFile, ExecutionUnits) -> ScriptRequirements ProposalItem createSimpleOrPlutusScriptFromCliArgs scriptFp (Just (redeemer, execUnits)) = - OnDiskPlutusScript $ OnDiskPlutusScriptCliArgs scriptFp Exp.NoScriptDatumAllowed redeemer execUnits + OnDiskPlutusScript $ OnDiskPlutusScriptCliArgsNonSpending scriptFp redeemer execUnits createSimpleOrPlutusScriptFromCliArgs scriptFp Nothing = OnDiskSimpleScript scriptFp @@ -33,4 +32,4 @@ createPlutusReferenceScriptFromCliArgs -> ScriptRequirements ProposalItem createPlutusReferenceScriptFromCliArgs txIn anySLang redeemer execUnits = PlutusReferenceScript $ - PlutusRefScriptCliArgs txIn anySLang Exp.NoScriptDatumAllowed NoPolicyId redeemer execUnits + PlutusRefScriptCliArgsNonSpending txIn anySLang NoPolicyId redeemer execUnits diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Spend/Read.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Spend/Read.hs index 8427795fe8..57c10f59a0 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Spend/Read.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Spend/Read.hs @@ -60,7 +60,7 @@ readSpendScriptWitness (Just spendScriptReq) = let sFp = unFile simpleFp Exp.AnySimpleScriptWitness . Exp.SScript <$> readFileSimpleScript sFp (useEra @era) OnDiskPlutusScript - (OnDiskPlutusScriptCliArgs plutusScriptFp mScriptDatum redeemerFile execUnits) -> do + (OnDiskPlutusScriptCliArgsSpending plutusScriptFp mScriptDatum redeemerFile execUnits) -> do anyScript <- readFilePlutusScript @_ @era (unFile plutusScriptFp) case anyScript of @@ -82,7 +82,7 @@ readSpendScriptWitness (Just spendScriptReq) = Exp.AnySimpleScriptWitness $ Exp.SReferenceScript refTxIn PlutusReferenceScript - (PlutusRefScriptCliArgs refTxIn (AnySLanguage lang) mScriptDatum NoPolicyId redeemerFile execUnits) -> do + (PlutusRefScriptCliArgsSpending refTxIn (AnySLanguage lang) mScriptDatum redeemerFile execUnits) -> do let pRefScript = Exp.PReferenceScript refTxIn redeemer <- fromExceptTCli $ readScriptDataOrFile redeemerFile @@ -93,6 +93,10 @@ readSpendScriptWitness (Just spendScriptReq) = Exp.AnyPlutusScriptWitness $ Exp.AnyPlutusSpendingScriptWitness $ Exp.createPlutusSpendingScriptWitness lang plutusScriptWitness + OnDiskPlutusScript (OnDiskPlutusScriptCliArgsNonSpending{}) -> + error "readSpendScriptWitness: impossible - non-spending args used in spending context" + PlutusReferenceScript (PlutusRefScriptCliArgsNonSpending{}) -> + error "readSpendScriptWitness: impossible - non-spending ref script args used in spending context" handlePotentialScriptDatum :: ScriptDatumOrFileSpending diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Spend/Type.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Spend/Type.hs index a87bb12e36..97225584af 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Spend/Type.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Spend/Type.hs @@ -22,7 +22,7 @@ createSimpleOrPlutusScriptFromCliArgs -> Maybe (ScriptDatumOrFileSpending, ScriptDataOrFile, ExecutionUnits) -> ScriptRequirements TxInItem createSimpleOrPlutusScriptFromCliArgs scriptFp (Just (datumFile, redeemerFile, execUnits)) = - OnDiskPlutusScript $ OnDiskPlutusScriptCliArgs scriptFp datumFile redeemerFile execUnits + OnDiskPlutusScript $ OnDiskPlutusScriptCliArgsSpending scriptFp datumFile redeemerFile execUnits createSimpleOrPlutusScriptFromCliArgs scriptFp Nothing = OnDiskSimpleScript scriptFp createSimpleReferenceScriptFromCliArgs :: TxIn -> ScriptRequirements TxInItem @@ -36,4 +36,4 @@ createPlutusReferenceScriptFromCliArgs -> ExecutionUnits -> ScriptRequirements TxInItem createPlutusReferenceScriptFromCliArgs txin v mDatum redeemer execUnits = - PlutusReferenceScript $ PlutusRefScriptCliArgs txin v mDatum NoPolicyId redeemer execUnits + PlutusReferenceScript $ PlutusRefScriptCliArgsSpending txin v mDatum redeemer execUnits diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Type.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Type.hs index eb025376d5..64b1dc901c 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Type.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Type.hs @@ -12,7 +12,6 @@ module Cardano.CLI.EraBased.Script.Type , PlutusRefScriptCliArgs (..) , MintPolicyId , NoPolicyId (..) - , OptionalDatum , SimpleRefScriptCliArgs (..) , ScriptDatumOrFileSpending (..) @@ -61,22 +60,21 @@ deriving instance Show (ScriptRequirements Exp.ProposalItem) deriving instance Show (ScriptRequirements Exp.WithdrawalItem) data OnDiskPlutusScriptCliArgs (witnessable :: Exp.WitnessableItem) where - OnDiskPlutusScriptCliArgs + OnDiskPlutusScriptCliArgsSpending :: (File ScriptInAnyLang In) - -> (OptionalDatum witnessable) + -> ScriptDatumOrFileSpending -- ^ Optional Datum (CIP-69) -> ScriptDataOrFile -- ^ Redeemer -> ExecutionUnits + -> OnDiskPlutusScriptCliArgs Exp.TxInItem + OnDiskPlutusScriptCliArgsNonSpending + :: (File ScriptInAnyLang In) + -> ScriptDataOrFile + -- ^ Redeemer + -> ExecutionUnits -> OnDiskPlutusScriptCliArgs witnessable -type family OptionalDatum (a :: Exp.WitnessableItem) where - OptionalDatum Exp.TxInItem = ScriptDatumOrFileSpending - OptionalDatum Exp.CertItem = Exp.NoScriptDatum - OptionalDatum Exp.MintItem = Exp.NoScriptDatum - OptionalDatum Exp.WithdrawalItem = Exp.NoScriptDatum - OptionalDatum Exp.VoterItem = Exp.NoScriptDatum - OptionalDatum Exp.ProposalItem = Exp.NoScriptDatum data ScriptDatumOrFileSpending = PotentialDatum (Maybe ScriptDataOrFile) @@ -87,21 +85,29 @@ deriving instance Show (OnDiskPlutusScriptCliArgs Exp.VoterItem) deriving instance Show (OnDiskPlutusScriptCliArgs Exp.MintItem) -deriving instance Show (OnDiskPlutusScriptCliArgs Exp.ProposalItem) - deriving instance Show (OnDiskPlutusScriptCliArgs Exp.CertItem) deriving instance Show (OnDiskPlutusScriptCliArgs Exp.TxInItem) +deriving instance Show (OnDiskPlutusScriptCliArgs Exp.ProposalItem) + deriving instance Show (OnDiskPlutusScriptCliArgs Exp.WithdrawalItem) data PlutusRefScriptCliArgs (witnessable :: Exp.WitnessableItem) where - PlutusRefScriptCliArgs + PlutusRefScriptCliArgsSpending :: TxIn -- ^ TxIn with reference script -> AnySLanguage - -> OptionalDatum witnessable + -> ScriptDatumOrFileSpending -- ^ Optional Datum (CIP-69) + -> ScriptDataOrFile + -- ^ Redeemer + -> ExecutionUnits + -> PlutusRefScriptCliArgs Exp.TxInItem + PlutusRefScriptCliArgsNonSpending + :: TxIn + -- ^ TxIn with reference script + -> AnySLanguage -> MintPolicyId witnessable -- ^ Needed for plutus minting scripts -> ScriptDataOrFile diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Vote/Read.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Vote/Read.hs index 2c66b45eaa..f2a23605bb 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Vote/Read.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Vote/Read.hs @@ -53,7 +53,7 @@ readVoteScriptWitness (voteFp, Just certScriptReq) = do , s ) OnDiskPlutusScript - (OnDiskPlutusScriptCliArgs scriptFp Exp.NoScriptDatumAllowed redeemerFile execUnits) -> do + (OnDiskPlutusScriptCliArgsNonSpending scriptFp redeemerFile execUnits) -> do let plutusScriptFp = unFile scriptFp Exp.AnyPlutusScript script <- readFilePlutusScript @_ @era plutusScriptFp @@ -75,10 +75,9 @@ readVoteScriptWitness (voteFp, Just certScriptReq) = do , Exp.AnyPlutusScriptWitness $ AnyPlutusCertifyingScriptWitness sw ) PlutusReferenceScript - ( PlutusRefScriptCliArgs + ( PlutusRefScriptCliArgsNonSpending refTxIn (AnySLanguage lang) - Exp.NoScriptDatumAllowed Exp.NoPolicyId redeemerFile execUnits diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Vote/Type.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Vote/Type.hs index 2475cf0ba8..c81983ce97 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Vote/Type.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Vote/Type.hs @@ -26,7 +26,7 @@ createSimpleOrPlutusScriptFromCliArgs -> Latest.ScriptRequirements Exp.VoterItem createSimpleOrPlutusScriptFromCliArgs scriptFp (Just (redeemer, execUnits)) = Latest.OnDiskPlutusScript $ - Latest.OnDiskPlutusScriptCliArgs scriptFp Exp.NoScriptDatumAllowed redeemer execUnits + Latest.OnDiskPlutusScriptCliArgsNonSpending scriptFp redeemer execUnits createSimpleOrPlutusScriptFromCliArgs scriptFp Nothing = Latest.OnDiskSimpleScript scriptFp @@ -38,10 +38,9 @@ createPlutusReferenceScriptFromCliArgs -> Latest.ScriptRequirements Exp.VoterItem createPlutusReferenceScriptFromCliArgs txIn anySLang redeemer execUnits = Latest.PlutusReferenceScript $ - Latest.PlutusRefScriptCliArgs + Latest.PlutusRefScriptCliArgsNonSpending txIn anySLang - Exp.NoScriptDatumAllowed Latest.NoPolicyId redeemer execUnits diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Withdrawal/Read.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Withdrawal/Read.hs index 244475c4ea..e09f8f067d 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Withdrawal/Read.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Withdrawal/Read.hs @@ -15,7 +15,6 @@ import Cardano.Api.Experimental ( AnyWitness (..) , IsEra (..) , LedgerEra - , NoScriptDatum (..) , WitnessableItem (..) ) import Cardano.Api.Experimental qualified as Exp @@ -46,7 +45,7 @@ readWithdrawalScriptWitness (stakeAddr, withdrawalAmt, Just certScriptReq) = , withdrawalAmt , sWit ) - OnDiskPlutusScript (OnDiskPlutusScriptCliArgs scriptFp NoScriptDatumAllowed redeemerFile execUnits) -> do + OnDiskPlutusScript (OnDiskPlutusScriptCliArgsNonSpending scriptFp redeemerFile execUnits) -> do let plutusScriptFp = unFile scriptFp Exp.AnyPlutusScript script <- readFilePlutusScript @_ @era plutusScriptFp @@ -76,10 +75,9 @@ readWithdrawalScriptWitness (stakeAddr, withdrawalAmt, Just certScriptReq) = , AnySimpleScriptWitness $ Exp.SReferenceScript refTxIn ) PlutusReferenceScript - ( PlutusRefScriptCliArgs + ( PlutusRefScriptCliArgsNonSpending refTxIn (AnySLanguage lang) - NoScriptDatumAllowed NoPolicyId redeemerFile execUnits diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Withdrawal/Type.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Withdrawal/Type.hs index 3d0f07841e..cd07192cdb 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Withdrawal/Type.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Withdrawal/Type.hs @@ -20,7 +20,7 @@ createSimpleOrPlutusScriptFromCliArgs -> Maybe (ScriptDataOrFile, ExecutionUnits) -> ScriptRequirements WithdrawalItem createSimpleOrPlutusScriptFromCliArgs scriptFp (Just (redeemer, execUnits)) = - OnDiskPlutusScript $ OnDiskPlutusScriptCliArgs scriptFp NoScriptDatumAllowed redeemer execUnits + OnDiskPlutusScript $ OnDiskPlutusScriptCliArgsNonSpending scriptFp redeemer execUnits createSimpleOrPlutusScriptFromCliArgs scriptFp Nothing = OnDiskSimpleScript scriptFp @@ -32,4 +32,4 @@ createPlutusReferenceScriptFromCliArgs -> ScriptRequirements WithdrawalItem createPlutusReferenceScriptFromCliArgs txIn version redeemer execUnits = PlutusReferenceScript $ - PlutusRefScriptCliArgs txIn version NoScriptDatumAllowed NoPolicyId redeemer execUnits + PlutusRefScriptCliArgsNonSpending txIn version NoPolicyId redeemer execUnits From b6da2fc4bd0c2338b27aad8957575aac573fa1d9 Mon Sep 17 00:00:00 2001 From: Jordan Millar Date: Mon, 16 Mar 2026 17:24:44 -0400 Subject: [PATCH 2/2] Replace parameterized ScriptRequirements GADT with flat unparameterized ADTs Replace the polymorphic `ScriptRequirements witnessable` GADT (and its inner types `OnDiskPlutusScriptCliArgs`, `PlutusRefScriptCliArgs`, `SimpleRefScriptCliArgs`, `MintPolicyId`, `NoPolicyId`) with flat, context-specific ADTs: - `SimpleScriptRequirements` (on-disk or reference, no datum/redeemer) - `PlutusSpendingScriptRequirements` (with datum support for CIP-69) - `PlutusMintingScriptRequirements` (includes PolicyId for reference scripts) - `PlutusNonAssetScriptRequirements` (cert/withdrawal/vote/proposal) Command-level sum types replace `ScriptRequirements witnessable` in records: - `AnySpendScript` (for TxIn spending witnesses) - `AnyMintScript` (for minting witnesses, 3 constructors to encode the PolicyId invariant exhaustively) - `AnyNonAssetScript` (for cert/withdrawal/vote/proposal witnesses) All pattern matches are now exhaustive. The `error "impossible"` branches in Spend/Read.hs are eliminated. The golden test CLI interface is unchanged. --- .../CLI/Compatible/Transaction/Command.hs | 7 +- .../CLI/Compatible/Transaction/Option.hs | 3 +- .../Cardano/CLI/Compatible/Transaction/Run.hs | 125 +++++------ .../Compatible/Transaction/ScriptWitness.hs | 147 +++++++------ .../src/Cardano/CLI/EraBased/Common/Option.hs | 64 +++--- .../CLI/EraBased/Script/Certificate/Read.hs | 98 ++++----- .../CLI/EraBased/Script/Certificate/Type.hs | 16 +- .../Cardano/CLI/EraBased/Script/Mint/Read.hs | 99 ++++----- .../Cardano/CLI/EraBased/Script/Mint/Type.hs | 25 +-- .../CLI/EraBased/Script/Proposal/Read.hs | 120 +++++------ .../CLI/EraBased/Script/Proposal/Type.hs | 17 +- .../Cardano/CLI/EraBased/Script/Spend/Read.hs | 80 ++++---- .../Cardano/CLI/EraBased/Script/Spend/Type.hs | 23 +-- .../src/Cardano/CLI/EraBased/Script/Type.hs | 194 +++++++----------- .../Cardano/CLI/EraBased/Script/Vote/Read.hs | 102 +++++---- .../Cardano/CLI/EraBased/Script/Vote/Type.hs | 24 +-- .../CLI/EraBased/Script/Withdrawal/Read.hs | 120 +++++------ .../CLI/EraBased/Script/Withdrawal/Type.hs | 17 +- .../CLI/EraBased/Transaction/Command.hs | 36 ++-- 19 files changed, 585 insertions(+), 732 deletions(-) diff --git a/cardano-cli/src/Cardano/CLI/Compatible/Transaction/Command.hs b/cardano-cli/src/Cardano/CLI/Compatible/Transaction/Command.hs index 296f4b5b62..f756c2afb3 100644 --- a/cardano-cli/src/Cardano/CLI/Compatible/Transaction/Command.hs +++ b/cardano-cli/src/Cardano/CLI/Compatible/Transaction/Command.hs @@ -12,7 +12,6 @@ module Cardano.CLI.Compatible.Transaction.Command where import Cardano.Api -import Cardano.Api.Experimental import Cardano.CLI.EraBased.Script.Type import Cardano.CLI.Type.Common @@ -28,15 +27,15 @@ data CompatibleTransactionCmds era [TxOutAnyEra] !(Maybe (Featured ShelleyToBabbageEra era (Maybe UpdateProposalFile))) !( Maybe - (Featured ConwayEraOnwards era [(ProposalFile In, Maybe (ScriptRequirements ProposalItem))]) + (Featured ConwayEraOnwards era [(ProposalFile In, Maybe AnyNonAssetScript)]) ) - ![(VoteFile In, Maybe (ScriptRequirements VoterItem))] + ![(VoteFile In, Maybe AnyNonAssetScript)] [WitnessSigningData] -- ^ Signing keys (Maybe NetworkId) !Coin -- ^ Tx fee - ![(CertificateFile, Maybe (ScriptRequirements CertItem))] + ![(CertificateFile, Maybe AnyNonAssetScript)] -- ^ stake registering certs !(File () Out) diff --git a/cardano-cli/src/Cardano/CLI/Compatible/Transaction/Option.hs b/cardano-cli/src/Cardano/CLI/Compatible/Transaction/Option.hs index fb132a9bce..40c7d62c11 100644 --- a/cardano-cli/src/Cardano/CLI/Compatible/Transaction/Option.hs +++ b/cardano-cli/src/Cardano/CLI/Compatible/Transaction/Option.hs @@ -11,7 +11,6 @@ module Cardano.CLI.Compatible.Transaction.Option where import Cardano.Api -import Cardano.Api.Experimental import Cardano.CLI.Compatible.Transaction.Command import Cardano.CLI.Environment @@ -161,7 +160,7 @@ pRefScriptFp = pVoteFiles :: ShelleyBasedEra era -> BalanceTxExecUnits - -> Parser [(VoteFile In, Maybe (ScriptRequirements VoterItem))] + -> Parser [(VoteFile In, Maybe AnyNonAssetScript)] pVoteFiles sbe bExUnits = caseShelleyToBabbageOrConwayEraOnwards (const $ pure []) diff --git a/cardano-cli/src/Cardano/CLI/Compatible/Transaction/Run.hs b/cardano-cli/src/Cardano/CLI/Compatible/Transaction/Run.hs index 2d0c89ed67..b428a11665 100644 --- a/cardano-cli/src/Cardano/CLI/Compatible/Transaction/Run.hs +++ b/cardano-cli/src/Cardano/CLI/Compatible/Transaction/Run.hs @@ -28,7 +28,6 @@ import Cardano.CLI.Compatible.Exception import Cardano.CLI.Compatible.Read qualified as Compatible import Cardano.CLI.Compatible.Transaction.Command import Cardano.CLI.Compatible.Transaction.TxOut -import Cardano.CLI.EraBased.Script.Certificate.Type import Cardano.CLI.EraBased.Script.Proposal.Read import Cardano.CLI.EraBased.Script.Read.Common import Cardano.CLI.EraBased.Script.Type @@ -129,7 +128,7 @@ runCompatibleTransactionCmd readCertificateScriptWitnesses' :: ShelleyBasedEra era - -> [(CertificateFile, Maybe (ScriptRequirements Exp.CertItem))] + -> [(CertificateFile, Maybe AnyNonAssetScript)] -> CIO e [(CertificateFile, Exp.AnyWitness (ShelleyLedgerEra era))] readCertificateScriptWitnesses' sbe = mapM @@ -144,75 +143,65 @@ readCertificateScriptWitnesses' sbe = readCertificateScriptWitnessSbe :: forall era e . ShelleyBasedEra era - -> ScriptRequirements Exp.CertItem + -> AnyNonAssetScript -> CIO e (Exp.AnyWitness (ShelleyLedgerEra era)) -readCertificateScriptWitnessSbe sbe (OnDiskSimpleScript scriptFp) = do - let sFp = unFile scriptFp - ss <- Compatible.readFileSimpleScript sFp - let serialisedSS = serialiseToCBOR ss - let simpleScriptE :: Either DecoderError (Exp.SimpleScript (ShelleyLedgerEra era)) = shelleyBasedEraConstraints sbe $ Exp.deserialiseSimpleScript serialisedSS - simpleScript <- fromEitherCli simpleScriptE - return $ Exp.AnySimpleScriptWitness $ Exp.SScript simpleScript -readCertificateScriptWitnessSbe - sbe - ( OnDiskPlutusScript - (OnDiskPlutusScriptCliArgsNonSpending scriptFp redeemerFile execUnits) - ) = do - let plutusScriptFp = unFile scriptFp - Compatible.AnyPlutusScript plutusScriptVer (PlutusScriptSerialised sBytes) <- - Compatible.readFilePlutusScript plutusScriptFp - let anyLang :: Exp.AnyPlutusScriptLanguage = case plutusScriptVer of - PlutusScriptV1 -> Exp.AnyPlutusScriptLanguage L.SPlutusV1 - PlutusScriptV2 -> Exp.AnyPlutusScriptLanguage L.SPlutusV2 - PlutusScriptV3 -> Exp.AnyPlutusScriptLanguage L.SPlutusV3 - PlutusScriptV4 -> Exp.AnyPlutusScriptLanguage L.SPlutusV4 - bs = SBS.fromShort sBytes +readCertificateScriptWitnessSbe sbe (AnyNonAssetScriptSimple simpleReq) = + case simpleReq of + OnDiskSimpleScript scriptFp -> do + let sFp = unFile scriptFp + ss <- Compatible.readFileSimpleScript sFp + let serialisedSS = serialiseToCBOR ss + let simpleScriptE :: Either DecoderError (Exp.SimpleScript (ShelleyLedgerEra era)) = shelleyBasedEraConstraints sbe $ Exp.deserialiseSimpleScript serialisedSS + simpleScript <- fromEitherCli simpleScriptE + return $ Exp.AnySimpleScriptWitness $ Exp.SScript simpleScript + ReferenceSimpleScript refTxin -> + return . Exp.AnySimpleScriptWitness $ Exp.SReferenceScript refTxin +readCertificateScriptWitnessSbe sbe (AnyNonAssetScriptPlutus plutusReq) = + case plutusReq of + OnDiskPlutusNonAssetScript scriptFp redeemerFile execUnits -> do + let plutusScriptFp = unFile scriptFp + Compatible.AnyPlutusScript plutusScriptVer (PlutusScriptSerialised sBytes) <- + Compatible.readFilePlutusScript plutusScriptFp + let anyLang :: Exp.AnyPlutusScriptLanguage = case plutusScriptVer of + PlutusScriptV1 -> Exp.AnyPlutusScriptLanguage L.SPlutusV1 + PlutusScriptV2 -> Exp.AnyPlutusScriptLanguage L.SPlutusV2 + PlutusScriptV3 -> Exp.AnyPlutusScriptLanguage L.SPlutusV3 + PlutusScriptV4 -> Exp.AnyPlutusScriptLanguage L.SPlutusV4 + bs = SBS.fromShort sBytes - eAnyPlutusScript :: Either DecoderError (Exp.AnyPlutusScript (ShelleyLedgerEra era)) = shelleyBasedEraConstraints sbe $ Exp.decodeAnyPlutusScript bs anyLang - Exp.AnyPlutusScript anyPlutusScript <- fromEitherCli eAnyPlutusScript - let - lang = Exp.plutusScriptInEraSLanguage anyPlutusScript - let script' = Exp.PScript anyPlutusScript + eAnyPlutusScript :: Either DecoderError (Exp.AnyPlutusScript (ShelleyLedgerEra era)) = shelleyBasedEraConstraints sbe $ Exp.decodeAnyPlutusScript bs anyLang + Exp.AnyPlutusScript anyPlutusScript <- fromEitherCli eAnyPlutusScript + let + lang = Exp.plutusScriptInEraSLanguage anyPlutusScript + let script' = Exp.PScript anyPlutusScript - redeemer <- - fromExceptTCli $ - readScriptDataOrFile redeemerFile + redeemer <- + fromExceptTCli $ + readScriptDataOrFile redeemerFile - let sw = - Exp.PlutusScriptWitness - lang - script' - Exp.NoScriptDatum - redeemer - execUnits - return $ - Exp.AnyPlutusScriptWitness $ - Exp.AnyPlutusCertifyingScriptWitness sw -readCertificateScriptWitnessSbe - _ - ( PlutusReferenceScript - ( PlutusRefScriptCliArgsNonSpending - refInput - (AnySLanguage lang) - NoPolicyId - redeemerFile - execUnits - ) - ) = do - redeemer <- - fromExceptTCli $ - readScriptDataOrFile redeemerFile - return $ - Exp.AnyPlutusScriptWitness $ - Exp.AnyPlutusCertifyingScriptWitness $ - Exp.PlutusScriptWitness - lang - (Exp.PReferenceScript refInput) - Exp.NoScriptDatum - redeemer - execUnits -readCertificateScriptWitnessSbe _ (SimpleReferenceScript (SimpleRefScriptArgs refTxin NoPolicyId)) = - return . Exp.AnySimpleScriptWitness $ Exp.SReferenceScript refTxin + let sw = + Exp.PlutusScriptWitness + lang + script' + Exp.NoScriptDatum + redeemer + execUnits + return $ + Exp.AnyPlutusScriptWitness $ + Exp.AnyPlutusCertifyingScriptWitness sw + ReferencePlutusNonAssetScript refInput (AnySLanguage lang) redeemerFile execUnits -> do + redeemer <- + fromExceptTCli $ + readScriptDataOrFile redeemerFile + return $ + Exp.AnyPlutusScriptWitness $ + Exp.AnyPlutusCertifyingScriptWitness $ + Exp.PlutusScriptWitness + lang + (Exp.PReferenceScript refInput) + Exp.NoScriptDatum + redeemer + execUnits -- | Create 'TxCertificates'. Note that 'Certificate era' will be deduplicated. Only Certificates with a -- stake credential will be in the result. @@ -250,7 +239,7 @@ readUpdateProposalFile (Featured sToB (Just updateProposalFile)) = do readProposalProcedureFile :: forall e era - . Featured ConwayEraOnwards era [(ProposalFile In, Maybe (ScriptRequirements Exp.ProposalItem))] + . Featured ConwayEraOnwards era [(ProposalFile In, Maybe AnyNonAssetScript)] -> CIO e (AnyProtocolUpdate era) readProposalProcedureFile (Featured cEraOnwards []) = let sbe = convert cEraOnwards diff --git a/cardano-cli/src/Cardano/CLI/Compatible/Transaction/ScriptWitness.hs b/cardano-cli/src/Cardano/CLI/Compatible/Transaction/ScriptWitness.hs index 23345de5f8..0e7423a616 100644 --- a/cardano-cli/src/Cardano/CLI/Compatible/Transaction/ScriptWitness.hs +++ b/cardano-cli/src/Cardano/CLI/Compatible/Transaction/ScriptWitness.hs @@ -28,7 +28,6 @@ import Cardano.Api , shelleyBasedEraConstraints , toAlonzoScriptLanguage ) -import Cardano.Api.Experimental qualified as Exp import Cardano.Api.Experimental.Plutus (fromPlutusSLanguage) import Cardano.Api.Experimental.Plutus qualified as Exp @@ -37,13 +36,11 @@ import Cardano.CLI.Compatible.Read import Cardano.CLI.EraBased.Script.Certificate.Type import Cardano.CLI.EraBased.Script.Read.Common (readScriptDataOrFile) import Cardano.CLI.EraBased.Script.Type - ( CliScriptWitnessError (..) - , NoPolicyId (..) - , OnDiskPlutusScriptCliArgs (..) - , ScriptRequirements (..) - , SimpleRefScriptCliArgs (..) + ( AnyNonAssetScript (..) + , CliScriptWitnessError (..) + , PlutusNonAssetScriptRequirements (..) + , SimpleScriptRequirements (..) ) -import Cardano.CLI.EraBased.Script.Type qualified as Exp import Cardano.CLI.Type.Common (AnySLanguage (..), CertificateFile) import Cardano.Ledger.Plutus.Language qualified as L @@ -51,7 +48,7 @@ import Control.Monad readCertificateScriptWitnesses :: ShelleyBasedEra era - -> [(CertificateFile, Maybe (ScriptRequirements Exp.CertItem))] + -> [(CertificateFile, Maybe AnyNonAssetScript)] -> CIO e [(CertificateFile, Maybe (CertificateScriptWitness era))] readCertificateScriptWitnesses sbe = mapM @@ -60,85 +57,81 @@ readCertificateScriptWitnesses sbe = ) readCertificateScriptWitness - :: ShelleyBasedEra era -> ScriptRequirements Exp.CertItem -> CIO e (CertificateScriptWitness era) + :: ShelleyBasedEra era -> AnyNonAssetScript -> CIO e (CertificateScriptWitness era) readCertificateScriptWitness sbe certScriptReq = case certScriptReq of - OnDiskSimpleScript scriptFp -> do - let sFp = unFile scriptFp - s <- - readFileSimpleScript sFp - case s of - SimpleScript ss -> do + AnyNonAssetScriptSimple simpleReq -> + case simpleReq of + OnDiskSimpleScript scriptFp -> do + let sFp = unFile scriptFp + s <- + readFileSimpleScript sFp + case s of + SimpleScript ss -> do + return $ + CertificateScriptWitness $ + SimpleScriptWitness (sbeToSimpleScriptLanguageInEra sbe) $ + SScript ss + ReferenceSimpleScript refTxIn -> return $ CertificateScriptWitness $ - SimpleScriptWitness (sbeToSimpleScriptLanguageInEra sbe) $ - SScript ss - OnDiskPlutusScript - (OnDiskPlutusScriptCliArgsNonSpending scriptFp redeemerFile execUnits) -> do - let plutusScriptFp = unFile scriptFp - plutusScript <- readFilePlutusScript plutusScriptFp - redeemer <- - fromExceptTCli $ - readScriptDataOrFile redeemerFile - case plutusScript of - AnyPlutusScript lang script -> do - let pScript = PScript script - sLangSupported <- - fromMaybeCli - ( PlutusScriptWitnessLanguageNotSupportedInEra - (toAlonzoScriptLanguage $ AnyPlutusScriptVersion lang) - (shelleyBasedEraConstraints sbe $ AnyShelleyBasedEra sbe) - ) - $ scriptLanguageSupportedInEra sbe - $ PlutusScriptLanguage lang - return $ - CertificateScriptWitness $ + SimpleScriptWitness + (sbeToSimpleScriptLanguageInEra sbe) + (SReferenceScript refTxIn) + AnyNonAssetScriptPlutus plutusReq -> + case plutusReq of + OnDiskPlutusNonAssetScript scriptFp redeemerFile execUnits -> do + let plutusScriptFp = unFile scriptFp + plutusScript <- readFilePlutusScript plutusScriptFp + redeemer <- + fromExceptTCli $ + readScriptDataOrFile redeemerFile + case plutusScript of + AnyPlutusScript lang script -> do + let pScript = PScript script + sLangSupported <- + fromMaybeCli + ( PlutusScriptWitnessLanguageNotSupportedInEra + (toAlonzoScriptLanguage $ AnyPlutusScriptVersion lang) + (shelleyBasedEraConstraints sbe $ AnyShelleyBasedEra sbe) + ) + $ scriptLanguageSupportedInEra sbe + $ PlutusScriptLanguage lang + return $ + CertificateScriptWitness $ + PlutusScriptWitness + sLangSupported + lang + pScript + NoScriptDatumForStake + redeemer + execUnits + ReferencePlutusNonAssetScript refTxIn (AnySLanguage lang) redeemerFile execUnits -> do + let pScript = PReferenceScript refTxIn + redeemer <- + fromExceptTCli $ + readScriptDataOrFile redeemerFile + sLangSupported <- + fromMaybeCli + ( PlutusScriptWitnessLanguageNotSupportedInEra + (L.plutusLanguage lang) + (shelleyBasedEraConstraints sbe $ AnyShelleyBasedEra sbe) + ) + $ scriptLanguageSupportedInEra sbe + $ obtainIsPlutusScriptLanguage (fromPlutusSLanguage lang) + $ PlutusScriptLanguage + $ Exp.fromPlutusSLanguage lang + + return $ + CertificateScriptWitness $ + obtainIsPlutusScriptLanguage (fromPlutusSLanguage lang) $ PlutusScriptWitness sLangSupported - lang + (Exp.fromPlutusSLanguage lang) pScript NoScriptDatumForStake redeemer execUnits - SimpleReferenceScript (SimpleRefScriptArgs refTxIn NoPolicyId) -> - return $ - CertificateScriptWitness $ - SimpleScriptWitness - (sbeToSimpleScriptLanguageInEra sbe) - (SReferenceScript refTxIn) - PlutusReferenceScript - ( PlutusRefScriptCliArgsNonSpending - refTxIn - (AnySLanguage lang) - Exp.NoPolicyId - redeemerFile - execUnits - ) -> do - let pScript = PReferenceScript refTxIn - redeemer <- - fromExceptTCli $ - readScriptDataOrFile redeemerFile - sLangSupported <- - fromMaybeCli - ( PlutusScriptWitnessLanguageNotSupportedInEra - (L.plutusLanguage lang) - (shelleyBasedEraConstraints sbe $ AnyShelleyBasedEra sbe) - ) - $ scriptLanguageSupportedInEra sbe - $ obtainIsPlutusScriptLanguage (fromPlutusSLanguage lang) - $ PlutusScriptLanguage - $ Exp.fromPlutusSLanguage lang - - return $ - CertificateScriptWitness $ - obtainIsPlutusScriptLanguage (fromPlutusSLanguage lang) $ - PlutusScriptWitness - sLangSupported - (Exp.fromPlutusSLanguage lang) - pScript - NoScriptDatumForStake - redeemer - execUnits obtainIsPlutusScriptLanguage :: PlutusScriptVersion lang diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Common/Option.hs b/cardano-cli/src/Cardano/CLI/EraBased/Common/Option.hs index 8941a0be70..78fe875122 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Common/Option.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Common/Option.hs @@ -21,7 +21,7 @@ import Cardano.CLI.EraBased.Script.Mint.Type import Cardano.CLI.EraBased.Script.Proposal.Type qualified as Proposing import Cardano.CLI.EraBased.Script.Spend.Type qualified as PlutusSpend import Cardano.CLI.EraBased.Script.Type -import Cardano.CLI.EraBased.Script.Type qualified as PlutusSpend +import Cardano.CLI.EraBased.Script.Type qualified as ScriptT import Cardano.CLI.EraBased.Script.Vote.Type qualified as Voting import Cardano.CLI.EraBased.Script.Withdrawal.Type qualified as Withdrawal import Cardano.CLI.EraBased.Transaction.Command (IncludeCurrentTreasuryValue (..)) @@ -954,7 +954,7 @@ pSimpleScriptOrPlutusSpendingScriptWitness -- ^ Potential deprecated script flag prefix -> String -- ^ Help text - -> Parser (ScriptRequirements TxInItem) + -> Parser AnySpendScript pSimpleScriptOrPlutusSpendingScriptWitness autoBalanceExecUnits scriptFlagPrefix scriptFlagPrefixDeprecated help = PlutusSpend.createSimpleOrPlutusScriptFromCliArgs <$> pScriptFor @@ -989,13 +989,13 @@ pScriptRedeemerOrFile scriptFlagPrefix = "The script redeemer file." pScriptDatumOrFileSpendingCip69 - :: String -> Parser PlutusSpend.ScriptDatumOrFileSpending + :: String -> Parser ScriptDatumOrFileSpending pScriptDatumOrFileSpendingCip69 scriptFlagPrefix = datumOptional where datumOptional = asum - [ PlutusSpend.PotentialDatum + [ ScriptT.PotentialDatum <$> optional datumParser , pInlineDatumPresent ] @@ -1006,9 +1006,9 @@ pScriptDatumOrFileSpendingCip69 scriptFlagPrefix = "The script datum." "The script datum file." - pInlineDatumPresent :: Parser PlutusSpend.ScriptDatumOrFileSpending + pInlineDatumPresent :: Parser ScriptDatumOrFileSpending pInlineDatumPresent = - flag' PlutusSpend.InlineDatum $ + flag' ScriptT.InlineDatum $ mconcat [ long (scriptFlagPrefix ++ "-inline-datum-present") , Opt.help "Inline datum present at transaction input." @@ -1079,19 +1079,19 @@ pScriptDataOrFile dataFlagPrefix helpTextForValue helpTextForFile = pVoteFiles :: BalanceTxExecUnits - -> Parser [(VoteFile In, Maybe (ScriptRequirements VoterItem))] + -> Parser [(VoteFile In, Maybe AnyNonAssetScript)] pVoteFiles bExUnits = many $ pVoteFile bExUnits pVoteFile :: BalanceTxExecUnits - -> Parser (VoteFile In, Maybe (ScriptRequirements VoterItem)) + -> Parser (VoteFile In, Maybe AnyNonAssetScript) pVoteFile balExUnits = (,) <$> pFileInDirection "vote-file" "Filepath of the vote." <*> optional (pVoteScriptOrReferenceScriptWitness balExUnits) where pVoteScriptOrReferenceScriptWitness - :: BalanceTxExecUnits -> Parser (ScriptRequirements VoterItem) + :: BalanceTxExecUnits -> Parser AnyNonAssetScript pVoteScriptOrReferenceScriptWitness bExUnits = pVoteScriptWitness bExUnits @@ -1105,7 +1105,7 @@ pVoteScriptWitness -> String -> Maybe String -> String - -> Parser (ScriptRequirements VoterItem) + -> Parser AnyNonAssetScript pVoteScriptWitness bExecUnits scriptFlagPrefix scriptFlagPrefixDeprecated help = Voting.createSimpleOrPlutusScriptFromCliArgs <$> pScriptFor @@ -1122,7 +1122,7 @@ pVoteScriptWitness bExecUnits scriptFlagPrefix scriptFlagPrefixDeprecated help = ) pVoteReferencePlutusScriptWitness - :: String -> BalanceTxExecUnits -> Parser (ScriptRequirements VoterItem) + :: String -> BalanceTxExecUnits -> Parser AnyNonAssetScript pVoteReferencePlutusScriptWitness prefix autoBalanceExecUnits = let appendedPrefix = prefix ++ "-" in Voting.createPlutusReferenceScriptFromCliArgs @@ -1136,20 +1136,20 @@ pVoteReferencePlutusScriptWitness prefix autoBalanceExecUnits = pProposalFiles :: BalanceTxExecUnits - -> Parser [(ProposalFile In, Maybe (ScriptRequirements ProposalItem))] + -> Parser [(ProposalFile In, Maybe AnyNonAssetScript)] pProposalFiles balExUnits = many (pProposalFile balExUnits) pProposalFile :: BalanceTxExecUnits - -> Parser (ProposalFile In, Maybe (ScriptRequirements ProposalItem)) + -> Parser (ProposalFile In, Maybe AnyNonAssetScript) pProposalFile balExUnits = (,) <$> pFileInDirection "proposal-file" "Filepath of the proposal." <*> optional (pProposingScriptOrReferenceScriptWitness balExUnits) where pProposingScriptOrReferenceScriptWitness - :: BalanceTxExecUnits -> Parser (ScriptRequirements ProposalItem) + :: BalanceTxExecUnits -> Parser AnyNonAssetScript pProposingScriptOrReferenceScriptWitness bExUnits = pProposalScriptWitness bExUnits @@ -1163,7 +1163,7 @@ pProposalScriptWitness -> String -> Maybe String -> String - -> Parser (ScriptRequirements ProposalItem) + -> Parser AnyNonAssetScript pProposalScriptWitness bExecUnits scriptFlagPrefix scriptFlagPrefixDeprecated help = Proposing.createSimpleOrPlutusScriptFromCliArgs <$> pScriptFor @@ -1180,7 +1180,7 @@ pProposalScriptWitness bExecUnits scriptFlagPrefix scriptFlagPrefixDeprecated he ) pProposalReferencePlutusScriptWitness - :: String -> BalanceTxExecUnits -> Parser (ScriptRequirements ProposalItem) + :: String -> BalanceTxExecUnits -> Parser AnyNonAssetScript pProposalReferencePlutusScriptWitness prefix autoBalanceExecUnits = let appendedPrefix = prefix ++ "-" in Proposing.createPlutusReferenceScriptFromCliArgs @@ -1343,7 +1343,7 @@ pTxBuildOutputOptions = pCertificateFile :: BalanceTxExecUnits - -> Parser (CertificateFile, Maybe (ScriptRequirements CertItem)) + -> Parser (CertificateFile, Maybe AnyNonAssetScript) pCertificateFile balanceExecUnits = (,) <$> ( fmap CertificateFile $ @@ -1355,7 +1355,7 @@ pCertificateFile balanceExecUnits = <*> optional (pCertifyingScriptOrReferenceScriptWit balanceExecUnits) where pCertifyingScriptOrReferenceScriptWit - :: BalanceTxExecUnits -> Parser (ScriptRequirements CertItem) + :: BalanceTxExecUnits -> Parser AnyNonAssetScript pCertifyingScriptOrReferenceScriptWit bExecUnits = pCertificatePlutusScriptWitness balanceExecUnits @@ -1372,7 +1372,7 @@ pCertificateFile balanceExecUnits = ] pCertificatePlutusScriptWitness - :: BalanceTxExecUnits -> String -> Maybe String -> String -> Parser (ScriptRequirements CertItem) + :: BalanceTxExecUnits -> String -> Maybe String -> String -> Parser AnyNonAssetScript pCertificatePlutusScriptWitness bExecUnits scriptFlagPrefix scriptFlagPrefixDeprecated help = Certifying.createSimpleOrPlutusScriptFromCliArgs <$> pScriptFor @@ -1389,7 +1389,7 @@ pCertificatePlutusScriptWitness bExecUnits scriptFlagPrefix scriptFlagPrefixDepr ) pCertificateReferencePlutusScriptWitness - :: String -> BalanceTxExecUnits -> Parser (ScriptRequirements CertItem) + :: String -> BalanceTxExecUnits -> Parser AnyNonAssetScript pCertificateReferencePlutusScriptWitness prefix autoBalanceExecUnits = let appendedPrefix = prefix ++ "-" in Certifying.createPlutusReferenceScriptFromCliArgs @@ -1459,7 +1459,7 @@ pWithdrawal -> Parser ( StakeAddress , Lovelace - , Maybe (ScriptRequirements WithdrawalItem) + , Maybe AnyNonAssetScript ) pWithdrawal balance = (\(stakeAddr, lovelace) maybeScriptFp -> (stakeAddr, lovelace, maybeScriptFp)) @@ -1471,7 +1471,7 @@ pWithdrawal balance = ) <*> optional pWithdrawalScriptOrReferenceScriptWit where - pWithdrawalScriptOrReferenceScriptWit :: Parser (ScriptRequirements WithdrawalItem) + pWithdrawalScriptOrReferenceScriptWit :: Parser AnyNonAssetScript pWithdrawalScriptOrReferenceScriptWit = pWithdrawalScriptWitness balance @@ -1497,7 +1497,7 @@ pWithdrawalScriptWitness -> String -> Maybe String -> String - -> Parser (ScriptRequirements WithdrawalItem) + -> Parser AnyNonAssetScript pWithdrawalScriptWitness bExecUnits scriptFlagPrefix scriptFlagPrefixDeprecated help = Withdrawal.createSimpleOrPlutusScriptFromCliArgs <$> pScriptFor @@ -1514,7 +1514,7 @@ pWithdrawalScriptWitness bExecUnits scriptFlagPrefix scriptFlagPrefixDeprecated ) pWithdrawalReferencePlutusScriptWitness - :: String -> BalanceTxExecUnits -> Parser (ScriptRequirements WithdrawalItem) + :: String -> BalanceTxExecUnits -> Parser AnyNonAssetScript pWithdrawalReferencePlutusScriptWitness prefix autoBalanceExecUnits = let appendedPrefix = prefix ++ "-" in Withdrawal.createPlutusReferenceScriptFromCliArgs @@ -1965,7 +1965,7 @@ pTxSubmitFile = parseFilePath "tx-file" "Filepath of the transaction you intend pTxIn :: BalanceTxExecUnits - -> Parser (TxIn, Maybe (ScriptRequirements TxInItem)) + -> Parser (TxIn, Maybe AnySpendScript) pTxIn balance = (,) <$> Opt.option @@ -1980,13 +1980,13 @@ pTxIn balance = <|> pOnDiskSimpleOrPlutusScriptWitness ) where - pSimpleReferenceSpendingScriptWitess :: Parser (ScriptRequirements TxInItem) + pSimpleReferenceSpendingScriptWitess :: Parser AnySpendScript pSimpleReferenceSpendingScriptWitess = PlutusSpend.createSimpleReferenceScriptFromCliArgs <$> pReferenceTxIn "simple-script-" "simple" pPlutusReferenceSpendScriptWitness - :: BalanceTxExecUnits -> Parser (ScriptRequirements TxInItem) + :: BalanceTxExecUnits -> Parser AnySpendScript pPlutusReferenceSpendScriptWitness autoBalanceExecUnits = PlutusSpend.createPlutusReferenceScriptFromCliArgs <$> pReferenceTxIn "spending-" "plutus" @@ -1998,7 +1998,7 @@ pTxIn balance = ManualBalance -> pExecutionUnits "spending-reference-tx-in" ) - pOnDiskSimpleOrPlutusScriptWitness :: Parser (ScriptRequirements TxInItem) + pOnDiskSimpleOrPlutusScriptWitness :: Parser AnySpendScript pOnDiskSimpleOrPlutusScriptWitness = pSimpleScriptOrPlutusSpendingScriptWitness balance @@ -2167,7 +2167,7 @@ pMintMultiAsset :: forall era . IsEra era => BalanceTxExecUnits - -> Parser (Maybe (L.MultiAsset, [ScriptRequirements MintItem])) + -> Parser (Maybe (L.MultiAsset, [AnyMintScript])) pMintMultiAsset balanceExecUnits = let mintAssets = Opt.option @@ -2185,20 +2185,20 @@ pMintMultiAsset balanceExecUnits = ) in Just <$> ((,) <$> mintAssets <*> mintWitnesses) where - pMintingScript :: Parser (ScriptRequirements MintItem) + pMintingScript :: Parser AnyMintScript pMintingScript = createSimpleOrPlutusScriptFromCliArgs <$> pMintScriptFile <*> optional (pPlutusMintScriptWitnessData WitCtxMint balanceExecUnits) - pSimpleReferenceMintingScriptWitness :: Parser (ScriptRequirements MintItem) + pSimpleReferenceMintingScriptWitness :: Parser AnyMintScript pSimpleReferenceMintingScriptWitness = createSimpleReferenceScriptFromCliArgs <$> pReferenceTxIn "simple-minting-script-" "simple" <*> pPolicyId pPlutusMintReferenceScriptWitnessFiles - :: BalanceTxExecUnits -> Parser (ScriptRequirements MintItem) + :: BalanceTxExecUnits -> Parser AnyMintScript pPlutusMintReferenceScriptWitnessFiles autoBalanceExecUnits = createPlutusReferenceScriptFromCliArgs <$> pReferenceTxIn "mint-" "plutus" diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Certificate/Read.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Certificate/Read.hs index 8e9f13fc53..d1fc4f2c85 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Certificate/Read.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Certificate/Read.hs @@ -1,6 +1,5 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} -{-# LANGUAGE GADTs #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} @@ -13,7 +12,6 @@ where import Cardano.Api (File (..)) import Cardano.Api.Experimental -import Cardano.Api.Experimental qualified as Exp import Cardano.Api.Experimental.AnyScriptWitness import Cardano.Api.Experimental.Plutus qualified as Exp @@ -27,65 +25,57 @@ import Cardano.CLI.Type.Common (AnySLanguage (..), CertificateFile) readCertificateScriptWitness :: forall era e . IsEra era - => ScriptRequirements Exp.CertItem + => AnyNonAssetScript -> CIO e (AnyWitness (LedgerEra era)) -readCertificateScriptWitness (OnDiskSimpleScript scriptFp) = do - let sFp = unFile scriptFp - AnySimpleScriptWitness . SScript <$> readFileSimpleScript sFp useEra -readCertificateScriptWitness - ( OnDiskPlutusScript - (OnDiskPlutusScriptCliArgsNonSpending scriptFp redeemerFile execUnits) - ) = do - let plutusScriptFp = unFile scriptFp - Exp.AnyPlutusScript script <- - readFilePlutusScript @_ @era plutusScriptFp +readCertificateScriptWitness (AnyNonAssetScriptSimple simpleReq) = + case simpleReq of + OnDiskSimpleScript scriptFp -> do + let sFp = unFile scriptFp + AnySimpleScriptWitness . SScript <$> readFileSimpleScript sFp useEra + ReferenceSimpleScript refTxin -> + return . AnySimpleScriptWitness $ SReferenceScript refTxin +readCertificateScriptWitness (AnyNonAssetScriptPlutus plutusReq) = + case plutusReq of + OnDiskPlutusNonAssetScript scriptFp redeemerFile execUnits -> do + let plutusScriptFp = unFile scriptFp + Exp.AnyPlutusScript script <- + readFilePlutusScript @_ @era plutusScriptFp - let - lang = Exp.plutusScriptInEraSLanguage script - script' = PScript script + let + lang = Exp.plutusScriptInEraSLanguage script + script' = PScript script - redeemer <- - fromExceptTCli $ - readScriptDataOrFile redeemerFile + redeemer <- + fromExceptTCli $ + readScriptDataOrFile redeemerFile - let sw = - PlutusScriptWitness - lang - script' - NoScriptDatum - redeemer - execUnits - return $ - AnyPlutusScriptWitness $ - AnyPlutusCertifyingScriptWitness sw -readCertificateScriptWitness - ( PlutusReferenceScript - ( PlutusRefScriptCliArgsNonSpending - refInput - (AnySLanguage lang) - NoPolicyId - redeemerFile - execUnits - ) - ) = do - redeemer <- - fromExceptTCli $ - readScriptDataOrFile redeemerFile - return $ - AnyPlutusScriptWitness $ - AnyPlutusCertifyingScriptWitness $ - PlutusScriptWitness - lang - (PReferenceScript refInput) - NoScriptDatum - redeemer - execUnits -readCertificateScriptWitness (SimpleReferenceScript (SimpleRefScriptArgs refTxin NoPolicyId)) = - return . AnySimpleScriptWitness $ SReferenceScript refTxin + let sw = + PlutusScriptWitness + lang + script' + NoScriptDatum + redeemer + execUnits + return $ + AnyPlutusScriptWitness $ + AnyPlutusCertifyingScriptWitness sw + ReferencePlutusNonAssetScript refInput (AnySLanguage lang) redeemerFile execUnits -> do + redeemer <- + fromExceptTCli $ + readScriptDataOrFile redeemerFile + return $ + AnyPlutusScriptWitness $ + AnyPlutusCertifyingScriptWitness $ + PlutusScriptWitness + lang + (PReferenceScript refInput) + NoScriptDatum + redeemer + execUnits readCertificateScriptWitnesses :: IsEra era - => [(CertificateFile, Maybe (ScriptRequirements Exp.CertItem))] + => [(CertificateFile, Maybe AnyNonAssetScript)] -> CIO e [(CertificateFile, AnyWitness (LedgerEra era))] readCertificateScriptWitnesses = mapM diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Certificate/Type.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Certificate/Type.hs index 3ab5c4a6e8..3e8b8df9dc 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Certificate/Type.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Certificate/Type.hs @@ -1,18 +1,13 @@ {-# LANGUAGE DataKinds #-} -{-# LANGUAGE FlexibleContexts #-} -{-# LANGUAGE GADTs #-} -{-# LANGUAGE KindSignatures #-} module Cardano.CLI.EraBased.Script.Certificate.Type ( CertificateScriptWitness (..) - , PlutusRefScriptCliArgs (..) , createSimpleOrPlutusScriptFromCliArgs , createPlutusReferenceScriptFromCliArgs ) where import Cardano.Api -import Cardano.Api.Experimental import Cardano.CLI.EraBased.Script.Type import Cardano.CLI.Type.Common (AnySLanguage (..), ScriptDataOrFile) @@ -24,18 +19,17 @@ newtype CertificateScriptWitness era createSimpleOrPlutusScriptFromCliArgs :: File ScriptInAnyLang In -> Maybe (ScriptDataOrFile, ExecutionUnits) - -> ScriptRequirements CertItem + -> AnyNonAssetScript createSimpleOrPlutusScriptFromCliArgs scriptFp (Just (redeemer, execUnits)) = - OnDiskPlutusScript $ OnDiskPlutusScriptCliArgsNonSpending scriptFp redeemer execUnits + AnyNonAssetScriptPlutus $ OnDiskPlutusNonAssetScript scriptFp redeemer execUnits createSimpleOrPlutusScriptFromCliArgs scriptFp Nothing = - OnDiskSimpleScript scriptFp + AnyNonAssetScriptSimple $ OnDiskSimpleScript scriptFp createPlutusReferenceScriptFromCliArgs :: TxIn -> AnySLanguage -> ScriptDataOrFile -> ExecutionUnits - -> ScriptRequirements CertItem + -> AnyNonAssetScript createPlutusReferenceScriptFromCliArgs txIn l redeemer execUnits = - PlutusReferenceScript $ - PlutusRefScriptCliArgsNonSpending txIn l NoPolicyId redeemer execUnits + AnyNonAssetScriptPlutus $ ReferencePlutusNonAssetScript txIn l redeemer execUnits diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Mint/Read.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Mint/Read.hs index f5ad423248..01e7c73211 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Mint/Read.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Mint/Read.hs @@ -1,6 +1,5 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} -{-# LANGUAGE GADTs #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} @@ -27,64 +26,52 @@ import Cardano.Ledger.Core qualified as L readMintScriptWitness :: forall era e . Exp.IsEra era - => ScriptRequirements Exp.MintItem -> CIO e (PolicyId, AnyScriptWitness (Exp.LedgerEra era)) -readMintScriptWitness (OnDiskSimpleScript scriptFp) = do + => AnyMintScript -> CIO e (PolicyId, AnyScriptWitness (Exp.LedgerEra era)) +readMintScriptWitness (AnyMintScriptSimpleOnDisk scriptFp) = do let sFp = unFile scriptFp s <- readFileSimpleScript sFp (Exp.useEra @era) let sHash :: L.ScriptHash = Exp.hashSimpleScript (s :: Exp.SimpleScript (Exp.LedgerEra era)) return (fromMaryPolicyID $ L.PolicyID sHash, AnyScriptWitnessSimple $ Exp.SScript s) -readMintScriptWitness - ( OnDiskPlutusScript - (OnDiskPlutusScriptCliArgsNonSpending scriptFp redeemerFile execUnits) - ) = do - let plutusScriptFp = unFile scriptFp - Exp.AnyPlutusScript script <- - readFilePlutusScript @_ @era plutusScriptFp - let polId = fromMaryPolicyID . L.PolicyID $ L.hashPlutusScriptInEra script - redeemer <- - fromExceptTCli $ - readScriptDataOrFile redeemerFile - - let pScript = Exp.PScript script - lang = Exp.plutusScriptInEraSLanguage script - let sw = - Exp.PlutusScriptWitness - lang - pScript - Exp.NoScriptDatum - redeemer - execUnits - return - ( polId - , AnyScriptWitnessPlutus $ - AnyPlutusMintingScriptWitness sw - ) -readMintScriptWitness - ( PlutusReferenceScript - ( PlutusRefScriptCliArgsNonSpending - refTxIn - (AnySLanguage lang) - polId - redeemerFile - execUnits - ) - ) = do - redeemer <- - fromExceptTCli $ readScriptDataOrFile redeemerFile - - let sw = - Exp.PlutusScriptWitness - lang - (Exp.PReferenceScript refTxIn) - Exp.NoScriptDatum - redeemer - execUnits - return - ( polId - , AnyScriptWitnessPlutus $ - AnyPlutusMintingScriptWitness - sw - ) -readMintScriptWitness (SimpleReferenceScript (SimpleRefScriptArgs refTxIn polId)) = +readMintScriptWitness (AnyMintScriptSimpleRef refTxIn polId) = return (polId, AnyScriptWitnessSimple $ Exp.SReferenceScript refTxIn) +readMintScriptWitness (AnyMintScriptPlutus plutusReq) = + case plutusReq of + OnDiskPlutusMintingScript scriptFp redeemerFile execUnits -> do + let plutusScriptFp = unFile scriptFp + Exp.AnyPlutusScript script <- + readFilePlutusScript @_ @era plutusScriptFp + let polId = fromMaryPolicyID . L.PolicyID $ L.hashPlutusScriptInEra script + redeemer <- + fromExceptTCli $ + readScriptDataOrFile redeemerFile + let pScript = Exp.PScript script + lang = Exp.plutusScriptInEraSLanguage script + sw = + Exp.PlutusScriptWitness + lang + pScript + Exp.NoScriptDatum + redeemer + execUnits + return + ( polId + , AnyScriptWitnessPlutus $ + AnyPlutusMintingScriptWitness sw + ) + ReferencePlutusMintingScript refTxIn (AnySLanguage lang) polId redeemerFile execUnits -> do + redeemer <- + fromExceptTCli $ readScriptDataOrFile redeemerFile + let sw = + Exp.PlutusScriptWitness + lang + (Exp.PReferenceScript refTxIn) + Exp.NoScriptDatum + redeemer + execUnits + return + ( polId + , AnyScriptWitnessPlutus $ + AnyPlutusMintingScriptWitness + sw + ) diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Mint/Type.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Mint/Type.hs index 4a38bc81c4..3f696fff41 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Mint/Type.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Mint/Type.hs @@ -1,7 +1,4 @@ {-# LANGUAGE DataKinds #-} -{-# LANGUAGE FlexibleContexts #-} -{-# LANGUAGE GADTs #-} -{-# LANGUAGE ScopedTypeVariables #-} module Cardano.CLI.EraBased.Script.Mint.Type ( createSimpleOrPlutusScriptFromCliArgs @@ -12,7 +9,6 @@ module Cardano.CLI.EraBased.Script.Mint.Type where import Cardano.Api -import Cardano.Api.Experimental import Cardano.CLI.EraBased.Script.Type import Cardano.CLI.Type.Common (AnySLanguage (..), ScriptDataOrFile) @@ -30,19 +26,18 @@ data MintScriptWitnessWithPolicyId era createSimpleOrPlutusScriptFromCliArgs :: File ScriptInAnyLang In -> Maybe (ScriptDataOrFile, ExecutionUnits) - -> ScriptRequirements MintItem + -> AnyMintScript createSimpleOrPlutusScriptFromCliArgs scriptFp Nothing = - OnDiskSimpleScript scriptFp + AnyMintScriptSimpleOnDisk scriptFp createSimpleOrPlutusScriptFromCliArgs scriptFp (Just (redeemerFile, execUnits)) = - OnDiskPlutusScript $ - OnDiskPlutusScriptCliArgsNonSpending scriptFp redeemerFile execUnits + AnyMintScriptPlutus $ OnDiskPlutusMintingScript scriptFp redeemerFile execUnits createSimpleReferenceScriptFromCliArgs :: TxIn -> PolicyId - -> ScriptRequirements MintItem -createSimpleReferenceScriptFromCliArgs txin polid = - SimpleReferenceScript $ SimpleRefScriptArgs txin polid + -> AnyMintScript +createSimpleReferenceScriptFromCliArgs txin polId = + AnyMintScriptSimpleRef txin polId createPlutusReferenceScriptFromCliArgs :: TxIn @@ -50,7 +45,7 @@ createPlutusReferenceScriptFromCliArgs -> ScriptDataOrFile -> ExecutionUnits -> PolicyId - -> ScriptRequirements MintItem -createPlutusReferenceScriptFromCliArgs txin scriptVersion scriptData execUnits polid = - PlutusReferenceScript $ - PlutusRefScriptCliArgsNonSpending txin scriptVersion polid scriptData execUnits + -> AnyMintScript +createPlutusReferenceScriptFromCliArgs txin scriptVersion scriptData execUnits polId = + AnyMintScriptPlutus $ + ReferencePlutusMintingScript txin scriptVersion polId scriptData execUnits diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Proposal/Read.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Proposal/Read.hs index 13a566c510..f411dacda6 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Proposal/Read.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Proposal/Read.hs @@ -1,6 +1,5 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} -{-# LANGUAGE GADTs #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} @@ -20,7 +19,6 @@ import Cardano.Api.Experimental.AnyScriptWitness import Cardano.Api.Experimental.Plutus qualified as Exp import Cardano.CLI.Compatible.Exception -import Cardano.CLI.EraBased.Script.Proposal.Type import Cardano.CLI.EraBased.Script.Read.Common import Cardano.CLI.EraBased.Script.Type import Cardano.CLI.Read @@ -29,7 +27,7 @@ import Cardano.CLI.Type.Common readProposalScriptWitness :: forall e era . Exp.IsEra era - => (ProposalFile In, Maybe (ScriptRequirements Exp.ProposalItem)) + => (ProposalFile In, Maybe AnyNonAssetScript) -> CIO e (Proposal era, Exp.AnyWitness (Exp.LedgerEra era)) readProposalScriptWitness (propFp, Nothing) = do proposal <- @@ -44,68 +42,60 @@ readProposalScriptWitness (propFp, Just certScriptReq) = fromEitherIOCli @(FileError TextEnvelopeError) $ readFileTextEnvelope propFp case certScriptReq of - OnDiskSimpleScript scriptFp -> do - let sFp = unFile scriptFp - s <- - Exp.AnySimpleScriptWitness . Exp.SScript <$> readFileSimpleScript sFp (Exp.useEra @era) + AnyNonAssetScriptSimple simpleReq -> + case simpleReq of + OnDiskSimpleScript scriptFp -> do + let sFp = unFile scriptFp + s <- + Exp.AnySimpleScriptWitness . Exp.SScript <$> readFileSimpleScript sFp (Exp.useEra @era) + return (proposal, s) + ReferenceSimpleScript refTxIn -> + return + ( proposal + , Exp.AnySimpleScriptWitness $ Exp.SReferenceScript refTxIn + ) + AnyNonAssetScriptPlutus plutusReq -> + case plutusReq of + OnDiskPlutusNonAssetScript scriptFp redeemerFile execUnits -> do + let plutusScriptFp = unFile scriptFp + Exp.AnyPlutusScript plutusScript <- + readFilePlutusScript @_ @era plutusScriptFp + let lang = Exp.plutusScriptInEraSLanguage plutusScript + redeemer <- + fromExceptTCli $ + readScriptDataOrFile redeemerFile - return - ( proposal - , s - ) - OnDiskPlutusScript - (OnDiskPlutusScriptCliArgsNonSpending scriptFp redeemerFile execUnits) -> do - let plutusScriptFp = unFile scriptFp - Exp.AnyPlutusScript plutusScript <- - readFilePlutusScript @_ @era plutusScriptFp - let lang = Exp.plutusScriptInEraSLanguage plutusScript - redeemer <- - fromExceptTCli $ - readScriptDataOrFile redeemerFile + let pScript = Exp.PScript plutusScript + sw = + Exp.PlutusScriptWitness + lang + pScript + Exp.NoScriptDatum + redeemer + execUnits + return + ( proposal + , Exp.AnyPlutusScriptWitness $ + AnyPlutusProposingScriptWitness sw + ) + ReferencePlutusNonAssetScript refTxIn (AnySLanguage lang) redeemerFile execUnits -> do + let pScript = Exp.PReferenceScript refTxIn + redeemer <- + fromExceptTCli $ + readScriptDataOrFile redeemerFile - let pScript = Exp.PScript plutusScript - sw = - Exp.PlutusScriptWitness - lang - pScript - Exp.NoScriptDatum - redeemer - execUnits - return - ( proposal - , Exp.AnyPlutusScriptWitness $ - AnyPlutusProposingScriptWitness sw - ) - SimpleReferenceScript (SimpleRefScriptArgs refTxIn NoPolicyId) -> - return - ( proposal - , Exp.AnySimpleScriptWitness $ Exp.SReferenceScript refTxIn - ) - PlutusReferenceScript - ( PlutusRefScriptCliArgsNonSpending - refTxIn - (AnySLanguage lang) - NoPolicyId - redeemerFile - execUnits - ) -> do - let pScript = Exp.PReferenceScript refTxIn - redeemer <- - fromExceptTCli $ - readScriptDataOrFile redeemerFile - - return - ( proposal - , Exp.AnyPlutusScriptWitness $ - AnyPlutusProposingScriptWitness - ( Exp.PlutusScriptWitness - lang - pScript - Exp.NoScriptDatum - redeemer - execUnits - ) - ) + return + ( proposal + , Exp.AnyPlutusScriptWitness $ + AnyPlutusProposingScriptWitness + ( Exp.PlutusScriptWitness + lang + pScript + Exp.NoScriptDatum + redeemer + execUnits + ) + ) newtype ProposalError = ProposalErrorFile (FileError CliScriptWitnessError) @@ -116,13 +106,13 @@ instance Error ProposalError where readProposal :: Exp.IsEra era - => (ProposalFile In, Maybe (ScriptRequirements Exp.ProposalItem)) + => (ProposalFile In, Maybe AnyNonAssetScript) -> CIO e (Proposal era, Exp.AnyWitness (Exp.LedgerEra era)) readProposal (fp, mScriptWit) = do readProposalScriptWitness (fp, mScriptWit) readTxGovernanceActions :: Exp.IsEra era - => [(ProposalFile In, Maybe (ScriptRequirements Exp.ProposalItem))] + => [(ProposalFile In, Maybe AnyNonAssetScript)] -> CIO e [(Proposal era, Exp.AnyWitness (Exp.LedgerEra era))] readTxGovernanceActions = mapM readProposal diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Proposal/Type.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Proposal/Type.hs index 9becfd7424..4077ce82f2 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Proposal/Type.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Proposal/Type.hs @@ -1,16 +1,12 @@ {-# LANGUAGE DataKinds #-} -{-# LANGUAGE FlexibleContexts #-} -{-# LANGUAGE GADTs #-} module Cardano.CLI.EraBased.Script.Proposal.Type - ( PlutusRefScriptCliArgs (..) - , createSimpleOrPlutusScriptFromCliArgs + ( createSimpleOrPlutusScriptFromCliArgs , createPlutusReferenceScriptFromCliArgs ) where import Cardano.Api -import Cardano.Api.Experimental import Cardano.CLI.EraBased.Script.Type import Cardano.CLI.Type.Common (AnySLanguage (..), ScriptDataOrFile) @@ -18,18 +14,17 @@ import Cardano.CLI.Type.Common (AnySLanguage (..), ScriptDataOrFile) createSimpleOrPlutusScriptFromCliArgs :: File ScriptInAnyLang In -> Maybe (ScriptDataOrFile, ExecutionUnits) - -> ScriptRequirements ProposalItem + -> AnyNonAssetScript createSimpleOrPlutusScriptFromCliArgs scriptFp (Just (redeemer, execUnits)) = - OnDiskPlutusScript $ OnDiskPlutusScriptCliArgsNonSpending scriptFp redeemer execUnits + AnyNonAssetScriptPlutus $ OnDiskPlutusNonAssetScript scriptFp redeemer execUnits createSimpleOrPlutusScriptFromCliArgs scriptFp Nothing = - OnDiskSimpleScript scriptFp + AnyNonAssetScriptSimple $ OnDiskSimpleScript scriptFp createPlutusReferenceScriptFromCliArgs :: TxIn -> AnySLanguage -> ScriptDataOrFile -> ExecutionUnits - -> ScriptRequirements ProposalItem + -> AnyNonAssetScript createPlutusReferenceScriptFromCliArgs txIn anySLang redeemer execUnits = - PlutusReferenceScript $ - PlutusRefScriptCliArgsNonSpending txIn anySLang NoPolicyId redeemer execUnits + AnyNonAssetScriptPlutus $ ReferencePlutusNonAssetScript txIn anySLang redeemer execUnits diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Spend/Read.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Spend/Read.hs index 57c10f59a0..d84f57d3f8 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Spend/Read.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Spend/Read.hs @@ -45,58 +45,52 @@ instance Error CliSpendScriptWitnessError where readSpendScriptWitnesses :: IsEra era - => [(TxIn, Maybe (ScriptRequirements TxInItem))] + => [(TxIn, Maybe AnySpendScript)] -> CIO e [(TxIn, Exp.AnyWitness (LedgerEra era))] readSpendScriptWitnesses = mapM (\(txin, mWit) -> (txin,) <$> readSpendScriptWitness mWit) readSpendScriptWitness :: forall era e - . IsEra era => Maybe (ScriptRequirements TxInItem) -> CIO e (Exp.AnyWitness (LedgerEra era)) + . IsEra era => Maybe AnySpendScript -> CIO e (Exp.AnyWitness (LedgerEra era)) readSpendScriptWitness Nothing = return Exp.AnyKeyWitnessPlaceholder readSpendScriptWitness (Just spendScriptReq) = case spendScriptReq of - OnDiskSimpleScript simpleFp -> do - let sFp = unFile simpleFp - Exp.AnySimpleScriptWitness . Exp.SScript <$> readFileSimpleScript sFp (useEra @era) - OnDiskPlutusScript - (OnDiskPlutusScriptCliArgsSpending plutusScriptFp mScriptDatum redeemerFile execUnits) -> do - anyScript <- - readFilePlutusScript @_ @era (unFile plutusScriptFp) - case anyScript of - Exp.AnyPlutusScript script -> do - redeemer <- - fromExceptTCli $ - readScriptDataOrFile redeemerFile - let lang = Exp.plutusScriptInEraSLanguage script - mDatum <- handlePotentialScriptDatum mScriptDatum lang - - let pScript = Exp.PScript script - plutusScriptWitness = Exp.PlutusScriptWitness lang pScript mDatum redeemer execUnits - return $ - Exp.AnyPlutusScriptWitness $ - Exp.AnyPlutusSpendingScriptWitness $ - Exp.createPlutusSpendingScriptWitness lang plutusScriptWitness - SimpleReferenceScript (SimpleRefScriptArgs refTxIn NoPolicyId) -> - return $ - Exp.AnySimpleScriptWitness $ - Exp.SReferenceScript refTxIn - PlutusReferenceScript - (PlutusRefScriptCliArgsSpending refTxIn (AnySLanguage lang) mScriptDatum redeemerFile execUnits) -> do - let pRefScript = Exp.PReferenceScript refTxIn - redeemer <- - fromExceptTCli $ readScriptDataOrFile redeemerFile - - mDatum <- handlePotentialScriptDatum mScriptDatum lang - let plutusScriptWitness = Exp.PlutusScriptWitness lang pRefScript mDatum redeemer execUnits - return $ - Exp.AnyPlutusScriptWitness $ - Exp.AnyPlutusSpendingScriptWitness $ - Exp.createPlutusSpendingScriptWitness lang plutusScriptWitness - OnDiskPlutusScript (OnDiskPlutusScriptCliArgsNonSpending{}) -> - error "readSpendScriptWitness: impossible - non-spending args used in spending context" - PlutusReferenceScript (PlutusRefScriptCliArgsNonSpending{}) -> - error "readSpendScriptWitness: impossible - non-spending ref script args used in spending context" + AnySpendScriptSimple simpleReq -> + case simpleReq of + OnDiskSimpleScript simpleFp -> do + let sFp = unFile simpleFp + Exp.AnySimpleScriptWitness . Exp.SScript <$> readFileSimpleScript sFp (useEra @era) + ReferenceSimpleScript refTxIn -> + return $ Exp.AnySimpleScriptWitness $ Exp.SReferenceScript refTxIn + AnySpendScriptPlutus plutusReq -> + case plutusReq of + OnDiskPlutusSpendingScript plutusScriptFp mScriptDatum redeemerFile execUnits -> do + anyScript <- + readFilePlutusScript @_ @era (unFile plutusScriptFp) + case anyScript of + Exp.AnyPlutusScript script -> do + redeemer <- + fromExceptTCli $ + readScriptDataOrFile redeemerFile + let lang = Exp.plutusScriptInEraSLanguage script + mDatum <- handlePotentialScriptDatum mScriptDatum lang + let pScript = Exp.PScript script + plutusScriptWitness = Exp.PlutusScriptWitness lang pScript mDatum redeemer execUnits + return $ + Exp.AnyPlutusScriptWitness $ + Exp.AnyPlutusSpendingScriptWitness $ + Exp.createPlutusSpendingScriptWitness lang plutusScriptWitness + ReferencePlutusSpendingScript refTxIn (AnySLanguage lang) mScriptDatum redeemerFile execUnits -> do + let pRefScript = Exp.PReferenceScript refTxIn + redeemer <- + fromExceptTCli $ readScriptDataOrFile redeemerFile + mDatum <- handlePotentialScriptDatum mScriptDatum lang + let plutusScriptWitness = Exp.PlutusScriptWitness lang pRefScript mDatum redeemer execUnits + return $ + Exp.AnyPlutusScriptWitness $ + Exp.AnyPlutusSpendingScriptWitness $ + Exp.createPlutusSpendingScriptWitness lang plutusScriptWitness handlePotentialScriptDatum :: ScriptDatumOrFileSpending diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Spend/Type.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Spend/Type.hs index 97225584af..dc2b143d37 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Spend/Type.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Spend/Type.hs @@ -1,18 +1,13 @@ {-# LANGUAGE DataKinds #-} -{-# LANGUAGE FlexibleContexts #-} -{-# LANGUAGE GADTs #-} module Cardano.CLI.EraBased.Script.Spend.Type - ( PlutusRefScriptCliArgs (..) - , SimpleRefScriptCliArgs (..) - , createSimpleOrPlutusScriptFromCliArgs + ( createSimpleOrPlutusScriptFromCliArgs , createPlutusReferenceScriptFromCliArgs , createSimpleReferenceScriptFromCliArgs ) where import Cardano.Api -import Cardano.Api.Experimental import Cardano.CLI.EraBased.Script.Type import Cardano.CLI.Type.Common (AnySLanguage, ScriptDataOrFile) @@ -20,13 +15,15 @@ import Cardano.CLI.Type.Common (AnySLanguage, ScriptDataOrFile) createSimpleOrPlutusScriptFromCliArgs :: File ScriptInAnyLang In -> Maybe (ScriptDatumOrFileSpending, ScriptDataOrFile, ExecutionUnits) - -> ScriptRequirements TxInItem + -> AnySpendScript createSimpleOrPlutusScriptFromCliArgs scriptFp (Just (datumFile, redeemerFile, execUnits)) = - OnDiskPlutusScript $ OnDiskPlutusScriptCliArgsSpending scriptFp datumFile redeemerFile execUnits -createSimpleOrPlutusScriptFromCliArgs scriptFp Nothing = OnDiskSimpleScript scriptFp + AnySpendScriptPlutus $ OnDiskPlutusSpendingScript scriptFp datumFile redeemerFile execUnits +createSimpleOrPlutusScriptFromCliArgs scriptFp Nothing = + AnySpendScriptSimple $ OnDiskSimpleScript scriptFp -createSimpleReferenceScriptFromCliArgs :: TxIn -> ScriptRequirements TxInItem -createSimpleReferenceScriptFromCliArgs = SimpleReferenceScript . flip SimpleRefScriptArgs NoPolicyId +createSimpleReferenceScriptFromCliArgs :: TxIn -> AnySpendScript +createSimpleReferenceScriptFromCliArgs txin = + AnySpendScriptSimple $ ReferenceSimpleScript txin createPlutusReferenceScriptFromCliArgs :: TxIn @@ -34,6 +31,6 @@ createPlutusReferenceScriptFromCliArgs -> ScriptDatumOrFileSpending -> ScriptDataOrFile -> ExecutionUnits - -> ScriptRequirements TxInItem + -> AnySpendScript createPlutusReferenceScriptFromCliArgs txin v mDatum redeemer execUnits = - PlutusReferenceScript $ PlutusRefScriptCliArgsSpending txin v mDatum redeemer execUnits + AnySpendScriptPlutus $ ReferencePlutusSpendingScript txin v mDatum redeemer execUnits diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Type.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Type.hs index 64b1dc901c..00471f4210 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Type.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Type.hs @@ -1,18 +1,19 @@ {-# LANGUAGE DataKinds #-} -{-# LANGUAGE FlexibleInstances #-} -{-# LANGUAGE GADTs #-} {-# LANGUAGE LambdaCase #-} -{-# LANGUAGE StandaloneDeriving #-} -{-# LANGUAGE TypeFamilies #-} module Cardano.CLI.EraBased.Script.Type - ( -- * New experimental api - ScriptRequirements (..) - , OnDiskPlutusScriptCliArgs (..) - , PlutusRefScriptCliArgs (..) - , MintPolicyId - , NoPolicyId (..) - , SimpleRefScriptCliArgs (..) + ( -- * Script requirements per context + SimpleScriptRequirements (..) + , PlutusSpendingScriptRequirements (..) + , PlutusMintingScriptRequirements (..) + , PlutusNonAssetScriptRequirements (..) + + -- * Command-level sum types + , AnySpendScript (..) + , AnyMintScript (..) + , AnyNonAssetScript (..) + + -- * Datum , ScriptDatumOrFileSpending (..) -- * Errors @@ -21,7 +22,6 @@ module Cardano.CLI.EraBased.Script.Type where import Cardano.Api -import Cardano.Api.Experimental qualified as Exp import Cardano.Api.Ledger qualified as L import Cardano.CLI.Type.Common @@ -37,117 +37,81 @@ instance Error CliScriptWitnessError where PlutusScriptWitnessLanguageNotSupportedInEra version era -> "Plutus script version " <> pshow version <> " is not supported in era " <> pshow era --- | Encapsulates the requirements for a simple or plutus script being read from disk. -data ScriptRequirements (witnessable :: Exp.WitnessableItem) where - OnDiskSimpleScript :: File ScriptInAnyLang In -> ScriptRequirements witnessable - OnDiskPlutusScript - :: OnDiskPlutusScriptCliArgs witnessable -> ScriptRequirements witnessable - PlutusReferenceScript - :: PlutusRefScriptCliArgs witnessable -> ScriptRequirements witnessable - SimpleReferenceScript - :: SimpleRefScriptCliArgs witnessable -> ScriptRequirements witnessable - -deriving instance Show (ScriptRequirements Exp.VoterItem) - -deriving instance Show (ScriptRequirements Exp.MintItem) - -deriving instance Show (ScriptRequirements Exp.CertItem) - -deriving instance Show (ScriptRequirements Exp.TxInItem) - -deriving instance Show (ScriptRequirements Exp.ProposalItem) - -deriving instance Show (ScriptRequirements Exp.WithdrawalItem) - -data OnDiskPlutusScriptCliArgs (witnessable :: Exp.WitnessableItem) where - OnDiskPlutusScriptCliArgsSpending - :: (File ScriptInAnyLang In) - -> ScriptDatumOrFileSpending - -- ^ Optional Datum (CIP-69) - -> ScriptDataOrFile - -- ^ Redeemer - -> ExecutionUnits - -> OnDiskPlutusScriptCliArgs Exp.TxInItem - OnDiskPlutusScriptCliArgsNonSpending - :: (File ScriptInAnyLang In) - -> ScriptDataOrFile - -- ^ Redeemer - -> ExecutionUnits - -> OnDiskPlutusScriptCliArgs witnessable - - data ScriptDatumOrFileSpending = PotentialDatum (Maybe ScriptDataOrFile) | InlineDatum deriving Show -deriving instance Show (OnDiskPlutusScriptCliArgs Exp.VoterItem) - -deriving instance Show (OnDiskPlutusScriptCliArgs Exp.MintItem) - -deriving instance Show (OnDiskPlutusScriptCliArgs Exp.CertItem) - -deriving instance Show (OnDiskPlutusScriptCliArgs Exp.TxInItem) - -deriving instance Show (OnDiskPlutusScriptCliArgs Exp.ProposalItem) - -deriving instance Show (OnDiskPlutusScriptCliArgs Exp.WithdrawalItem) - -data PlutusRefScriptCliArgs (witnessable :: Exp.WitnessableItem) where - PlutusRefScriptCliArgsSpending - :: TxIn - -- ^ TxIn with reference script - -> AnySLanguage - -> ScriptDatumOrFileSpending - -- ^ Optional Datum (CIP-69) - -> ScriptDataOrFile - -- ^ Redeemer - -> ExecutionUnits - -> PlutusRefScriptCliArgs Exp.TxInItem - PlutusRefScriptCliArgsNonSpending - :: TxIn - -- ^ TxIn with reference script - -> AnySLanguage - -> MintPolicyId witnessable - -- ^ Needed for plutus minting scripts - -> ScriptDataOrFile - -- ^ Redeemer - -> ExecutionUnits - -> PlutusRefScriptCliArgs witnessable - -deriving instance Show (PlutusRefScriptCliArgs Exp.VoterItem) - -deriving instance Show (PlutusRefScriptCliArgs Exp.MintItem) - -deriving instance Show (PlutusRefScriptCliArgs Exp.ProposalItem) - -deriving instance Show (PlutusRefScriptCliArgs Exp.CertItem) - -deriving instance Show (PlutusRefScriptCliArgs Exp.TxInItem) - -deriving instance Show (PlutusRefScriptCliArgs Exp.WithdrawalItem) - -data SimpleRefScriptCliArgs witnessable where - SimpleRefScriptArgs :: TxIn -> MintPolicyId witnessable -> SimpleRefScriptCliArgs witnessable - -deriving instance Show (SimpleRefScriptCliArgs Exp.VoterItem) - -deriving instance Show (SimpleRefScriptCliArgs Exp.MintItem) +data SimpleScriptRequirements + = OnDiskSimpleScript (File ScriptInAnyLang In) + | ReferenceSimpleScript TxIn + deriving Show -deriving instance Show (SimpleRefScriptCliArgs Exp.ProposalItem) +data PlutusSpendingScriptRequirements + = OnDiskPlutusSpendingScript + (File ScriptInAnyLang In) + ScriptDatumOrFileSpending + -- ^ Optional Datum (CIP-69) + ScriptDataOrFile + -- ^ Redeemer + ExecutionUnits + | ReferencePlutusSpendingScript + TxIn + -- ^ TxIn with reference script + AnySLanguage + ScriptDatumOrFileSpending + -- ^ Optional Datum (CIP-69) + ScriptDataOrFile + -- ^ Redeemer + ExecutionUnits + deriving Show -deriving instance Show (SimpleRefScriptCliArgs Exp.CertItem) +data PlutusMintingScriptRequirements + = OnDiskPlutusMintingScript + (File ScriptInAnyLang In) + ScriptDataOrFile + -- ^ Redeemer + ExecutionUnits + | ReferencePlutusMintingScript + TxIn + -- ^ TxIn with reference script + AnySLanguage + PolicyId + -- ^ Needed for plutus minting scripts + ScriptDataOrFile + -- ^ Redeemer + ExecutionUnits + deriving Show -deriving instance Show (SimpleRefScriptCliArgs Exp.TxInItem) +data PlutusNonAssetScriptRequirements + = OnDiskPlutusNonAssetScript + (File ScriptInAnyLang In) + ScriptDataOrFile + -- ^ Redeemer + ExecutionUnits + | ReferencePlutusNonAssetScript + TxIn + -- ^ TxIn with reference script + AnySLanguage + ScriptDataOrFile + -- ^ Redeemer + ExecutionUnits + deriving Show -deriving instance Show (SimpleRefScriptCliArgs Exp.WithdrawalItem) +data AnySpendScript + = AnySpendScriptSimple SimpleScriptRequirements + | AnySpendScriptPlutus PlutusSpendingScriptRequirements + deriving Show -type family MintPolicyId (a :: Exp.WitnessableItem) where - MintPolicyId Exp.TxInItem = NoPolicyId - MintPolicyId Exp.CertItem = NoPolicyId - MintPolicyId Exp.MintItem = PolicyId - MintPolicyId Exp.WithdrawalItem = NoPolicyId - MintPolicyId Exp.VoterItem = NoPolicyId - MintPolicyId Exp.ProposalItem = NoPolicyId +-- | PolicyId for on-disk simple scripts is computed from the script hash at read time. +-- PolicyId for reference simple scripts is always user-provided via CLI. +data AnyMintScript + = AnyMintScriptSimpleOnDisk (File ScriptInAnyLang In) + | AnyMintScriptSimpleRef TxIn PolicyId + | AnyMintScriptPlutus PlutusMintingScriptRequirements + deriving Show -data NoPolicyId = NoPolicyId deriving Show +data AnyNonAssetScript + = AnyNonAssetScriptSimple SimpleScriptRequirements + | AnyNonAssetScriptPlutus PlutusNonAssetScriptRequirements + deriving Show diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Vote/Read.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Vote/Read.hs index f2a23605bb..7c0c1b4c22 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Vote/Read.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Vote/Read.hs @@ -1,6 +1,5 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} -{-# LANGUAGE GADTs #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} @@ -19,7 +18,6 @@ import Cardano.Api.Experimental.Plutus qualified as Exp import Cardano.CLI.Compatible.Exception import Cardano.CLI.EraBased.Script.Read.Common import Cardano.CLI.EraBased.Script.Type -import Cardano.CLI.EraBased.Script.Type qualified as Exp import Cardano.CLI.Read import Cardano.CLI.Type.Common (AnySLanguage (..)) import Cardano.CLI.Type.Governance @@ -29,7 +27,7 @@ import Control.Monad readVoteScriptWitness :: forall era e . Exp.IsEra era - => (VoteFile In, Maybe (ScriptRequirements Exp.VoterItem)) + => (VoteFile In, Maybe AnyNonAssetScript) -> CIO e (VotingProcedures era, Exp.AnyWitness (Exp.LedgerEra era)) readVoteScriptWitness (voteFp, Nothing) = do votProceds <- @@ -43,64 +41,56 @@ readVoteScriptWitness (voteFp, Just certScriptReq) = do fromEitherIOCli $ readFileTextEnvelope voteFp case certScriptReq of - OnDiskSimpleScript scriptFp -> do - let sFp = unFile scriptFp - s <- - Exp.AnySimpleScriptWitness . Exp.SScript <$> readFileSimpleScript sFp (Exp.useEra @era) + AnyNonAssetScriptSimple simpleReq -> + case simpleReq of + OnDiskSimpleScript scriptFp -> do + let sFp = unFile scriptFp + s <- + Exp.AnySimpleScriptWitness . Exp.SScript <$> readFileSimpleScript sFp (Exp.useEra @era) + return (votProceds, s) + ReferenceSimpleScript refTxIn -> + return + ( votProceds + , Exp.AnySimpleScriptWitness $ Exp.SReferenceScript refTxIn + ) + AnyNonAssetScriptPlutus plutusReq -> + case plutusReq of + OnDiskPlutusNonAssetScript scriptFp redeemerFile execUnits -> do + let plutusScriptFp = unFile scriptFp + Exp.AnyPlutusScript script <- + readFilePlutusScript @_ @era plutusScriptFp + redeemer <- + fromExceptTCli $ + readScriptDataOrFile redeemerFile - return - ( votProceds - , s - ) - OnDiskPlutusScript - (OnDiskPlutusScriptCliArgsNonSpending scriptFp redeemerFile execUnits) -> do - let plutusScriptFp = unFile scriptFp - Exp.AnyPlutusScript script <- - readFilePlutusScript @_ @era plutusScriptFp - redeemer <- - fromExceptTCli $ - readScriptDataOrFile redeemerFile - - let pScript = Exp.PScript script - lang = Exp.plutusScriptInEraSLanguage script - let sw = - Exp.PlutusScriptWitness - lang - pScript - Exp.NoScriptDatum - redeemer - execUnits - return - ( votProceds - , Exp.AnyPlutusScriptWitness $ AnyPlutusCertifyingScriptWitness sw - ) - PlutusReferenceScript - ( PlutusRefScriptCliArgsNonSpending - refTxIn - (AnySLanguage lang) - Exp.NoPolicyId - redeemerFile - execUnits - ) -> do - redeemer <- - fromExceptTCli $ readScriptDataOrFile redeemerFile - - return - ( votProceds - , Exp.AnyPlutusScriptWitness $ - AnyPlutusCertifyingScriptWitness $ + let pScript = Exp.PScript script + lang = Exp.plutusScriptInEraSLanguage script + let sw = Exp.PlutusScriptWitness lang - (Exp.PReferenceScript refTxIn) + pScript Exp.NoScriptDatum redeemer execUnits - ) - SimpleReferenceScript (SimpleRefScriptArgs refTxIn _) -> - return - ( votProceds - , Exp.AnySimpleScriptWitness $ Exp.SReferenceScript refTxIn - ) + return + ( votProceds + , Exp.AnyPlutusScriptWitness $ AnyPlutusCertifyingScriptWitness sw + ) + ReferencePlutusNonAssetScript refTxIn (AnySLanguage lang) redeemerFile execUnits -> do + redeemer <- + fromExceptTCli $ readScriptDataOrFile redeemerFile + + return + ( votProceds + , Exp.AnyPlutusScriptWitness $ + AnyPlutusCertifyingScriptWitness $ + Exp.PlutusScriptWitness + lang + (Exp.PReferenceScript refTxIn) + Exp.NoScriptDatum + redeemer + execUnits + ) -- Because the 'Voter' type is contained only in the 'VotingProcedures' -- type, we must read a single vote as 'VotingProcedures'. The cli will @@ -109,7 +99,7 @@ readVoteScriptWitness (voteFp, Just certScriptReq) = do -- when it comes to script witnessed votes. readVotingProceduresFiles :: Exp.IsEra era - => [(VoteFile In, Maybe (ScriptRequirements Exp.VoterItem))] + => [(VoteFile In, Maybe AnyNonAssetScript)] -> CIO e [(VotingProcedures era, Exp.AnyWitness (Exp.LedgerEra era))] readVotingProceduresFiles files = forM files readVoteScriptWitness diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Vote/Type.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Vote/Type.hs index c81983ce97..36a3d1cc98 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Vote/Type.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Vote/Type.hs @@ -1,6 +1,4 @@ {-# LANGUAGE DataKinds #-} -{-# LANGUAGE FlexibleContexts #-} -{-# LANGUAGE GADTs #-} module Cardano.CLI.EraBased.Script.Vote.Type ( createSimpleOrPlutusScriptFromCliArgs @@ -15,32 +13,26 @@ import Cardano.Api , ScriptInAnyLang , TxIn ) -import Cardano.Api.Experimental qualified as Exp -import Cardano.CLI.EraBased.Script.Type qualified as Latest +import Cardano.CLI.EraBased.Script.Type import Cardano.CLI.Type.Common (AnySLanguage, ScriptDataOrFile) createSimpleOrPlutusScriptFromCliArgs :: File ScriptInAnyLang In -> Maybe (ScriptDataOrFile, ExecutionUnits) - -> Latest.ScriptRequirements Exp.VoterItem + -> AnyNonAssetScript createSimpleOrPlutusScriptFromCliArgs scriptFp (Just (redeemer, execUnits)) = - Latest.OnDiskPlutusScript $ - Latest.OnDiskPlutusScriptCliArgsNonSpending scriptFp redeemer execUnits + AnyNonAssetScriptPlutus $ + OnDiskPlutusNonAssetScript scriptFp redeemer execUnits createSimpleOrPlutusScriptFromCliArgs scriptFp Nothing = - Latest.OnDiskSimpleScript scriptFp + AnyNonAssetScriptSimple $ OnDiskSimpleScript scriptFp createPlutusReferenceScriptFromCliArgs :: TxIn -> AnySLanguage -> ScriptDataOrFile -> ExecutionUnits - -> Latest.ScriptRequirements Exp.VoterItem + -> AnyNonAssetScript createPlutusReferenceScriptFromCliArgs txIn anySLang redeemer execUnits = - Latest.PlutusReferenceScript $ - Latest.PlutusRefScriptCliArgsNonSpending - txIn - anySLang - Latest.NoPolicyId - redeemer - execUnits + AnyNonAssetScriptPlutus $ + ReferencePlutusNonAssetScript txIn anySLang redeemer execUnits diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Withdrawal/Read.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Withdrawal/Read.hs index e09f8f067d..34e1d13f56 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Withdrawal/Read.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Withdrawal/Read.hs @@ -1,6 +1,5 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} -{-# LANGUAGE GADTs #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} @@ -15,7 +14,6 @@ import Cardano.Api.Experimental ( AnyWitness (..) , IsEra (..) , LedgerEra - , WitnessableItem (..) ) import Cardano.Api.Experimental qualified as Exp import Cardano.Api.Experimental.AnyScriptWitness @@ -30,72 +28,64 @@ import Cardano.CLI.Type.Common (AnySLanguage (..)) readWithdrawalScriptWitness :: forall e era . IsEra era - => (StakeAddress, Coin, Maybe (ScriptRequirements WithdrawalItem)) + => (StakeAddress, Coin, Maybe AnyNonAssetScript) -> CIO e (StakeAddress, Coin, AnyWitness (LedgerEra era)) readWithdrawalScriptWitness (stakeAddr, withdrawalAmt, Nothing) = return (stakeAddr, withdrawalAmt, Exp.AnyKeyWitnessPlaceholder) readWithdrawalScriptWitness (stakeAddr, withdrawalAmt, Just certScriptReq) = case certScriptReq of - OnDiskSimpleScript scriptFp -> do - let sFp = unFile scriptFp - sWit <- AnySimpleScriptWitness . Exp.SScript <$> readFileSimpleScript sFp (Exp.useEra @era) + AnyNonAssetScriptSimple simpleReq -> + case simpleReq of + OnDiskSimpleScript scriptFp -> do + let sFp = unFile scriptFp + sWit <- AnySimpleScriptWitness . Exp.SScript <$> readFileSimpleScript sFp (Exp.useEra @era) + return (stakeAddr, withdrawalAmt, sWit) + ReferenceSimpleScript refTxIn -> + return + ( stakeAddr + , withdrawalAmt + , AnySimpleScriptWitness $ Exp.SReferenceScript refTxIn + ) + AnyNonAssetScriptPlutus plutusReq -> + case plutusReq of + OnDiskPlutusNonAssetScript scriptFp redeemerFile execUnits -> do + let plutusScriptFp = unFile scriptFp + Exp.AnyPlutusScript script <- + readFilePlutusScript @_ @era plutusScriptFp + redeemer <- + fromExceptTCli $ + readScriptDataOrFile redeemerFile - return - ( stakeAddr - , withdrawalAmt - , sWit - ) - OnDiskPlutusScript (OnDiskPlutusScriptCliArgsNonSpending scriptFp redeemerFile execUnits) -> do - let plutusScriptFp = unFile scriptFp - Exp.AnyPlutusScript script <- - readFilePlutusScript @_ @era plutusScriptFp - redeemer <- - fromExceptTCli $ - readScriptDataOrFile redeemerFile - - let lang = Exp.plutusScriptInEraSLanguage script - pScript = Exp.PScript script - sw = - Exp.PlutusScriptWitness - lang - pScript - Exp.NoScriptDatum - redeemer - execUnits - return - ( stakeAddr - , withdrawalAmt - , AnyPlutusScriptWitness $ - AnyPlutusCertifyingScriptWitness sw - ) - SimpleReferenceScript (SimpleRefScriptArgs refTxIn NoPolicyId) -> - return - ( stakeAddr - , withdrawalAmt - , AnySimpleScriptWitness $ Exp.SReferenceScript refTxIn - ) - PlutusReferenceScript - ( PlutusRefScriptCliArgsNonSpending - refTxIn - (AnySLanguage lang) - NoPolicyId - redeemerFile - execUnits - ) -> do - redeemer <- - fromExceptTCli $ - readScriptDataOrFile redeemerFile - let sWit = - Exp.AnyPlutusScriptWitness $ - AnyPlutusCertifyingScriptWitness $ - Exp.PlutusScriptWitness - lang - (Exp.PReferenceScript refTxIn) - Exp.NoScriptDatum - redeemer - execUnits - return - ( stakeAddr - , withdrawalAmt - , sWit - ) + let lang = Exp.plutusScriptInEraSLanguage script + pScript = Exp.PScript script + sw = + Exp.PlutusScriptWitness + lang + pScript + Exp.NoScriptDatum + redeemer + execUnits + return + ( stakeAddr + , withdrawalAmt + , AnyPlutusScriptWitness $ + AnyPlutusCertifyingScriptWitness sw + ) + ReferencePlutusNonAssetScript refTxIn (AnySLanguage lang) redeemerFile execUnits -> do + redeemer <- + fromExceptTCli $ + readScriptDataOrFile redeemerFile + let sWit = + Exp.AnyPlutusScriptWitness $ + AnyPlutusCertifyingScriptWitness $ + Exp.PlutusScriptWitness + lang + (Exp.PReferenceScript refTxIn) + Exp.NoScriptDatum + redeemer + execUnits + return + ( stakeAddr + , withdrawalAmt + , sWit + ) diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Script/Withdrawal/Type.hs b/cardano-cli/src/Cardano/CLI/EraBased/Script/Withdrawal/Type.hs index cd07192cdb..509f0965d5 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Script/Withdrawal/Type.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Script/Withdrawal/Type.hs @@ -1,16 +1,12 @@ {-# LANGUAGE DataKinds #-} -{-# LANGUAGE FlexibleContexts #-} -{-# LANGUAGE GADTs #-} module Cardano.CLI.EraBased.Script.Withdrawal.Type - ( PlutusRefScriptCliArgs (..) - , createSimpleOrPlutusScriptFromCliArgs + ( createSimpleOrPlutusScriptFromCliArgs , createPlutusReferenceScriptFromCliArgs ) where import Cardano.Api -import Cardano.Api.Experimental import Cardano.CLI.EraBased.Script.Type import Cardano.CLI.Type.Common (AnySLanguage (..), ScriptDataOrFile) @@ -18,18 +14,17 @@ import Cardano.CLI.Type.Common (AnySLanguage (..), ScriptDataOrFile) createSimpleOrPlutusScriptFromCliArgs :: File ScriptInAnyLang In -> Maybe (ScriptDataOrFile, ExecutionUnits) - -> ScriptRequirements WithdrawalItem + -> AnyNonAssetScript createSimpleOrPlutusScriptFromCliArgs scriptFp (Just (redeemer, execUnits)) = - OnDiskPlutusScript $ OnDiskPlutusScriptCliArgsNonSpending scriptFp redeemer execUnits + AnyNonAssetScriptPlutus $ OnDiskPlutusNonAssetScript scriptFp redeemer execUnits createSimpleOrPlutusScriptFromCliArgs scriptFp Nothing = - OnDiskSimpleScript scriptFp + AnyNonAssetScriptSimple $ OnDiskSimpleScript scriptFp createPlutusReferenceScriptFromCliArgs :: TxIn -> AnySLanguage -> ScriptDataOrFile -> ExecutionUnits - -> ScriptRequirements WithdrawalItem + -> AnyNonAssetScript createPlutusReferenceScriptFromCliArgs txIn version redeemer execUnits = - PlutusReferenceScript $ - PlutusRefScriptCliArgsNonSpending txIn version NoPolicyId redeemer execUnits + AnyNonAssetScriptPlutus $ ReferencePlutusNonAssetScript txIn version redeemer execUnits diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Transaction/Command.hs b/cardano-cli/src/Cardano/CLI/EraBased/Transaction/Command.hs index 35ae830e80..a1eae0e200 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Transaction/Command.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Transaction/Command.hs @@ -60,7 +60,7 @@ data TransactionBuildRawCmdArgs era = TransactionBuildRawCmdArgs { eon :: !(Exp.Era era) , mScriptValidity :: !(Maybe ScriptValidity) -- ^ Mark script as expected to pass or fail validation - , txIns :: ![(TxIn, Maybe (ScriptRequirements Exp.TxInItem))] + , txIns :: ![(TxIn, Maybe AnySpendScript)] -- ^ Transaction inputs with optional spending scripts , readOnlyRefIns :: ![TxIn] -- ^ Read only reference inputs @@ -73,7 +73,7 @@ data TransactionBuildRawCmdArgs era = TransactionBuildRawCmdArgs , requiredSigners :: ![RequiredSigner] -- ^ Required signers , txouts :: ![TxOutAnyEra] - , mMintedAssets :: !(Maybe (L.MultiAsset, [ScriptRequirements Exp.MintItem])) + , mMintedAssets :: !(Maybe (L.MultiAsset, [AnyMintScript])) -- ^ Multi-Asset minted value with script witness , mValidityLowerBound :: !(Maybe SlotNo) -- ^ Transaction validity lower bound @@ -81,17 +81,17 @@ data TransactionBuildRawCmdArgs era = TransactionBuildRawCmdArgs -- ^ Transaction validity upper bound , fee :: !Coin -- ^ Transaction fee - , certificates :: ![(CertificateFile, Maybe (ScriptRequirements Exp.CertItem))] + , certificates :: ![(CertificateFile, Maybe AnyNonAssetScript)] -- ^ Certificates with potential script witness - , withdrawals :: ![(StakeAddress, Coin, Maybe (ScriptRequirements Exp.WithdrawalItem))] + , withdrawals :: ![(StakeAddress, Coin, Maybe AnyNonAssetScript)] , metadataSchema :: !TxMetadataJsonSchema , scriptFiles :: ![ScriptFile] -- ^ Auxiliary scripts , metadataFiles :: ![MetadataFile] , mProtocolParamsFile :: !(Maybe ProtocolParamsFile) , mUpdateProprosalFile :: !(Maybe (Featured ShelleyToBabbageEra era (Maybe UpdateProposalFile))) - , voteFiles :: ![(VoteFile In, Maybe (ScriptRequirements Exp.VoterItem))] - , proposalFiles :: ![(ProposalFile In, Maybe (ScriptRequirements Exp.ProposalItem))] + , voteFiles :: ![(VoteFile In, Maybe AnyNonAssetScript)] + , proposalFiles :: ![(ProposalFile In, Maybe AnyNonAssetScript)] , mCurrentTreasuryValue :: !(Maybe TxCurrentTreasuryValue) , mTreasuryDonation :: !(Maybe TxTreasuryDonation) , isCborOutCanonical :: !TxCborFormat @@ -132,7 +132,7 @@ data TransactionBuildCmdArgs era = TransactionBuildCmdArgs -- ^ Mark script as expected to pass or fail validation , mOverrideWitnesses :: !(Maybe Word) -- ^ Override the required number of tx witnesses - , txins :: ![(TxIn, Maybe (ScriptRequirements Exp.TxInItem))] + , txins :: ![(TxIn, Maybe AnySpendScript)] -- ^ Transaction inputs with optional spending scripts , readOnlyReferenceInputs :: ![TxIn] -- ^ Read only reference inputs @@ -148,23 +148,23 @@ data TransactionBuildCmdArgs era = TransactionBuildCmdArgs -- ^ Normal outputs , changeAddresses :: !TxOutChangeAddress -- ^ A change output - , mMintedAssets :: !(Maybe (L.MultiAsset, [ScriptRequirements Exp.MintItem])) + , mMintedAssets :: !(Maybe (L.MultiAsset, [AnyMintScript])) -- ^ Multi-Asset minted value with script witness , mValidityLowerBound :: !(Maybe SlotNo) -- ^ Transaction validity lower bound , mValidityUpperBound :: !(TxValidityUpperBound era) -- ^ Transaction validity upper bound - , certificates :: ![(CertificateFile, Maybe (ScriptRequirements Exp.CertItem))] + , certificates :: ![(CertificateFile, Maybe AnyNonAssetScript)] -- ^ Certificates with potential script witness - , withdrawals :: ![(StakeAddress, Coin, Maybe (ScriptRequirements Exp.WithdrawalItem))] + , withdrawals :: ![(StakeAddress, Coin, Maybe AnyNonAssetScript)] -- ^ Withdrawals with potential script witness , metadataSchema :: !TxMetadataJsonSchema , scriptFiles :: ![ScriptFile] -- ^ Auxiliary scripts , metadataFiles :: ![MetadataFile] , mUpdateProposalFile :: !(Maybe (Featured ShelleyToBabbageEra era (Maybe UpdateProposalFile))) - , voteFiles :: ![(VoteFile In, Maybe (ScriptRequirements Exp.VoterItem))] - , proposalFiles :: ![(ProposalFile In, Maybe (ScriptRequirements Exp.ProposalItem))] + , voteFiles :: ![(VoteFile In, Maybe AnyNonAssetScript)] + , proposalFiles :: ![(ProposalFile In, Maybe AnyNonAssetScript)] , includeCurrentTreasuryValue :: !IncludeCurrentTreasuryValue , mTreasuryDonation :: !(Maybe TxTreasuryDonation) , isCborOutCanonical :: !TxCborFormat @@ -182,7 +182,7 @@ data TransactionBuildEstimateCmdArgs era = TransactionBuildEstimateCmdArgs , mByronWitnesses :: !(Maybe Int) , protocolParamsFile :: !ProtocolParamsFile , totalUTxOValue :: !Value - , txins :: ![(TxIn, Maybe (ScriptRequirements Exp.TxInItem))] + , txins :: ![(TxIn, Maybe AnySpendScript)] -- ^ Transaction inputs with optional spending scripts , readOnlyReferenceInputs :: ![TxIn] -- ^ Read only reference inputs @@ -196,15 +196,15 @@ data TransactionBuildEstimateCmdArgs era = TransactionBuildEstimateCmdArgs -- ^ Normal outputs , changeAddress :: !TxOutChangeAddress -- ^ A change output - , mMintedAssets :: !(Maybe (L.MultiAsset, [ScriptRequirements Exp.MintItem])) + , mMintedAssets :: !(Maybe (L.MultiAsset, [AnyMintScript])) -- ^ Multi-Asset value with script witness , mValidityLowerBound :: !(Maybe SlotNo) -- ^ Transaction validity lower bound , mValidityUpperBound :: !(TxValidityUpperBound era) -- ^ Transaction validity upper bound - , certificates :: ![(CertificateFile, Maybe (ScriptRequirements Exp.CertItem))] + , certificates :: ![(CertificateFile, Maybe AnyNonAssetScript)] -- ^ Certificates with potential script witness - , withdrawals :: ![(StakeAddress, Coin, Maybe (ScriptRequirements Exp.WithdrawalItem))] + , withdrawals :: ![(StakeAddress, Coin, Maybe AnyNonAssetScript)] -- ^ Withdrawals with potential script witness , plutusCollateral :: !(Maybe Coin) -- ^ Total collateral @@ -214,8 +214,8 @@ data TransactionBuildEstimateCmdArgs era = TransactionBuildEstimateCmdArgs , scriptFiles :: ![ScriptFile] -- ^ Auxiliary scripts , metadataFiles :: ![MetadataFile] - , voteFiles :: ![(VoteFile In, Maybe (ScriptRequirements Exp.VoterItem))] - , proposalFiles :: ![(ProposalFile In, Maybe (ScriptRequirements Exp.ProposalItem))] + , voteFiles :: ![(VoteFile In, Maybe AnyNonAssetScript)] + , proposalFiles :: ![(ProposalFile In, Maybe AnyNonAssetScript)] , currentTreasuryValue :: !(Maybe TxCurrentTreasuryValue) , treasuryDonation :: !(Maybe TxTreasuryDonation) , isCborOutCanonical :: !TxCborFormat