From 07c9111fdddd4628f8d4ba43e83a4c4e5f83fe47 Mon Sep 17 00:00:00 2001 From: w3irdrobot Date: Mon, 29 Jun 2026 16:56:29 -0400 Subject: [PATCH 1/4] feat(bitcoin): add taproot lock output method to Script --- .../bitcoin/__tests__/bitcoin/script.spec.ts | 20 +++++++ packages/bitcoin/lib/Script.ts | 54 ++++++++++++------- 2 files changed, 55 insertions(+), 19 deletions(-) create mode 100644 packages/bitcoin/__tests__/bitcoin/script.spec.ts diff --git a/packages/bitcoin/__tests__/bitcoin/script.spec.ts b/packages/bitcoin/__tests__/bitcoin/script.spec.ts new file mode 100644 index 00000000..d2ed795c --- /dev/null +++ b/packages/bitcoin/__tests__/bitcoin/script.spec.ts @@ -0,0 +1,20 @@ +import { expect } from 'chai'; + +import { Script } from '../../lib/Script'; + +describe('Script', () => { + it('outputs Taproot scriptPubKey', () => { + const pubkey = + 'f1637044d08d5891cdf4c6b066667e75eebaae79a9de91c5f5eb5bcc682a502e'; + const buffer = Buffer.from(pubkey, 'hex'); + + const expected = Buffer.concat([Buffer.from([34, 81, 32]), buffer]); + + expect(Script.p2trLock(buffer).serialize()).to.be.eql(expected); + }); + + it('throws on invalid length pubkey', () => { + const buffer = Buffer.from([0x00, 0x01, 0x02]); + expect(() => Script.p2trLock(buffer)).to.throw(); + }); +}); diff --git a/packages/bitcoin/lib/Script.ts b/packages/bitcoin/lib/Script.ts index a74a878a..a7d1d653 100644 --- a/packages/bitcoin/lib/Script.ts +++ b/packages/bitcoin/lib/Script.ts @@ -144,11 +144,11 @@ export class Script implements ICloneable