diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Commands/Transaction.hs b/cardano-cli/src/Cardano/CLI/EraBased/Commands/Transaction.hs index 4d9ebedb5c..a0ca870172 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Commands/Transaction.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Commands/Transaction.hs @@ -133,6 +133,8 @@ data TransactionBuildCmdArgs era = TransactionBuildCmdArgs , mUpdateProposalFile :: !(Maybe (Featured ShelleyToBabbageEra era (Maybe UpdateProposalFile))) , voteFiles :: ![(VoteFile In, Maybe CliVoteScriptRequirements)] , proposalFiles :: ![(ProposalFile In, Maybe CliProposalScriptRequirements)] + , metadataChecksOnProposals :: !MetadataCheck + , metadataChecksOnVotes :: !MetadataCheck , treasuryDonation :: !(Maybe TxTreasuryDonation) , buildOutputOptions :: !TxBuildOutputOptions } diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Options/Transaction.hs b/cardano-cli/src/Cardano/CLI/EraBased/Options/Transaction.hs index 89a2333bda..372c62e540 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Options/Transaction.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Options/Transaction.hs @@ -17,6 +17,7 @@ import Cardano.CLI.EraBased.Commands.Transaction import Cardano.CLI.EraBased.Options.Common import Cardano.CLI.Parser import Cardano.CLI.Types.Common +import Cardano.CLI.Types.Governance import Data.Foldable import Options.Applicative hiding (help, str) @@ -200,6 +201,8 @@ pTransactionBuildCmd sbe envCli = do <*> pFeatured (toCardanoEra sbe) (optional pUpdateProposalFile) <*> pVoteFiles sbe AutoBalance <*> pProposalFiles sbe AutoBalance + <*> pMetadataChecksOnProposals + <*> pMetadataChecksOnVotes <*> pTreasuryDonation sbe <*> pTxBuildOutputOptions @@ -384,3 +387,19 @@ pTransactionId = TransactionTxIdCmdArgs <$> pInputTxOrTxBodyFile <*> pTxIdOutputFormatJsonOrText + +pMetadataChecksOnProposals :: Parser MetadataCheck +pMetadataChecksOnProposals = + Opt.flag EnableMetadataCheck DisableMetadataCheck $ + mconcat + [ Opt.long "disable-metadata-checks-on-proposals" + , Opt.help "Disable automatic metadata-hash checks on proposals included in the transaction." + ] + +pMetadataChecksOnVotes :: Parser MetadataCheck +pMetadataChecksOnVotes = + Opt.flag EnableMetadataCheck DisableMetadataCheck $ + mconcat + [ Opt.long "disable-metadata-checks-on-votes" + , Opt.help "Disable automatic metadata-hash checks on votes included in the transaction." + ] diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Run/Transaction.hs b/cardano-cli/src/Cardano/CLI/EraBased/Run/Transaction.hs index ec83650764..d6e63fceca 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Run/Transaction.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Run/Transaction.hs @@ -67,6 +67,7 @@ import Cardano.CLI.Types.Errors.BootstrapWitnessError import Cardano.CLI.Types.Errors.NodeEraMismatchError import Cardano.CLI.Types.Errors.TxCmdError import Cardano.CLI.Types.Errors.TxValidationError +import Cardano.CLI.Types.Governance import Cardano.CLI.Types.Output (renderScriptCosts) import Cardano.CLI.Types.TxFeature @@ -147,6 +148,8 @@ runTransactionBuildCmd , mUpdateProposalFile , voteFiles , proposalFiles + , metadataChecksOnProposals + , metadataChecksOnVotes , treasuryDonation -- Maybe TxTreasuryDonation , buildOutputOptions } = do @@ -209,14 +212,19 @@ runTransactionBuildCmd (\w -> firstExceptT TxCmdVoteError $ ExceptT (readVotingProceduresFiles w voteFiles)) era' - forM_ votingProceduresAndMaybeScriptWits (checkVotingProcedureHashes eon . fst) + unless (metadataChecksOnVotes == DisableMetadataCheck) $ + forM_ votingProceduresAndMaybeScriptWits (checkVotingProcedureHashes eon . fst) + + -- unless disableMetadataChecksOnVotes $ + -- forM_ votingProceduresAndMaybeScriptWits (checkVotingProcedureHashes eon . fst) proposals <- newExceptT $ first TxCmdProposalError <$> readTxGovernanceActions eon proposalFiles - forM_ proposals (checkProposalHashes eon . fst) + unless (metadataChecksOnProposals == DisableMetadataCheck) $ + forM_ proposals (checkProposalHashes eon . fst) -- Extract return addresses from proposals and check that the return address in each proposal is registered diff --git a/cardano-cli/src/Cardano/CLI/Types/Governance.hs b/cardano-cli/src/Cardano/CLI/Types/Governance.hs index 7173121ac1..347e1f449c 100644 --- a/cardano-cli/src/Cardano/CLI/Types/Governance.hs +++ b/cardano-cli/src/Cardano/CLI/Types/Governance.hs @@ -32,3 +32,6 @@ data VoteDelegationTarget | VoteDelegationTargetOfAbstain | VoteDelegationTargetOfNoConfidence deriving (Eq, Show) + +data MetadataCheck = EnableMetadataCheck | DisableMetadataCheck + deriving (Eq, Show) diff --git a/cardano-cli/test/cardano-cli-golden/files/golden/help.cli b/cardano-cli/test/cardano-cli-golden/files/golden/help.cli index 100da336ae..254b14e22e 100644 --- a/cardano-cli/test/cardano-cli-golden/files/golden/help.cli +++ b/cardano-cli/test/cardano-cli-golden/files/golden/help.cli @@ -6435,6 +6435,8 @@ Usage: cardano-cli babbage transaction build | --metadata-cbor-file FILEPATH ] [--update-proposal-file FILEPATH] + [--disable-metadata-checks-on-proposals] + [--disable-metadata-checks-on-votes] ( --out-file FILEPATH | --calculate-plutus-script-cost FILEPATH ) @@ -8489,6 +8491,8 @@ Usage: cardano-cli conway transaction build | --proposal-reference-tx-in-redeemer-value JSON_VALUE ) ]] + [--disable-metadata-checks-on-proposals] + [--disable-metadata-checks-on-votes] [--treasury-donation LOVELACE] ( --out-file FILEPATH | --calculate-plutus-script-cost FILEPATH @@ -10577,6 +10581,8 @@ Usage: cardano-cli latest transaction build | --proposal-reference-tx-in-redeemer-value JSON_VALUE ) ]] + [--disable-metadata-checks-on-proposals] + [--disable-metadata-checks-on-votes] [--treasury-donation LOVELACE] ( --out-file FILEPATH | --calculate-plutus-script-cost FILEPATH diff --git a/cardano-cli/test/cardano-cli-golden/files/golden/help/babbage_transaction_build.cli b/cardano-cli/test/cardano-cli-golden/files/golden/help/babbage_transaction_build.cli index 79108404cf..a9c40b6f4b 100644 --- a/cardano-cli/test/cardano-cli-golden/files/golden/help/babbage_transaction_build.cli +++ b/cardano-cli/test/cardano-cli-golden/files/golden/help/babbage_transaction_build.cli @@ -115,6 +115,8 @@ Usage: cardano-cli babbage transaction build | --metadata-cbor-file FILEPATH ] [--update-proposal-file FILEPATH] + [--disable-metadata-checks-on-proposals] + [--disable-metadata-checks-on-votes] ( --out-file FILEPATH | --calculate-plutus-script-cost FILEPATH ) @@ -391,6 +393,12 @@ Available options: Filepath of the metadata, in raw CBOR format. --update-proposal-file FILEPATH Filepath of the update proposal. + --disable-metadata-checks-on-proposals + Disable automatic metadata-hash checks on proposals + included in the transaction. + --disable-metadata-checks-on-votes + Disable automatic metadata-hash checks on votes + included in the transaction. --out-file FILEPATH Output filepath of the JSON TxBody. --calculate-plutus-script-cost FILEPATH Where to write the script cost information. diff --git a/cardano-cli/test/cardano-cli-golden/files/golden/help/conway_transaction_build.cli b/cardano-cli/test/cardano-cli-golden/files/golden/help/conway_transaction_build.cli index cbeddef3af..56b495a946 100644 --- a/cardano-cli/test/cardano-cli-golden/files/golden/help/conway_transaction_build.cli +++ b/cardano-cli/test/cardano-cli-golden/files/golden/help/conway_transaction_build.cli @@ -140,6 +140,8 @@ Usage: cardano-cli conway transaction build | --proposal-reference-tx-in-redeemer-value JSON_VALUE ) ]] + [--disable-metadata-checks-on-proposals] + [--disable-metadata-checks-on-votes] [--treasury-donation LOVELACE] ( --out-file FILEPATH | --calculate-plutus-script-cost FILEPATH @@ -470,6 +472,12 @@ Available options: The script redeemer value. There is no schema: (almost) any JSON value is supported, including top-level strings and numbers. + --disable-metadata-checks-on-proposals + Disable automatic metadata-hash checks on proposals + included in the transaction. + --disable-metadata-checks-on-votes + Disable automatic metadata-hash checks on votes + included in the transaction. --treasury-donation LOVELACE The donation to the treasury to perform. --out-file FILEPATH Output filepath of the JSON TxBody. diff --git a/cardano-cli/test/cardano-cli-golden/files/golden/help/latest_transaction_build.cli b/cardano-cli/test/cardano-cli-golden/files/golden/help/latest_transaction_build.cli index 68447db20e..d59cbe1f18 100644 --- a/cardano-cli/test/cardano-cli-golden/files/golden/help/latest_transaction_build.cli +++ b/cardano-cli/test/cardano-cli-golden/files/golden/help/latest_transaction_build.cli @@ -140,6 +140,8 @@ Usage: cardano-cli latest transaction build | --proposal-reference-tx-in-redeemer-value JSON_VALUE ) ]] + [--disable-metadata-checks-on-proposals] + [--disable-metadata-checks-on-votes] [--treasury-donation LOVELACE] ( --out-file FILEPATH | --calculate-plutus-script-cost FILEPATH @@ -470,6 +472,12 @@ Available options: The script redeemer value. There is no schema: (almost) any JSON value is supported, including top-level strings and numbers. + --disable-metadata-checks-on-proposals + Disable automatic metadata-hash checks on proposals + included in the transaction. + --disable-metadata-checks-on-votes + Disable automatic metadata-hash checks on votes + included in the transaction. --treasury-donation LOVELACE The donation to the treasury to perform. --out-file FILEPATH Output filepath of the JSON TxBody.