@scure/btc-signer 1.8.0 → 2.0.0-beta.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.
- package/README.md +15 -12
- package/_type_test.js +10 -12
- package/_type_test.js.map +1 -1
- package/index.js +17 -61
- package/index.js.map +1 -1
- package/musig2.d.ts +2 -2
- package/musig2.d.ts.map +1 -1
- package/musig2.js +93 -91
- package/musig2.js.map +1 -1
- package/p2p.d.ts +7 -8
- package/p2p.d.ts.map +1 -1
- package/p2p.js +32 -38
- package/p2p.js.map +1 -1
- package/package.json +33 -70
- package/payment.js +73 -96
- package/payment.js.map +1 -1
- package/psbt.d.ts +224 -224
- package/psbt.d.ts.map +1 -1
- package/psbt.js +58 -63
- package/psbt.js.map +1 -1
- package/script.d.ts +125 -120
- package/script.d.ts.map +1 -1
- package/script.js +46 -146
- package/script.js.map +1 -1
- package/src/_type_test.ts +2 -2
- package/src/musig2.ts +45 -53
- package/src/p2p.ts +31 -43
- package/src/psbt.ts +7 -7
- package/src/script.ts +29 -26
- package/src/transaction.ts +31 -24
- package/src/utils.ts +45 -26
- package/src/utxo.ts +1 -1
- package/transaction.d.ts +23 -28
- package/transaction.d.ts.map +1 -1
- package/transaction.js +140 -154
- package/transaction.js.map +1 -1
- package/utils.d.ts +13 -7
- package/utils.d.ts.map +1 -1
- package/utils.js +60 -62
- package/utils.js.map +1 -1
- package/utxo.d.ts +45 -45
- package/utxo.d.ts.map +1 -1
- package/utxo.js +63 -59
- package/utxo.js.map +1 -1
- package/esm/_type_test.d.ts +0 -2
- package/esm/_type_test.d.ts.map +0 -1
- package/esm/_type_test.js +0 -57
- package/esm/_type_test.js.map +0 -1
- package/esm/index.d.ts +0 -22
- package/esm/index.d.ts.map +0 -1
- package/esm/index.js +0 -22
- package/esm/index.js.map +0 -1
- package/esm/musig2.d.ts +0 -148
- package/esm/musig2.d.ts.map +0 -1
- package/esm/musig2.js +0 -405
- package/esm/musig2.js.map +0 -1
- package/esm/p2p.d.ts +0 -38
- package/esm/p2p.d.ts.map +0 -1
- package/esm/p2p.js +0 -156
- package/esm/p2p.js.map +0 -1
- package/esm/package.json +0 -1
- package/esm/payment.d.ts +0 -200
- package/esm/payment.d.ts.map +0 -1
- package/esm/payment.js +0 -697
- package/esm/payment.js.map +0 -1
- package/esm/psbt.d.ts +0 -820
- package/esm/psbt.d.ts.map +0 -1
- package/esm/psbt.js +0 -409
- package/esm/psbt.js.map +0 -1
- package/esm/script.d.ts +0 -170
- package/esm/script.d.ts.map +0 -1
- package/esm/script.js +0 -356
- package/esm/script.js.map +0 -1
- package/esm/transaction.d.ts +0 -171
- package/esm/transaction.d.ts.map +0 -1
- package/esm/transaction.js +0 -1182
- package/esm/transaction.js.map +0 -1
- package/esm/utils.d.ts +0 -35
- package/esm/utils.d.ts.map +0 -1
- package/esm/utils.js +0 -118
- package/esm/utils.js.map +0 -1
- package/esm/utxo.d.ts +0 -198
- package/esm/utxo.d.ts.map +0 -1
- package/esm/utxo.js +0 -461
- package/esm/utxo.js.map +0 -1
- package/src/package.json +0 -3
package/src/utils.ts
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
import { schnorr, secp256k1 as secp } from '@noble/curves/secp256k1';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { schnorr, secp256k1 as secp } from '@noble/curves/secp256k1.js';
|
|
2
|
+
import { bytesToNumberBE, numberToBytesBE } from '@noble/curves/utils.js';
|
|
3
|
+
import { ripemd160 } from '@noble/hashes/legacy.js';
|
|
4
|
+
import { sha256 } from '@noble/hashes/sha2.js';
|
|
4
5
|
import { utils as packedUtils, U32LE } from 'micro-packed';
|
|
5
6
|
|
|
6
7
|
export type Hex = string | Uint8Array;
|
|
7
8
|
export type Bytes = Uint8Array;
|
|
8
|
-
const Point = secp.
|
|
9
|
-
const
|
|
9
|
+
const Point = secp.Point;
|
|
10
|
+
const Fn = Point.Fn;
|
|
11
|
+
const CURVE_ORDER = Point.Fn.ORDER;
|
|
12
|
+
export const hasEven = (y: bigint) => y % 2n === 0n;
|
|
10
13
|
|
|
11
14
|
const isBytes: (a: unknown) => a is Uint8Array = packedUtils.isBytes;
|
|
12
15
|
const concatBytes: (...arrays: Uint8Array[]) => Uint8Array = packedUtils.concatBytes;
|
|
@@ -15,9 +18,9 @@ export { concatBytes, equalBytes, isBytes, sha256 };
|
|
|
15
18
|
|
|
16
19
|
export const hash160 = (msg: Uint8Array): Uint8Array => ripemd160(sha256(msg));
|
|
17
20
|
export const sha256x2 = (...msgs: Uint8Array[]): Uint8Array => sha256(sha256(concatBytes(...msgs)));
|
|
18
|
-
export const randomPrivateKeyBytes: () => Uint8Array = schnorr.utils.
|
|
21
|
+
export const randomPrivateKeyBytes: () => Uint8Array = schnorr.utils.randomSecretKey;
|
|
19
22
|
export const pubSchnorr = schnorr.getPublicKey as (priv: string | Uint8Array) => Uint8Array;
|
|
20
|
-
export const pubECDSA: (privateKey:
|
|
23
|
+
export const pubECDSA: (privateKey: Uint8Array, isCompressed?: boolean) => Uint8Array =
|
|
21
24
|
secp.getPublicKey;
|
|
22
25
|
|
|
23
26
|
// low-r signature grinding. Used to reduce tx size by 1 byte.
|
|
@@ -26,35 +29,37 @@ export const pubECDSA: (privateKey: string | Uint8Array, isCompressed?: boolean)
|
|
|
26
29
|
// Not best way, but closest to bitcoin implementation (easier to check)
|
|
27
30
|
const hasLowR = (sig: { r: bigint; s: bigint }) => sig.r < CURVE_ORDER / 2n;
|
|
28
31
|
export function signECDSA(hash: Bytes, privateKey: Bytes, lowR = false): Bytes {
|
|
29
|
-
let sig = secp.sign(hash, privateKey);
|
|
32
|
+
let sig = secp.Signature.fromBytes(secp.sign(hash, privateKey, { prehash: false }));
|
|
30
33
|
if (lowR && !hasLowR(sig)) {
|
|
31
34
|
const extraEntropy = new Uint8Array(32);
|
|
32
35
|
let counter = 0;
|
|
33
36
|
while (!hasLowR(sig)) {
|
|
34
37
|
extraEntropy.set(U32LE.encode(counter++));
|
|
35
|
-
sig = secp.sign(hash, privateKey, { extraEntropy });
|
|
38
|
+
sig = secp.Signature.fromBytes(secp.sign(hash, privateKey, { prehash: false, extraEntropy }));
|
|
36
39
|
if (counter > 4294967295) throw new Error('lowR counter overflow: report the error');
|
|
37
40
|
}
|
|
38
41
|
}
|
|
39
|
-
return sig.
|
|
42
|
+
return sig.toBytes('der');
|
|
40
43
|
}
|
|
41
44
|
|
|
42
45
|
export const signSchnorr: typeof schnorr.sign = schnorr.sign;
|
|
43
46
|
export const tagSchnorr: typeof schnorr.utils.taggedHash = schnorr.utils.taggedHash;
|
|
44
47
|
|
|
45
|
-
export
|
|
46
|
-
ecdsa,
|
|
47
|
-
schnorr,
|
|
48
|
-
}
|
|
48
|
+
export const PubT = {
|
|
49
|
+
ecdsa: 0,
|
|
50
|
+
schnorr: 1,
|
|
51
|
+
};
|
|
52
|
+
export type PubT = ValueOf<typeof PubT>;
|
|
53
|
+
|
|
49
54
|
export function validatePubkey(pub: Bytes, type: PubT): Bytes {
|
|
50
55
|
const len = pub.length;
|
|
51
56
|
if (type === PubT.ecdsa) {
|
|
52
57
|
if (len === 32) throw new Error('Expected non-Schnorr key');
|
|
53
|
-
Point.
|
|
58
|
+
Point.fromBytes(pub); // does assertValidity
|
|
54
59
|
return pub;
|
|
55
60
|
} else if (type === PubT.schnorr) {
|
|
56
61
|
if (len !== 32) throw new Error('Expected 32-byte Schnorr key');
|
|
57
|
-
schnorr.utils.lift_x(
|
|
62
|
+
schnorr.utils.lift_x(bytesToNumberBE(pub));
|
|
58
63
|
return pub;
|
|
59
64
|
} else {
|
|
60
65
|
throw new Error('Unknown key type');
|
|
@@ -64,30 +69,30 @@ export function validatePubkey(pub: Bytes, type: PubT): Bytes {
|
|
|
64
69
|
export function tapTweak(a: Bytes, b: Bytes): bigint {
|
|
65
70
|
const u = schnorr.utils;
|
|
66
71
|
const t = u.taggedHash('TapTweak', a, b);
|
|
67
|
-
const tn =
|
|
72
|
+
const tn = bytesToNumberBE(t);
|
|
68
73
|
if (tn >= CURVE_ORDER) throw new Error('tweak higher than curve order');
|
|
69
74
|
return tn;
|
|
70
75
|
}
|
|
71
76
|
|
|
72
|
-
export function taprootTweakPrivKey(privKey: Bytes, merkleRoot: Bytes =
|
|
77
|
+
export function taprootTweakPrivKey(privKey: Bytes, merkleRoot: Bytes = Uint8Array.of()): Bytes {
|
|
73
78
|
const u = schnorr.utils;
|
|
74
|
-
const seckey0 =
|
|
75
|
-
const P = Point.
|
|
79
|
+
const seckey0 = bytesToNumberBE(privKey); // seckey0 = int_from_bytes(seckey0)
|
|
80
|
+
const P = Point.BASE.multiply(seckey0); // P = point_mul(G, seckey0)
|
|
76
81
|
// seckey = seckey0 if has_even_y(P) else SECP256K1_ORDER - seckey0
|
|
77
|
-
const seckey = P.
|
|
82
|
+
const seckey = hasEven(P.y) ? seckey0 : Fn.neg(seckey0);
|
|
78
83
|
const xP = u.pointToBytes(P);
|
|
79
84
|
// t = int_from_bytes(tagged_hash("TapTweak", bytes_from_int(x(P)) + h)); >= SECP256K1_ORDER check
|
|
80
85
|
const t = tapTweak(xP, merkleRoot);
|
|
81
86
|
// bytes_from_int((seckey + t) % SECP256K1_ORDER)
|
|
82
|
-
return
|
|
87
|
+
return numberToBytesBE(Fn.add(seckey, t), 32);
|
|
83
88
|
}
|
|
84
89
|
|
|
85
90
|
export function taprootTweakPubkey(pubKey: Bytes, h: Bytes): [Bytes, number] {
|
|
86
91
|
const u = schnorr.utils;
|
|
87
92
|
const t = tapTweak(pubKey, h); // t = int_from_bytes(tagged_hash("TapTweak", pubkey + h))
|
|
88
|
-
const P = u.lift_x(
|
|
89
|
-
const Q = P.add(Point.
|
|
90
|
-
const parity = Q.
|
|
93
|
+
const P = u.lift_x(bytesToNumberBE(pubKey)); // P = lift_x(int_from_bytes(pubkey))
|
|
94
|
+
const Q = P.add(Point.BASE.multiply(t)); // Q = point_add(P, point_mul(G, t))
|
|
95
|
+
const parity = hasEven(Q.y) ? 0 : 1; // 0 if has_even_y(Q) else 1
|
|
91
96
|
return [u.pointToBytes(Q), parity]; // bytes_from_int(x(Q))
|
|
92
97
|
}
|
|
93
98
|
|
|
@@ -97,7 +102,7 @@ export function taprootTweakPubkey(pubKey: Bytes, h: Bytes): [Bytes, number] {
|
|
|
97
102
|
// It is possible to switch SECP256K1_GENERATOR_POINT with some random point;
|
|
98
103
|
// but it's too complex to prove.
|
|
99
104
|
// Also used by bitcoin-core and bitcoinjs-lib
|
|
100
|
-
export const TAPROOT_UNSPENDABLE_KEY: Bytes = sha256(Point.BASE.
|
|
105
|
+
export const TAPROOT_UNSPENDABLE_KEY: Bytes = sha256(Point.BASE.toBytes(false));
|
|
101
106
|
|
|
102
107
|
export type BTC_NETWORK = {
|
|
103
108
|
bech32: string;
|
|
@@ -127,3 +132,17 @@ export function compareBytes(a: Bytes, b: Bytes): number {
|
|
|
127
132
|
for (let i = 0; i < len; i++) if (a[i] != b[i]) return Math.sign(a[i] - b[i]);
|
|
128
133
|
return Math.sign(a.length - b.length);
|
|
129
134
|
}
|
|
135
|
+
|
|
136
|
+
// Reverses key<->values
|
|
137
|
+
export function reverseObject<T extends Record<string, string | number>>(
|
|
138
|
+
obj: T
|
|
139
|
+
): { [K in T[keyof T]]: Extract<keyof T, string> } {
|
|
140
|
+
const res = {} as any;
|
|
141
|
+
for (const k in obj) {
|
|
142
|
+
if (res[obj[k]] !== undefined) throw new Error('duplicate key');
|
|
143
|
+
res[obj[k]] = k;
|
|
144
|
+
}
|
|
145
|
+
return res;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
export type ValueOf<T> = T[keyof T];
|
package/src/utxo.ts
CHANGED
|
@@ -408,7 +408,7 @@ export class _Estimator {
|
|
|
408
408
|
inputsAmount += amount;
|
|
409
409
|
res.add(idx);
|
|
410
410
|
// inputsAmount is enough to cover cost of tx
|
|
411
|
-
if (!all && targetAmount + fee <= inputsAmount)
|
|
411
|
+
if (!all && targetAmount + fee <= inputsAmount && num >= this.requiredIndices.length)
|
|
412
412
|
return { indices: Array.from(res), fee, weight: totalWeight, total: inputsAmount };
|
|
413
413
|
}
|
|
414
414
|
for (const idx of indices) {
|
package/transaction.d.ts
CHANGED
|
@@ -25,6 +25,7 @@ export interface TxOpts {
|
|
|
25
25
|
version?: number;
|
|
26
26
|
lockTime?: number;
|
|
27
27
|
PSBTVersion?: number;
|
|
28
|
+
allowUnknownVersion?: boolean;
|
|
28
29
|
/** @deprecated Use `allowUnknownOutputs` */
|
|
29
30
|
allowUnknowOutput?: boolean;
|
|
30
31
|
allowUnknownOutputs?: boolean;
|
|
@@ -42,23 +43,27 @@ export interface TxOpts {
|
|
|
42
43
|
* Internal, exported only for backwards-compat. Use `SigHash` instead.
|
|
43
44
|
* @deprecated
|
|
44
45
|
*/
|
|
45
|
-
export declare
|
|
46
|
-
DEFAULT
|
|
47
|
-
ALL
|
|
48
|
-
NONE
|
|
49
|
-
SINGLE
|
|
50
|
-
ANYONECANPAY
|
|
51
|
-
}
|
|
52
|
-
export declare
|
|
53
|
-
DEFAULT
|
|
54
|
-
ALL
|
|
55
|
-
NONE
|
|
56
|
-
SINGLE
|
|
57
|
-
DEFAULT_ANYONECANPAY
|
|
58
|
-
ALL_ANYONECANPAY
|
|
59
|
-
NONE_ANYONECANPAY
|
|
60
|
-
SINGLE_ANYONECANPAY
|
|
61
|
-
}
|
|
46
|
+
export declare const SignatureHash: {
|
|
47
|
+
DEFAULT: number;
|
|
48
|
+
ALL: number;
|
|
49
|
+
NONE: number;
|
|
50
|
+
SINGLE: number;
|
|
51
|
+
ANYONECANPAY: number;
|
|
52
|
+
};
|
|
53
|
+
export declare const SigHash: {
|
|
54
|
+
readonly DEFAULT: number;
|
|
55
|
+
readonly ALL: number;
|
|
56
|
+
readonly NONE: number;
|
|
57
|
+
readonly SINGLE: number;
|
|
58
|
+
readonly DEFAULT_ANYONECANPAY: number;
|
|
59
|
+
readonly ALL_ANYONECANPAY: number;
|
|
60
|
+
readonly NONE_ANYONECANPAY: number;
|
|
61
|
+
readonly SINGLE_ANYONECANPAY: number;
|
|
62
|
+
};
|
|
63
|
+
export declare const SigHashNames: {
|
|
64
|
+
[x: number]: "DEFAULT" | "ALL" | "NONE" | "SINGLE" | "DEFAULT_ANYONECANPAY" | "ALL_ANYONECANPAY" | "NONE_ANYONECANPAY" | "SINGLE_ANYONECANPAY";
|
|
65
|
+
};
|
|
66
|
+
export type SigHash = u.ValueOf<typeof SigHash>;
|
|
62
67
|
export type TransactionInputRequired = {
|
|
63
68
|
txid: Bytes;
|
|
64
69
|
index: number;
|
|
@@ -104,17 +109,7 @@ export declare function getInputType(input: psbt.TransactionInput, allowLegacyWi
|
|
|
104
109
|
script: Bytes;
|
|
105
110
|
};
|
|
106
111
|
lastScript: P.Bytes;
|
|
107
|
-
defaultSighash:
|
|
108
|
-
sighash: number;
|
|
109
|
-
} | {
|
|
110
|
-
txType: string;
|
|
111
|
-
type: string;
|
|
112
|
-
last: {
|
|
113
|
-
type: "tr";
|
|
114
|
-
pubkey: Bytes;
|
|
115
|
-
};
|
|
116
|
-
lastScript: Uint8Array<ArrayBufferLike>;
|
|
117
|
-
defaultSighash: SignatureHash.DEFAULT;
|
|
112
|
+
defaultSighash: number;
|
|
118
113
|
sighash: number;
|
|
119
114
|
};
|
|
120
115
|
export declare class Transaction {
|
package/transaction.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["src/transaction.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAClC,OAAO,EAAW,KAAK,YAAY,EAAuC,MAAM,cAAc,CAAC;AAC/F,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAGL,SAAS,EAKV,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,CAAC,MAAM,YAAY,CAAC;AAChC,OAAO,EAAE,KAAK,KAAK,EAA6C,MAAM,YAAY,CAAC;AAOnF,eAAO,MAAM,OAAO,GAAI,QAAQ,MAAM,KAAG,MAA+B,CAAC;AAGzE,UAAU,KAAK;IACb,SAAS,EAAE,KAAK,CAAC;IACjB,UAAU,EAAE,KAAK,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IAC5B,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC;IAClC,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC;CAC1B;AAED,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;AAEnC,eAAO,MAAM,SAAS,IAAI,CAAC;AAC3B,eAAO,MAAM,eAAe,IAAI,CAAC;AACjC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,gBAAgB,aAAa,CAAC;AAC3C,eAAO,MAAM,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAA+B,CAAC;AAG5E,eAAO,MAAM,GAAG,GAAI,CAAC,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,KAAK,CAAC,KAAG,CAAwC,CAAC;AAE/F,wBAAgB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAetC;AAID,MAAM,WAAW,MAAM;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,4CAA4C;IAC5C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B,2CAA2C;IAC3C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAG7B,cAAc,CAAC,EAAE,OAAO,CAAC;IAGzB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAE/B,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["src/transaction.ts"],"names":[],"mappings":"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"}
|