Skip to content

Commit 527fb6b

Browse files
committed
Fix max tx fee
1 parent 05b150d commit 527fb6b

File tree

3 files changed

+13
-9
lines changed

3 files changed

+13
-9
lines changed

pycardano/txbuilder.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1041,24 +1041,26 @@ def _ensure_no_input_exclusion_conflict(self):
10411041
f"{intersection}."
10421042
)
10431043

1044-
def _estimate_fee(self):
1045-
plutus_execution_units = ExecutionUnits(0, 0)
1046-
for redeemer in self._redeemer_list:
1047-
plutus_execution_units += redeemer.ex_units
1048-
1044+
def _ref_script_size(self):
10491045
ref_script_size = 0
10501046
for s in self._reference_scripts:
10511047
if isinstance(s, NativeScript):
10521048
ref_script_size += len(s.to_cbor())
10531049
else:
10541050
ref_script_size += len(s)
1051+
return ref_script_size
1052+
1053+
def _estimate_fee(self):
1054+
plutus_execution_units = ExecutionUnits(0, 0)
1055+
for redeemer in self._redeemer_list:
1056+
plutus_execution_units += redeemer.ex_units
10551057

10561058
estimated_fee = fee(
10571059
self.context,
10581060
len(self._build_full_fake_tx().to_cbor()),
10591061
plutus_execution_units.steps,
10601062
plutus_execution_units.mem,
1061-
ref_script_size,
1063+
self._ref_script_size(),
10621064
)
10631065
if self.fee_buffer is not None:
10641066
estimated_fee += self.fee_buffer
@@ -1314,7 +1316,7 @@ def _set_collateral_return(self, collateral_return_address: Optional[Address]):
13141316
return
13151317

13161318
collateral_amount = (
1317-
max_tx_fee(context=self.context)
1319+
max_tx_fee(context=self.context, ref_script_size=self._ref_script_size())
13181320
* self.context.protocol_param.collateral_percent
13191321
// 100
13201322
)

pycardano/utils.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,11 +97,12 @@ def fee(
9797
)
9898

9999

100-
def max_tx_fee(context: ChainContext) -> int:
100+
def max_tx_fee(context: ChainContext, ref_script_size: int = 0) -> int:
101101
"""Calculate the maximum possible transaction fee based on protocol parameters.
102102
103103
Args:
104104
context (ChainContext): A chain context.
105+
ref_script_size (int): Size of reference scripts in the transaction.
105106
106107
Returns:
107108
int: Maximum possible tx fee in lovelace.
@@ -111,6 +112,7 @@ def max_tx_fee(context: ChainContext) -> int:
111112
context.protocol_param.max_tx_size,
112113
context.protocol_param.max_tx_ex_steps,
113114
context.protocol_param.max_tx_ex_mem,
115+
ref_script_size,
114116
)
115117

116118

test/pycardano/util.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ class FixedChainContext(ChainContext):
4646
coins_per_utxo_word=34482,
4747
coins_per_utxo_byte=4310,
4848
cost_models={},
49-
min_fee_reference_scripts={"base": 25600, "range": 44, "multiplier": 1.2},
49+
min_fee_reference_scripts={"base": 44, "range": 25600, "multiplier": 1.2},
5050
maximum_reference_scripts_size={"bytes": 200_000},
5151
)
5252

0 commit comments

Comments
 (0)