ecash-lib 4.10.0 → 4.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -110,3 +110,4 @@ console.log(toHex(rawTx));
110
110
  - 4.8.0 - Support for encoding and decoding data and sending address in a p2sh input, implemented in `ecash-wallet` 4.1.0 [D19600](https://reviews.bitcoinabc.org/D19600)
111
111
  - 4.9.0 - Add `parseNumberFromOp` as inverse of `pushNumberOp` [D19652](https://reviews.bitcoinabc.org/D19652)
112
112
  - 4.10.0 - Support for multisig scripts: Script.multisig, Script.multisigSpend, Script.parseP2shMultisigSpend, Script.parseBareMultisigSpend. Both ECDSA and Schnorr multisig formats supported. [D19663](https://reviews.bitcoinabc.org/D19663)
113
+ - 4.11.0 - Implement `PSBT` to pass in-node and electrum-abc tests. [D19712](https://reviews.bitcoinabc.org/D19712)
package/dist/index.d.ts CHANGED
@@ -10,6 +10,8 @@ export * from './hdwallet.js';
10
10
  export * from './address/address.js';
11
11
  export * from './sigHashType.js';
12
12
  export * from './tx.js';
13
+ export * from './psbt.js';
14
+ export * from './signatories.js';
13
15
  export * from './txBuilder.js';
14
16
  export * from './unsignedTx.js';
15
17
  export * from './io/bytes.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC"}
package/dist/index.js CHANGED
@@ -52,6 +52,8 @@ __exportStar(require("./hdwallet.js"), exports);
52
52
  __exportStar(require("./address/address.js"), exports);
53
53
  __exportStar(require("./sigHashType.js"), exports);
54
54
  __exportStar(require("./tx.js"), exports);
55
+ __exportStar(require("./psbt.js"), exports);
56
+ __exportStar(require("./signatories.js"), exports);
55
57
  __exportStar(require("./txBuilder.js"), exports);
56
58
  __exportStar(require("./unsignedTx.js"), exports);
57
59
  __exportStar(require("./io/bytes.js"), exports);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,4CAA4C;AAC5C,mEAAmE;AACnE,sEAAsE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEtE,8CAA4B;AAC5B,2CAAyB;AACzB,4CAA0B;AAC1B,0CAAwB;AACxB,8CAA4B;AAC5B,8CAA4B;AAC5B,gDAA8B;AAC9B,gDAA8B;AAC9B,gDAA8B;AAC9B,uDAAqC;AACrC,mDAAiC;AACjC,0CAAwB;AACxB,iDAA+B;AAC/B,kDAAgC;AAChC,gDAA8B;AAC9B,8CAA4B;AAC5B,8CAA4B;AAC5B,8CAA4B;AAC5B,kDAAgC;AAChC,iDAA+B;AAC/B,sDAAoC;AACpC,uDAAqC;AACrC,iDAA+B;AAC/B,uDAAqC;AACrC,oDAAkC;AAClC,kDAAgC;AAChC,iDAA+B;AAC/B,uDAAqC;AACrC,sDAAoC;AACpC,iDAA+B;AAC/B,qDAAqC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,4CAA4C;AAC5C,mEAAmE;AACnE,sEAAsE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEtE,8CAA4B;AAC5B,2CAAyB;AACzB,4CAA0B;AAC1B,0CAAwB;AACxB,8CAA4B;AAC5B,8CAA4B;AAC5B,gDAA8B;AAC9B,gDAA8B;AAC9B,gDAA8B;AAC9B,uDAAqC;AACrC,mDAAiC;AACjC,0CAAwB;AACxB,4CAA0B;AAC1B,mDAAiC;AACjC,iDAA+B;AAC/B,kDAAgC;AAChC,gDAA8B;AAC9B,8CAA4B;AAC5B,8CAA4B;AAC5B,8CAA4B;AAC5B,kDAAgC;AAChC,iDAA+B;AAC/B,sDAAoC;AACpC,uDAAqC;AACrC,iDAA+B;AAC/B,uDAAqC;AACrC,oDAAkC;AAClC,kDAAgC;AAChC,iDAA+B;AAC/B,uDAAqC;AACrC,sDAAoC;AACpC,iDAA+B;AAC/B,qDAAqC"}
package/dist/psbt.d.ts ADDED
@@ -0,0 +1,65 @@
1
+ import { SignData, Tx } from './tx.js';
2
+ /**
3
+ * BIP 174 **magic bytes** for PSBT version 0: ASCII `psbt` + `0xff`.
4
+ * Defined in BIP 174 “Specification > Version 0” (must be first bytes of a `.psbt`).
5
+ * - https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki#specification
6
+ * - https://bips.dev/174/#specification
7
+ */
8
+ export declare const PSBT_MAGIC: Uint8Array<ArrayBuffer>;
9
+ /**
10
+ * Bitcoin ABC `PSBT_IN_UTXO` (BIP 174 input type `0x00`): value is either the full
11
+ * previous transaction (BIP “non-witness UTXO”) or a serialized `CTxOut` (amount +
12
+ * scriptPubKey). This is the **only** key we use for spent-output data; BIP type
13
+ * `0x01` is not handled like the node (see module TSDoc). Resolved in
14
+ * {@link resolveWitnessFromKey00}.
15
+ */
16
+ export declare const PSBT_IN_UTXO = 0;
17
+ /** One PSBT key-value pair (BIP 174). */
18
+ export type PsbtKeyValue = {
19
+ key: Uint8Array;
20
+ value: Uint8Array;
21
+ };
22
+ /**
23
+ * BIP 174 PSBT decode/encode for eCash, aligned with Bitcoin ABC’s PSBT maps.
24
+ * See https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki#serialization
25
+ *
26
+ * Use {@link Psbt.fromBytes} / {@link Psbt.toBytes} for round-trip; unknown
27
+ * key-value pairs are preserved (BIP 174).
28
+ */
29
+ export declare class Psbt {
30
+ /** Unsigned transaction (empty scriptSigs). */
31
+ readonly unsignedTx: Tx;
32
+ /** Per-input data derived from maps (amount, scripts, partial sigs). */
33
+ readonly signDataPerInput: SignData[];
34
+ /** Per-input partial signatures: hex(pubkey) → signature incl. sighash byte. */
35
+ readonly inputPartialSigs: Map<string, Uint8Array>[];
36
+ /**
37
+ * Unknown global key-value pairs (BIP 174: implementations must preserve
38
+ * unknown keys on round-trip).
39
+ */
40
+ readonly unknownGlobalPairs: PsbtKeyValue[];
41
+ /** Unknown per-input pairs (excluding consumed `PSBT_IN_UTXO` / `0x00` entries). */
42
+ readonly unknownInputPairs: PsbtKeyValue[][];
43
+ /** Unknown per-output pairs. */
44
+ readonly unknownOutputPairs: PsbtKeyValue[][];
45
+ /**
46
+ * When true, this input had no `PSBT_IN_UTXO` (`0x00`) field in the PSBT (e.g.
47
+ * creator-only PSBT or finalized script fields only). {@link toBytes} will
48
+ * not emit that entry for the input.
49
+ */
50
+ readonly inputWitnessIncomplete: boolean[];
51
+ constructor(params: {
52
+ unsignedTx: Tx;
53
+ signDataPerInput: SignData[];
54
+ inputPartialSigs: Map<string, Uint8Array>[];
55
+ unknownGlobalPairs?: PsbtKeyValue[];
56
+ unknownInputPairs?: PsbtKeyValue[][];
57
+ unknownOutputPairs?: PsbtKeyValue[][];
58
+ inputWitnessIncomplete?: boolean[];
59
+ });
60
+ /** Deserialize PSBT bytes (BIP 174). */
61
+ static fromBytes(data: Uint8Array): Psbt;
62
+ /** Serialize to BIP 174 bytes. */
63
+ toBytes(): Uint8Array;
64
+ }
65
+ //# sourceMappingURL=psbt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"psbt.d.ts","sourceRoot":"","sources":["../src/psbt.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAY,QAAQ,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAEjD;;;;;GAKG;AACH,eAAO,MAAM,UAAU,yBAAiD,CAAC;AAGzE;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,IAAO,CAAC;AA4OjC,yCAAyC;AACzC,MAAM,MAAM,YAAY,GAAG;IAAE,GAAG,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC;AAgFlE;;;;;;GAMG;AACH,qBAAa,IAAI;IACb,+CAA+C;IAC/C,SAAgB,UAAU,EAAE,EAAE,CAAC;IAC/B,wEAAwE;IACxE,SAAgB,gBAAgB,EAAE,QAAQ,EAAE,CAAC;IAC7C,gFAAgF;IAChF,SAAgB,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC;IAC5D;;;OAGG;IACH,SAAgB,kBAAkB,EAAE,YAAY,EAAE,CAAC;IACnD,oFAAoF;IACpF,SAAgB,iBAAiB,EAAE,YAAY,EAAE,EAAE,CAAC;IACpD,gCAAgC;IAChC,SAAgB,kBAAkB,EAAE,YAAY,EAAE,EAAE,CAAC;IACrD;;;;OAIG;IACH,SAAgB,sBAAsB,EAAE,OAAO,EAAE,CAAC;gBAE/B,MAAM,EAAE;QACvB,UAAU,EAAE,EAAE,CAAC;QACf,gBAAgB,EAAE,QAAQ,EAAE,CAAC;QAC7B,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC;QAC5C,kBAAkB,CAAC,EAAE,YAAY,EAAE,CAAC;QACpC,iBAAiB,CAAC,EAAE,YAAY,EAAE,EAAE,CAAC;QACrC,kBAAkB,CAAC,EAAE,YAAY,EAAE,EAAE,CAAC;QACtC,sBAAsB,CAAC,EAAE,OAAO,EAAE,CAAC;KACtC;IAoCD,wCAAwC;WAC1B,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAiG/C,kCAAkC;IAC3B,OAAO,IAAI,UAAU;CAsD/B"}
package/dist/psbt.js ADDED
@@ -0,0 +1,494 @@
1
+ "use strict";
2
+ // Copyright (c) 2026 The Bitcoin developers
3
+ // Distributed under the MIT software license, see the accompanying
4
+ // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Psbt = exports.PSBT_IN_UTXO = exports.PSBT_MAGIC = void 0;
7
+ /**
8
+ * Partially Signed Bitcoin Transaction (PSBT) per **BIP 174**:
9
+ * - Spec: https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki
10
+ *
11
+ * This module implements **decode/encode** (`{@link Psbt.fromBytes}`,
12
+ * `{@link Psbt.toBytes}`) aligned with Bitcoin ABC: global unsigned tx, per-input
13
+ * `PSBT_IN_UTXO` (`0x00`) / redeem script / partial sigs, output maps, and
14
+ * preservation of unknown pairs (BIP 174).
15
+ *
16
+ * **Input key `0x00` (`PSBT_IN_UTXO`):** BIP 174 also defines type `0x01` (“witness
17
+ * UTXO”) for the same *value* shape. **Bitcoin ABC only implements `0x00`:** value
18
+ * is `CTxOut` or full previous tx (non-witness UTXO). We match the node; `0x01`
19
+ * entries are preserved as unknown keys on round-trip.
20
+ */
21
+ const bytes_js_1 = require("./io/bytes.js");
22
+ const hex_js_1 = require("./io/hex.js");
23
+ const varsize_js_1 = require("./io/varsize.js");
24
+ const writerbytes_js_1 = require("./io/writerbytes.js");
25
+ const writerlength_js_1 = require("./io/writerlength.js");
26
+ const hash_js_1 = require("./hash.js");
27
+ const script_js_1 = require("./script.js");
28
+ const tx_js_1 = require("./tx.js");
29
+ /**
30
+ * BIP 174 **magic bytes** for PSBT version 0: ASCII `psbt` + `0xff`.
31
+ * Defined in BIP 174 “Specification > Version 0” (must be first bytes of a `.psbt`).
32
+ * - https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki#specification
33
+ * - https://bips.dev/174/#specification
34
+ */
35
+ exports.PSBT_MAGIC = new Uint8Array([0x70, 0x73, 0x62, 0x74, 0xff]);
36
+ const PSBT_GLOBAL_UNSIGNED_TX = 0x00;
37
+ /**
38
+ * Bitcoin ABC `PSBT_IN_UTXO` (BIP 174 input type `0x00`): value is either the full
39
+ * previous transaction (BIP “non-witness UTXO”) or a serialized `CTxOut` (amount +
40
+ * scriptPubKey). This is the **only** key we use for spent-output data; BIP type
41
+ * `0x01` is not handled like the node (see module TSDoc). Resolved in
42
+ * {@link resolveWitnessFromKey00}.
43
+ */
44
+ exports.PSBT_IN_UTXO = 0x00;
45
+ const PSBT_IN_PARTIAL_SIG = 0x02;
46
+ const PSBT_IN_SIGHASH = 0x03;
47
+ const PSBT_IN_REDEEM_SCRIPT = 0x04;
48
+ /** BIP 174 / Bitcoin ABC — input HD keypaths */
49
+ const PSBT_IN_BIP32_DERIVATION = 0x06;
50
+ const PSBT_IN_SCRIPTSIG = 0x07;
51
+ /** Bitcoin ABC — output redeem script (same first byte as global unsigned tx key type). */
52
+ const PSBT_OUT_REDEEMSCRIPT = 0x00;
53
+ /** Bitcoin ABC — output HD keypaths */
54
+ const PSBT_OUT_BIP32_DERIVATION = 0x02;
55
+ function compareLex(a, b) {
56
+ const n = Math.min(a.length, b.length);
57
+ for (let i = 0; i < n; i++) {
58
+ if (a[i] !== b[i])
59
+ return a[i] - b[i];
60
+ }
61
+ return a.length - b.length;
62
+ }
63
+ function sortPairs(pairs) {
64
+ pairs.sort((x, y) => compareLex(x.key, y.key));
65
+ }
66
+ function writePsbtKeyValue(writer, key, value) {
67
+ (0, varsize_js_1.writeVarSize)(key.length, writer);
68
+ writer.putBytes(key);
69
+ (0, varsize_js_1.writeVarSize)(value.length, writer);
70
+ writer.putBytes(value);
71
+ }
72
+ function serializeMap(pairs) {
73
+ sortPairs(pairs);
74
+ const wl = new writerlength_js_1.WriterLength();
75
+ for (const p of pairs) {
76
+ writePsbtKeyValue(wl, p.key, p.value);
77
+ }
78
+ (0, varsize_js_1.writeVarSize)(0, wl);
79
+ const out = new writerbytes_js_1.WriterBytes(wl.length);
80
+ for (const p of pairs) {
81
+ writePsbtKeyValue(out, p.key, p.value);
82
+ }
83
+ (0, varsize_js_1.writeVarSize)(0, out);
84
+ return out.data;
85
+ }
86
+ function parseMap(bytes) {
87
+ const pairs = [];
88
+ while (true) {
89
+ const keyLen = (0, varsize_js_1.readVarSize)(bytes);
90
+ if (keyLen === 0)
91
+ break;
92
+ const key = bytes.readBytes(Number(keyLen));
93
+ const valLen = (0, varsize_js_1.readVarSize)(bytes);
94
+ const value = bytes.readBytes(Number(valLen));
95
+ pairs.push({ key, value });
96
+ }
97
+ return pairs;
98
+ }
99
+ /** BIP 174 / Bitcoin ABC: duplicate keys in a map are forbidden (see `PSBTInput::Unserialize`). */
100
+ function assertUniquePsbtKeys(pairs, mapLabel) {
101
+ const seen = new Set();
102
+ for (const { key } of pairs) {
103
+ if (key.length === 0)
104
+ continue;
105
+ const id = (0, hex_js_1.toHex)(key);
106
+ if (seen.has(id)) {
107
+ throw new Error(`PSBT: duplicate key in ${mapLabel} map`);
108
+ }
109
+ seen.add(id);
110
+ }
111
+ }
112
+ /** Global unsigned transaction must have empty scriptSigs (Bitcoin ABC `PartiallySignedTransaction::Unserialize`). */
113
+ function assertUnsignedTxEmptyScriptSigs(tx) {
114
+ for (let i = 0; i < tx.inputs.length; i++) {
115
+ const sc = tx.inputs[i]?.script;
116
+ const len = sc?.bytecode.length ?? 0;
117
+ if (len > 0) {
118
+ throw new Error('PSBT: unsigned tx must have empty scriptSigs');
119
+ }
120
+ }
121
+ }
122
+ /** Partial signature key: 1 byte type + 33 (compressed) or 65 (uncompressed) byte pubkey. */
123
+ function isValidPartialSigKeyLength(keyLen) {
124
+ return keyLen === 34 || keyLen === 66;
125
+ }
126
+ /** CPubKey-style prefix check (matches `DeserializeHDKeypaths` length rules; not full curve validation). */
127
+ function pubkeyBytesLookPlausible(pk) {
128
+ if (pk.length === 33) {
129
+ return pk[0] === 0x02 || pk[0] === 0x03;
130
+ }
131
+ if (pk.length === 65) {
132
+ return pk[0] === 0x04;
133
+ }
134
+ return false;
135
+ }
136
+ /**
137
+ * `DeserializeHDKeypaths` in `src/script/sign.h` (Bitcoin ABC) reads a leading
138
+ * compact size `value_len`, then exactly `value_len` bytes (fingerprint + path).
139
+ *
140
+ * Some `rpc_psbt.json` valid vectors use the same logical payload **without** that
141
+ * length prefix (fingerprint + uint32 path only), matching BIP 174’s description
142
+ * of the value bytes; we accept both shapes so `decodepsbt`-valid PSBTs parse.
143
+ */
144
+ function validateBip32DerivationKeyValue(key, value) {
145
+ if (key.length !== 34 && key.length !== 66) {
146
+ throw new Error('PSBT: size of key was not the expected size for the type BIP32 keypath');
147
+ }
148
+ const pk = key.slice(1);
149
+ if (!pubkeyBytesLookPlausible(pk)) {
150
+ throw new Error('PSBT: invalid pubkey in BIP32 derivation key');
151
+ }
152
+ const tryPrefixedLength = () => {
153
+ const b = new bytes_js_1.Bytes(value);
154
+ let valueLen;
155
+ try {
156
+ valueLen = Number((0, varsize_js_1.readVarSize)(b));
157
+ }
158
+ catch {
159
+ return false;
160
+ }
161
+ if (valueLen === 0 || valueLen % 4 !== 0) {
162
+ return false;
163
+ }
164
+ if (value.length - b.idx < valueLen) {
165
+ return false;
166
+ }
167
+ b.readBytes(4);
168
+ for (let i = 4; i < valueLen; i += 4) {
169
+ b.readU32();
170
+ }
171
+ return b.idx === value.length;
172
+ };
173
+ if (tryPrefixedLength()) {
174
+ return;
175
+ }
176
+ if (value.length < 4 || value.length % 4 !== 0) {
177
+ throw new Error('PSBT: invalid length for HD key path');
178
+ }
179
+ const b = new bytes_js_1.Bytes(value);
180
+ b.readBytes(4);
181
+ for (let i = 4; i < value.length; i += 4) {
182
+ b.readU32();
183
+ }
184
+ if (b.idx !== value.length) {
185
+ throw new Error('PSBT: invalid BIP32 derivation value');
186
+ }
187
+ }
188
+ /** `CTxOut` bytes for a {@link PSBT_IN_UTXO} map value (same layout BIP 174 labels “witness UTXO”). */
189
+ function encodeWitnessUtxo(sats, scriptPubKey) {
190
+ const wl = new writerlength_js_1.WriterLength();
191
+ wl.putU64(sats);
192
+ (0, varsize_js_1.writeVarSize)(scriptPubKey.length, wl);
193
+ wl.putBytes(scriptPubKey);
194
+ const w = new writerbytes_js_1.WriterBytes(wl.length);
195
+ w.putU64(sats);
196
+ (0, varsize_js_1.writeVarSize)(scriptPubKey.length, w);
197
+ w.putBytes(scriptPubKey);
198
+ return w.data;
199
+ }
200
+ function decodeWitnessUtxo(data) {
201
+ const b = new bytes_js_1.Bytes(data);
202
+ const sats = b.readU64();
203
+ const sl = (0, varsize_js_1.readVarSize)(b);
204
+ const scriptPubKey = b.readBytes(Number(sl));
205
+ return { sats, scriptPubKey };
206
+ }
207
+ function prevOutTxidHex(po) {
208
+ return typeof po.txid === 'string' ? po.txid : (0, hex_js_1.toHexRev)(po.txid);
209
+ }
210
+ /**
211
+ * Value for input key type `0x00` (`PSBT_IN_UTXO` in Bitcoin ABC): either BIP 174 non-witness
212
+ * UTXO (full prev tx) or a `CTxOut`-shaped blob (amount + scriptPubKey), as in
213
+ * Bitcoin ABC.
214
+ */
215
+ function resolveWitnessFromKey00(value, prevOut) {
216
+ if (value.length >= 50) {
217
+ const tx = tx_js_1.Tx.tryDeserExact(value);
218
+ if (tx !== undefined && tx.inputs.length > 0) {
219
+ if (tx.txid() === prevOutTxidHex(prevOut)) {
220
+ const out = tx.outputs[prevOut.outIdx];
221
+ if (out !== undefined) {
222
+ return {
223
+ sats: out.sats,
224
+ scriptPubKey: out.script.bytecode,
225
+ };
226
+ }
227
+ }
228
+ }
229
+ }
230
+ try {
231
+ return decodeWitnessUtxo(value);
232
+ }
233
+ catch {
234
+ return undefined;
235
+ }
236
+ }
237
+ function pubkeyHex(pk) {
238
+ return (0, hex_js_1.toHex)(pk);
239
+ }
240
+ function scriptPubKeyFromSignData(signData) {
241
+ if (signData.redeemScript !== undefined) {
242
+ const h = (0, hash_js_1.shaRmd160)(signData.redeemScript.bytecode);
243
+ return script_js_1.Script.p2sh(h).bytecode;
244
+ }
245
+ if (signData.outputScript !== undefined) {
246
+ return signData.outputScript.bytecode;
247
+ }
248
+ throw new Error('SignData needs redeemScript or outputScript for PSBT');
249
+ }
250
+ function parseInputMapPairs(inPairs, prevOut) {
251
+ const partialSigs = new Map();
252
+ const unknown = [];
253
+ let redeemScript;
254
+ let pair00;
255
+ for (const p of inPairs) {
256
+ if (p.key.length === 0)
257
+ continue;
258
+ const t = p.key[0];
259
+ // Bitcoin ABC PSBTInput::Unserialize: these types require a 1-byte key only.
260
+ if (t === PSBT_IN_SIGHASH) {
261
+ if (p.key.length !== 1) {
262
+ throw new Error('PSBT: sighash type key must be exactly one byte');
263
+ }
264
+ unknown.push(p);
265
+ continue;
266
+ }
267
+ if (t === PSBT_IN_SCRIPTSIG) {
268
+ if (p.key.length !== 1) {
269
+ throw new Error('PSBT: final scriptSig key must be exactly one byte');
270
+ }
271
+ unknown.push(p);
272
+ continue;
273
+ }
274
+ if (t === PSBT_IN_REDEEM_SCRIPT) {
275
+ if (p.key.length !== 1) {
276
+ throw new Error('PSBT: redeemScript key must be exactly one byte');
277
+ }
278
+ redeemScript = new script_js_1.Script(p.value);
279
+ continue;
280
+ }
281
+ // Bitcoin ABC PSBT_IN_UTXO: key is type byte only (see psbt.h).
282
+ if (t === exports.PSBT_IN_UTXO && p.key.length !== 1) {
283
+ throw new Error('PSBT: input UTXO key must be exactly one byte');
284
+ }
285
+ if (t === exports.PSBT_IN_UTXO && p.key.length === 1) {
286
+ pair00 = p;
287
+ }
288
+ else if (t === PSBT_IN_PARTIAL_SIG) {
289
+ if (!isValidPartialSigKeyLength(p.key.length)) {
290
+ throw new Error('PSBT: invalid partial signature pubkey key size');
291
+ }
292
+ partialSigs.set(pubkeyHex(p.key.slice(1)), p.value);
293
+ }
294
+ else if (t === PSBT_IN_BIP32_DERIVATION) {
295
+ validateBip32DerivationKeyValue(p.key, p.value);
296
+ unknown.push(p);
297
+ }
298
+ else {
299
+ unknown.push(p);
300
+ }
301
+ }
302
+ let witness;
303
+ if (pair00 !== undefined) {
304
+ const w = resolveWitnessFromKey00(pair00.value, prevOut);
305
+ if (w === undefined) {
306
+ throw new Error('PSBT input: invalid PSBT_IN_UTXO (0x00) value');
307
+ }
308
+ witness = w;
309
+ }
310
+ return { witness, redeemScript, partialSigs, unknown };
311
+ }
312
+ /**
313
+ * BIP 174 PSBT decode/encode for eCash, aligned with Bitcoin ABC’s PSBT maps.
314
+ * See https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki#serialization
315
+ *
316
+ * Use {@link Psbt.fromBytes} / {@link Psbt.toBytes} for round-trip; unknown
317
+ * key-value pairs are preserved (BIP 174).
318
+ */
319
+ class Psbt {
320
+ constructor(params) {
321
+ if (params.signDataPerInput.length !== params.unsignedTx.inputs.length) {
322
+ throw new Error('signDataPerInput length must match inputs');
323
+ }
324
+ if (params.inputPartialSigs.length !== params.unsignedTx.inputs.length) {
325
+ throw new Error('inputPartialSigs length must match inputs');
326
+ }
327
+ this.unsignedTx = params.unsignedTx;
328
+ this.signDataPerInput = params.signDataPerInput;
329
+ this.inputPartialSigs = params.inputPartialSigs;
330
+ this.unknownGlobalPairs = params.unknownGlobalPairs ?? [];
331
+ this.unknownInputPairs =
332
+ params.unknownInputPairs ?? params.unsignedTx.inputs.map(() => []);
333
+ this.unknownOutputPairs =
334
+ params.unknownOutputPairs ??
335
+ params.unsignedTx.outputs.map(() => []);
336
+ if (this.unknownInputPairs.length !== this.unsignedTx.inputs.length) {
337
+ throw new Error('unknownInputPairs length must match inputs');
338
+ }
339
+ if (this.unknownOutputPairs.length !== this.unsignedTx.outputs.length) {
340
+ throw new Error('unknownOutputPairs length must match outputs');
341
+ }
342
+ this.inputWitnessIncomplete =
343
+ params.inputWitnessIncomplete ??
344
+ params.unsignedTx.inputs.map(() => false);
345
+ if (this.inputWitnessIncomplete.length !== this.unsignedTx.inputs.length) {
346
+ throw new Error('inputWitnessIncomplete length must match inputs');
347
+ }
348
+ }
349
+ /** Deserialize PSBT bytes (BIP 174). */
350
+ static fromBytes(data) {
351
+ const bytes = new bytes_js_1.Bytes(data);
352
+ for (let i = 0; i < exports.PSBT_MAGIC.length; i++) {
353
+ if (bytes.readU8() !== exports.PSBT_MAGIC[i]) {
354
+ throw new Error('Invalid PSBT: bad magic');
355
+ }
356
+ }
357
+ const globalPairs = parseMap(bytes);
358
+ assertUniquePsbtKeys(globalPairs, 'global');
359
+ let unsignedRaw;
360
+ const unknownGlobalPairs = [];
361
+ for (const { key, value } of globalPairs) {
362
+ if (key.length === 0)
363
+ continue;
364
+ if (key[0] === PSBT_GLOBAL_UNSIGNED_TX && key.length === 1) {
365
+ unsignedRaw = value;
366
+ }
367
+ else {
368
+ unknownGlobalPairs.push({ key, value });
369
+ }
370
+ }
371
+ if (unsignedRaw === undefined) {
372
+ throw new Error('PSBT missing global unsigned transaction');
373
+ }
374
+ const unsignedTx = tx_js_1.Tx.deser(unsignedRaw);
375
+ assertUnsignedTxEmptyScriptSigs(unsignedTx);
376
+ const inputPartialSigs = [];
377
+ const signDataPerInput = [];
378
+ const unknownInputPairs = [];
379
+ const inputWitnessIncomplete = [];
380
+ for (let i = 0; i < unsignedTx.inputs.length; i++) {
381
+ const inPairs = parseMap(bytes);
382
+ assertUniquePsbtKeys(inPairs, `input ${i}`);
383
+ const prevOut = unsignedTx.inputs[i].prevOut;
384
+ const { witness, redeemScript, partialSigs, unknown } = parseInputMapPairs(inPairs, prevOut);
385
+ unknownInputPairs.push(unknown);
386
+ const incomplete = witness === undefined;
387
+ inputWitnessIncomplete.push(incomplete);
388
+ let signData;
389
+ if (incomplete) {
390
+ signData =
391
+ redeemScript !== undefined
392
+ ? { sats: 0n, redeemScript }
393
+ : { sats: 0n, outputScript: new script_js_1.Script() };
394
+ }
395
+ else if (redeemScript !== undefined) {
396
+ signData = {
397
+ sats: witness.sats,
398
+ redeemScript,
399
+ };
400
+ }
401
+ else {
402
+ signData = {
403
+ sats: witness.sats,
404
+ outputScript: new script_js_1.Script(witness.scriptPubKey),
405
+ };
406
+ }
407
+ signDataPerInput.push(signData);
408
+ inputPartialSigs.push(partialSigs);
409
+ }
410
+ const unknownOutputPairs = [];
411
+ for (let o = 0; o < unsignedTx.outputs.length; o++) {
412
+ const outPairs = parseMap(bytes);
413
+ assertUniquePsbtKeys(outPairs, `output ${o}`);
414
+ for (const p of outPairs) {
415
+ if (p.key.length === 0)
416
+ continue;
417
+ const ot = p.key[0];
418
+ // PSBTOutput::Unserialize (Bitcoin ABC): redeem script key is type byte only.
419
+ if (ot === PSBT_OUT_REDEEMSCRIPT && p.key.length !== 1) {
420
+ throw new Error('PSBT: output redeemScript key must be exactly one byte');
421
+ }
422
+ if (ot === PSBT_OUT_BIP32_DERIVATION) {
423
+ validateBip32DerivationKeyValue(p.key, p.value);
424
+ }
425
+ }
426
+ unknownOutputPairs.push(outPairs.filter(p => p.key.length > 0));
427
+ }
428
+ if (bytes.idx !== data.length) {
429
+ throw new Error('PSBT: trailing bytes after output maps');
430
+ }
431
+ return new Psbt({
432
+ unsignedTx,
433
+ signDataPerInput,
434
+ inputPartialSigs,
435
+ unknownGlobalPairs,
436
+ unknownInputPairs,
437
+ unknownOutputPairs,
438
+ inputWitnessIncomplete,
439
+ });
440
+ }
441
+ /** Serialize to BIP 174 bytes. */
442
+ toBytes() {
443
+ const unsignedSer = this.unsignedTx.ser();
444
+ const globalPairs = [
445
+ {
446
+ key: new Uint8Array([PSBT_GLOBAL_UNSIGNED_TX]),
447
+ value: unsignedSer,
448
+ },
449
+ ...this.unknownGlobalPairs,
450
+ ];
451
+ const parts = [exports.PSBT_MAGIC, serializeMap(globalPairs)];
452
+ for (let i = 0; i < this.unsignedTx.inputs.length; i++) {
453
+ const sd = this.signDataPerInput[i];
454
+ const inPairs = [];
455
+ if (!this.inputWitnessIncomplete[i]) {
456
+ const spk = scriptPubKeyFromSignData(sd);
457
+ inPairs.push({
458
+ key: new Uint8Array([exports.PSBT_IN_UTXO]),
459
+ value: encodeWitnessUtxo(sd.sats, spk),
460
+ });
461
+ }
462
+ if (sd.redeemScript !== undefined) {
463
+ inPairs.push({
464
+ key: new Uint8Array([PSBT_IN_REDEEM_SCRIPT]),
465
+ value: sd.redeemScript.bytecode,
466
+ });
467
+ }
468
+ const pSig = this.inputPartialSigs[i];
469
+ for (const [pkHex, sig] of pSig) {
470
+ const pk = (0, hex_js_1.fromHex)(pkHex);
471
+ const key = new Uint8Array(1 + pk.length);
472
+ key[0] = PSBT_IN_PARTIAL_SIG;
473
+ key.set(pk, 1);
474
+ inPairs.push({ key, value: sig });
475
+ }
476
+ inPairs.push(...(this.unknownInputPairs[i] ?? []));
477
+ parts.push(serializeMap(inPairs));
478
+ }
479
+ for (let o = 0; o < this.unsignedTx.outputs.length; o++) {
480
+ parts.push(serializeMap(this.unknownOutputPairs[o] ?? []));
481
+ }
482
+ const wl = new writerlength_js_1.WriterLength();
483
+ for (const p of parts) {
484
+ wl.putBytes(p);
485
+ }
486
+ const w = new writerbytes_js_1.WriterBytes(wl.length);
487
+ for (const p of parts) {
488
+ w.putBytes(p);
489
+ }
490
+ return w.data;
491
+ }
492
+ }
493
+ exports.Psbt = Psbt;
494
+ //# sourceMappingURL=psbt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"psbt.js","sourceRoot":"","sources":["../src/psbt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Signatories and signing helpers used with `TxBuilder` (`TxBuilderInput.signatory`).
3
+ */
4
+ import { Ecc } from './ecc.js';
5
+ import { Script } from './script.js';
6
+ import { SigHashType } from './sigHashType.js';
7
+ import { UnsignedTxInput } from './unsignedTx.js';
8
+ /**
9
+ * Function that contains all the required data to sign a given `input` and
10
+ * return the scriptSig.
11
+ *
12
+ * Use it by attaching a `Signatory` to a TxBuilderInput, e.g. like this for a
13
+ * P2PKH input:
14
+ * ```ts
15
+ * new TxBuilder({
16
+ * inputs: [{
17
+ * input: { prevOut: ... },
18
+ * signatory: P2PKHSignatory(sk, pk, ALL_BIP143),
19
+ * }],
20
+ * ...
21
+ * })
22
+ * ```
23
+ **/
24
+ export type Signatory = (ecc: Ecc, input: UnsignedTxInput) => Script;
25
+ /** Append the sighash flags to the signature */
26
+ export declare function flagSignature(sig: Uint8Array, sigHashFlags: SigHashType): Uint8Array;
27
+ /**
28
+ * Sign the sighash using Schnorr for BIP143 signatures and ECDSA for Legacy
29
+ * signatures, and then flags the signature correctly
30
+ **/
31
+ export declare function signWithSigHash(ecc: Ecc, sk: Uint8Array, sigHash: Uint8Array, sigHashType: SigHashType): Uint8Array;
32
+ /** Signatory for a P2PKH input. Always uses Schnorr signatures */
33
+ export declare const P2PKHSignatory: (sk: Uint8Array, pk: Uint8Array, sigHashType: SigHashType) => (ecc: Ecc, input: UnsignedTxInput) => Script;
34
+ /** Signatory for a P2PK input. Always uses Schnorr signatures */
35
+ export declare const P2PKSignatory: (sk: Uint8Array, sigHashType: SigHashType) => (ecc: Ecc, input: UnsignedTxInput) => Script;
36
+ //# sourceMappingURL=signatories.d.ts.map