Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 [])
Expand Down
112 changes: 50 additions & 62 deletions cardano-cli/src/Cardano/CLI/Compatible/Transaction/Run.hs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -128,7 +127,7 @@ runCompatibleTransactionCmd

readCertificateScriptWitnesses'
:: ShelleyBasedEra era
-> [(CertificateFile, Maybe (ScriptRequirements Exp.CertItem))]
-> [(CertificateFile, Maybe AnyNonAssetScript)]
-> CIO e [(CertificateFile, Exp.AnyWitness (ShelleyLedgerEra era))]
readCertificateScriptWitnesses' sbe =
mapM
Expand All @@ -143,66 +142,55 @@ 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
(OnDiskPlutusScriptCliArgs scriptFp Exp.NoScriptDatumAllowed redeemerFile execUnits)
) = do
let plutusScriptFp = unFile scriptFp
Exp.Plutus.AnyPlutusScript anyPlutusScript <- Compatible.readFilePlutusScript sbe plutusScriptFp
let
lang = Exp.Plutus.plutusScriptInEraSLanguage anyPlutusScript
let script' = Exp.PScript anyPlutusScript

redeemer <-
fromExceptTCli $
readScriptDataOrFile redeemerFile

let sw =
Exp.PlutusScriptWitness
lang
script'
Exp.NoScriptDatum
redeemer
execUnits
return $
Exp.AnyPlutusScriptWitness $
Exp.AnyPlutusCertifyingScriptWitness sw
readCertificateScriptWitnessSbe
_
( PlutusReferenceScript
( PlutusRefScriptCliArgs
refInput
(AnySLanguage lang)
Exp.NoScriptDatumAllowed
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
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
Exp.Plutus.AnyPlutusScript anyPlutusScript <- Compatible.readFilePlutusScript sbe plutusScriptFp
let
lang = Exp.Plutus.plutusScriptInEraSLanguage anyPlutusScript
let script' = Exp.PScript anyPlutusScript

redeemer <-
fromExceptTCli $
readScriptDataOrFile redeemerFile

let sw =
Exp.Plutus.PlutusScriptWitness
lang
script'
Exp.Plutus.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.Plutus.PlutusScriptWitness
lang
(Exp.Plutus.PReferenceScript refInput)
Exp.Plutus.NoScriptDatum
redeemer
execUnits

-- | Create 'TxCertificates'. Note that 'Certificate era' will be deduplicated. Only Certificates with a
-- stake credential will be in the result.
Expand Down Expand Up @@ -240,7 +228,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
Expand Down
108 changes: 50 additions & 58 deletions cardano-cli/src/Cardano/CLI/Compatible/Transaction/ScriptWitness.hs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TupleSections #-}
Expand All @@ -27,11 +26,9 @@ import Cardano.CLI.Compatible.Exception
import Cardano.CLI.Compatible.Read (readFilePlutusScript, readFileSimpleScript)
import Cardano.CLI.EraBased.Script.Read.Common (readScriptDataOrFile)
import Cardano.CLI.EraBased.Script.Type
( NoPolicyId (..)
, OnDiskPlutusScriptCliArgs (..)
, PlutusRefScriptCliArgs (..)
, ScriptRequirements (..)
, SimpleRefScriptCliArgs (..)
( AnyNonAssetScript (..)
, PlutusNonAssetScriptRequirements (..)
, SimpleScriptRequirements (..)
)
import Cardano.CLI.Type.Common (AnySLanguage (..), CertificateFile)

Expand All @@ -40,7 +37,7 @@ import Control.Monad
readCertificateScriptWitnesses
:: forall era e
. ShelleyBasedEra era
-> [(CertificateFile, Maybe (ScriptRequirements Exp.CertItem))]
-> [(CertificateFile, Maybe AnyNonAssetScript)]
-> CIO e [(CertificateFile, Maybe (Exp.AnyWitness (ShelleyLedgerEra era)))]
readCertificateScriptWitnesses sbe =
mapM
Expand All @@ -51,57 +48,52 @@ readCertificateScriptWitnesses sbe =
readCertificateScriptWitness
:: forall era e
. ShelleyBasedEra era
-> ScriptRequirements Exp.CertItem
-> AnyNonAssetScript
-> CIO e (Exp.AnyWitness (ShelleyLedgerEra era))
readCertificateScriptWitness sbe certScriptReq =
case certScriptReq of
OnDiskSimpleScript scriptFp -> do
let sFp = unFile scriptFp
ss <- readFileSimpleScript sFp
let serialisedSS = serialiseToCBOR ss
simpleScript <-
fromEitherCli
( shelleyBasedEraConstraints sbe (Exp.deserialiseSimpleScript serialisedSS)
:: Either DecoderError (Exp.SimpleScript (ShelleyLedgerEra era))
)
return $ Exp.AnySimpleScriptWitness $ Exp.SScript simpleScript
OnDiskPlutusScript
(OnDiskPlutusScriptCliArgs scriptFp Exp.NoScriptDatumAllowed redeemerFile execUnits) -> do
let plutusScriptFp = unFile scriptFp
Exp.Plutus.AnyPlutusScript anyPlutusScript <- readFilePlutusScript sbe plutusScriptFp
let lang = Exp.Plutus.plutusScriptInEraSLanguage anyPlutusScript
script' = Exp.PScript anyPlutusScript
redeemer <-
fromExceptTCli $
readScriptDataOrFile redeemerFile
let sw =
Exp.PlutusScriptWitness
lang
script'
Exp.NoScriptDatum
redeemer
execUnits
return $ Exp.AnyPlutusScriptWitness $ Exp.AnyPlutusCertifyingScriptWitness sw
SimpleReferenceScript (SimpleRefScriptArgs refTxIn NoPolicyId) ->
return . Exp.AnySimpleScriptWitness $ Exp.SReferenceScript refTxIn
PlutusReferenceScript
( PlutusRefScriptCliArgs
refInput
(AnySLanguage lang)
Exp.NoScriptDatumAllowed
NoPolicyId
redeemerFile
execUnits
) -> do
redeemer <-
fromExceptTCli $
readScriptDataOrFile redeemerFile
return $
Exp.AnyPlutusScriptWitness $
Exp.AnyPlutusCertifyingScriptWitness $
Exp.PlutusScriptWitness
lang
(Exp.PReferenceScript refInput)
Exp.NoScriptDatum
redeemer
execUnits
AnyNonAssetScriptSimple simpleReq ->
case simpleReq of
OnDiskSimpleScript scriptFp -> do
let sFp = unFile scriptFp
ss <- readFileSimpleScript sFp
let serialisedSS = serialiseToCBOR ss
simpleScript <-
fromEitherCli
( shelleyBasedEraConstraints sbe (Exp.deserialiseSimpleScript serialisedSS)
:: Either DecoderError (Exp.SimpleScript (ShelleyLedgerEra era))
)
return $ Exp.AnySimpleScriptWitness $ Exp.SScript simpleScript
ReferenceSimpleScript refTxIn ->
return . Exp.AnySimpleScriptWitness $ Exp.SReferenceScript refTxIn
AnyNonAssetScriptPlutus plutusReq ->
case plutusReq of
OnDiskPlutusNonAssetScript scriptFp redeemerFile execUnits -> do
let plutusScriptFp = unFile scriptFp
Exp.Plutus.AnyPlutusScript anyPlutusScript <- readFilePlutusScript sbe plutusScriptFp
let lang = Exp.Plutus.plutusScriptInEraSLanguage anyPlutusScript
script' = Exp.PScript anyPlutusScript
redeemer <-
fromExceptTCli $
readScriptDataOrFile redeemerFile
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
Loading
Loading