11{-# LANGUAGE AllowAmbiguousTypes #-}
22{-# LANGUAGE NamedFieldPuns #-}
3- {-# OPTIONS_GHC -w #-}
43
54module BotPlutusInterface.CardanoCLI (
65 submitTx ,
@@ -27,7 +26,8 @@ import BotPlutusInterface.Files (
2726 )
2827import BotPlutusInterface.Types (PABConfig (pcSlotConfig ), Tip )
2928import BotPlutusInterface.UtxoParser qualified as UtxoParser
30- import Cardano.Api.Shelley (NetworkId (Mainnet , Testnet ), NetworkMagic (.. ), serialiseAddress )
29+ import Cardano.Api (AnyPlutusScriptVersion (AnyPlutusScriptVersion ), CostModel (CostModel ), PlutusScriptVersion (PlutusScriptV1 ))
30+ import Cardano.Api.Shelley (NetworkId (Mainnet , Testnet ), NetworkMagic (.. ), ProtocolParameters (protocolParamCostModels ), serialiseAddress )
3131import Codec.Serialise qualified as Codec
3232import Control.Monad (join )
3333import Control.Monad.Freer (Eff , Member )
@@ -367,6 +367,7 @@ txInOpts pabConf txInfo =
367367 budgetFromConfig pabConf $
368368 fromRight mempty $
369369 calculateExBudget
370+ pabConf
370371 (Scripts. unValidatorScript validator)
371372 [Plutus. getRedeemer redeemer, Plutus. getDatum datum, Plutus. toBuiltinData scriptContext]
372373 in (,exBudget) $
@@ -410,6 +411,7 @@ mintOpts pabConf txInfo mintingPolicies redeemers mintValue =
410411 budgetFromConfig pabConf $
411412 fromRight mempty $
412413 calculateExBudget
414+ pabConf
413415 (Scripts. unMintingPolicyScript policy)
414416 [Plutus. getRedeemer r, Plutus. toBuiltinData scriptContext]
415417 toOpts r =
@@ -497,20 +499,22 @@ unsafeSerialiseAddress network address =
497499 Right a -> a
498500 Left _ -> error " Couldn't create address"
499501
500- calculateExBudget :: Script -> [BuiltinData ] -> Either Text ExBudget
501- calculateExBudget script builtinData = do
502- -- TODO, pull this from the protocol, they're the same for now but may not always be
503- modelParams <- maybeToRight " Cost model params invalid." Plutus. defaultCostModelParams
502+ extractCostModel :: PABConfig -> Maybe Plutus. CostModelParams
503+ extractCostModel pabConf =
504+ unCostModel <$> Map. lookup (AnyPlutusScriptVersion PlutusScriptV1 ) (protocolParamCostModels pabConf. pcProtocolParams)
505+ where
506+ unCostModel :: CostModel -> Map Text Integer
507+ unCostModel (CostModel m) = m
508+
509+ calculateExBudget :: PABConfig -> Script -> [BuiltinData ] -> Either Text ExBudget
510+ calculateExBudget pabConf script builtinData = do
511+ modelParams <- maybeToRight " Cost model params invalid." $ extractCostModel pabConf
504512 let serialisedScript = ShortByteString. toShort $ LazyByteString. toStrict $ Codec. serialise script
505513 pData = map Plutus. builtinDataToData builtinData
506514 mapLeft showText $
507515 snd $
508516 Plutus. evaluateScriptCounting Plutus. Verbose modelParams serialisedScript pData
509517
510- -- calculateExBudget :: Script -> [BuiltinData] -> Either Text ExBudget
511- -- calculateExBudget script builtinData = do
512- -- mapLeft showText $ fst <$> Scripts.evaluateScript (Scripts.applyArguments script $ Plutus.builtinDataToData <$> builtinData)
513-
514518exBudgetToCliArg :: ExBudget -> Text
515519exBudgetToCliArg (ExBudget (ExCPU steps) (ExMemory memory)) =
516520 " (" <> showText steps <> " ," <> showText memory <> " )"
0 commit comments