Skip to content

Commit 1fb00c1

Browse files
Added forced budget option
1 parent 834c249 commit 1fb00c1

File tree

5 files changed

+31
-17
lines changed

5 files changed

+31
-17
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ main = do
9696
, -- Dry run mode will build the tx, but skip the submit step
9797
pcDryRun = False
9898
, pcLogLevel = Debug
99+
, -- | Forced budget for scripts, as optional (CPU Steps, Memory Units)
100+
pcForceBudget = Nothing
99101
, -- Protocol params file location relative to the cardano-cli working directory (needed for the cli)
100102
, pcProtocolParamsFile = "./protocol.json"
101103
, pcEnableTxEndpoint = True

src/BotPlutusInterface/CardanoCLI.hs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,13 @@ signTx pabConf tx pubKeys =
319319
, ["--out-file", txFilePath pabConf "signed" tx]
320320
]
321321

322+
budgetFromConfig :: PABConfig -> ExBudget -> ExBudget
323+
budgetFromConfig pabConf derivedBudget =
324+
maybe
325+
derivedBudget
326+
(\(steps, memory) -> ExBudget (ExCPU $ fromInteger steps) (ExMemory $ fromInteger memory))
327+
pabConf.pcForceBudget
328+
322329
-- Signs and writes a tx (uses the tx body written to disk as input)
323330
submitTx ::
324331
forall (w :: Type) (effs :: [Type -> Type]).
@@ -357,10 +364,11 @@ txInOpts pabConf txInfo =
357364
Just (ConsumeScriptAddress validator redeemer datum) ->
358365
let scriptContext = ScriptContext txInfo $ Plutus.Spending txOutRef
359366
exBudget =
360-
fromRight mempty $
361-
calculateExBudget
362-
(Scripts.unValidatorScript validator)
363-
[Plutus.getRedeemer redeemer, Plutus.getDatum datum, Plutus.toBuiltinData scriptContext]
367+
budgetFromConfig pabConf $
368+
fromRight mempty $
369+
calculateExBudget
370+
(Scripts.unValidatorScript validator)
371+
[Plutus.getRedeemer redeemer, Plutus.getDatum datum, Plutus.toBuiltinData scriptContext]
364372
in (,exBudget) $
365373
mconcat
366374
[
@@ -399,10 +407,11 @@ mintOpts pabConf txInfo mintingPolicies redeemers mintValue =
399407
curSymbol = Value.mpsSymbol $ Scripts.mintingPolicyHash policy
400408
scriptContext = ScriptContext txInfo $ Plutus.Minting curSymbol
401409
exBudget r =
402-
fromRight mempty $
403-
calculateExBudget
404-
(Scripts.unMintingPolicyScript policy)
405-
[Plutus.getRedeemer r, Plutus.toBuiltinData scriptContext]
410+
budgetFromConfig pabConf $
411+
fromRight mempty $
412+
calculateExBudget
413+
(Scripts.unMintingPolicyScript policy)
414+
[Plutus.getRedeemer r, Plutus.toBuiltinData scriptContext]
406415
toOpts r =
407416
let budget = exBudget r
408417
in (,budget) $

src/BotPlutusInterface/Types.hs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ data PABConfig = PABConfig
6363
, pcLogLevel :: !LogLevel
6464
, pcOwnPubKeyHash :: !PubKeyHash
6565
, pcTipPollingInterval :: !Natural
66+
, -- | Forced budget for scripts, as optional (CPU Steps, Memory Units)
67+
pcForceBudget :: !(Maybe (Integer, Integer))
6668
, pcPort :: !Port
6769
, pcEnableTxEndpoint :: !Bool
6870
}
@@ -125,6 +127,7 @@ instance Default PABConfig where
125127
, pcProtocolParamsFile = "./protocol.json"
126128
, pcLogLevel = Info
127129
, pcOwnPubKeyHash = ""
130+
, pcForceBudget = Nothing
128131
, pcPort = 9080
129132
, pcEnableTxEndpoint = False
130133
}

