Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
126 changes: 57 additions & 69 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 @@ -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
Expand All @@ -144,76 +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
(OnDiskPlutusScriptCliArgs scriptFp Exp.NoScriptDatumAllowed 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
( 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
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.
Expand Down Expand Up @@ -251,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
Expand Down
148 changes: 70 additions & 78 deletions cardano-cli/src/Cardano/CLI/Compatible/Transaction/ScriptWitness.hs
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -37,21 +36,19 @@ 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

import Control.Monad

readCertificateScriptWitnesses
:: ShelleyBasedEra era
-> [(CertificateFile, Maybe (ScriptRequirements Exp.CertItem))]
-> [(CertificateFile, Maybe AnyNonAssetScript)]
-> CIO e [(CertificateFile, Maybe (CertificateScriptWitness era))]
readCertificateScriptWitnesses sbe =
mapM
Expand All @@ -60,86 +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
(OnDiskPlutusScriptCliArgs scriptFp Exp.NoScriptDatumAllowed 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
( PlutusRefScriptCliArgs
refTxIn
(AnySLanguage lang)
Exp.NoScriptDatumAllowed
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
Expand Down
Loading
Loading