@scure/btc-signer 1.2.2 → 1.3.1

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 +30 -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 +528 -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 +177 -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 +538 -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 +755 -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 +554 -0
  60. package/index.ts +0 -3067
package/lib/utxo.js ADDED
@@ -0,0 +1,538 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.selectUTXO = exports._Estimator = exports._cmpBig = exports.toVsize = exports.getInputType = exports.normalizeInput = exports.getPrevOut = void 0;
4
+ const base_1 = require("@scure/base");
5
+ const P = require("micro-packed");
6
+ const payment_js_1 = require("./payment.js");
7
+ const psbt = require("./psbt.js");
8
+ const script_js_1 = require("./script.js");
9
+ const transaction_js_1 = require("./transaction.js"); // circular
10
+ const utils_js_1 = require("./utils.js");
11
+ const utils_js_2 = require("./utils.js");
12
+ // Normalizes input
13
+ function getPrevOut(input) {
14
+ if (input.nonWitnessUtxo) {
15
+ if (input.index === undefined)
16
+ throw new Error('Unknown input index');
17
+ return input.nonWitnessUtxo.outputs[input.index];
18
+ }
19
+ else if (input.witnessUtxo)
20
+ return input.witnessUtxo;
21
+ else
22
+ throw new Error('Cannot find previous output info');
23
+ }
24
+ exports.getPrevOut = getPrevOut;
25
+ function normalizeInput(i, cur, allowedFields, disableScriptCheck = false) {
26
+ let { nonWitnessUtxo, txid } = i;
27
+ // String support for common fields. We usually prefer Uint8Array to avoid errors
28
+ // like hex looking string accidentally passed, however, in case of nonWitnessUtxo
29
+ // it is better to expect string, since constructing this complex object will be
30
+ // difficult for user
31
+ if (typeof nonWitnessUtxo === 'string')
32
+ nonWitnessUtxo = base_1.hex.decode(nonWitnessUtxo);
33
+ if ((0, utils_js_1.isBytes)(nonWitnessUtxo))
34
+ nonWitnessUtxo = script_js_1.RawTx.decode(nonWitnessUtxo);
35
+ if (!('nonWitnessUtxo' in i) && nonWitnessUtxo === undefined)
36
+ nonWitnessUtxo = cur?.nonWitnessUtxo;
37
+ if (typeof txid === 'string')
38
+ txid = base_1.hex.decode(txid);
39
+ // TODO: if we have nonWitnessUtxo, we can extract txId from here
40
+ if (txid === undefined)
41
+ txid = cur?.txid;
42
+ let res = { ...cur, ...i, nonWitnessUtxo, txid };
43
+ if (!('nonWitnessUtxo' in i) && res.nonWitnessUtxo === undefined)
44
+ delete res.nonWitnessUtxo;
45
+ if (res.sequence === undefined)
46
+ res.sequence = transaction_js_1.DEFAULT_SEQUENCE;
47
+ if (res.tapMerkleRoot === null)
48
+ delete res.tapMerkleRoot;
49
+ res = psbt.mergeKeyMap(psbt.PSBTInput, res, cur, allowedFields);
50
+ psbt.PSBTInputCoder.encode(res); // Validates that everything is correct at this point
51
+ let prevOut;
52
+ if (res.nonWitnessUtxo && res.index !== undefined)
53
+ prevOut = res.nonWitnessUtxo.outputs[res.index];
54
+ else if (res.witnessUtxo)
55
+ prevOut = res.witnessUtxo;
56
+ if (prevOut && !disableScriptCheck)
57
+ (0, payment_js_1.checkScript)(prevOut && prevOut.script, res.redeemScript, res.witnessScript);
58
+ return res;
59
+ }
60
+ exports.normalizeInput = normalizeInput;
61
+ function getInputType(input, allowLegacyWitnessUtxo = false) {
62
+ let txType = 'legacy';
63
+ let defaultSighash = transaction_js_1.SignatureHash.ALL;
64
+ const prevOut = getPrevOut(input);
65
+ const first = payment_js_1.OutScript.decode(prevOut.script);
66
+ let type = first.type;
67
+ let cur = first;
68
+ const stack = [first];
69
+ if (first.type === 'tr') {
70
+ defaultSighash = transaction_js_1.SignatureHash.DEFAULT;
71
+ return {
72
+ txType: 'taproot',
73
+ type: 'tr',
74
+ last: first,
75
+ lastScript: prevOut.script,
76
+ defaultSighash,
77
+ sighash: input.sighashType || defaultSighash,
78
+ };
79
+ }
80
+ else {
81
+ if (first.type === 'wpkh' || first.type === 'wsh')
82
+ txType = 'segwit';
83
+ if (first.type === 'sh') {
84
+ if (!input.redeemScript)
85
+ throw new Error('inputType: sh without redeemScript');
86
+ let child = payment_js_1.OutScript.decode(input.redeemScript);
87
+ if (child.type === 'wpkh' || child.type === 'wsh')
88
+ txType = 'segwit';
89
+ stack.push(child);
90
+ cur = child;
91
+ type += `-${child.type}`;
92
+ }
93
+ // wsh can be inside sh
94
+ if (cur.type === 'wsh') {
95
+ if (!input.witnessScript)
96
+ throw new Error('inputType: wsh without witnessScript');
97
+ let child = payment_js_1.OutScript.decode(input.witnessScript);
98
+ if (child.type === 'wsh')
99
+ txType = 'segwit';
100
+ stack.push(child);
101
+ cur = child;
102
+ type += `-${child.type}`;
103
+ }
104
+ const last = stack[stack.length - 1];
105
+ if (last.type === 'sh' || last.type === 'wsh')
106
+ throw new Error('inputType: sh/wsh cannot be terminal type');
107
+ const lastScript = payment_js_1.OutScript.encode(last);
108
+ const res = {
109
+ type,
110
+ txType,
111
+ last,
112
+ lastScript,
113
+ defaultSighash,
114
+ sighash: input.sighashType || defaultSighash,
115
+ };
116
+ if (txType === 'legacy' && !allowLegacyWitnessUtxo && !input.nonWitnessUtxo) {
117
+ throw new Error(`Transaction/sign: legacy input without nonWitnessUtxo, can result in attack that forces paying higher fees. Pass allowLegacyWitnessUtxo=true, if you sure`);
118
+ }
119
+ return res;
120
+ }
121
+ }
122
+ exports.getInputType = getInputType;
123
+ const toVsize = (weight) => Math.ceil(weight / 4);
124
+ exports.toVsize = toVsize;
125
+ const encodeTapBlock = (item) => psbt.TaprootControlBlock.encode(item);
126
+ function iterLeafs(tapLeafScript, sigSize, customScripts) {
127
+ if (!tapLeafScript || !tapLeafScript.length)
128
+ throw new Error('no leafs');
129
+ const empty = () => new Uint8Array(sigSize);
130
+ // If user want to select specific leaf, which can signed,
131
+ // it is possible to remove all other leafs manually.
132
+ // Sort leafs by control block length.
133
+ const leafs = tapLeafScript.sort((a, b) => encodeTapBlock(a[0]).length - encodeTapBlock(b[0]).length);
134
+ for (const [cb, _script] of leafs) {
135
+ // Last byte is version
136
+ const script = _script.slice(0, -1);
137
+ const ver = _script[_script.length - 1];
138
+ const outs = payment_js_1.OutScript.decode(script);
139
+ let signatures = [];
140
+ if (outs.type === 'tr_ms') {
141
+ const m = outs.m;
142
+ const n = outs.pubkeys.length - m;
143
+ for (let i = 0; i < m; i++)
144
+ signatures.push(empty());
145
+ for (let i = 0; i < n; i++)
146
+ signatures.push(P.EMPTY);
147
+ }
148
+ else if (outs.type === 'tr_ns') {
149
+ for (const _pub of outs.pubkeys)
150
+ signatures.push(empty());
151
+ }
152
+ else {
153
+ if (!customScripts)
154
+ throw new Error('Finalize: Unknown tapLeafScript');
155
+ const leafHash = (0, payment_js_1.tapLeafHash)(script, ver);
156
+ for (const c of customScripts) {
157
+ if (!c.finalizeTaproot)
158
+ continue;
159
+ const scriptDecoded = script_js_1.Script.decode(script);
160
+ const csEncoded = c.encode(scriptDecoded);
161
+ if (csEncoded === undefined)
162
+ continue;
163
+ const pubKeys = scriptDecoded.filter((i) => {
164
+ if (!P.isBytes(i))
165
+ return false;
166
+ try {
167
+ (0, utils_js_2.validatePubkey)(i, utils_js_2.PubT.schnorr);
168
+ return true;
169
+ }
170
+ catch (e) {
171
+ return false;
172
+ }
173
+ });
174
+ const finalized = c.finalizeTaproot(script, csEncoded, pubKeys.map((pubKey) => [{ pubKey, leafHash }, empty()]));
175
+ if (!finalized)
176
+ continue;
177
+ return finalized.concat(encodeTapBlock(cb));
178
+ }
179
+ }
180
+ // Witness is stack, so last element will be used first
181
+ return signatures.reverse().concat([script, encodeTapBlock(cb)]);
182
+ }
183
+ throw new Error('there was no witness');
184
+ }
185
+ function estimateInput(inputType, input, opts) {
186
+ let script = P.EMPTY;
187
+ let witness;
188
+ // schnorr sig is always 64 bytes. except for cases when sighash is not default!
189
+ if (inputType.txType === 'taproot') {
190
+ const SCHNORR_SIG_SIZE = inputType.sighash !== transaction_js_1.SignatureHash.DEFAULT ? 65 : 64;
191
+ if (input.tapInternalKey && !P.equalBytes(input.tapInternalKey, utils_js_1.TAPROOT_UNSPENDABLE_KEY)) {
192
+ witness = [new Uint8Array(SCHNORR_SIG_SIZE)];
193
+ }
194
+ else if (input.tapLeafScript) {
195
+ witness = iterLeafs(input.tapLeafScript, SCHNORR_SIG_SIZE, opts.customScripts);
196
+ }
197
+ else
198
+ throw new Error('estimateInput/taproot: unknown input');
199
+ }
200
+ else {
201
+ // It is possible to grind signatures until it has minimal size (but changing fee value +N satoshi),
202
+ // which will make estimations exact. But will be very hard for multi sig (need to make sure all signatures has small size).
203
+ const empty = () => new Uint8Array(72); // max size of sigs
204
+ const emptyPub = () => new Uint8Array(33); // size of pubkey
205
+ let inputScript = P.EMPTY;
206
+ let inputWitness = [];
207
+ const ltype = inputType.last.type;
208
+ if (ltype === 'ms') {
209
+ const m = inputType.last.m;
210
+ const sig = [0];
211
+ for (let i = 0; i < m; i++)
212
+ sig.push(empty());
213
+ inputScript = script_js_1.Script.encode(sig);
214
+ }
215
+ else if (ltype === 'pk') {
216
+ // 71 sig + 1 sighash
217
+ inputScript = script_js_1.Script.encode([empty()]);
218
+ }
219
+ else if (ltype === 'pkh') {
220
+ inputScript = script_js_1.Script.encode([empty(), emptyPub()]);
221
+ }
222
+ else if (ltype === 'wpkh') {
223
+ inputScript = P.EMPTY;
224
+ inputWitness = [empty(), emptyPub()];
225
+ }
226
+ else if (ltype === 'unknown' && !opts.allowUnknownInputs)
227
+ throw new Error('Unknown inputs are not allowed');
228
+ if (inputType.type.includes('wsh-')) {
229
+ // P2WSH
230
+ if (inputScript.length && inputType.lastScript.length) {
231
+ inputWitness = script_js_1.Script.decode(inputScript).map((i) => {
232
+ if (i === 0)
233
+ return P.EMPTY;
234
+ if ((0, utils_js_1.isBytes)(i))
235
+ return i;
236
+ throw new Error(`Wrong witness op=${i}`);
237
+ });
238
+ }
239
+ inputWitness = inputWitness.concat(inputType.lastScript);
240
+ }
241
+ if (inputType.txType === 'segwit')
242
+ witness = inputWitness;
243
+ if (inputType.type.startsWith('sh-wsh-')) {
244
+ script = script_js_1.Script.encode([script_js_1.Script.encode([0, new Uint8Array(utils_js_1.sha256.outputLen)])]);
245
+ }
246
+ else if (inputType.type.startsWith('sh-')) {
247
+ script = script_js_1.Script.encode([...script_js_1.Script.decode(inputScript), inputType.lastScript]);
248
+ }
249
+ else if (inputType.type.startsWith('wsh-')) {
250
+ }
251
+ else if (inputType.txType !== 'segwit')
252
+ script = inputScript;
253
+ }
254
+ let weight = 160 + 4 * script_js_1.VarBytes.encode(script).length;
255
+ let hasWitnesses = false;
256
+ if (witness) {
257
+ weight += script_js_1.RawWitness.encode(witness).length;
258
+ hasWitnesses = true;
259
+ }
260
+ return { weight, hasWitnesses };
261
+ }
262
+ // Exported for tests, internal method
263
+ const _cmpBig = (a, b) => {
264
+ const n = a - b;
265
+ if (n < 0n)
266
+ return -1;
267
+ else if (n > 0n)
268
+ return 1;
269
+ return 0;
270
+ };
271
+ exports._cmpBig = _cmpBig;
272
+ function getScript(o, opts = {}, network = utils_js_1.NETWORK) {
273
+ let script;
274
+ if ('script' in o && o.script instanceof Uint8Array) {
275
+ script = o.script;
276
+ }
277
+ if ('address' in o) {
278
+ if (typeof o.address !== 'string')
279
+ throw new Error(`Estimator: wrong output address=${o.address}`);
280
+ script = payment_js_1.OutScript.encode((0, payment_js_1.Address)(network).decode(o.address));
281
+ }
282
+ if (!script)
283
+ throw new Error('Estimator: wrong output script');
284
+ if (typeof o.amount !== 'bigint')
285
+ throw new Error(`Estimator: wrong output amount=${o.amount}`);
286
+ if (script && !opts.allowUnknownOutputs && payment_js_1.OutScript.decode(script).type === 'unknown') {
287
+ throw new Error('Estimator: unknown output script type, there is a chance that input is unspendable. Pass allowUnknownOutputs=true, if you sure');
288
+ }
289
+ if (!opts.disableScriptCheck)
290
+ (0, payment_js_1.checkScript)(script);
291
+ return script;
292
+ }
293
+ // class, because we need to re-use normalized inputs, instead of parsing each time
294
+ // internal stuff, exported for tests only
295
+ class _Estimator {
296
+ constructor(inputs, outputs, opts) {
297
+ this.inputs = inputs;
298
+ this.outputs = outputs;
299
+ this.opts = opts;
300
+ // https://github.com/bitcoin/bitcoin/blob/f90603ac6d24f5263649675d51233f1fce8b2ecd/src/policy/policy.cpp#L44
301
+ // 32 + 4 + 1 + 107 + 4
302
+ // Dust used in accumExact + change address algo
303
+ // - change address: can be smaller for segwit
304
+ // - accumExact: ???
305
+ this.dust = 148n; // compat with coinselect
306
+ if (typeof opts.feePerByte !== 'bigint')
307
+ throw new Error(`Estimator: wrong feePerByte=${opts.feePerByte}`);
308
+ if (opts.dust) {
309
+ if (typeof opts.dust !== 'bigint')
310
+ throw new Error(`Estimator: wrong dust=${opts.dust}`);
311
+ this.dust = opts.dust;
312
+ }
313
+ const network = opts.network || utils_js_1.NETWORK;
314
+ let amount = 0n;
315
+ // Base weight: tx with outputs, no inputs
316
+ let baseWeight = 32;
317
+ for (const o of outputs) {
318
+ const script = getScript(o, opts, opts.network);
319
+ baseWeight += 32 + 4 * script_js_1.VarBytes.encode(script).length;
320
+ amount += o.amount;
321
+ }
322
+ if (typeof opts.changeAddress !== 'string')
323
+ throw new Error(`Estimator: wrong change address=${opts.changeAddress}`);
324
+ let changeWeight = baseWeight +
325
+ 32 +
326
+ 4 * script_js_1.VarBytes.encode(payment_js_1.OutScript.encode((0, payment_js_1.Address)(network).decode(opts.changeAddress))).length;
327
+ baseWeight += 4 * script_js_1.CompactSizeLen.encode(outputs.length).length;
328
+ // If there a lot of outputs change can change fee
329
+ changeWeight += 4 * script_js_1.CompactSizeLen.encode(outputs.length + 1).length;
330
+ this.baseWeight = baseWeight;
331
+ this.changeWeight = changeWeight;
332
+ this.amount = amount;
333
+ this.normalizedInputs = this.inputs.map((i) => {
334
+ const normalized = normalizeInput(i, undefined, undefined, opts.disableScriptCheck);
335
+ (0, transaction_js_1.inputBeforeSign)(normalized); // check fields
336
+ const inputType = getInputType(normalized, opts.allowLegacyWitnessUtxo);
337
+ const prev = getPrevOut(normalized);
338
+ const estimate = estimateInput(inputType, normalized, this.opts);
339
+ const value = prev.amount - opts.feePerByte * BigInt((0, exports.toVsize)(estimate.weight)); // value = amount-fee
340
+ return { inputType, normalized, amount: prev.amount, value, estimate };
341
+ });
342
+ }
343
+ checkInputIdx(idx) {
344
+ if (!Number.isSafeInteger(idx) || 0 > idx || idx >= this.inputs.length)
345
+ throw new Error(`Wrong input index=${idx}`);
346
+ return idx;
347
+ }
348
+ sortIndices(indices) {
349
+ return indices.slice().sort((a, b) => {
350
+ const ai = this.normalizedInputs[this.checkInputIdx(a)];
351
+ const bi = this.normalizedInputs[this.checkInputIdx(b)];
352
+ const out = (0, utils_js_1.compareBytes)(ai.normalized.txid, bi.normalized.txid);
353
+ if (out !== 0)
354
+ return out;
355
+ return ai.normalized.index - bi.normalized.index;
356
+ });
357
+ }
358
+ sortOutputs(outputs) {
359
+ const scripts = outputs.map((o) => getScript(o, this.opts, this.opts.network));
360
+ const indices = outputs.map((_, j) => j);
361
+ return indices.sort((a, b) => {
362
+ const aa = outputs[a].amount;
363
+ const ba = outputs[b].amount;
364
+ const out = (0, exports._cmpBig)(aa, ba);
365
+ if (out !== 0)
366
+ return out;
367
+ return (0, utils_js_1.compareBytes)(scripts[a], scripts[b]);
368
+ });
369
+ }
370
+ getSatoshi(weigth) {
371
+ return this.opts.feePerByte * BigInt((0, exports.toVsize)(weigth));
372
+ }
373
+ // Sort by value instead of amount
374
+ get biggest() {
375
+ return this.inputs
376
+ .map((_i, j) => j)
377
+ .sort((a, b) => (0, exports._cmpBig)(this.normalizedInputs[b].value, this.normalizedInputs[a].value));
378
+ }
379
+ get smallest() {
380
+ return this.biggest.reverse();
381
+ }
382
+ // These assume that UTXO array has historical order.
383
+ // Otherwise, we have no way to know which tx is oldest
384
+ // Explorers usually give UTXO in this order.
385
+ get oldest() {
386
+ return this.inputs.map((_i, j) => j);
387
+ }
388
+ get newest() {
389
+ return this.oldest.reverse();
390
+ }
391
+ // exact - like blackjack from coinselect.
392
+ // exact(biggest) will select one big utxo which is closer to targetValue+dust, if possible.
393
+ // If not, it will accumulate largest utxo until value is close to targetValue+dust.
394
+ accumulate(indices, exact = false, skipNegative = true, all = false) {
395
+ const { feePerByte } = this.opts;
396
+ // TODO: how to handle change addresses?
397
+ // - cost of input
398
+ // - cost of change output (if input requires change)
399
+ // - cost of output spending
400
+ // Dust threshold should be significantly bigger, no point in
401
+ // creating an output, which cannot be spent.
402
+ // coinselect doesn't consider cost of output address for dust.
403
+ // Changing that can actually reduce privacy
404
+ let weight = this.opts.alwaysChange ? this.changeWeight : this.baseWeight;
405
+ let hasWitnesses = false;
406
+ let num = 0;
407
+ let inputsAmount = 0n;
408
+ const targetAmount = this.amount;
409
+ const res = [];
410
+ let fee;
411
+ for (const idx of indices) {
412
+ this.checkInputIdx(idx);
413
+ const { estimate, amount, value } = this.normalizedInputs[idx];
414
+ let newWeight = weight + estimate.weight;
415
+ if (!hasWitnesses && estimate.hasWitnesses)
416
+ newWeight += 2; // enable witness if needed
417
+ const totalWeight = newWeight + 4 * script_js_1.CompactSizeLen.encode(num).length; // number of outputs can change weight
418
+ fee = this.getSatoshi(totalWeight);
419
+ // Best case scenario exact(biggest) -> we find biggest output, less than target+threshold
420
+ if (exact) {
421
+ const dust = this.dust * feePerByte;
422
+ // skip if added value is bigger than dust
423
+ if (amount + inputsAmount > targetAmount + fee + dust)
424
+ continue;
425
+ }
426
+ // Negative: cost of using input is more than value provided (negative)
427
+ // By default 'blackjack' mode in coinselect doesn't use that, which means
428
+ // it will use negative output if sorted by 'smallest'
429
+ if (skipNegative && value <= 0n)
430
+ continue;
431
+ weight = newWeight;
432
+ if (estimate.hasWitnesses)
433
+ hasWitnesses = true;
434
+ num++;
435
+ inputsAmount += amount;
436
+ res.push(idx);
437
+ // inputsAmount is enough to cover cost of tx
438
+ if (!all && targetAmount + fee < inputsAmount)
439
+ return { indices: res, fee, weight: totalWeight, total: inputsAmount };
440
+ }
441
+ if (all) {
442
+ const newWeight = weight + 4 * script_js_1.CompactSizeLen.encode(num).length;
443
+ return { indices: res, fee, weight: newWeight, total: inputsAmount };
444
+ }
445
+ return undefined;
446
+ }
447
+ // Works like coinselect default method
448
+ default() {
449
+ const { biggest } = this;
450
+ const exact = this.accumulate(biggest, true, false);
451
+ if (exact)
452
+ return exact;
453
+ return this.accumulate(biggest);
454
+ }
455
+ select(strategy) {
456
+ if (strategy === 'all') {
457
+ return this.accumulate(this.inputs.map((_, j) => j), false, true, true);
458
+ }
459
+ if (strategy === 'default')
460
+ return this.default();
461
+ const data = {
462
+ Oldest: () => this.oldest,
463
+ Newest: () => this.newest,
464
+ Smallest: () => this.smallest,
465
+ Biggest: () => this.biggest,
466
+ };
467
+ if (strategy.startsWith('exact')) {
468
+ const [exactData, left] = strategy.slice(5).split('/');
469
+ if (!data[exactData])
470
+ throw new Error(`Estimator.select: wrong strategy=${strategy}`);
471
+ strategy = left;
472
+ const exact = this.accumulate(data[exactData](), true, true);
473
+ if (exact)
474
+ return exact;
475
+ }
476
+ if (strategy.startsWith('accum')) {
477
+ const accumData = strategy.slice(5);
478
+ if (!data[accumData])
479
+ throw new Error(`Estimator.select: wrong strategy=${strategy}`);
480
+ return this.accumulate(data[accumData]());
481
+ }
482
+ throw new Error(`Estimator.select: wrong strategy=${strategy}`);
483
+ }
484
+ result(strategy) {
485
+ const s = this.select(strategy);
486
+ if (!s)
487
+ return;
488
+ const { indices, weight, total } = s;
489
+ let needChange = this.opts.alwaysChange;
490
+ const changeWeight = this.opts.alwaysChange
491
+ ? weight
492
+ : weight + (this.changeWeight - this.baseWeight);
493
+ const changeFee = this.getSatoshi(changeWeight);
494
+ let fee = s.fee;
495
+ const change = total - this.amount - changeFee;
496
+ if (change > this.dust)
497
+ needChange = true;
498
+ let inputs = indices;
499
+ let outputs = Array.from(this.outputs);
500
+ if (needChange) {
501
+ fee = changeFee;
502
+ // this shouldn't happen!
503
+ if (change < 0n)
504
+ throw new Error(`Estimator.result: negative change=${change}`);
505
+ outputs.push({ address: this.opts.changeAddress, amount: change });
506
+ }
507
+ if (this.opts.bip69) {
508
+ inputs = this.sortIndices(inputs);
509
+ outputs = this.sortOutputs(outputs).map((i) => outputs[i]);
510
+ }
511
+ const res = {
512
+ inputs: inputs.map((i) => this.inputs[i]),
513
+ outputs,
514
+ fee,
515
+ weight: this.opts.alwaysChange ? s.weight : changeWeight,
516
+ change: !!needChange,
517
+ };
518
+ let tx;
519
+ if (this.opts.createTx) {
520
+ const { inputs, outputs } = res;
521
+ tx = new transaction_js_1.Transaction(this.opts);
522
+ for (const i of inputs)
523
+ tx.addInput(i);
524
+ for (const o of outputs)
525
+ tx.addOutput({ ...o, script: getScript(o, this.opts, this.opts.network) });
526
+ }
527
+ return { ...res, tx };
528
+ }
529
+ }
530
+ exports._Estimator = _Estimator;
531
+ function selectUTXO(inputs, outputs, strategy, opts) {
532
+ // Defaults: do we want bip69 by default?
533
+ const _opts = { createTx: true, bip69: true, ...opts };
534
+ const est = new _Estimator(inputs, outputs, _opts);
535
+ return est.result(strategy);
536
+ }
537
+ exports.selectUTXO = selectUTXO;
538
+ //# sourceMappingURL=utxo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utxo.js","sourceRoot":"","sources":["../src/utxo.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,15 +1,10 @@
1
1
  {
2
2
  "name": "@scure/btc-signer",
3
- "version": "1.2.2",
3
+ "version": "1.3.1",
4
4
  "description": "Audited & minimal library for creating, signing & decoding Bitcoin transactions: with Schnorr, Taproot, UTXO & PSBT",
5
5
  "files": [
6
- "lib/index.js",
7
- "lib/esm/index.js",
8
- "lib/esm/index.js.map",
9
- "lib/esm/package.json",
10
- "lib/index.d.ts",
11
- "lib/index.d.ts.map",
12
- "index.ts"
6
+ "lib",
7
+ "src"
13
8
  ],
14
9
  "main": "lib/index.js",
15
10
  "module": "lib/esm/index.js",
@@ -19,6 +14,41 @@
19
14
  "types": "./lib/index.d.ts",
20
15
  "import": "./lib/esm/index.js",
21
16
  "default": "./lib/index.js"
17
+ },
18
+ "./index": {
19
+ "types": "./lib/index.d.ts",
20
+ "import": "./lib/esm/index.js",
21
+ "default": "./lib/index.js"
22
+ },
23
+ "./payment": {
24
+ "types": "./lib/payment.d.ts",
25
+ "import": "./lib/esm/payment.js",
26
+ "default": "./lib/payment.js"
27
+ },
28
+ "./psbt": {
29
+ "types": "./lib/psbt.d.ts",
30
+ "import": "./lib/esm/psbt.js",
31
+ "default": "./lib/psbt.js"
32
+ },
33
+ "./script": {
34
+ "types": "./lib/script.d.ts",
35
+ "import": "./lib/esm/script.js",
36
+ "default": "./lib/script.js"
37
+ },
38
+ "./transaction": {
39
+ "types": "./lib/transaction.d.ts",
40
+ "import": "./lib/esm/transaction.js",
41
+ "default": "./lib/transaction.js"
42
+ },
43
+ "./utils": {
44
+ "types": "./lib/utils.d.ts",
45
+ "import": "./lib/esm/utils.js",
46
+ "default": "./lib/utils.js"
47
+ },
48
+ "./utxo": {
49
+ "types": "./lib/utxo.d.ts",
50
+ "import": "./lib/esm/utxo.js",
51
+ "default": "./lib/utxo.js"
22
52
  }
23
53
  },
24
54
  "dependencies": {
@@ -43,8 +73,8 @@
43
73
  },
44
74
  "scripts": {
45
75
  "build": "tsc && tsc -p tsconfig.esm.json",
46
- "lint": "prettier --check index.ts",
47
- "format": "prettier --write index.ts",
76
+ "lint": "prettier --check src",
77
+ "format": "prettier --write src",
48
78
  "test": "node test/index.test.js && node test/psbt-test/bip174-psbt-extended.test.js",
49
79
  "test:extended": "node --experimental-loader ./test/bitcoinjs-test/esm-loader.js ./test/bitcoinjs-test/index.test.js",
50
80
  "test:slow": "node test/index.test.js && node test/slow.test.js"