From 4c7124d12c9da060654ae1ab118451b705a8e745 Mon Sep 17 00:00:00 2001 From: Simon Warta Date: Tue, 11 Feb 2020 16:41:02 +0100 Subject: [PATCH] Add format guarantee to PostTxResult.transactionHash --- packages/sdk/src/cosmwasmclient.spec.ts | 3 ++- packages/sdk/src/cosmwasmclient.ts | 6 ++++++ packages/sdk/types/cosmwasmclient.d.ts | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/sdk/src/cosmwasmclient.spec.ts b/packages/sdk/src/cosmwasmclient.spec.ts index 5aa92931..740b00aa 100644 --- a/packages/sdk/src/cosmwasmclient.spec.ts +++ b/packages/sdk/src/cosmwasmclient.spec.ts @@ -102,9 +102,10 @@ describe("CosmWasmClient", () => { memo: memo, signatures: [signature], }; - const { logs } = await client.postTx(marshalTx(signedTx)); + const { logs, transactionHash } = await client.postTx(marshalTx(signedTx)); const amountAttr = findAttribute(logs, "transfer", "amount"); expect(amountAttr.value).toEqual("1234567ucosm"); + expect(transactionHash).toMatch(/^[0-9A-F]{64}$/); }); }); diff --git a/packages/sdk/src/cosmwasmclient.ts b/packages/sdk/src/cosmwasmclient.ts index 876be019..f1c191e7 100644 --- a/packages/sdk/src/cosmwasmclient.ts +++ b/packages/sdk/src/cosmwasmclient.ts @@ -59,6 +59,7 @@ export interface GetNonceResult { export interface PostTxResult { readonly logs: readonly Log[]; readonly rawLog: string; + /** Transaction hash (might be used as transaction ID). Guaranteed to be non-exmpty upper-case hex */ readonly transactionHash: string; } @@ -123,6 +124,11 @@ export class CosmWasmClient { if (result.code) { throw new Error(`Error when posting tx. Code: ${result.code}; Raw log: ${result.raw_log}`); } + + if (!result.txhash.match(/^([0-9A-F][0-9A-F])+$/)) { + throw new Error("Received ill-formatted txhash. Must be non-empty upper-case hex"); + } + return { logs: parseLogs(result.logs) || [], rawLog: result.raw_log || "", diff --git a/packages/sdk/types/cosmwasmclient.d.ts b/packages/sdk/types/cosmwasmclient.d.ts index 18cc8016..bee7e6a2 100644 --- a/packages/sdk/types/cosmwasmclient.d.ts +++ b/packages/sdk/types/cosmwasmclient.d.ts @@ -10,6 +10,7 @@ export interface GetNonceResult { export interface PostTxResult { readonly logs: readonly Log[]; readonly rawLog: string; + /** Transaction hash (might be used as transaction ID). Guaranteed to be non-exmpty upper-case hex */ readonly transactionHash: string; } export interface ExecuteResult {