Skip to content

Commit f3d5240

Browse files
authored
fix: bind waitForResult in TransactionResponse (#3660)
* fix: bind wait for result in tx reponse * chore: changeset * chore: lint
1 parent 8030180 commit f3d5240

10 files changed

+99
-36
lines changed

.changeset/brown-chairs-tickle.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@fuel-ts/account": patch
3+
---
4+
5+
fix: bind `waitForResult` in `TransactionResponse`

packages/account/src/providers/transaction-response/transaction-response.ts

+2
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,8 @@ export class TransactionResponse {
155155
this.provider = provider;
156156
this.abis = abis;
157157
this.request = typeof tx === 'string' ? undefined : tx;
158+
159+
this.waitForResult = this.waitForResult.bind(this);
158160
}
159161

160162
/**

packages/fuel-gauge/src/advanced-logging.test.ts

+6-4
Original file line numberDiff line numberDiff line change
@@ -235,9 +235,11 @@ describe('Advanced Logging', () => {
235235

236236
await request.estimateAndFund(wallet);
237237

238-
const tx = await wallet.sendTransaction(request, { estimateTxDependencies: false });
238+
const { waitForResult } = await wallet.sendTransaction(request, {
239+
estimateTxDependencies: false,
240+
});
239241

240-
const { logs } = await tx.waitForResult();
242+
const { logs } = await waitForResult();
241243

242244
expect(logs).toBeDefined();
243245

@@ -309,9 +311,9 @@ describe('Advanced Logging', () => {
309311

310312
await request.estimateAndFund(wallet);
311313

312-
const tx = await wallet.sendTransaction(request);
314+
const { waitForResult } = await wallet.sendTransaction(request);
313315

314-
const { logs } = await tx.waitForResult();
316+
const { logs } = await waitForResult();
315317

316318
expect(logs).toBeDefined();
317319

packages/fuel-gauge/src/await-execution.test.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ describe('await-execution', () => {
3434
await genesisWallet.signTransaction(transfer)
3535
);
3636

37-
const response = await provider.sendTransaction(transfer);
38-
const { isStatusSuccess } = await response.waitForResult();
37+
const { waitForResult } = await provider.sendTransaction(transfer);
38+
const { isStatusSuccess } = await waitForResult();
3939

4040
expect(isStatusSuccess).toBe(true);
4141
});

packages/fuel-gauge/src/doc-examples.test.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ describe('Doc Examples', () => {
273273

274274
const assetId = await provider.getBaseAssetId();
275275

276-
const submitted = await fundingWallet.batchTransfer([
276+
const { waitForResult } = await fundingWallet.batchTransfer([
277277
{
278278
amount: 1_000_000,
279279
destination: wallet1.address,
@@ -291,7 +291,7 @@ describe('Doc Examples', () => {
291291
},
292292
]);
293293

294-
await submitted.waitForResult();
294+
await waitForResult();
295295

296296
const receiver = Wallet.generate({ provider });
297297

packages/fuel-gauge/src/min-gas.test.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ describe('Minimum gas tests', () => {
6363
/**
6464
* Send transaction
6565
*/
66-
const result = await wallet.sendTransaction(request);
67-
const { status } = await result.waitForResult();
66+
const { waitForResult } = await wallet.sendTransaction(request);
67+
const { status } = await waitForResult();
6868

6969
expect(status).toBe(TransactionStatus.success);
7070
});
@@ -149,8 +149,8 @@ describe('Minimum gas tests', () => {
149149
/**
150150
* Send transaction predicate
151151
*/
152-
const result = await predicate.sendTransaction(request);
153-
const { status, receipts } = await result.waitForResult();
152+
const { waitForResult } = await predicate.sendTransaction(request);
153+
const { status, receipts } = await waitForResult();
154154
const gasUsedFromReceipts = getGasUsedFromReceipts(receipts);
155155

156156
expect(status).toBe(TransactionStatus.success);

packages/fuel-gauge/src/predicate/predicate-populate-witness.test.ts

+12-12
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,9 @@ describe('Predicate', () => {
7373
transactionRequest.gasLimit = bn(100_000);
7474
transactionRequest.maxFee = bn(120_000);
7575

76-
const tx = await provider.sendTransaction(transactionRequest);
76+
const { waitForResult } = await provider.sendTransaction(transactionRequest);
7777

78-
const { isStatusSuccess } = await tx.waitForResult();
78+
const { isStatusSuccess } = await waitForResult();
7979

8080
expect(isStatusSuccess).toBeTruthy();
8181
});
@@ -129,9 +129,9 @@ describe('Predicate', () => {
129129

130130
transactionRequest = await wallet1.populateTransactionWitnessesSignature(transactionRequest);
131131

132-
const tx = await provider.sendTransaction(transactionRequest);
132+
const { waitForResult } = await provider.sendTransaction(transactionRequest);
133133

134-
const { isStatusSuccess } = await tx.waitForResult();
134+
const { isStatusSuccess } = await waitForResult();
135135

136136
expect(isStatusSuccess).toBeTruthy();
137137
});
@@ -201,9 +201,9 @@ describe('Predicate', () => {
201201
transactionRequest = await wallet1.populateTransactionWitnessesSignature(transactionRequest);
202202
transactionRequest = await wallet2.populateTransactionWitnessesSignature(transactionRequest);
203203

204-
const tx = await provider.sendTransaction(transactionRequest);
204+
const { waitForResult } = await provider.sendTransaction(transactionRequest);
205205

206-
const { isStatusSuccess } = await tx.waitForResult();
206+
const { isStatusSuccess } = await waitForResult();
207207

208208
expect(isStatusSuccess).toBeTruthy();
209209
});
@@ -296,9 +296,9 @@ describe('Predicate', () => {
296296
transactionRequest = await wallet2.populateTransactionWitnessesSignature(transactionRequest);
297297
transactionRequest = await wallet3.populateTransactionWitnessesSignature(transactionRequest);
298298

299-
const tx = await provider.sendTransaction(transactionRequest);
299+
const { waitForResult } = await provider.sendTransaction(transactionRequest);
300300

301-
const { isStatusSuccess } = await tx.waitForResult();
301+
const { isStatusSuccess } = await waitForResult();
302302

303303
expect(isStatusSuccess).toBeTruthy();
304304
});
@@ -378,9 +378,9 @@ describe('Predicate', () => {
378378
transactionRequest = await wallet1.populateTransactionWitnessesSignature(transactionRequest);
379379
transactionRequest = await wallet2.populateTransactionWitnessesSignature(transactionRequest);
380380

381-
const tx = await provider.sendTransaction(transactionRequest);
381+
const { waitForResult } = await provider.sendTransaction(transactionRequest);
382382

383-
const { isStatusSuccess } = await tx.waitForResult();
383+
const { isStatusSuccess } = await waitForResult();
384384

385385
expect(isStatusSuccess).toBeTruthy();
386386
});
@@ -472,9 +472,9 @@ describe('Predicate', () => {
472472
transactionRequest = await wallet2.populateTransactionWitnessesSignature(transactionRequest);
473473
transactionRequest = await wallet3.populateTransactionWitnessesSignature(transactionRequest);
474474

475-
const tx = await provider.sendTransaction(transactionRequest);
475+
const { waitForResult } = await provider.sendTransaction(transactionRequest);
476476

477-
const { isStatusSuccess } = await tx.waitForResult();
477+
const { isStatusSuccess } = await waitForResult();
478478

479479
expect(isStatusSuccess).toBeTruthy();
480480
});

packages/fuel-gauge/src/str-slice.test.ts

+12-4
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,21 @@ describe('str slice', () => {
4747
const amountToPredicate = 250_000;
4848
const amountToReceiver = 50_000;
4949

50-
const setupTx = await sender.transfer(predicate.address, amountToPredicate, baseAssetId);
51-
await setupTx.waitForResult();
50+
const { waitForResult: setupTx } = await sender.transfer(
51+
predicate.address,
52+
amountToPredicate,
53+
baseAssetId
54+
);
55+
await setupTx();
5256

5357
const initialReceiverBalance = await receiver.getBalance();
5458

55-
const tx = await predicate.transfer(receiver.address, amountToReceiver, baseAssetId);
56-
const { isStatusSuccess } = await tx.waitForResult();
59+
const { waitForResult } = await predicate.transfer(
60+
receiver.address,
61+
amountToReceiver,
62+
baseAssetId
63+
);
64+
const { isStatusSuccess } = await waitForResult();
5765
const finalReceiverBalance = await receiver.getBalance();
5866
expect(bn(initialReceiverBalance).add(amountToReceiver).toHex()).toEqual(
5967
finalReceiverBalance.toHex()

packages/fuel-gauge/src/transaction-response.test.ts

+46
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import { TransactionResponse, Wallet, ScriptTransactionRequest } from 'fuels';
33
import { expectToThrowFuelError, launchTestNode } from 'fuels/test-utils';
44
import type { MockInstance } from 'vitest';
55

6+
import { CallTestContractFactory } from '../test/typegen';
7+
68
async function verifyKeepAliveMessageWasSent(subscriptionStream: ReadableStream<Uint8Array>) {
79
const decoder = new TextDecoder();
810
const reader = subscriptionStream.getReader();
@@ -461,4 +463,48 @@ describe('TransactionResponse', () => {
461463
expect(getLatestGasPriceSpy).toHaveBeenCalledTimes(1);
462464
expect(finalisedResult.id).toBe(tx.id);
463465
});
466+
467+
it('builds response and assembles result [from contract call]', async () => {
468+
using launched = await launchTestNode({
469+
contractsConfigs: [CallTestContractFactory],
470+
});
471+
472+
const {
473+
provider,
474+
wallets: [genesisWallet],
475+
contracts: [contract],
476+
} = launched;
477+
478+
const txReq = await contract.functions.assert_u8(100, 100).getTransactionRequest();
479+
await txReq.estimateAndFund(genesisWallet);
480+
const txId = await txReq.getTransactionId(await provider.getChainId());
481+
482+
const response = await genesisWallet.sendTransaction(txReq);
483+
const result = await response.waitForResult();
484+
485+
expect(result.isStatusSuccess).toBe(true);
486+
expect(result.id).toBe(txId);
487+
});
488+
489+
it('builds response and assembles result [from contract call w/ destructure]', async () => {
490+
using launched = await launchTestNode({
491+
contractsConfigs: [CallTestContractFactory],
492+
});
493+
494+
const {
495+
provider,
496+
wallets: [genesisWallet],
497+
contracts: [contract],
498+
} = launched;
499+
500+
const txReq = await contract.functions.assert_u8(100, 100).getTransactionRequest();
501+
await txReq.estimateAndFund(genesisWallet);
502+
const txId = await txReq.getTransactionId(await provider.getChainId());
503+
504+
const { waitForResult } = await genesisWallet.sendTransaction(txReq);
505+
const result = await waitForResult();
506+
507+
expect(result.isStatusSuccess).toBe(true);
508+
expect(result.id).toBe(txId);
509+
});
464510
});

packages/fuel-gauge/src/transaction.test.ts

+8-8
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,9 @@ describe('Transaction', () => {
7676

7777
await request.estimateAndFund(fundedWallet);
7878

79-
const tx = await fundedWallet.sendTransaction(request);
79+
const { waitForResult } = await fundedWallet.sendTransaction(request);
8080

81-
const { isStatusSuccess } = await tx.waitForResult();
81+
const { isStatusSuccess } = await waitForResult();
8282

8383
// Wait for message status to update
8484
await sleep(1000);
@@ -127,9 +127,9 @@ describe('Transaction', () => {
127127

128128
await request.estimateAndFund(fundedWallet);
129129

130-
const tx = await fundedWallet.sendTransaction(request);
130+
const { waitForResult } = await fundedWallet.sendTransaction(request);
131131

132-
const { isStatusSuccess } = await tx.waitForResult();
132+
const { isStatusSuccess } = await waitForResult();
133133

134134
// Wait for message status to update
135135
await sleep(1000);
@@ -166,10 +166,10 @@ describe('Transaction', () => {
166166

167167
await request.estimateAndFund(sender);
168168

169-
const tx = await sender.sendTransaction(request, {
169+
const { waitForResult } = await sender.sendTransaction(request, {
170170
enableAssetBurn: true,
171171
});
172-
const { isStatusSuccess } = await tx.waitForResult();
172+
const { isStatusSuccess } = await waitForResult();
173173
expect(isStatusSuccess).toEqual(true);
174174
expect(request.outputs).to.not.contain(
175175
expect.objectContaining({
@@ -254,10 +254,10 @@ describe('Transaction', () => {
254254

255255
await request.estimateAndFund(owner);
256256

257-
const tx = await owner.sendTransaction(request, {
257+
const { waitForResult } = await owner.sendTransaction(request, {
258258
enableAssetBurn: true,
259259
});
260-
const { isStatusSuccess } = await tx.waitForResult();
260+
const { isStatusSuccess } = await waitForResult();
261261
expect(isStatusSuccess).toEqual(true);
262262
expect(request.outputs).to.not.contain(
263263
expect.objectContaining({

0 commit comments

Comments
 (0)