@scure/btc-signer 1.2.2 → 1.3.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.
Files changed (60) hide show
  1. package/README.md +19 -3
  2. package/lib/_type_test.d.ts +2 -0
  3. package/lib/_type_test.d.ts.map +1 -0
  4. package/lib/_type_test.js +59 -0
  5. package/lib/_type_test.js.map +1 -0
  6. package/lib/esm/_type_test.js +57 -0
  7. package/lib/esm/_type_test.js.map +1 -0
  8. package/lib/esm/index.js +13 -3007
  9. package/lib/esm/index.js.map +1 -1
  10. package/lib/esm/payment.js +681 -0
  11. package/lib/esm/payment.js.map +1 -0
  12. package/lib/esm/psbt.js +441 -0
  13. package/lib/esm/psbt.js.map +1 -0
  14. package/lib/esm/script.js +347 -0
  15. package/lib/esm/script.js.map +1 -0
  16. package/lib/esm/transaction.js +1013 -0
  17. package/lib/esm/transaction.js.map +1 -0
  18. package/lib/esm/utils.js +115 -0
  19. package/lib/esm/utils.js.map +1 -0
  20. package/lib/esm/utxo.js +491 -0
  21. package/lib/esm/utxo.js.map +1 -0
  22. package/lib/index.d.ts +18 -1439
  23. package/lib/index.d.ts.map +1 -1
  24. package/lib/index.js +53 -3042
  25. package/lib/index.js.map +1 -0
  26. package/lib/payment.d.ts +167 -0
  27. package/lib/payment.d.ts.map +1 -0
  28. package/lib/payment.js +704 -0
  29. package/lib/payment.js.map +1 -0
  30. package/lib/psbt.d.ts +834 -0
  31. package/lib/psbt.d.ts.map +1 -0
  32. package/lib/psbt.js +446 -0
  33. package/lib/psbt.js.map +1 -0
  34. package/lib/script.d.ts +154 -0
  35. package/lib/script.d.ts.map +1 -0
  36. package/lib/script.js +353 -0
  37. package/lib/script.js.map +1 -0
  38. package/lib/transaction.d.ts +223 -0
  39. package/lib/transaction.d.ts.map +1 -0
  40. package/lib/transaction.js +1022 -0
  41. package/lib/transaction.js.map +1 -0
  42. package/lib/utils.d.ts +30 -0
  43. package/lib/utils.d.ts.map +1 -0
  44. package/lib/utils.js +128 -0
  45. package/lib/utils.js.map +1 -0
  46. package/lib/utxo.d.ts +251 -0
  47. package/lib/utxo.d.ts.map +1 -0
  48. package/lib/utxo.js +501 -0
  49. package/lib/utxo.js.map +1 -0
  50. package/package.json +40 -10
  51. package/src/_type_test.ts +69 -0
  52. package/src/index.ts +28 -0
  53. package/src/package.json +3 -0
  54. package/src/payment.ts +749 -0
  55. package/src/psbt.ts +512 -0
  56. package/src/script.ts +236 -0
  57. package/src/transaction.ts +1065 -0
  58. package/src/utils.ts +118 -0
  59. package/src/utxo.ts +517 -0
  60. package/index.ts +0 -3067
