Skip to content

Commit

Permalink
Refactor transaction build to use `renderScriptCostsWithScriptHashe…
Browse files Browse the repository at this point in the history
…sMap`
  • Loading branch information
Jimbo4350 authored and palas committed Jan 31, 2025
1 parent 146976f commit d80e63d
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 41 deletions.
2 changes: 2 additions & 0 deletions cardano-cli/cardano-cli.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
17 changes: 11 additions & 6 deletions cardano-cli/src/Cardano/CLI/EraBased/Run/Transaction.hs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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 <-
Expand Down
35 changes: 0 additions & 35 deletions cardano-cli/src/Cardano/CLI/Types/Output.hs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ module Cardano.CLI.Types.Output
, QueryTipLocalStateOutput (..)
, ScriptCostOutput (..)
, createOpCertIntervalInfo
, renderScriptCosts
, renderScriptCostsWithScriptHashesMap
)
where
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit d80e63d

Please sign in to comment.