diff --git a/.changeset/nervous-impalas-serve.md b/.changeset/nervous-impalas-serve.md new file mode 100644 index 00000000000..ed16209b022 --- /dev/null +++ b/.changeset/nervous-impalas-serve.md @@ -0,0 +1,5 @@ +--- +"@fuel-ts/account": patch +--- + +chore: optimize `getTransactions` query diff --git a/packages/account/src/providers/operations.graphql b/packages/account/src/providers/operations.graphql index 67efe338593..a4cbed37adb 100644 --- a/packages/account/src/providers/operations.graphql +++ b/packages/account/src/providers/operations.graphql @@ -130,6 +130,11 @@ fragment transactionFragment on Transaction { } } +fragment transactionRawPayloadFragment on Transaction { + id + rawPayload +} + fragment inputEstimatePredicatesFragment on Input { ... on InputCoin { predicateGasUsed @@ -487,7 +492,7 @@ query getTransactions( transactions(after: $after, before: $before, first: $first, last: $last) { edges { node { - ...transactionFragment + rawPayload } } pageInfo { @@ -553,7 +558,7 @@ query getBlockWithTransactions($blockId: BlockId, $blockHeight: U32) { block(id: $blockId, height: $blockHeight) { ...blockFragment transactions { - ...transactionRawPayload + ...transactionRawPayloadFragment } } } @@ -571,11 +576,6 @@ query getBlocks($after: String, $before: String, $first: Int, $last: Int) { } } -fragment transactionRawPayload on Transaction { - id - rawPayload -} - query getCoin($coinId: UtxoId!) { coin(utxoId: $coinId) { ...coinFragment diff --git a/packages/account/src/providers/provider.test.ts b/packages/account/src/providers/provider.test.ts index eea8adcd4e1..ec8c6313839 100644 --- a/packages/account/src/providers/provider.test.ts +++ b/packages/account/src/providers/provider.test.ts @@ -1872,6 +1872,48 @@ Supported fuel-core version: ${mock.supportedVersion}.` }); }); + it('ensures getTransactions does not fetch unused data', async () => { + using launched = await setupTestProviderAndWallets(); + const { provider } = launched; + + await provider.produceBlocks(1); + + const { transactions } = await provider.operations.getTransactions({ + first: 1, + }); + + expect(transactions.edges.length).toBe(1); + + const expectedData = { + rawPayload: expect.any(String), + }; + + expect(transactions.edges[0].node).toStrictEqual(expectedData); + }); + + it('ensures getBlockWithTransactions does not fetch unused transaction data', async () => { + using launched = await setupTestProviderAndWallets(); + const { provider } = launched; + + await provider.produceBlocks(1); + + const blockNumber = await provider.getBlockNumber(); + + const { block } = await provider.operations.getBlockWithTransactions({ + blockHeight: blockNumber.toString(), + }); + + expect(block).toBeDefined(); + expect(block?.transactions.length).toBe(1); + + const expectedData = { + id: expect.any(String), + rawPayload: expect.any(String), + }; + + expect(block?.transactions?.[0]).toStrictEqual(expectedData); + }); + describe('paginated methods', () => { test('can properly use getCoins', async () => { const totalCoins = RESOURCES_PAGE_SIZE_LIMIT + 1;