test/Spec/BotPlutusInterface/Contract.hs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -518,7 +518,7 @@ mintTokens = do
518518
--tx-out ${addr2}+1000 + 5 ${curSymbol'}.74657374546F6B656E
519519
--mint-script-file ./result-scripts/policy-${curSymbol'}.plutus
520520
--mint-redeemer-file ./result-scripts/redeemer-${redeemerHash}.json
521-
--mint-execution-units (387149,1400)
521+
--mint-execution-units (500000,2000)
522522
--mint 5 ${curSymbol'}.74657374546F6B656E
523523
--required-signer ./signing-keys/signing-key-${pkh1'}.skey
524524
--fee 0
@@ -531,14 +531,14 @@ mintTokens = do
531531
cardano-cli transaction build-raw --alonzo-era
532532
--tx-in ${inTxId}#0
533533
--tx-in-collateral ${inTxId}#0
534-
--tx-out ${addr1}+610151
534+
--tx-out ${addr1}+496700
535535
--tx-out ${addr2}+1000 + 5 ${curSymbol'}.74657374546F6B656E
536536
--mint-script-file ./result-scripts/policy-${curSymbol'}.plutus
537537
--mint-redeemer-file ./result-scripts/redeemer-${redeemerHash}.json
538-
--mint-execution-units (387149,1400)
538+
--mint-execution-units (500000,2000)
539539
--mint 5 ${curSymbol'}.74657374546F6B656E
540540
--required-signer ./signing-keys/signing-key-${pkh1'}.skey
541-
--fee 388849
541+
--fee 502300
542542
--protocol-params-file ./protocol.json --out-file ./txs/tx-${outTxId}.raw
543543
|]
544544
)
@@ -702,7 +702,7 @@ redeemFromValidator = do
702702
--tx-in-script-file ./result-scripts/validator-${valHash'}.plutus
703703
--tx-in-datum-file ./result-scripts/datum-${datumHash'}.json
704704
--tx-in-redeemer-file ./result-scripts/redeemer-${redeemerHash}.json
705-
--tx-in-execution-units (476468,1700)
705+
--tx-in-execution-units (500000,2000)
706706
--tx-in-collateral ${inTxId}#0
707707
--tx-out ${addr2}+500
708708
--required-signer ./signing-keys/signing-key-${pkh1'}.skey
@@ -718,12 +718,12 @@ redeemFromValidator = do
718718
--tx-in-script-file ./result-scripts/validator-${valHash'}.plutus
719719
--tx-in-datum-file ./result-scripts/datum-${datumHash'}.json
720720
--tx-in-redeemer-file ./result-scripts/redeemer-${redeemerHash}.json
721-
--tx-in-execution-units (476468,1700)
721+
--tx-in-execution-units (500000,2000)
722722
--tx-in-collateral ${inTxId}#0
723-
--tx-out ${addr1}+522182
723+
--tx-out ${addr1}+498350
724724
--tx-out ${addr2}+500
725725
--required-signer ./signing-keys/signing-key-${pkh1'}.skey
726-
--fee 478568
726+
--fee 502400
727727
--protocol-params-file ./protocol.json --out-file ./txs/tx-${outTxId}.raw
728728
|]
729729
)

test/Spec/MockContract.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ instance Monoid w => Default (MockContractState w) where
230230
instance Monoid w => Default (ContractEnvironment w) where
231231
def =
232232
ContractEnvironment
233-
{ cePABConfig = def {pcNetwork = Mainnet, pcOwnPubKeyHash = pkh1}
233+
{ cePABConfig = def {pcNetwork = Mainnet, pcOwnPubKeyHash = pkh1, pcForceBudget = Just (500000, 2000)}
234234
, ceContractInstanceId = ContractInstanceId UUID.nil
235235
, ceContractState = unsafePerformIO $ newTVarIO def
236236
}

0 commit comments

Comments
 (0)