Skip to content

Commit 79c5eae

Browse files
committed
Filter out duplicate collateral inputs in transaction build and
build-raw
1 parent 4e083a5 commit 79c5eae

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

cardano-cli/src/Cardano/CLI/Shelley/Run/Transaction.hs

+14-8
Original file line numberDiff line numberDiff line change
@@ -380,11 +380,14 @@ runTxBuildCmd
380380

381381
txOuts <- mapM (toTxOutInAnyEra cEra) txouts
382382

383+
-- the same collateral input can be used for several plutus scripts
384+
let filteredTxinsc = Set.toList $ Set.fromList txinsc
385+
383386
-- We need to construct the txBodycontent outside of runTxBuild
384387
BalancedTxBody txBodycontent balancedTxBody _ _
385-
<- runTxBuild cEra consensusModeParams nid mScriptValidity inputsAndMaybeScriptWits readOnlyRefIns txinsc
386-
mReturnCollateral mTotCollateral txOuts changeAddr valuesWithScriptWits mLowBound
387-
mUpperBound certsAndMaybeScriptWits withdrawalsAndMaybeScriptWits
388+
<- runTxBuild cEra consensusModeParams nid mScriptValidity inputsAndMaybeScriptWits readOnlyRefIns
389+
filteredTxinsc mReturnCollateral mTotCollateral txOuts changeAddr valuesWithScriptWits
390+
mLowBound mUpperBound certsAndMaybeScriptWits withdrawalsAndMaybeScriptWits
388391
requiredSigners txAuxScripts txMetadata mpparams mProp mOverrideWits outputOptions
389392

390393
let allReferenceInputs = getAllReferenceInputs
@@ -395,7 +398,7 @@ runTxBuildCmd
395398
readOnlyRefIns
396399

397400
let inputsThatRequireWitnessing = [input | (input,_) <- inputsAndMaybeScriptWits]
398-
allTxInputs = inputsThatRequireWitnessing ++ allReferenceInputs ++ txinsc
401+
allTxInputs = inputsThatRequireWitnessing ++ allReferenceInputs ++ filteredTxinsc
399402

400403
-- TODO: Calculating the script cost should live as a different command.
401404
-- Why? Because then we can simply read a txbody and figure out
@@ -500,10 +503,13 @@ runTxBuildRawCmd
500503
Nothing -> return Nothing
501504
txOuts <- mapM (toTxOutInAnyEra cEra) txouts
502505

503-
txBody <- hoistEither $ runTxBuildRaw cEra mScriptValidity inputsAndMaybeScriptWits readOnlyRefIns txinsc
504-
mReturnCollateral mTotColl txOuts mLowBound mUpperBound fee valuesWithScriptWits
505-
certsAndMaybeScriptWits withdrawalsAndMaybeScriptWits requiredSigners txAuxScripts
506-
txMetadata pparams mProp
506+
-- the same collateral input can be used for several plutus scripts
507+
let filteredTxinsc = Set.toList $ Set.fromList txinsc
508+
509+
txBody <- hoistEither $ runTxBuildRaw cEra mScriptValidity inputsAndMaybeScriptWits readOnlyRefIns
510+
filteredTxinsc mReturnCollateral mTotColl txOuts mLowBound mUpperBound fee
511+
valuesWithScriptWits certsAndMaybeScriptWits withdrawalsAndMaybeScriptWits
512+
requiredSigners txAuxScripts txMetadata pparams mProp
507513

508514
let noWitTx = makeSignedTransaction [] txBody
509515
firstExceptT ShelleyTxCmdWriteFileError . newExceptT $

0 commit comments

Comments
 (0)