@@ -0,0 +1,347 @@
1
+ import * as P from 'micro-packed';
2
+ export const MAX_SCRIPT_BYTE_LENGTH = 520;
3
+ // prettier-ignore
4
+ export var OP;
5
+ (function (OP) {
6
+ OP[OP["OP_0"] = 0] = "OP_0";
7
+ OP[OP["PUSHDATA1"] = 76] = "PUSHDATA1";
8
+ OP[OP["PUSHDATA2"] = 77] = "PUSHDATA2";
9
+ OP[OP["PUSHDATA4"] = 78] = "PUSHDATA4";
10
+ OP[OP["1NEGATE"] = 79] = "1NEGATE";
11
+ OP[OP["RESERVED"] = 80] = "RESERVED";
12
+ OP[OP["OP_1"] = 81] = "OP_1";
13
+ OP[OP["OP_2"] = 82] = "OP_2";
14
+ OP[OP["OP_3"] = 83] = "OP_3";
15
+ OP[OP["OP_4"] = 84] = "OP_4";
16
+ OP[OP["OP_5"] = 85] = "OP_5";
17
+ OP[OP["OP_6"] = 86] = "OP_6";
18
+ OP[OP["OP_7"] = 87] = "OP_7";
19
+ OP[OP["OP_8"] = 88] = "OP_8";
20
+ OP[OP["OP_9"] = 89] = "OP_9";
21
+ OP[OP["OP_10"] = 90] = "OP_10";
22
+ OP[OP["OP_11"] = 91] = "OP_11";
23
+ OP[OP["OP_12"] = 92] = "OP_12";
24
+ OP[OP["OP_13"] = 93] = "OP_13";
25
+ OP[OP["OP_14"] = 94] = "OP_14";
26
+ OP[OP["OP_15"] = 95] = "OP_15";
27
+ OP[OP["OP_16"] = 96] = "OP_16";
28
+ // Control
29
+ OP[OP["NOP"] = 97] = "NOP";
30
+ OP[OP["VER"] = 98] = "VER";
31
+ OP[OP["IF"] = 99] = "IF";
32
+ OP[OP["NOTIF"] = 100] = "NOTIF";
33
+ OP[OP["VERIF"] = 101] = "VERIF";
34
+ OP[OP["VERNOTIF"] = 102] = "VERNOTIF";
35
+ OP[OP["ELSE"] = 103] = "ELSE";
36
+ OP[OP["ENDIF"] = 104] = "ENDIF";
37
+ OP[OP["VERIFY"] = 105] = "VERIFY";
38
+ OP[OP["RETURN"] = 106] = "RETURN";
39
+ // Stack
40
+ OP[OP["TOALTSTACK"] = 107] = "TOALTSTACK";
41
+ OP[OP["FROMALTSTACK"] = 108] = "FROMALTSTACK";
42
+ OP[OP["2DROP"] = 109] = "2DROP";
43
+ OP[OP["2DUP"] = 110] = "2DUP";
44
+ OP[OP["3DUP"] = 111] = "3DUP";
45
+ OP[OP["2OVER"] = 112] = "2OVER";
46
+ OP[OP["2ROT"] = 113] = "2ROT";
47
+ OP[OP["2SWAP"] = 114] = "2SWAP";
48
+ OP[OP["IFDUP"] = 115] = "IFDUP";
49
+ OP[OP["DEPTH"] = 116] = "DEPTH";
50
+ OP[OP["DROP"] = 117] = "DROP";
51
+ OP[OP["DUP"] = 118] = "DUP";
52
+ OP[OP["NIP"] = 119] = "NIP";
53
+ OP[OP["OVER"] = 120] = "OVER";
54
+ OP[OP["PICK"] = 121] = "PICK";
55
+ OP[OP["ROLL"] = 122] = "ROLL";
56
+ OP[OP["ROT"] = 123] = "ROT";
57
+ OP[OP["SWAP"] = 124] = "SWAP";
58
+ OP[OP["TUCK"] = 125] = "TUCK";
59
+ // Splice
60
+ OP[OP["CAT"] = 126] = "CAT";
61
+ OP[OP["SUBSTR"] = 127] = "SUBSTR";
62
+ OP[OP["LEFT"] = 128] = "LEFT";
63
+ OP[OP["RIGHT"] = 129] = "RIGHT";
64
+ OP[OP["SIZE"] = 130] = "SIZE";
65
+ // Boolean logic
66
+ OP[OP["INVERT"] = 131] = "INVERT";
67
+ OP[OP["AND"] = 132] = "AND";
68
+ OP[OP["OR"] = 133] = "OR";
69
+ OP[OP["XOR"] = 134] = "XOR";
70
+ OP[OP["EQUAL"] = 135] = "EQUAL";
71
+ OP[OP["EQUALVERIFY"] = 136] = "EQUALVERIFY";
72
+ OP[OP["RESERVED1"] = 137] = "RESERVED1";
73
+ OP[OP["RESERVED2"] = 138] = "RESERVED2";
74
+ // Numbers
75
+ OP[OP["1ADD"] = 139] = "1ADD";
76
+ OP[OP["1SUB"] = 140] = "1SUB";
77
+ OP[OP["2MUL"] = 141] = "2MUL";
78
+ OP[OP["2DIV"] = 142] = "2DIV";
79
+ OP[OP["NEGATE"] = 143] = "NEGATE";
80
+ OP[OP["ABS"] = 144] = "ABS";
81
+ OP[OP["NOT"] = 145] = "NOT";
82
+ OP[OP["0NOTEQUAL"] = 146] = "0NOTEQUAL";
83
+ OP[OP["ADD"] = 147] = "ADD";
84
+ OP[OP["SUB"] = 148] = "SUB";
85
+ OP[OP["MUL"] = 149] = "MUL";
86
+ OP[OP["DIV"] = 150] = "DIV";
87
+ OP[OP["MOD"] = 151] = "MOD";
88
+ OP[OP["LSHIFT"] = 152] = "LSHIFT";
89
+ OP[OP["RSHIFT"] = 153] = "RSHIFT";
90
+ OP[OP["BOOLAND"] = 154] = "BOOLAND";
91
+ OP[OP["BOOLOR"] = 155] = "BOOLOR";
92
+ OP[OP["NUMEQUAL"] = 156] = "NUMEQUAL";
93
+ OP[OP["NUMEQUALVERIFY"] = 157] = "NUMEQUALVERIFY";
94
+ OP[OP["NUMNOTEQUAL"] = 158] = "NUMNOTEQUAL";
95
+ OP[OP["LESSTHAN"] = 159] = "LESSTHAN";
96
+ OP[OP["GREATERTHAN"] = 160] = "GREATERTHAN";
97
+ OP[OP["LESSTHANOREQUAL"] = 161] = "LESSTHANOREQUAL";
98
+ OP[OP["GREATERTHANOREQUAL"] = 162] = "GREATERTHANOREQUAL";
99
+ OP[OP["MIN"] = 163] = "MIN";
100
+ OP[OP["MAX"] = 164] = "MAX";
101
+ OP[OP["WITHIN"] = 165] = "WITHIN";
102
+ // Crypto
103
+ OP[OP["RIPEMD160"] = 166] = "RIPEMD160";
104
+ OP[OP["SHA1"] = 167] = "SHA1";
105
+ OP[OP["SHA256"] = 168] = "SHA256";
106
+ OP[OP["HASH160"] = 169] = "HASH160";
107
+ OP[OP["HASH256"] = 170] = "HASH256";
108
+ OP[OP["CODESEPARATOR"] = 171] = "CODESEPARATOR";
109
+ OP[OP["CHECKSIG"] = 172] = "CHECKSIG";
110
+ OP[OP["CHECKSIGVERIFY"] = 173] = "CHECKSIGVERIFY";
111
+ OP[OP["CHECKMULTISIG"] = 174] = "CHECKMULTISIG";
112
+ OP[OP["CHECKMULTISIGVERIFY"] = 175] = "CHECKMULTISIGVERIFY";
113
+ // Expansion
114
+ OP[OP["NOP1"] = 176] = "NOP1";
115
+ OP[OP["CHECKLOCKTIMEVERIFY"] = 177] = "CHECKLOCKTIMEVERIFY";
116
+ OP[OP["CHECKSEQUENCEVERIFY"] = 178] = "CHECKSEQUENCEVERIFY";
117
+ OP[OP["NOP4"] = 179] = "NOP4";
118
+ OP[OP["NOP5"] = 180] = "NOP5";
119
+ OP[OP["NOP6"] = 181] = "NOP6";
120
+ OP[OP["NOP7"] = 182] = "NOP7";
121
+ OP[OP["NOP8"] = 183] = "NOP8";
122
+ OP[OP["NOP9"] = 184] = "NOP9";
123
+ OP[OP["NOP10"] = 185] = "NOP10";
124
+ // BIP 342
125
+ OP[OP["CHECKSIGADD"] = 186] = "CHECKSIGADD";
126
+ // Invalid
127
+ OP[OP["INVALID"] = 255] = "INVALID";
128
+ })(OP || (OP = {}));
129
+ // We can encode almost any number as ScriptNum, however, parsing will be a problem
130
+ // since we can't know if buffer is a number or something else.
131
+ export function ScriptNum(bytesLimit = 6, forceMinimal = false) {
132
+ return P.wrap({
133
+ encodeStream: (w, value) => {
134
+ if (value === 0n)
135
+ return;
136
+ const neg = value < 0;
137
+ const val = BigInt(value);
138
+ const nums = [];
139
+ for (let abs = neg ? -val : val; abs; abs >>= 8n)
140
+ nums.push(Number(abs & 0xffn));
141
+ if (nums[nums.length - 1] >= 0x80)
142
+ nums.push(neg ? 0x80 : 0);
143
+ else if (neg)
144
+ nums[nums.length - 1] |= 0x80;
145
+ w.bytes(new Uint8Array(nums));
146
+ },
147
+ decodeStream: (r) => {
148
+ const len = r.leftBytes;
149
+ if (len > bytesLimit)
150
+ throw new Error(`ScriptNum: number (${len}) bigger than limit=${bytesLimit}`);
151
+ if (len === 0)
152
+ return 0n;
153
+ if (forceMinimal) {
154
+ // MSB is zero (without sign bit) -> not minimally encoded
155
+ if ((r.data[len - 1] & 0x7f) === 0) {
156
+ // exception
157
+ if (len <= 1 || (r.data[len - 2] & 0x80) === 0)
158
+ throw new Error('Non-minimally encoded ScriptNum');
159
+ }
160
+ }
161
+ let last = 0;
162
+ let res = 0n;
163
+ for (let i = 0; i < len; ++i) {
164
+ last = r.byte();
165
+ res |= BigInt(last) << (8n * BigInt(i));
166
+ }
167
+ if (last >= 0x80) {
168
+ res &= (2n ** BigInt(len * 8) - 1n) >> 1n;
169
+ res = -res;
170
+ }
171
+ return res;
172
+ },
173
+ });
174
+ }
175
+ export function OpToNum(op, bytesLimit = 4, forceMinimal = true) {
176
+ if (typeof op === 'number')
177
+ return op;
178
+ if (P.isBytes(op)) {
179
+ try {
180
+ const val = ScriptNum(bytesLimit, forceMinimal).decode(op);
181
+ if (val > Number.MAX_SAFE_INTEGER)
182
+ return;
183
+ return Number(val);
184
+ }
185
+ catch (e) {
186
+ return;
187
+ }
188
+ }
189
+ return;
190
+ }
191
+ // Converts script bytes to parsed script
192
+ // 5221030000000000000000000000000000000000000000000000000000000000000001210300000000000000000000000000000000000000000000000000000000000000022103000000000000000000000000000000000000000000000000000000000000000353ae
193
+ // =>
194
+ // OP_2
195
+ // 030000000000000000000000000000000000000000000000000000000000000001
196
+ // 030000000000000000000000000000000000000000000000000000000000000002
197
+ // 030000000000000000000000000000000000000000000000000000000000000003
198
+ // OP_3
199
+ // CHECKMULTISIG
200
+ export const Script = P.wrap({
201
+ encodeStream: (w, value) => {
202
+ for (let o of value) {
203
+ if (typeof o === 'string') {
204
+ if (OP[o] === undefined)
205
+ throw new Error(`Unknown opcode=${o}`);
206
+ w.byte(OP[o]);
207
+ continue;
208
+ }
209
+ else if (typeof o === 'number') {
210
+ if (o === 0x00) {
211
+ w.byte(0x00);
212
+ continue;
213
+ }
214
+ else if (1 <= o && o <= 16) {
215
+ w.byte(OP.OP_1 - 1 + o);
216
+ continue;
217
+ }
218
+ }
219
+ // Encode big numbers
220
+ if (typeof o === 'number')
221
+ o = ScriptNum().encode(BigInt(o));
222
+ if (!P.isBytes(o))
223
+ throw new Error(`Wrong Script OP=${o} (${typeof o})`);
224
+ // Bytes
225
+ const len = o.length;
226
+ if (len < OP.PUSHDATA1)
227
+ w.byte(len);
228
+ else if (len <= 0xff) {
229
+ w.byte(OP.PUSHDATA1);
230
+ w.byte(len);
231
+ }
232
+ else if (len <= 0xffff) {
233
+ w.byte(OP.PUSHDATA2);
234
+ w.bytes(P.U16LE.encode(len));
235
+ }
236
+ else {
237
+ w.byte(OP.PUSHDATA4);
238
+ w.bytes(P.U32LE.encode(len));
239
+ }
240
+ w.bytes(o);
241
+ }
242
+ },
243
+ decodeStream: (r) => {
244
+ const out = [];
245
+ while (!r.isEnd()) {
246
+ const cur = r.byte();
247
+ // if 0 < cur < 78
248
+ if (OP.OP_0 < cur && cur <= OP.PUSHDATA4) {
249
+ let len;
250
+ if (cur < OP.PUSHDATA1)
251
+ len = cur;
252
+ else if (cur === OP.PUSHDATA1)
253
+ len = P.U8.decodeStream(r);
254
+ else if (cur === OP.PUSHDATA2)
255
+ len = P.U16LE.decodeStream(r);
256
+ else if (cur === OP.PUSHDATA4)
257
+ len = P.U32LE.decodeStream(r);
258
+ else
259
+ throw new Error('Should be not possible');
260
+ out.push(r.bytes(len));
261
+ }
262
+ else if (cur === 0x00) {
263
+ out.push(0);
264
+ }
265
+ else if (OP.OP_1 <= cur && cur <= OP.OP_16) {
266
+ out.push(cur - (OP.OP_1 - 1));
267
+ }
268
+ else {
269
+ const op = OP[cur];
270
+ if (op === undefined)
271
+ throw new Error(`Unknown opcode=${cur.toString(16)}`);
272
+ out.push(op);
273
+ }
274
+ }
275
+ return out;
276
+ },
277
+ });
278
+ // BTC specific variable length integer encoding
279
+ // https://en.bitcoin.it/wiki/Protocol_documentation#Variable_length_integer
280
+ const CSLimits = {
281
+ 0xfd: [0xfd, 2, 253n, 65535n],
282
+ 0xfe: [0xfe, 4, 65536n, 4294967295n],
283
+ 0xff: [0xff, 8, 4294967296n, 18446744073709551615n],
284
+ };
285
+ export const CompactSize = P.wrap({
286
+ encodeStream: (w, value) => {
287
+ if (typeof value === 'number')
288
+ value = BigInt(value);
289
+ if (0n <= value && value <= 252n)
290
+ return w.byte(Number(value));
291
+ for (const [flag, bytes, start, stop] of Object.values(CSLimits)) {
292
+ if (start > value || value > stop)
293
+ continue;
294
+ w.byte(flag);
295
+ for (let i = 0; i < bytes; i++)
296
+ w.byte(Number((value >> (8n * BigInt(i))) & 0xffn));
297
+ return;
298
+ }
299
+ throw w.err(`VarInt too big: ${value}`);
300
+ },
301
+ decodeStream: (r) => {
302
+ const b0 = r.byte();
303
+ if (b0 <= 0xfc)
304
+ return BigInt(b0);
305
+ const [_, bytes, start] = CSLimits[b0];
306
+ let num = 0n;
307
+ for (let i = 0; i < bytes; i++)
308
+ num |= BigInt(r.byte()) << (8n * BigInt(i));
309
+ if (num < start)
310
+ throw r.err(`Wrong CompactSize(${8 * bytes})`);
311
+ return num;
312
+ },
313
+ });
314
+ // Same thing, but in number instead of bigint. Checks for safe integer inside
315
+ export const CompactSizeLen = P.apply(CompactSize, P.coders.number);
316
+ // ui8a of size <CompactSize>
317
+ export const VarBytes = P.bytes(CompactSize);
318
+ // SegWit v0 stack of witness buffers
319
+ export const RawWitness = P.array(CompactSizeLen, VarBytes);
320
+ // Array of size <CompactSize>
321
+ export const BTCArray = (t) => P.array(CompactSize, t);
322
+ export const RawInput = P.struct({
323
+ txid: P.bytes(32, true), // hash(prev_tx),
324
+ index: P.U32LE, // output number of previous tx
325
+ finalScriptSig: VarBytes, // btc merges input and output script, executes it. If ok = tx passes
326
+ sequence: P.U32LE, // ?
327
+ });
328
+ export const RawOutput = P.struct({ amount: P.U64LE, script: VarBytes });
329
+ // https://en.bitcoin.it/wiki/Protocol_documentation#tx
330
+ const _RawTx = P.struct({
331
+ version: P.I32LE,
332
+ segwitFlag: P.flag(new Uint8Array([0x00, 0x01])),
333
+ inputs: BTCArray(RawInput),
334
+ outputs: BTCArray(RawOutput),
335
+ witnesses: P.flagged('segwitFlag', P.array('inputs/length', RawWitness)),
336
+ // < 500000000 Block number at which this transaction is unlocked
337
+ // >= 500000000 UNIX timestamp at which this transaction is unlocked
338
+ // Handled as part of PSBTv2
339
+ lockTime: P.U32LE,
340
+ });
341
+ function validateRawTx(tx) {
342
+ if (tx.segwitFlag && tx.witnesses && !tx.witnesses.length)
343
+ throw new Error('Segwit flag with empty witnesses array');
344
+ return tx;
345
+ }
346
+ export const RawTx = P.validate(_RawTx, validateRawTx);
347
+ //# sourceMappingURL=script.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script.js","sourceRoot":"","sources":["../../src/script.ts"],"names":[],"mappings":"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"}