From 14369b4f82087bf6b23cde6bf45a18d03a501770 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20M=C3=BCndler?= Date: Sun, 1 Jan 2023 22:57:07 +0100 Subject: [PATCH] Filter out duplicate collateral inputs in transaction build --- .../src/Cardano/CLI/Shelley/Run/Transaction.hs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/cardano-cli/src/Cardano/CLI/Shelley/Run/Transaction.hs b/cardano-cli/src/Cardano/CLI/Shelley/Run/Transaction.hs index eeeee81ddeb..070796a0c59 100644 --- a/cardano-cli/src/Cardano/CLI/Shelley/Run/Transaction.hs +++ b/cardano-cli/src/Cardano/CLI/Shelley/Run/Transaction.hs @@ -380,9 +380,12 @@ runTxBuildCmd txOuts <- mapM (toTxOutInAnyEra cEra) txouts + -- the same collateral input can be used for several plutus scripts + let filteredTxinsc = Set.toList $ Set.fromList txinsc + -- We need to construct the txBodycontent outside of runTxBuild BalancedTxBody txBodycontent balancedTxBody _ _ - <- runTxBuild cEra consensusModeParams nid mScriptValidity inputsAndMaybeScriptWits readOnlyRefIns txinsc + <- runTxBuild cEra consensusModeParams nid mScriptValidity inputsAndMaybeScriptWits readOnlyRefIns filteredTxinsc mReturnCollateral mTotCollateral txOuts changeAddr valuesWithScriptWits mLowBound mUpperBound certsAndMaybeScriptWits withdrawalsAndMaybeScriptWits requiredSigners txAuxScripts txMetadata mpparams mProp mOverrideWits outputOptions @@ -395,7 +398,7 @@ runTxBuildCmd readOnlyRefIns let inputsThatRequireWitnessing = [input | (input,_) <- inputsAndMaybeScriptWits] - allTxInputs = inputsThatRequireWitnessing ++ allReferenceInputs ++ txinsc + allTxInputs = inputsThatRequireWitnessing ++ allReferenceInputs ++ filteredTxinsc -- TODO: Calculating the script cost should live as a different command. -- Why? Because then we can simply read a txbody and figure out @@ -500,7 +503,10 @@ runTxBuildRawCmd Nothing -> return Nothing txOuts <- mapM (toTxOutInAnyEra cEra) txouts - txBody <- hoistEither $ runTxBuildRaw cEra mScriptValidity inputsAndMaybeScriptWits readOnlyRefIns txinsc + -- the same collateral input can be used for several plutus scripts + let filteredTxinsc = Set.toList $ Set.fromList txinsc + + txBody <- hoistEither $ runTxBuildRaw cEra mScriptValidity inputsAndMaybeScriptWits readOnlyRefIns filteredTxinsc mReturnCollateral mTotColl txOuts mLowBound mUpperBound fee valuesWithScriptWits certsAndMaybeScriptWits withdrawalsAndMaybeScriptWits requiredSigners txAuxScripts txMetadata pparams mProp