diff --git a/packages/bitcoin/__tests__/bitcoin/script.spec.ts b/packages/bitcoin/__tests__/bitcoin/script.spec.ts new file mode 100644 index 00000000..b8f85b33 --- /dev/null +++ b/packages/bitcoin/__tests__/bitcoin/script.spec.ts @@ -0,0 +1,36 @@ +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('parses raw Taproot scriptPubKey bytes', () => { + const pubkey = + 'f1637044d08d5891cdf4c6b066667e75eebaae79a9de91c5f5eb5bcc682a502e'; + const script = Script.p2trLock(Buffer.from(pubkey, 'hex')); + + expect(Script.fromRaw(script.serializeCmds()).serializeCmds()).to.be.eql( + script.serializeCmds(), + ); + }); + + it('throws when parsing empty raw script bytes', () => { + expect(() => Script.fromRaw(Buffer.alloc(0))).to.throw( + 'Cannot parse empty script', + ); + }); + + 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..a20d80b8 100644 --- a/packages/bitcoin/lib/Script.ts +++ b/packages/bitcoin/lib/Script.ts @@ -144,11 +144,11 @@ export class Script implements ICloneable