Hi everyone, I wonder if the transaction order of a group orders is based on the groupIndex. Also, if I used
txn Fee in the contract for a group order function, does it refer to the txn 0? Or does the
txn refer to the first transaction that
Welcome to Algorand!
When you create a group, you specify the order of the transactions.
groupIndex is implicitly derived from this order.
For example, if you group txA, txB, txC in this order. Then txA has groupIndex 0, txB has groupIndex 1, and txC has groupIndex 2.
txn always refers to the current transaction executing the smart contract/smart signature.
So if you have a group of 3 application call transactions tx0, tx1, tx2:
- in the application call tx0, then
txn corresponds to tx0
- in the application call tx1, then
txn corresponds to tx1
- in the application call tx2, then
txn corresponds to tx2
But also note that
lsig or smart signatures are really reserved for advanced use cases nowadays. Most dApps would only use smart contracts and the sender can be any account (including a smart signature account but this is another story).
Thank you for the detailed response, Fabrice. I’m still having some questions about the field
pay . The doc says ’ Pooled transaction fees - One transaction pays the fees of others.’, but how can we specify which transaction in the group pays all fee. Also, if I would like to make sure that all transactions sent by lsig never pays fees, what checks can I made to ensure that? Your help is really appreciated.
The only thing that matters is that the sum of all the fees of all the transactions is sufficient.
See the thread Cannot calculate suggested fees for inner transactions for details
Disclaimer: I did not test the code below.
Assert(Txn.fee() == Int(0))