I’m trying to send a group of transactions to two smart contracts, but calculate_group_id is not behaving as I would expect. Below is some code that sends two groups of transactions to the two contracts. The code below executes successfully, but if I move the first line of the for loop (txn_approve … ) outside of the for loop, the first iteration of the loop succeeds, but the second fails with an error (“incomplete group”)
Since the loop does not change txn_approve (except for setting its group id), I’m not sure why this is happening. My understanding is that calculate_group_id basically hashes the transactions, but in doing so, I assumed that it must ignore the group id). I think I must be missing something about how calculate_group_id works. Any help would be appreciated.
for asset_id in [assetA_id,assetB_id]:
txn_approve = transaction.ApplicationNoOpTxn(creator_address,sp,app_id,app_args )
txn_transfer = transaction.AssetTransferTxn(
sender=stateless_contract_address,
sp=params,
receiver=receiver_address,
amt=100,
index=asset_id)
gid = transaction.calculate_group_id( [txn_transfer,txn_approve] )
txn_transfer.group = gid
txn_approve.group = gid
stx_transfer = transaction.LogicSigTransaction(txn_transfer, lsig)
stx_approve = txn_approve.sign(creator_sk)
txid = client.send_transactions([stx_transfer,stx_approve])