Skip to content

Commit 2c57ea4

Browse files
authored
feat: add serialization helpers for transaction (#1706)
Co-authored-by: janniks <[email protected]>
1 parent b9f8775 commit 2c57ea4

File tree

2 files changed

+53
-1
lines changed

2 files changed

+53
-1
lines changed

packages/transactions/src/transaction.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,3 +293,36 @@ export function deserializeTransaction(tx: string | Uint8Array | BytesReader) {
293293
chainId
294294
);
295295
}
296+
297+
/**
298+
* Alias for `transaction.serialize()`
299+
*
300+
* Serializes a transaction to bytes.
301+
*
302+
* @example
303+
* ```ts
304+
* import { makeSTXTokenTransfer, serializeTransaction } from '@stacks/transactions';
305+
*
306+
* const transaction = makeSTXTokenTransfer({ ... });
307+
* const bytes = serializeTransaction(transaction);
308+
* ```
309+
*/
310+
export function serializeTransaction(transaction: StacksTransaction): Uint8Array {
311+
// todo: refactor to hex instead of bytes for `next` release
312+
return transaction.serialize();
313+
}
314+
315+
/**
316+
* Serializes a transaction to a hex string.
317+
*
318+
* @example
319+
* ```ts
320+
* import { makeSTXTokenTransfer, transactionToHex } from '@stacks/transactions';
321+
*
322+
* const transaction = makeSTXTokenTransfer({ ... });
323+
* const hex = transactionToHex(transaction);
324+
* ```
325+
*/
326+
export function transactionToHex(transaction: StacksTransaction): string {
327+
return bytesToHex(transaction.serialize());
328+
}

packages/transactions/tests/transaction.test.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
import { deserializeTransaction, StacksTransaction } from '../src/transaction';
1+
import {
2+
deserializeTransaction,
3+
serializeTransaction,
4+
StacksTransaction,
5+
transactionToHex,
6+
} from '../src/transaction';
27

38
import {
49
createMultiSigSpendingCondition,
@@ -435,3 +440,17 @@ test('Coinbase pay to alt contract principal recipient deserialization', () => {
435440
);
436441
expect(deserializedTx.version).toBe(TransactionVersion.Testnet);
437442
});
443+
444+
describe(serializeTransaction.name, () => {
445+
const serializedTx =
446+
'0x8080000000040055a0a92720d20398211cd4c7663d65d018efcc1f00000000000000030000000000000000010118da31f542913e8c56961b87ee4794924e655a28a2034e37ef4823eeddf074747285bd6efdfbd84eecdf62cffa7c1864e683c688f4c105f4db7429066735b4e2010200000000050000000000000000000000000000000000000000000000000000000000000000061aba27f99e007c7f605a8305e318c1abde3cd220ac0b68656c6c6f5f776f726c64';
447+
const tx = deserializeTransaction(serializedTx);
448+
449+
test('alias of .serialize', () => {
450+
expect(tx.serialize()).toEqual(serializeTransaction(tx));
451+
});
452+
453+
test(transactionToHex.name, () => {
454+
expect(transactionToHex(tx)).toEqual(bytesToHex(serializeTransaction(tx)));
455+
});
456+
});

0 commit comments

Comments
 (0)