From d80e63dfd49ff56a8bed3fc17f756655943542c5 Mon Sep 17 00:00:00 2001 From: Jordan Millar Date: Fri, 31 Jan 2025 12:55:49 -0400 Subject: [PATCH] Refactor `transaction build` to use `renderScriptCostsWithScriptHashesMap` --- cardano-cli/cardano-cli.cabal | 2 ++ .../Cardano/CLI/EraBased/Run/Transaction.hs | 17 +++++---- cardano-cli/src/Cardano/CLI/Types/Output.hs | 35 ------------------- 3 files changed, 13 insertions(+), 41 deletions(-) diff --git a/cardano-cli/cardano-cli.cabal b/cardano-cli/cardano-cli.cabal index ed4a3dd10e..3c04bbf6ee 100644 --- a/cardano-cli/cardano-cli.cabal +++ b/cardano-cli/cardano-cli.cabal @@ -214,7 +214,9 @@ library cardano-crypto-wrapper ^>=1.5.1, cardano-data >=1.1, cardano-git-rev ^>=0.2.2, + cardano-ledger-alonzo, cardano-ledger-api, + cardano-ledger-core, cardano-ping ^>=0.7, cardano-prelude, cardano-slotting ^>=0.2.0.0, diff --git a/cardano-cli/src/Cardano/CLI/EraBased/Run/Transaction.hs b/cardano-cli/src/Cardano/CLI/EraBased/Run/Transaction.hs index c91db523f4..8a2b978ee3 100644 --- a/cardano-cli/src/Cardano/CLI/EraBased/Run/Transaction.hs +++ b/cardano-cli/src/Cardano/CLI/EraBased/Run/Transaction.hs @@ -64,7 +64,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.Output (renderScriptCosts, renderScriptCostsWithScriptHashesMap) +import Cardano.CLI.Types.Output (renderScriptCostsWithScriptHashesMap) import Cardano.CLI.Types.TxFeature import Cardano.Ledger.Api (allInputsTxBodyF, bodyTxL) import Cardano.Prelude (putLByteString) @@ -361,15 +361,18 @@ runTransactionBuildCmd txEraUtxo balancedTxBody - let mScriptWits = forEraInEon era' [] $ \sbe -> collectTxBodyScriptWitnesses sbe txBodyContent + scriptHashes <- + monoidForEraInEon @AlonzoEraOnwards + era' + (\aeo -> pure $ collectPlutusScriptHashes aeo balancedTxBody txEraUtxo) + & hoistMaybe (TxCmdAlonzoEraOnwardsRequired era') scriptCostOutput <- firstExceptT TxCmdPlutusScriptCostErr $ hoistEither $ - renderScriptCosts - txEraUtxo + renderScriptCostsWithScriptHashesMap executionUnitPrices - mScriptWits + scriptHashes scriptExecUnitsMap liftIO $ LBS.writeFile (unFile fp) $ encodePretty scriptCostOutput OutputTxBodyOnly fpath -> do @@ -1720,7 +1723,9 @@ runTransactionCalculatePlutusScriptCostCmd -> ExceptT TxCmdError IO () calculatePlutusScriptsCosts era' systemStart eraHistory pparams txEraUtxo txBody = do scriptHashes <- - monoidForEraInEon @AlonzoEraOnwards era' (\aeo -> pure $ collectScriptHashes aeo txBody txEraUtxo) + monoidForEraInEon @AlonzoEraOnwards + era' + (\aeo -> pure $ collectPlutusScriptHashes aeo txBody txEraUtxo) & hoistMaybe (TxCmdAlonzoEraOnwardsRequired era') executionUnitPrices <- diff --git a/cardano-cli/src/Cardano/CLI/Types/Output.hs b/cardano-cli/src/Cardano/CLI/Types/Output.hs index 3490f83816..24b8b7c53d 100644 --- a/cardano-cli/src/Cardano/CLI/Types/Output.hs +++ b/cardano-cli/src/Cardano/CLI/Types/Output.hs @@ -13,7 +13,6 @@ module Cardano.CLI.Types.Output , QueryTipLocalStateOutput (..) , ScriptCostOutput (..) , createOpCertIntervalInfo - , renderScriptCosts , renderScriptCostsWithScriptHashesMap ) where @@ -352,40 +351,6 @@ instance Error PlutusScriptCostError where PlutusScriptCostErrRefInputNotInUTxO txin -> "Reference input was not found in utxo: " <> pretty (renderTxIn txin) -renderScriptCosts - :: UTxO era - -> L.Prices - -> [(ScriptWitnessIndex, AnyScriptWitness era)] - -- ^ Initial mapping of script witness index to actual script. - -- We need this in order to know which script corresponds to the - -- calculated execution units. - -> Map ScriptWitnessIndex (Either ScriptExecutionError ([Text], ExecutionUnits)) - -- ^ Post execution cost calculation mapping of script witness - -- index to execution units. - -> Either PlutusScriptCostError [ScriptCostOutput] -renderScriptCosts (UTxO utxo) eUnitPrices scriptMapping = - renderScriptCostsWithScriptHashesFunc eUnitPrices getHashForScriptWitnessIndex - where - getHashForScriptWitnessIndex - :: ScriptWitnessIndex -> Either PlutusScriptCostError (Maybe ScriptHash) - getHashForScriptWitnessIndex sWitInd = - maybe (Left $ PlutusScriptCostErrPlutusScriptNotFound sWitInd) anyScriptWitnessToHash $ - lookup sWitInd scriptMapping - - anyScriptWitnessToHash :: AnyScriptWitness era -> Either PlutusScriptCostError (Maybe ScriptHash) - anyScriptWitnessToHash = \case - AnyScriptWitness SimpleScriptWitness{} -> Right Nothing - AnyScriptWitness (PlutusScriptWitness _ pVer (PScript pScript) _ _ _) -> - Right $ Just $ hashScript $ PlutusScript pVer pScript - AnyScriptWitness (PlutusScriptWitness _ _ (PReferenceScript refTxIn) _ _ _) -> - case Map.lookup refTxIn utxo of - Nothing -> Left (PlutusScriptCostErrRefInputNotInUTxO refTxIn) - Just (TxOut _ _ _ refScript) -> - case refScript of - ReferenceScriptNone -> Left (PlutusScriptCostErrRefInputNoScript refTxIn) - ReferenceScript _ (ScriptInAnyLang _ script) -> - Right $ Just $ hashScript script - renderScriptCostsWithScriptHashesMap :: L.Prices -> Map ScriptWitnessIndex ScriptHash