From 5dd7c5ac3616114b89da20110a6ff45cf88e9362 Mon Sep 17 00:00:00 2001 From: Neil Campbell Date: Thu, 27 Feb 2025 00:50:23 +0800 Subject: [PATCH] fix: use correct group index for composer.buildTransactions() --- .../types_composer.TransactionComposer.md | 18 ++++---- src/types/app-client.spec.ts | 46 ++++++++++++++++++- src/types/composer.ts | 7 +-- 3 files changed, 58 insertions(+), 13 deletions(-) diff --git a/docs/code/classes/types_composer.TransactionComposer.md b/docs/code/classes/types_composer.TransactionComposer.md index 503931e7..cd90cdf1 100644 --- a/docs/code/classes/types_composer.TransactionComposer.md +++ b/docs/code/classes/types_composer.TransactionComposer.md @@ -1437,7 +1437,7 @@ const { atc, transactions, methodCalls } = await composer.build() #### Defined in -[src/types/composer.ts:1885](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/composer.ts#L1885) +[src/types/composer.ts:1886](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/composer.ts#L1886) ___ @@ -1765,7 +1765,7 @@ The number of transactions currently added to this composer #### Defined in -[src/types/composer.ts:1868](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/composer.ts#L1868) +[src/types/composer.ts:1869](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/composer.ts#L1869) ___ @@ -1795,7 +1795,7 @@ An alias for `composer.send(params)`. #### Defined in -[src/types/composer.ts:1981](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/composer.ts#L1981) +[src/types/composer.ts:1982](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/composer.ts#L1982) ___ @@ -1820,7 +1820,7 @@ const { atc, transactions, methodCalls } = await composer.rebuild() #### Defined in -[src/types/composer.ts:1924](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/composer.ts#L1924) +[src/types/composer.ts:1925](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/composer.ts#L1925) ___ @@ -1852,7 +1852,7 @@ const result = await composer.send({ #### Defined in -[src/types/composer.ts:1940](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/composer.ts#L1940) +[src/types/composer.ts:1941](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/composer.ts#L1941) ___ @@ -1876,7 +1876,7 @@ const result = await composer.simulate() #### Defined in -[src/types/composer.ts:1993](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/composer.ts#L1993) +[src/types/composer.ts:1994](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/composer.ts#L1994) ▸ **simulate**(`options`): `Promise`\<[`SendAtomicTransactionComposerResults`](../interfaces/types_transaction.SendAtomicTransactionComposerResults.md) & \{ `simulateResponse`: `SimulateResponse` }\> @@ -1910,7 +1910,7 @@ const result = await composer.simulate({ #### Defined in -[src/types/composer.ts:2004](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/composer.ts#L2004) +[src/types/composer.ts:2005](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/composer.ts#L2005) ▸ **simulate**(`options`): `Promise`\<[`SendAtomicTransactionComposerResults`](../interfaces/types_transaction.SendAtomicTransactionComposerResults.md) & \{ `simulateResponse`: `SimulateResponse` }\> @@ -1945,7 +1945,7 @@ const result = await composer.simulate({ #### Defined in -[src/types/composer.ts:2017](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/composer.ts#L2017) +[src/types/composer.ts:2018](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/composer.ts#L2018) ___ @@ -1971,4 +1971,4 @@ The binary encoded transaction note #### Defined in -[src/types/composer.ts:2094](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/composer.ts#L2094) +[src/types/composer.ts:2095](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/types/composer.ts#L2095) diff --git a/src/types/app-client.spec.ts b/src/types/app-client.spec.ts index 50e08b61..3adae6e0 100644 --- a/src/types/app-client.spec.ts +++ b/src/types/app-client.spec.ts @@ -3,11 +3,11 @@ import algosdk, { Account, Address, Algodv2, + getApplicationAddress, Indexer, OnApplicationComplete, TransactionSigner, TransactionType, - getApplicationAddress, } from 'algosdk' import invariant from 'tiny-invariant' import { afterEach, beforeAll, beforeEach, describe, expect, test } from 'vitest' @@ -929,4 +929,48 @@ describe('app-client', () => { expect(clonedAppClient.appId).toBe(appClient.appId) expect(clonedAppClient.appName).toBe(appSpec.contract.name) }) + + test('simulated transaction group result should match sent transaction group result', async () => { + const { testAccount } = localnet.context + const appClient = await deploy(testAccount) + + const appCall1Params = { + sender: testAccount, + appId: appClient.appId, + method: algosdk.ABIMethod.fromSignature('set_global(uint64,uint64,string,byte[4])void'), + args: [1, 2, 'asdf', new Uint8Array([1, 2, 3, 4])], + } + + const paymentParams = { + sender: testAccount, + receiver: testAccount, + amount: algo(0.01), + } + + const appCall2Params = { + sender: testAccount, + appId: appClient.appId, + method: algosdk.ABIMethod.fromSignature('call_abi(string)string'), + args: ['test'], + } + + const simulateResult = await appClient.algorand + .newGroup() + .addAppCallMethodCall(appCall1Params) + .addPayment(paymentParams) + .addAppCallMethodCall(appCall2Params) + .simulate({ skipSignatures: true }) + + const sendResult = await appClient.algorand + .newGroup() + .addAppCallMethodCall(appCall1Params) + .addPayment(paymentParams) + .addAppCallMethodCall(appCall2Params) + .send() + + expect(simulateResult.transactions.length).toBe(sendResult.transactions.length) + expect(simulateResult.returns!.length).toBe(sendResult.returns!.length) + expect(simulateResult.returns![0]).toEqual(sendResult.returns![0]) + expect(simulateResult.returns![1]).toEqual(sendResult.returns![1]) + }) }) diff --git a/src/types/composer.ts b/src/types/composer.ts index 9e2f38bd..f6596111 100644 --- a/src/types/composer.ts +++ b/src/types/composer.ts @@ -1845,14 +1845,15 @@ export class TransactionComposer { ? await this.buildMethodCall(txn, suggestedParams, false) : [] - transactionsWithSigner.forEach((ts, idx) => { + transactionsWithSigner.forEach((ts) => { transactions.push(ts.txn) + const groupIdx = transactions.length - 1 if (ts.signer && ts.signer !== TransactionComposer.NULL_SIGNER) { - signers.set(idx, ts.signer) + signers.set(groupIdx, ts.signer) } if ('context' in ts && ts.context.abiMethod) { - methodCalls.set(idx, ts.context.abiMethod) + methodCalls.set(groupIdx, ts.context.abiMethod) } }) }