@scure/btc-signer 1.7.0 → 1.8.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 +57 -6
- package/_type_test.js +1 -1
- package/_type_test.js.map +1 -1
- package/esm/_type_test.js +2 -2
- package/esm/_type_test.js.map +1 -1
- package/esm/index.d.ts +12 -12
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +10 -10
- package/esm/index.js.map +1 -1
- package/esm/musig2.d.ts.map +1 -1
- package/esm/musig2.js +5 -6
- package/esm/musig2.js.map +1 -1
- package/esm/p2p.d.ts +38 -0
- package/esm/p2p.d.ts.map +1 -0
- package/esm/p2p.js +156 -0
- package/esm/p2p.js.map +1 -0
- package/esm/payment.d.ts +77 -21
- package/esm/payment.d.ts.map +1 -1
- package/esm/payment.js +63 -60
- package/esm/payment.js.map +1 -1
- package/esm/psbt.d.ts +1 -1
- package/esm/psbt.d.ts.map +1 -1
- package/esm/psbt.js +2 -35
- package/esm/psbt.js.map +1 -1
- package/esm/script.js +1 -1
- package/esm/transaction.d.ts +57 -4
- package/esm/transaction.d.ts.map +1 -1
- package/esm/transaction.js +157 -11
- package/esm/transaction.js.map +1 -1
- package/esm/utils.d.ts +2 -2
- package/esm/utils.d.ts.map +1 -1
- package/esm/utils.js +4 -4
- package/esm/utils.js.map +1 -1
- package/esm/utxo.d.ts +3 -55
- package/esm/utxo.d.ts.map +1 -1
- package/esm/utxo.js +6 -115
- package/esm/utxo.js.map +1 -1
- package/index.d.ts +12 -12
- package/index.d.ts.map +1 -1
- package/index.js +58 -58
- package/index.js.map +1 -1
- package/musig2.d.ts +1 -1
- package/musig2.d.ts.map +1 -1
- package/musig2.js +47 -48
- package/musig2.js.map +1 -1
- package/p2p.d.ts +38 -0
- package/p2p.d.ts.map +1 -0
- package/p2p.js +158 -0
- package/p2p.js.map +1 -0
- package/package.json +43 -11
- package/payment.d.ts +77 -21
- package/payment.d.ts.map +1 -1
- package/payment.js +81 -78
- package/payment.js.map +1 -1
- package/psbt.d.ts +1 -1
- package/psbt.d.ts.map +1 -1
- package/psbt.js +22 -55
- package/psbt.js.map +1 -1
- package/script.js +3 -3
- package/src/_type_test.ts +2 -2
- package/src/index.ts +12 -12
- package/src/musig2.ts +5 -6
- package/src/p2p.ts +158 -0
- package/src/payment.ts +160 -75
- package/src/psbt.ts +2 -36
- package/src/script.ts +1 -1
- package/src/transaction.ts +166 -15
- package/src/utils.ts +4 -4
- package/src/utxo.ts +10 -112
- package/transaction.d.ts +57 -4
- package/transaction.d.ts.map +1 -1
- package/transaction.js +228 -78
- package/transaction.js.map +1 -1
- package/utils.d.ts +2 -2
- package/utils.d.ts.map +1 -1
- package/utils.js +21 -21
- package/utils.js.map +1 -1
- package/utxo.d.ts +3 -55
- package/utxo.d.ts.map +1 -1
- package/utxo.js +44 -157
- package/utxo.js.map +1 -1
package/p2p.js
ADDED
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* BTC P2P layer from BIP324.
|
|
4
|
+
*
|
|
5
|
+
* Experimental ElligatorSwift implementation:
|
|
6
|
+
* Schnorr-like x-only ECDH with public keys indistinguishable from uniformly random bytes.
|
|
7
|
+
*
|
|
8
|
+
* Documented in
|
|
9
|
+
* [BIP324](https://github.com/bitcoin/bips/blob/master/bip-0324.mediawiki),
|
|
10
|
+
* [libsecp](https://github.com/bitcoin/bitcoin/blob/master/src/secp256k1/doc/ellswift.md).
|
|
11
|
+
*
|
|
12
|
+
* SwiftEC: Shallue-van de Woestijne Indifferentiable Function to Elliptic Curves.
|
|
13
|
+
* Documented in https://eprint.iacr.org/2022/759.pdf.
|
|
14
|
+
*
|
|
15
|
+
* Curve25519 & P-521 are incompatible with SwiftEC. Differences from SwiftEC:
|
|
16
|
+
* * undefined inputs are remapped
|
|
17
|
+
* * y-parity is encoded in u/t values
|
|
18
|
+
*
|
|
19
|
+
* @module
|
|
20
|
+
*/
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.elligatorSwift = void 0;
|
|
23
|
+
const modular_js_1 = require("@noble/curves/abstract/modular.js");
|
|
24
|
+
const utils_js_1 = require("@noble/curves/abstract/utils.js");
|
|
25
|
+
const secp256k1_js_1 = require("@noble/curves/secp256k1.js");
|
|
26
|
+
const utils_js_2 = require("@noble/hashes/utils.js");
|
|
27
|
+
const utils_ts_1 = require("./utils.js");
|
|
28
|
+
const Fp = secp256k1_js_1.secp256k1.CURVE.Fp;
|
|
29
|
+
const Point = secp256k1_js_1.secp256k1.ProjectivePoint;
|
|
30
|
+
const _1n = BigInt(1);
|
|
31
|
+
const _2n = BigInt(2);
|
|
32
|
+
const MINUS_3_SQRT = Fp.sqrt(Fp.create(BigInt(-3)));
|
|
33
|
+
const _3n = BigInt(3);
|
|
34
|
+
const _4n = BigInt(4);
|
|
35
|
+
const _7n = BigInt(7);
|
|
36
|
+
const isValidX = (x) => (0, modular_js_1.FpIsSquare)(Fp, Fp.add(Fp.mul(Fp.mul(x, x), x), _7n));
|
|
37
|
+
const trySqrt = (x) => {
|
|
38
|
+
try {
|
|
39
|
+
return Fp.sqrt(x);
|
|
40
|
+
}
|
|
41
|
+
catch (_e) { }
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Experimental ElligatorSwift implementation:
|
|
45
|
+
* Schnorr-like x-only ECDH with public keys indistinguishable from uniformly random bytes.
|
|
46
|
+
* Documented in BIP324.
|
|
47
|
+
*/
|
|
48
|
+
exports.elligatorSwift = {
|
|
49
|
+
// (internal stuff, exported for tests only): decode(u, _inv(x, u)) = x
|
|
50
|
+
_inv: (x, u, ellCase) => {
|
|
51
|
+
if (!Number.isSafeInteger(ellCase) || ellCase < 0 || ellCase > 7)
|
|
52
|
+
throw new Error(`elligatorSwift._inv: wrong case=${ellCase}`);
|
|
53
|
+
let v, s;
|
|
54
|
+
// Most rejections happens in 3 condition (in comments, ~33% each)
|
|
55
|
+
const u2 = Fp.mul(u, u); // u**2
|
|
56
|
+
const u3 = Fp.mul(u2, u); // u**3
|
|
57
|
+
if ((ellCase & 2) === 0) {
|
|
58
|
+
if (isValidX(Fp.sub(Fp.neg(x), u)))
|
|
59
|
+
return; // [1 condition]
|
|
60
|
+
v = x;
|
|
61
|
+
s = Fp.div(Fp.neg(Fp.add(u3, _7n)), Fp.add(Fp.add(u2, Fp.mul(u, v)), Fp.mul(v, v))); // = -(u**3 + 7) / (u**2 + u*v + v**2)
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
s = Fp.sub(x, u); // x - u
|
|
65
|
+
if (Fp.is0(s))
|
|
66
|
+
return;
|
|
67
|
+
const t0 = Fp.add(u3, _7n); // (u**3 + 7)
|
|
68
|
+
const t1 = Fp.mul(Fp.mul(_3n, s), u2); // 3 * s * u**2
|
|
69
|
+
// r = (-s * (4 * (u**3 + 7) + 3 * s * u**2)).sqrt()
|
|
70
|
+
const r = trySqrt(Fp.mul(Fp.neg(s), Fp.add(Fp.mul(_4n, t0), t1)));
|
|
71
|
+
if (r === undefined)
|
|
72
|
+
return; // [2 condition]
|
|
73
|
+
if (ellCase & 1 && Fp.is0(r))
|
|
74
|
+
return;
|
|
75
|
+
v = Fp.div(Fp.add(Fp.neg(u), Fp.div(r, s)), _2n); // v = (-u + r / s) / 2
|
|
76
|
+
}
|
|
77
|
+
const w = trySqrt(s);
|
|
78
|
+
if (w === undefined)
|
|
79
|
+
return; // [3 condition]
|
|
80
|
+
const last = ellCase & 5; // ellCase = 0..8, last = 0,1,4,5
|
|
81
|
+
const t0 = last & 1 ? Fp.add(_1n, MINUS_3_SQRT) : Fp.sub(_1n, MINUS_3_SQRT);
|
|
82
|
+
const w0 = last === 0 || last === 5 ? Fp.neg(w) : w; // -w | w
|
|
83
|
+
// w0 * (u * t0 / 2 + v)
|
|
84
|
+
return Fp.mul(w0, Fp.add(Fp.div(Fp.mul(u, t0), _2n), v));
|
|
85
|
+
},
|
|
86
|
+
// Encode public key (point or x coordinate bigint) into 64-byte pseudorandom encoding
|
|
87
|
+
encode: (x) => {
|
|
88
|
+
if (x instanceof secp256k1_js_1.secp256k1.ProjectivePoint)
|
|
89
|
+
x = x.x;
|
|
90
|
+
if (typeof x !== 'bigint') {
|
|
91
|
+
throw new Error('elligatorSwift.encode: wrong public key. Should be Projective point or x coordinate (bigint)');
|
|
92
|
+
}
|
|
93
|
+
// 200k test cycles per keygen: avg=4 max=48
|
|
94
|
+
// seems too much, but same as for reference implementation
|
|
95
|
+
while (true) {
|
|
96
|
+
// random scalar 1..Fp.ORDER
|
|
97
|
+
const u = Fp.create(Fp.fromBytes(secp256k1_js_1.secp256k1.utils.randomPrivateKey()));
|
|
98
|
+
const ellCase = (0, utils_js_2.randomBytes)(1)[0] & 7; // [0..8)
|
|
99
|
+
const t = exports.elligatorSwift._inv(x, u, ellCase);
|
|
100
|
+
if (!t)
|
|
101
|
+
continue;
|
|
102
|
+
return (0, utils_js_1.concatBytes)((0, utils_js_1.numberToBytesBE)(u, 32), (0, utils_js_1.numberToBytesBE)(t, 32));
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
// Decode elligatorSwift point to xonly
|
|
106
|
+
decode: (data) => {
|
|
107
|
+
const _data = (0, utils_js_1.ensureBytes)('data', data, 64);
|
|
108
|
+
let u = Fp.create(Fp.fromBytes(_data.subarray(0, 32)));
|
|
109
|
+
let t = Fp.create(Fp.fromBytes(_data.subarray(32, 64)));
|
|
110
|
+
if (Fp.is0(u))
|
|
111
|
+
u = Fp.create(_1n);
|
|
112
|
+
if (Fp.is0(t))
|
|
113
|
+
t = Fp.create(_1n);
|
|
114
|
+
const u3 = Fp.mul(Fp.mul(u, u), u); // u**3
|
|
115
|
+
const u3plus7 = Fp.add(u3, _7n);
|
|
116
|
+
// u**3 + t**2 + 7 == 0 -> t = 2 * t
|
|
117
|
+
if (Fp.is0(Fp.add(u3plus7, Fp.mul(t, t))))
|
|
118
|
+
t = Fp.add(t, t);
|
|
119
|
+
// X = (u**3 + 7 - t**2) / (2 * t)
|
|
120
|
+
const x = Fp.div(Fp.sub(u3plus7, Fp.mul(t, t)), Fp.add(t, t));
|
|
121
|
+
// Y = (X + t) / (MINUS_3_SQRT * u);
|
|
122
|
+
const y = Fp.div(Fp.add(x, t), Fp.mul(MINUS_3_SQRT, u));
|
|
123
|
+
// try different cases
|
|
124
|
+
let res = Fp.add(u, Fp.mul(Fp.mul(y, y), _4n)); // u + 4 * Y ** 2,
|
|
125
|
+
if (isValidX(res))
|
|
126
|
+
return (0, utils_js_1.numberToBytesBE)(res, 32);
|
|
127
|
+
res = Fp.div(Fp.sub(Fp.div(Fp.neg(x), y), u), _2n); // (-X / Y - u) / 2
|
|
128
|
+
if (isValidX(res))
|
|
129
|
+
return (0, utils_js_1.numberToBytesBE)(res, 32);
|
|
130
|
+
res = Fp.div(Fp.sub(Fp.div(x, y), u), _2n); // (X / Y - u) / 2
|
|
131
|
+
if (isValidX(res))
|
|
132
|
+
return (0, utils_js_1.numberToBytesBE)(res, 32);
|
|
133
|
+
throw new Error('elligatorSwift: cannot decode public key');
|
|
134
|
+
},
|
|
135
|
+
// Generate pair (public key, secret key)
|
|
136
|
+
keygen: () => {
|
|
137
|
+
const privateKey = secp256k1_js_1.secp256k1.utils.randomPrivateKey();
|
|
138
|
+
const publicKey = exports.elligatorSwift.encode(Point.fromPrivateKey(privateKey));
|
|
139
|
+
return { privateKey, publicKey };
|
|
140
|
+
},
|
|
141
|
+
// Generates shared secret between a pub key and a priv key
|
|
142
|
+
getSharedSecret: (privateKeyA, publicKeyB) => {
|
|
143
|
+
const pub = exports.elligatorSwift.decode(publicKeyB);
|
|
144
|
+
const priv = (0, utils_js_1.ensureBytes)('privKey', privateKeyA, 32);
|
|
145
|
+
const point = secp256k1_js_1.schnorr.utils.lift_x(Fp.fromBytes(pub));
|
|
146
|
+
const d = (0, utils_js_1.bytesToNumberBE)(priv);
|
|
147
|
+
return (0, utils_js_1.numberToBytesBE)(point.multiply(d).x, 32);
|
|
148
|
+
},
|
|
149
|
+
// BIP324 shared secret
|
|
150
|
+
getSharedSecretBip324: (privateKeyOurs, publicKeyTheirs, publicKeyOurs, initiating) => {
|
|
151
|
+
const ours = (0, utils_js_1.ensureBytes)('publicKeyOurs', publicKeyOurs);
|
|
152
|
+
const theirs = (0, utils_js_1.ensureBytes)('publicKeyTheirs', publicKeyTheirs);
|
|
153
|
+
const ecdhPoint = exports.elligatorSwift.getSharedSecret(privateKeyOurs, theirs);
|
|
154
|
+
const pubs = initiating ? [ours, theirs] : [theirs, ours];
|
|
155
|
+
return (0, utils_ts_1.tagSchnorr)('bip324_ellswift_xonly_ecdh', ...pubs, ecdhPoint);
|
|
156
|
+
},
|
|
157
|
+
};
|
|
158
|
+
//# sourceMappingURL=p2p.js.map
|
package/p2p.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"p2p.js","sourceRoot":"","sources":["src/p2p.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scure/btc-signer",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.1",
|
|
4
4
|
"description": "Audited & minimal library for Bitcoin. Handle transactions, Schnorr, Taproot, UTXO & PSBT",
|
|
5
5
|
"files": [
|
|
6
6
|
"esm",
|
|
@@ -14,18 +14,18 @@
|
|
|
14
14
|
"module": "./esm/index.js",
|
|
15
15
|
"types": "./index.d.ts",
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@noble/curves": "~1.
|
|
18
|
-
"@noble/hashes": "~1.
|
|
19
|
-
"@scure/base": "~1.2.
|
|
20
|
-
"micro-packed": "~0.7.
|
|
17
|
+
"@noble/curves": "~1.9.0",
|
|
18
|
+
"@noble/hashes": "~1.8.0",
|
|
19
|
+
"@scure/base": "~1.2.5",
|
|
20
|
+
"micro-packed": "~0.7.3"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
|
-
"@paulmillr/jsbt": "0.3.
|
|
24
|
-
"@scure/bip32": "~1.
|
|
25
|
-
"micro-bmark": "0.4.
|
|
26
|
-
"micro-should": "0.5.
|
|
27
|
-
"prettier": "3.5.
|
|
28
|
-
"typescript": "5.8.
|
|
23
|
+
"@paulmillr/jsbt": "0.3.3",
|
|
24
|
+
"@scure/bip32": "~1.7.0",
|
|
25
|
+
"micro-bmark": "0.4.1",
|
|
26
|
+
"micro-should": "0.5.2",
|
|
27
|
+
"prettier": "3.5.3",
|
|
28
|
+
"typescript": "5.8.3"
|
|
29
29
|
},
|
|
30
30
|
"exports": {
|
|
31
31
|
".": {
|
|
@@ -63,6 +63,38 @@
|
|
|
63
63
|
"./utxo": {
|
|
64
64
|
"import": "./esm/utxo.js",
|
|
65
65
|
"require": "./utxo.js"
|
|
66
|
+
},
|
|
67
|
+
"./index.js": {
|
|
68
|
+
"import": "./esm/index.js",
|
|
69
|
+
"require": "./index.js"
|
|
70
|
+
},
|
|
71
|
+
"./musig2.js": {
|
|
72
|
+
"import": "./esm/musig2.js",
|
|
73
|
+
"require": "./musig2.js"
|
|
74
|
+
},
|
|
75
|
+
"./payment.js": {
|
|
76
|
+
"import": "./esm/payment.js",
|
|
77
|
+
"require": "./payment.js"
|
|
78
|
+
},
|
|
79
|
+
"./psbt.js": {
|
|
80
|
+
"import": "./esm/psbt.js",
|
|
81
|
+
"require": "./psbt.js"
|
|
82
|
+
},
|
|
83
|
+
"./script.js": {
|
|
84
|
+
"import": "./esm/script.js",
|
|
85
|
+
"require": "./script.js"
|
|
86
|
+
},
|
|
87
|
+
"./transaction.js": {
|
|
88
|
+
"import": "./esm/transaction.js",
|
|
89
|
+
"require": "./transaction.js"
|
|
90
|
+
},
|
|
91
|
+
"./utils.js": {
|
|
92
|
+
"import": "./esm/utils.js",
|
|
93
|
+
"require": "./utils.js"
|
|
94
|
+
},
|
|
95
|
+
"./utxo.js": {
|
|
96
|
+
"import": "./esm/utxo.js",
|
|
97
|
+
"require": "./utxo.js"
|
|
66
98
|
}
|
|
67
99
|
},
|
|
68
100
|
"sideEffects": false,
|
package/payment.d.ts
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { type Coder } from '@scure/base';
|
|
2
2
|
import * as P from 'micro-packed';
|
|
3
|
-
import { type TransactionInput } from './psbt.
|
|
4
|
-
import { type ScriptType } from './script.
|
|
5
|
-
import { type BTC_NETWORK, type Bytes } from './utils.
|
|
3
|
+
import { type TransactionInput } from './psbt.ts';
|
|
4
|
+
import { type ScriptType } from './script.ts';
|
|
5
|
+
import { type BTC_NETWORK, type Bytes } from './utils.ts';
|
|
6
6
|
export type P2Ret = {
|
|
7
7
|
type: string;
|
|
8
8
|
script: Bytes;
|
|
9
9
|
address?: string;
|
|
10
10
|
redeemScript?: Bytes;
|
|
11
11
|
witnessScript?: Bytes;
|
|
12
|
+
hash?: Bytes;
|
|
12
13
|
};
|
|
13
14
|
type OutP2AType = {
|
|
14
15
|
type: 'p2a';
|
|
@@ -70,12 +71,54 @@ export type CustomScript = Coder<OptScript, CustomScriptOut | undefined> & {
|
|
|
70
71
|
export declare const OutScript: P.CoderType<NonNullable<OutP2AType | OutPKType | OutPKHType | OutSHType | OutWSHType | OutWPKHType | OutMSType | OutTRType | OutTRNSType | OutTRMSType | OutUnknownType | undefined>>;
|
|
71
72
|
export type OutScriptType = typeof OutScript;
|
|
72
73
|
export declare function checkScript(script?: Bytes, redeemScript?: Bytes, witnessScript?: Bytes): void;
|
|
73
|
-
|
|
74
|
-
export
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
export declare const
|
|
74
|
+
type Extends<T, U> = T extends U ? T : never;
|
|
75
|
+
export type P2PK = {
|
|
76
|
+
type: 'pk';
|
|
77
|
+
script: Bytes;
|
|
78
|
+
};
|
|
79
|
+
export declare const p2pk: (pubkey: Bytes, _network?: BTC_NETWORK) => Extends<P2PK, P2Ret>;
|
|
80
|
+
export type P2PKH = {
|
|
81
|
+
type: 'pkh';
|
|
82
|
+
script: Bytes;
|
|
83
|
+
address: string;
|
|
84
|
+
hash: Bytes;
|
|
85
|
+
};
|
|
86
|
+
export declare const p2pkh: (publicKey: Bytes, network?: BTC_NETWORK) => Extends<P2PKH, P2Ret>;
|
|
87
|
+
export type P2SHBase = {
|
|
88
|
+
type: 'sh';
|
|
89
|
+
redeemScript: Bytes;
|
|
90
|
+
script: Bytes;
|
|
91
|
+
address: string;
|
|
92
|
+
hash: Bytes;
|
|
93
|
+
};
|
|
94
|
+
export type P2SHWithWitness = P2SHBase & {
|
|
95
|
+
witnessScript: Bytes;
|
|
96
|
+
};
|
|
97
|
+
export type P2SHWithoutWitness = Omit<P2SHBase, 'witnessScript'>;
|
|
98
|
+
export type P2SHReturn<T extends P2Ret> = T extends {
|
|
99
|
+
witnessScript: Bytes;
|
|
100
|
+
} ? P2SHWithWitness : P2SHWithoutWitness;
|
|
101
|
+
export declare const p2sh: <T extends P2Ret>(child: T, network?: BTC_NETWORK) => Extends<P2SHReturn<T>, P2Ret>;
|
|
102
|
+
export type P2WSH = {
|
|
103
|
+
type: 'wsh';
|
|
104
|
+
witnessScript: Bytes;
|
|
105
|
+
script: Bytes;
|
|
106
|
+
address: string;
|
|
107
|
+
hash: Bytes;
|
|
108
|
+
};
|
|
109
|
+
export declare const p2wsh: (child: P2Ret, network?: BTC_NETWORK) => Extends<P2WSH, P2Ret>;
|
|
110
|
+
export type P2WPKH = {
|
|
111
|
+
type: 'wpkh';
|
|
112
|
+
script: Bytes;
|
|
113
|
+
address: string;
|
|
114
|
+
hash: Bytes;
|
|
115
|
+
};
|
|
116
|
+
export declare const p2wpkh: (publicKey: Bytes, network?: BTC_NETWORK) => Extends<P2WPKH, P2Ret>;
|
|
117
|
+
export type P2MS = {
|
|
118
|
+
type: 'ms';
|
|
119
|
+
script: Bytes;
|
|
120
|
+
};
|
|
121
|
+
export declare const p2ms: (m: number, pubkeys: Bytes[], allowSamePubkeys?: boolean) => Extends<P2MS, P2Ret>;
|
|
79
122
|
export type HashedTree = {
|
|
80
123
|
type: 'leaf';
|
|
81
124
|
version?: number;
|
|
@@ -87,18 +130,23 @@ export type HashedTree = {
|
|
|
87
130
|
right: HashedTree;
|
|
88
131
|
hash: Bytes;
|
|
89
132
|
};
|
|
90
|
-
export type
|
|
133
|
+
export type P2TR = {
|
|
134
|
+
type: 'tr';
|
|
135
|
+
script: Bytes;
|
|
136
|
+
address: string;
|
|
91
137
|
tweakedPubkey: Bytes;
|
|
92
138
|
tapInternalKey: Bytes;
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
139
|
+
};
|
|
140
|
+
export type P2TR_TREE = P2TR & {
|
|
141
|
+
tapMerkleRoot: Bytes;
|
|
142
|
+
tapLeafScript: TransactionInput['tapLeafScript'];
|
|
143
|
+
leaves: TaprootLeaf[];
|
|
96
144
|
};
|
|
97
145
|
export type TaprootNode = {
|
|
98
146
|
script: Bytes | string;
|
|
99
147
|
leafVersion?: number;
|
|
100
148
|
weight?: number;
|
|
101
|
-
} & Partial<
|
|
149
|
+
} & Partial<P2TR_TREE>;
|
|
102
150
|
export type TaprootScriptTree = TaprootNode | TaprootScriptTree[];
|
|
103
151
|
export type TaprootScriptList = TaprootNode[];
|
|
104
152
|
export declare function taprootListToTree(taprootList: TaprootScriptList): TaprootScriptTree;
|
|
@@ -118,21 +166,29 @@ export type HashedTreeWithPath = TaprootLeaf | {
|
|
|
118
166
|
};
|
|
119
167
|
export declare const TAP_LEAF_VERSION = 192;
|
|
120
168
|
export declare const tapLeafHash: (script: Bytes, version?: number) => Bytes;
|
|
121
|
-
export
|
|
169
|
+
export type P2TRRet<T> = T extends TaprootScriptTree ? P2TR_TREE : P2TR;
|
|
170
|
+
export declare function p2tr(internalPubKey: Bytes | string, tree?: undefined, network?: BTC_NETWORK, allowUnknownOutputs?: boolean, customScripts?: CustomScript[]): Extends<P2TR, P2Ret>;
|
|
171
|
+
export declare function p2tr(internalPubKey: Bytes | string, tree: TaprootScriptTree, network?: BTC_NETWORK, allowUnknownOutputs?: boolean, customScripts?: CustomScript[]): Extends<P2TR_TREE, P2Ret>;
|
|
122
172
|
export declare function combinations<T>(m: number, list: T[]): T[][];
|
|
123
173
|
/**
|
|
124
174
|
* M-of-N multi-leaf wallet via p2tr_ns. If m == n, single script is emitted.
|
|
125
175
|
* Takes O(n^2) if m != n. 99-of-100 is ok, 5-of-100 is not.
|
|
126
176
|
* `2-of-[A,B,C] => [A,B] | [A,C] | [B,C]`
|
|
127
177
|
*/
|
|
128
|
-
export
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
178
|
+
export type P2TR_NS = {
|
|
179
|
+
type: 'tr_ns';
|
|
180
|
+
script: Bytes;
|
|
181
|
+
};
|
|
182
|
+
export declare const p2tr_ns: (m: number, pubkeys: Bytes[], allowSamePubkeys?: boolean) => Extends<P2TR_NS, P2Ret>[];
|
|
183
|
+
export type P2TR_PK = P2TR_NS;
|
|
184
|
+
export declare const p2tr_pk: (pubkey: Bytes) => Extends<P2TR_PK, P2Ret>;
|
|
185
|
+
export type P2TR_MS = {
|
|
186
|
+
type: 'tr_ms';
|
|
187
|
+
script: Bytes;
|
|
133
188
|
};
|
|
189
|
+
export declare function p2tr_ms(m: number, pubkeys: Bytes[], allowSamePubkeys?: boolean): Extends<P2TR_MS, P2Ret>;
|
|
134
190
|
export declare function getAddress(type: 'pkh' | 'wpkh' | 'tr', privKey: Bytes, network?: BTC_NETWORK): string | undefined;
|
|
135
|
-
export declare const _sortPubkeys: (pubkeys: Bytes[]) =>
|
|
191
|
+
export declare const _sortPubkeys: (pubkeys: Bytes[]) => Bytes[];
|
|
136
192
|
export declare function multisig(m: number, pubkeys: Bytes[], sorted?: boolean, witness?: boolean, network?: BTC_NETWORK): P2Ret;
|
|
137
193
|
export declare function sortedMultisig(m: number, pubkeys: Bytes[], witness?: boolean, network?: BTC_NETWORK): P2Ret;
|
|
138
194
|
export declare function WIF(network?: BTC_NETWORK): Coder<Bytes, string>;
|
package/payment.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payment.d.ts","sourceRoot":"","sources":["src/payment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,KAAK,EAA0B,MAAM,aAAa,CAAC;AAClF,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAClC,OAAO,EAAuB,KAAK,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EAAmB,KAAK,UAAU,EAAY,MAAM,aAAa,CAAC;AAEzE,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,KAAK,EAAW,MAAM,YAAY,CAAC;AAOnE,MAAM,MAAM,KAAK,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,KAAK,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,aAAa,CAAC,EAAE,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"payment.d.ts","sourceRoot":"","sources":["src/payment.ts"],"names":[],"mappings":"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"}
|