From 385f66a4ad898dc8ad1d366ae575dcae8b7b72a2 Mon Sep 17 00:00:00 2001 From: Abdulrahim Al Methiab Date: Mon, 22 Jul 2024 09:43:54 +0200 Subject: [PATCH 1/6] fix: transaction result serialization --- packages/sdk-js/src/DidHelpers/checkResult.ts | 23 +++++++++++--- packages/sdk-js/src/DidHelpers/interfaces.ts | 2 ++ .../sdk-js/src/DidHelpers/transact.spec.ts | 31 ++++++++++++------- 3 files changed, 40 insertions(+), 16 deletions(-) diff --git a/packages/sdk-js/src/DidHelpers/checkResult.ts b/packages/sdk-js/src/DidHelpers/checkResult.ts index c71e8d5fd..b9afede57 100644 --- a/packages/sdk-js/src/DidHelpers/checkResult.ts +++ b/packages/sdk-js/src/DidHelpers/checkResult.ts @@ -112,21 +112,23 @@ function checkStatus(result: SubmittableResultValue): { } async function resolveBlockAndEvents( - result: { blockHash: HexString; txHash: HexString }, + blockInfo: { blockHash: HexString; txHash: HexString }, api: ApiPromise ): Promise<{ blockNumber: BigInt blockHash: HexString txEvents: EventRecord[] }> { - const txHashHash = api.createType('Hash', result.blockHash) + const txHashHash = api.createType('Hash', blockInfo.blockHash) const { block: { block }, events, } = await api.derive.tx.events(txHashHash) const blockNumber = block.header.number.toBigInt() - const { blockHash } = result - const txIndex = block.extrinsics.findIndex((tx) => tx.hash.eq(result.txHash)) + const { blockHash } = blockInfo + const txIndex = block.extrinsics.findIndex((tx) => + tx.hash.eq(blockInfo.txHash) + ) const txEvents = events.filter( ({ phase }) => phase.isApplyExtrinsic && phase.asApplyExtrinsic.eqn(txIndex) ) @@ -223,6 +225,11 @@ export async function checkResultImpl( // eslint-disable-next-line @typescript-eslint/no-non-null-assertion block: { hash: blockHash!, number: blockNumber! }, events: txEvents.map(({ event }) => event), + toJSON() { + const clone = { ...this } as any + clone.block.number = clone.block.number.toString() + return clone + }, } }, get asUnknown(): TransactionResult['asUnknown'] { @@ -251,6 +258,14 @@ export async function checkResultImpl( // eslint-disable-next-line @typescript-eslint/no-non-null-assertion block: { hash: blockHash!, number: blockNumber! }, events: txEvents.map(({ event }) => event), + toJSON() { + const clone = { ...this } as any + clone.block = { + number: clone.block.number.toString(), + hash: this.block.hash, + } + return clone + }, } }, } diff --git a/packages/sdk-js/src/DidHelpers/interfaces.ts b/packages/sdk-js/src/DidHelpers/interfaces.ts index 4c91ad866..0540eab6f 100644 --- a/packages/sdk-js/src/DidHelpers/interfaces.ts +++ b/packages/sdk-js/src/DidHelpers/interfaces.ts @@ -26,6 +26,7 @@ export interface TransactionResult { didDocument: DidDocument block: { hash: HexString; number: BigInt } events: GenericEvent[] + toJSON: () => any } asFailed: { error: Error @@ -34,6 +35,7 @@ export interface TransactionResult { didDocument?: DidDocument block: { hash: HexString; number: BigInt } events: GenericEvent[] + toJSON: () => any } asRejected: { error: Error diff --git a/packages/sdk-js/src/DidHelpers/transact.spec.ts b/packages/sdk-js/src/DidHelpers/transact.spec.ts index 378eb1f27..92099a7e5 100644 --- a/packages/sdk-js/src/DidHelpers/transact.spec.ts +++ b/packages/sdk-js/src/DidHelpers/transact.spec.ts @@ -80,18 +80,17 @@ describe('transact', () => { expect(parsed.method).toHaveProperty('section', 'did') expect(parsed.method).toHaveProperty('method', 'submitDidCall') - await expect( - checkResult( - new SubmittableResult({ - blockNumber: mockedApi.createType('BlockNumber', 1000), - status: mockedApi.createType('ExtrinsicStatus', { - inBlock: new Uint8Array(32).fill(2), - }), - txHash: parsed.hash, - events: makeAttestationCreatedEvents([[]]), - }) - ) - ).resolves.toMatchObject>({ + const result = await checkResult( + new SubmittableResult({ + blockNumber: mockedApi.createType('BlockNumber', 1000), + status: mockedApi.createType('ExtrinsicStatus', { + inBlock: new Uint8Array(32).fill(2), + }), + txHash: parsed.hash, + events: makeAttestationCreatedEvents([[]]), + }) + ) + expect(result).toMatchObject>({ status: 'confirmed', asConfirmed: expect.objectContaining({ txHash: parsed.hash.toHex(), @@ -103,5 +102,13 @@ describe('transact', () => { }, }), }) + // TODO move serialzation test to `checkResult.spec.ts` once created and + // test the `asFailed` case. + const confirmed = result.asConfirmed + expect(typeof confirmed.block.number).toBe('bigint') + const resultStringified = JSON.stringify(confirmed) + const resultRebuiltObj = JSON.parse(resultStringified) + expect(BigInt(resultRebuiltObj.block.number)).toBe(BigInt(1000)) + expect(typeof confirmed.block.number).toBe('bigint') }) }) From f1eea0a5112aad300de8c3a71bd11e5678d381dd Mon Sep 17 00:00:00 2001 From: Abdulrahim Al Methiab Date: Mon, 22 Jul 2024 09:52:10 +0200 Subject: [PATCH 2/6] fix: asFailed --- packages/sdk-js/src/DidHelpers/checkResult.ts | 5 ++++- packages/sdk-js/src/DidHelpers/transact.spec.ts | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/sdk-js/src/DidHelpers/checkResult.ts b/packages/sdk-js/src/DidHelpers/checkResult.ts index b9afede57..93b959666 100644 --- a/packages/sdk-js/src/DidHelpers/checkResult.ts +++ b/packages/sdk-js/src/DidHelpers/checkResult.ts @@ -227,7 +227,10 @@ export async function checkResultImpl( events: txEvents.map(({ event }) => event), toJSON() { const clone = { ...this } as any - clone.block.number = clone.block.number.toString() + clone.block = { + number: clone.block.number.toString(), + hash: this.block.hash, + } return clone }, } diff --git a/packages/sdk-js/src/DidHelpers/transact.spec.ts b/packages/sdk-js/src/DidHelpers/transact.spec.ts index 92099a7e5..373e20c6b 100644 --- a/packages/sdk-js/src/DidHelpers/transact.spec.ts +++ b/packages/sdk-js/src/DidHelpers/transact.spec.ts @@ -102,7 +102,7 @@ describe('transact', () => { }, }), }) - // TODO move serialzation test to `checkResult.spec.ts` once created and + // TODO move serialzation test to `checkResult.spec.ts` once created and // test the `asFailed` case. const confirmed = result.asConfirmed expect(typeof confirmed.block.number).toBe('bigint') From e8c065415c6b4875d60408d4c02804b2955e53d5 Mon Sep 17 00:00:00 2001 From: Abdulrahim Al Methiab <31316147+abdulmth@users.noreply.github.com> Date: Mon, 22 Jul 2024 13:28:45 +0200 Subject: [PATCH 3/6] Update packages/sdk-js/src/DidHelpers/checkResult.ts Co-authored-by: Raphael Flechtner <39338561+rflechtner@users.noreply.github.com> --- packages/sdk-js/src/DidHelpers/checkResult.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sdk-js/src/DidHelpers/checkResult.ts b/packages/sdk-js/src/DidHelpers/checkResult.ts index 93b959666..fc3c1188e 100644 --- a/packages/sdk-js/src/DidHelpers/checkResult.ts +++ b/packages/sdk-js/src/DidHelpers/checkResult.ts @@ -264,8 +264,8 @@ export async function checkResultImpl( toJSON() { const clone = { ...this } as any clone.block = { + ...clone.block, number: clone.block.number.toString(), - hash: this.block.hash, } return clone }, From 1762a2999499fc56d727925a6aad5862b5f00a6c Mon Sep 17 00:00:00 2001 From: Abdulrahim Al Methiab Date: Mon, 22 Jul 2024 13:29:51 +0200 Subject: [PATCH 4/6] chore: improvement --- packages/sdk-js/src/DidHelpers/checkResult.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sdk-js/src/DidHelpers/checkResult.ts b/packages/sdk-js/src/DidHelpers/checkResult.ts index fc3c1188e..62b120897 100644 --- a/packages/sdk-js/src/DidHelpers/checkResult.ts +++ b/packages/sdk-js/src/DidHelpers/checkResult.ts @@ -228,8 +228,8 @@ export async function checkResultImpl( toJSON() { const clone = { ...this } as any clone.block = { + ...clone.block, number: clone.block.number.toString(), - hash: this.block.hash, } return clone }, From 975886df66e9b706842591ada9265756288bd9d7 Mon Sep 17 00:00:00 2001 From: Abdulrahim Al Methiab Date: Mon, 22 Jul 2024 15:06:45 +0200 Subject: [PATCH 5/6] feat: implement toJSON for root --- packages/sdk-js/src/DidHelpers/checkResult.ts | 33 +++++++++++++++++++ packages/sdk-js/src/DidHelpers/interfaces.ts | 1 + .../sdk-js/src/DidHelpers/transact.spec.ts | 4 +++ 3 files changed, 38 insertions(+) diff --git a/packages/sdk-js/src/DidHelpers/checkResult.ts b/packages/sdk-js/src/DidHelpers/checkResult.ts index 62b120897..cb8e545bc 100644 --- a/packages/sdk-js/src/DidHelpers/checkResult.ts +++ b/packages/sdk-js/src/DidHelpers/checkResult.ts @@ -231,6 +231,7 @@ export async function checkResultImpl( ...clone.block, number: clone.block.number.toString(), } + delete clone.toJSON return clone }, } @@ -267,9 +268,41 @@ export async function checkResultImpl( ...clone.block, number: clone.block.number.toString(), } + delete clone.toJSON return clone }, } }, + toJSON() { + switch (status) { + case 'confirmed': { + return { + status, + value: (this as TransactionResult).asConfirmed.toJSON(), + } + } + case 'failed': { + return { + status, + value: (this as TransactionResult).asFailed.toJSON(), + } + } + case 'rejected': { + return { + status, + value: (this as TransactionResult).asRejected, + } + } + case 'unknown': { + return { + status, + value: (this as TransactionResult).asUnknown, + } + } + default: { + throw new Error('invalid status') + } + } + }, } } diff --git a/packages/sdk-js/src/DidHelpers/interfaces.ts b/packages/sdk-js/src/DidHelpers/interfaces.ts index 0540eab6f..3dd2a8e24 100644 --- a/packages/sdk-js/src/DidHelpers/interfaces.ts +++ b/packages/sdk-js/src/DidHelpers/interfaces.ts @@ -47,6 +47,7 @@ export interface TransactionResult { error: Error txHash: HexString } + toJSON: () => any } export interface TransactionHandlers { diff --git a/packages/sdk-js/src/DidHelpers/transact.spec.ts b/packages/sdk-js/src/DidHelpers/transact.spec.ts index 373e20c6b..3101a6fcc 100644 --- a/packages/sdk-js/src/DidHelpers/transact.spec.ts +++ b/packages/sdk-js/src/DidHelpers/transact.spec.ts @@ -110,5 +110,9 @@ describe('transact', () => { const resultRebuiltObj = JSON.parse(resultStringified) expect(BigInt(resultRebuiltObj.block.number)).toBe(BigInt(1000)) expect(typeof confirmed.block.number).toBe('bigint') + expect(result.toJSON()).toStrictEqual({ + status: 'confirmed', + value: confirmed.toJSON(), + }) }) }) From 4b2718fb5da2e034955fa10e3baf79a4228f0108 Mon Sep 17 00:00:00 2001 From: Abdulrahim Al Methiab Date: Mon, 22 Jul 2024 15:07:31 +0200 Subject: [PATCH 6/6] fix: lint --- packages/sdk-js/src/DidHelpers/interfaces.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sdk-js/src/DidHelpers/interfaces.ts b/packages/sdk-js/src/DidHelpers/interfaces.ts index 3dd2a8e24..72db1a80b 100644 --- a/packages/sdk-js/src/DidHelpers/interfaces.ts +++ b/packages/sdk-js/src/DidHelpers/interfaces.ts @@ -47,7 +47,7 @@ export interface TransactionResult { error: Error txHash: HexString } - toJSON: () => any + toJSON: () => any } export interface TransactionHandlers {