From 7f72bbeba37411a1e2d995ed0cc6037a13a6f485 Mon Sep 17 00:00:00 2001 From: Tyera Eulberg Date: Wed, 10 Apr 2019 13:15:41 -0700 Subject: [PATCH] fix: Update signature status result type --- web3.js/src/connection.js | 14 +++++++------- web3.js/src/util/send-and-confirm-transaction.js | 6 +++--- web3.js/test/connection.test.js | 12 ++++++------ 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/web3.js/src/connection.js b/web3.js/src/connection.js index dd29d80d27..e476d83d26 100644 --- a/web3.js/src/connection.js +++ b/web3.js/src/connection.js @@ -124,13 +124,13 @@ const ConfirmTransactionRpcResult = jsonRpcResult('boolean'); * Expected JSON RPC response for the "getSignatureStatus" message */ const GetSignatureStatusRpcResult = jsonRpcResult( - struct.enum([ - 'AccountInUse', - 'Confirmed', - 'GenericFailure', - 'ProgramRuntimeError', - 'SignatureNotFound', - ]), + struct.union([ + 'null', + struct.union([ + struct({Ok: 'null'}), + struct({Err: 'string'}) + ]) + ]) ); /** diff --git a/web3.js/src/util/send-and-confirm-transaction.js b/web3.js/src/util/send-and-confirm-transaction.js index a4a3535a92..8844c19baa 100644 --- a/web3.js/src/util/send-and-confirm-transaction.js +++ b/web3.js/src/util/send-and-confirm-transaction.js @@ -28,7 +28,7 @@ export async function sendAndConfirmTransaction( let statusRetries = 6; for (;;) { status = await connection.getSignatureStatus(signature); - if (status !== 'SignatureNotFound') { + if (status) { break; } @@ -39,7 +39,7 @@ export async function sendAndConfirmTransaction( await sleep((500 * DEFAULT_TICKS_PER_SLOT) / NUM_TICKS_PER_SECOND); } - if (status === 'Confirmed') { + if ('Ok' in status) { break; } if (--sendRetries <= 0) { @@ -51,7 +51,7 @@ export async function sendAndConfirmTransaction( ); } - if (status !== 'AccountInUse' && status !== 'SignatureNotFound') { + if ('Err' in status && !status.includes('AccountInUse')) { throw new Error(`Transaction ${signature} failed (${status})`); } diff --git a/web3.js/test/connection.test.js b/web3.js/test/connection.test.js index 80f2ca2c8d..b3aaea14f8 100644 --- a/web3.js/test/connection.test.js +++ b/web3.js/test/connection.test.js @@ -341,8 +341,8 @@ test('transaction', async () => { result: 'Confirmed', }, ]); - await expect(connection.getSignatureStatus(signature)).resolves.toBe( - 'Confirmed', + await expect(connection.getSignatureStatus(signature)).resolves.toEqual( + {'Ok': null}, ); mockRpc.push([ @@ -410,8 +410,8 @@ test('multi-instruction transaction', async () => { expect(++i).toBeLessThan(10); await sleep(500); } - await expect(connection.getSignatureStatus(signature)).resolves.toBe( - 'Confirmed', + await expect(connection.getSignatureStatus(signature)).resolves.toEqual( + {'Ok': null}, ); expect(await connection.getBalance(accountFrom.publicKey)).toBe(12); @@ -466,7 +466,7 @@ test('account change notification', async () => { await connection.removeAccountChangeListener(subscriptionId); - expect(mockCallback.mock.calls[0][0].lamports).toBe(41); + expect(mockCallback.mock.calls[0][0].lamports).toBe(42); expect(mockCallback.mock.calls[0][0].owner).toEqual(BpfLoader.programId); expect(mockCallback.mock.calls[0][0].executable).toBe(false); expect(mockCallback.mock.calls[0][0].data).toEqual(Buffer.from([1, 2, 3])); @@ -523,7 +523,7 @@ test('program account change notification', async () => { expect(mockCallback.mock.calls[0][0].accountId).toEqual( programAccount.publicKey.toString(), ); - expect(mockCallback.mock.calls[0][0].accountInfo.lamports).toBe(41); + expect(mockCallback.mock.calls[0][0].accountInfo.lamports).toBe(42); expect(mockCallback.mock.calls[0][0].accountInfo.owner).toEqual( BpfLoader.programId, );