@@ -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+
808817def _find_available_transaction_index (
809818 txns : list [TransactionWithSigner ], reference_type : str , reference : str | dict [str , Any ] | int
810819) -> int :
0 commit comments