From be98ce6994e7a0372e59b37a8b4299013cdb9fde Mon Sep 17 00:00:00 2001 From: ian Date: Fri, 5 Jan 2024 21:23:11 +0800 Subject: [PATCH] refactor: allow Transaction.pack(unpacked) The function can pack its unpacked result, but the function signature does not allow it. This is very annoying, for example, I cannot set version to number 0 to call `pack`. --- packages/base/src/blockchain.ts | 8 ++++++-- packages/base/tests/serialize.test.ts | 5 +++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/base/src/blockchain.ts b/packages/base/src/blockchain.ts index 734e97863..31e08620d 100644 --- a/packages/base/src/blockchain.ts +++ b/packages/base/src/blockchain.ts @@ -224,8 +224,12 @@ const BaseTransaction = table( ); export const Transaction = createBytesCodec({ - pack: (tx: api.Transaction) => - BaseTransaction.pack(transformTransactionCodecType(tx)), + pack: ( + tx: + | api.Transaction + | (RawTransactionUnpackResultType & { witnesses: string[] }) + ) => + BaseTransaction.pack(transformTransactionCodecType(tx as api.Transaction)), unpack: (buf) => deTransformTransactionCodecType(BaseTransaction.unpack(buf)), }); diff --git a/packages/base/tests/serialize.test.ts b/packages/base/tests/serialize.test.ts index b3e78a2d0..1ae01e131 100644 --- a/packages/base/tests/serialize.test.ts +++ b/packages/base/tests/serialize.test.ts @@ -178,6 +178,11 @@ test("serialize transaction", (t) => { serializedHex, "0x1f0100000c0000000f010000030100001c00000020000000490000006d0000009d000000f40000000000000001000000a98c57135830e1b91345948df6c4b8870828199a786b26f09f7dec4bc27a7300000000000001000000b39d53656421d1532dd995a0924441ca8f43052bc2b7740a0e814a488a8214d6010000001000000000000000a98c57135830e1b91345948df6c4b8870828199a786b26f09f7dec4bc27a73010200000057000000080000004f00000010000000180000004f000000341200000000000037000000100000003000000031000000a98c57135830e1b91345948df6c4b8870828199a786b26f09f7dec4bc27a7302000200000012340f0000000800000003000000abcdef10000000080000000400000031313131" ); + + const packUnpackSerializedHex = bytes.hexify( + blockchain.Transaction.pack(blockchain.Transaction.unpack(serializedHex)) + ); + t.deepEqual(packUnpackSerializedHex, serializedHex); }); test("serialize header", (t) => {