Skip to content

Commit 6bc38f2

Browse files
committed
refactor: extract method
1 parent 9c4fe83 commit 6bc38f2

File tree

1 file changed

+31
-22
lines changed

1 file changed

+31
-22
lines changed

src/algokit_utils/transactions/transaction_composer.py

Lines changed: 31 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -667,7 +667,7 @@ def _encode_lease(lease: str | bytes | None) -> bytes | None:
667667
raise TypeError(f"Unknown lease type received of {type(lease)}")
668668

669669

670-
def _get_group_execution_info( # noqa: C901
670+
def _get_group_execution_info(
671671
atc: AtomicTransactionComposer,
672672
algod: AlgodClient,
673673
populate_app_call_resources: bool | None = None,
@@ -736,27 +736,12 @@ def _get_group_execution_info( # noqa: C901
736736

737737
required_fee_delta = 0
738738
if cover_app_call_inner_transaction_fees:
739-
# Calculate parent transaction fee
740-
parent_per_byte_fee = per_byte_txn_fee * (original_txn.estimate_size() + 75)
741-
parent_min_fee = max(parent_per_byte_fee, min_txn_fee)
742-
parent_fee_delta = parent_min_fee - original_txn.fee
743-
744-
if isinstance(original_txn, algosdk.transaction.ApplicationCallTxn):
745-
# Calculate inner transaction fees recursively
746-
def calculate_inner_fee_delta(inner_txns: list[dict], acc: int = 0) -> int:
747-
for inner_txn in reversed(inner_txns):
748-
current_fee_delta = (
749-
calculate_inner_fee_delta(inner_txn["inner-txns"], acc)
750-
if inner_txn.get("inner-txns")
751-
else acc
752-
) + (min_txn_fee - inner_txn["txn"]["txn"].get("fee", 0))
753-
acc = max(0, current_fee_delta)
754-
return acc
755-
756-
inner_fee_delta = calculate_inner_fee_delta(txn_result.get("inner-txns", []))
757-
required_fee_delta = inner_fee_delta + parent_fee_delta
758-
else:
759-
required_fee_delta = parent_fee_delta
739+
required_fee_delta = _calculate_required_fee_delta(
740+
original_txn,
741+
txn_result,
742+
per_byte_txn_fee=per_byte_txn_fee,
743+
min_txn_fee=min_txn_fee,
744+
)
760745

761746
txn_results.append(
762747
ExecutionInfoTxn(
@@ -805,6 +790,30 @@ def _handle_simulation_error(
805790
)
806791

807792

793+
def _calculate_required_fee_delta(
794+
original_txn: transaction.Transaction, txn_result: dict[str, Any], *, per_byte_txn_fee: int, min_txn_fee: int
795+
) -> int:
796+
# Calculate parent transaction fee
797+
parent_per_byte_fee = per_byte_txn_fee * (original_txn.estimate_size() + 75)
798+
parent_min_fee = max(parent_per_byte_fee, min_txn_fee)
799+
parent_fee_delta = parent_min_fee - original_txn.fee
800+
801+
if isinstance(original_txn, algosdk.transaction.ApplicationCallTxn):
802+
# Calculate inner transaction fees recursively
803+
def calculate_inner_fee_delta(inner_txns: list[dict], acc: int = 0) -> int:
804+
for inner_txn in reversed(inner_txns):
805+
current_fee_delta = (
806+
calculate_inner_fee_delta(inner_txn["inner-txns"], acc) if inner_txn.get("inner-txns") else acc
807+
) + (min_txn_fee - inner_txn["txn"]["txn"].get("fee", 0))
808+
acc = max(0, current_fee_delta)
809+
return acc
810+
811+
inner_fee_delta = calculate_inner_fee_delta(txn_result.get("inner-txns", []))
812+
return inner_fee_delta + parent_fee_delta
813+
else:
814+
return parent_fee_delta
815+
816+
808817
def _find_available_transaction_index(
809818
txns: list[TransactionWithSigner], reference_type: str, reference: str | dict[str, Any] | int
810819
) -> int:

0 commit comments

Comments
 (0)