@did-btcr2/bitcoin 0.3.2 → 0.3.3

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 (62) hide show
  1. package/dist/cjs/client/rpc/index.js +59 -21
  2. package/dist/cjs/client/rpc/index.js.map +1 -1
  3. package/dist/cjs/client/rpc/interface.js +6 -1
  4. package/dist/cjs/client/rpc/interface.js.map +1 -1
  5. package/dist/cjs/client/rpc/json-rpc.js +0 -1
  6. package/dist/cjs/client/rpc/json-rpc.js.map +1 -1
  7. package/dist/cjs/constants.js +4 -4
  8. package/dist/cjs/constants.js.map +1 -1
  9. package/dist/cjs/errors.js +3 -1
  10. package/dist/cjs/errors.js.map +1 -1
  11. package/dist/cjs/index.js +0 -1
  12. package/dist/cjs/index.js.map +1 -1
  13. package/dist/cjs/types.js +0 -3
  14. package/dist/cjs/types.js.map +1 -1
  15. package/dist/esm/client/rpc/index.js +59 -21
  16. package/dist/esm/client/rpc/index.js.map +1 -1
  17. package/dist/esm/client/rpc/interface.js +6 -1
  18. package/dist/esm/client/rpc/interface.js.map +1 -1
  19. package/dist/esm/client/rpc/json-rpc.js +0 -1
  20. package/dist/esm/client/rpc/json-rpc.js.map +1 -1
  21. package/dist/esm/constants.js +4 -4
  22. package/dist/esm/constants.js.map +1 -1
  23. package/dist/esm/errors.js +3 -1
  24. package/dist/esm/errors.js.map +1 -1
  25. package/dist/esm/index.js +0 -1
  26. package/dist/esm/index.js.map +1 -1
  27. package/dist/esm/types.js +0 -3
  28. package/dist/esm/types.js.map +1 -1
  29. package/dist/types/client/rpc/index.d.ts +22 -5
  30. package/dist/types/client/rpc/index.d.ts.map +1 -1
  31. package/dist/types/client/rpc/interface.d.ts +1 -0
  32. package/dist/types/client/rpc/interface.d.ts.map +1 -1
  33. package/dist/types/client/rpc/json-rpc.d.ts.map +1 -1
  34. package/dist/types/constants.d.ts +4 -4
  35. package/dist/types/errors.d.ts +3 -2
  36. package/dist/types/errors.d.ts.map +1 -1
  37. package/dist/types/index.d.ts +0 -1
  38. package/dist/types/index.d.ts.map +1 -1
  39. package/dist/types/types.d.ts +0 -1
  40. package/dist/types/types.d.ts.map +1 -1
  41. package/package.json +2 -2
  42. package/src/client/rpc/index.ts +66 -26
  43. package/src/client/rpc/interface.ts +7 -0
  44. package/src/client/rpc/json-rpc.ts +0 -1
  45. package/src/constants.ts +4 -4
  46. package/src/errors.ts +4 -2
  47. package/src/index.ts +0 -1
  48. package/src/types.ts +0 -4
  49. package/dist/cjs/musig2.js +0 -74
  50. package/dist/cjs/musig2.js.map +0 -1
  51. package/dist/cjs/taproot.js +0 -219
  52. package/dist/cjs/taproot.js.map +0 -1
  53. package/dist/esm/musig2.js +0 -74
  54. package/dist/esm/musig2.js.map +0 -1
  55. package/dist/esm/taproot.js +0 -219
  56. package/dist/esm/taproot.js.map +0 -1
  57. package/dist/types/musig2.d.ts +0 -44
  58. package/dist/types/musig2.d.ts.map +0 -1
  59. package/dist/types/taproot.d.ts +0 -34
  60. package/dist/types/taproot.d.ts.map +0 -1
  61. package/src/musig2.ts +0 -117
  62. package/src/taproot.ts +0 -237
@@ -1,74 +0,0 @@
1
- import { Secp256k1SecretKey } from '@did-btcr2/keypair';
2
- import { schnorr } from '@noble/curves/secp256k1';
3
- import { bytesToHex } from '@noble/hashes/utils.js';
4
- import { CURVE, ProjectivePoint } from '@noble/secp256k1';
5
- import { payments } from 'bitcoinjs-lib';
6
- import { taggedHash } from 'bitcoinjs-lib/src/crypto';
7
- export class MuSig2Participant {
8
- secretKey;
9
- publicKey;
10
- nonce;
11
- noncePub;
12
- constructor(secretKey) {
13
- this.secretKey = secretKey ?? Secp256k1SecretKey.random();
14
- this.publicKey = schnorr.getPublicKey(this.secretKey);
15
- }
16
- generateNonce() {
17
- this.nonce = Secp256k1SecretKey.random();
18
- this.noncePub = ProjectivePoint.fromPrivateKey(this.nonce);
19
- return {
20
- sessionId: 'SESSION_ID',
21
- beaconAddress: Buffer.from(this.publicKey).toString('hex'),
22
- noncePoints: this.noncePub.toHex(true), // compressed
23
- };
24
- }
25
- sign(message, aggregatedNonceHex) {
26
- const R = ProjectivePoint.fromHex(aggregatedNonceHex);
27
- const L = ProjectivePoint.fromHex(this.publicKey);
28
- const e = taggedHash('BIP0340/challenge', new Uint8Array([
29
- ...R.toRawBytes(true),
30
- ...L.toRawBytes(true),
31
- ...message,
32
- ]));
33
- const eNum = BigInt('0x' + bytesToHex(e));
34
- const rNum = BigInt('0x' + bytesToHex(this.nonce));
35
- const xNum = BigInt('0x' + bytesToHex(this.secretKey));
36
- const s = (rNum + eNum * xNum) % CURVE.n;
37
- return {
38
- sessionId: crypto.randomUUID(),
39
- beaconAddress: payments.p2tr({ internalPubkey: this.publicKey }).address || '',
40
- txSig: s.toString(16).padStart(64, '0'),
41
- };
42
- }
43
- }
44
- export class MuSig2Coordinator {
45
- sessions = new Map();
46
- receiveNonce(contrib) {
47
- const session = this.sessions.get(contrib.sessionId);
48
- session?.publicNonces.set(contrib.beaconAddress, contrib.noncePoints);
49
- }
50
- aggregateNonces(sessionId) {
51
- const session = this.sessions.get(sessionId);
52
- if (!session)
53
- throw new Error('Session not found');
54
- const points = Array.from(session.publicNonces.values()).map(nonceHex => ProjectivePoint.fromHex(nonceHex));
55
- const aggregated = points.reduce((acc, pt) => acc.add(pt), ProjectivePoint.ZERO);
56
- session.aggregatedNonce = aggregated.toHex();
57
- return {
58
- sessionId,
59
- beaconAddress: session.beaconAddress,
60
- aggregatedNoncePoints: session.aggregatedNonce,
61
- };
62
- }
63
- collectSignature(auth) {
64
- const session = this.sessions.get(auth.sessionId);
65
- if (session) {
66
- session.partialSigs.set(auth.beaconAddress, auth.txSig);
67
- }
68
- }
69
- finalizeTransaction(psbt) {
70
- // Combine partial signatures (assuming MuSig2 multi-party logic handled externally)
71
- return psbt.toHex();
72
- }
73
- }
74
- //# sourceMappingURL=musig2.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"musig2.js","sourceRoot":"","sources":["../../src/musig2.ts"],"names":[],"mappings":"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"}
@@ -1,219 +0,0 @@
1
- import * as tinysecp from 'tiny-secp256k1';
2
- import { payments, script, opcodes } from 'bitcoinjs-lib';
3
- import { CompressedSecp256k1PublicKey } from '@did-btcr2/keypair';
4
- /**
5
- * Aggregate an array of public keys by point addition
6
- */
7
- function aggregatePubkeys(pubkeys) {
8
- if (pubkeys.length === 1)
9
- return pubkeys[0];
10
- return pubkeys.reduce((sum, pk) => {
11
- const added = tinysecp.pointAdd(sum, pk);
12
- if (!added)
13
- throw new Error('Point addition failed');
14
- return added;
15
- }, pubkeys[0]);
16
- }
17
- /**
18
- * Build a P2TR script leaf for a k-of-n multisig with optional locktime/sequence
19
- */
20
- function buildTapLeafScript(pubkeys, k, locktime, sequence) {
21
- const ops = [];
22
- // absolute timelock
23
- if (locktime !== undefined) {
24
- ops.push(script.number.encode(locktime));
25
- ops.push(opcodes.OP_CHECKLOCKTIMEVERIFY);
26
- ops.push(opcodes.OP_DROP);
27
- }
28
- // relative timelock
29
- if (sequence !== undefined) {
30
- ops.push(script.number.encode(sequence));
31
- ops.push(opcodes.OP_CHECKSEQUENCEVERIFY);
32
- ops.push(opcodes.OP_DROP);
33
- }
34
- // push each key as x-only pubkey
35
- for (const pk of pubkeys) {
36
- const [xOnly] = new CompressedSecp256k1PublicKey(pk).xOnly;
37
- ops.push(xOnly);
38
- }
39
- // push threshold k and total keys n
40
- ops.push(script.number.encode(k));
41
- ops.push(script.number.encode(pubkeys.length));
42
- ops.push(opcodes.OP_CHECKMULTISIG);
43
- return script.compile(ops);
44
- }
45
- /**
46
- * Build a P2TR script leaf for a aggregated MuSig key (key-path only)
47
- */
48
- function buildMusigLeafScript(pubkeys) {
49
- const agg = aggregatePubkeys(pubkeys);
50
- const [xOnly] = new CompressedSecp256k1PublicKey(agg).xOnly;
51
- // In a taproot script path, OP_CHECKSIG runs schnorr
52
- return script.compile([xOnly, opcodes.OP_CHECKSIG]);
53
- }
54
- /**
55
- * Recursively combine an array of leaves into a balanced Merkle tree structure
56
- */
57
- function buildMerkleTree(nodes) {
58
- if (nodes.length === 1)
59
- return { output: nodes[0] };
60
- const next = [];
61
- for (let i = 0; i < nodes.length; i += 2) {
62
- if (i + 1 === nodes.length) {
63
- next.push({ output: nodes[i] });
64
- }
65
- else {
66
- next.push([
67
- { output: nodes[i] },
68
- { output: nodes[i + 1] },
69
- ]);
70
- }
71
- }
72
- return buildMerkleTree(next);
73
- }
74
- /**
75
- * Generate combinations of length k from an array
76
- */
77
- function* combinations(array, k) {
78
- const n = array.length;
79
- if (k > n || k < 0)
80
- return;
81
- const indices = Array.from({ length: k }, (_, i) => i);
82
- while (true) {
83
- yield indices.map(i => array[i]);
84
- let i = k - 1;
85
- while (i >= 0 && indices[i] === i + n - k) {
86
- i--;
87
- }
88
- if (i < 0)
89
- break;
90
- indices[i]++;
91
- for (let j = i + 1; j < k; j++) {
92
- indices[j] = indices[j - 1] + 1;
93
- }
94
- }
95
- }
96
- /**
97
- * TapRootMultiSig: builds Taproot outputs and trees for multisig and MuSig branches
98
- */
99
- export class TapRootMultiSig {
100
- points;
101
- k;
102
- defaultInternalPubkey;
103
- constructor(points, k) {
104
- if (points.length < k || k < 1) {
105
- throw new Error(`${k} is invalid for ${points.length} keys`);
106
- }
107
- this.points = points;
108
- this.k = k;
109
- // MuSig aggregation for default internal key
110
- this.defaultInternalPubkey = aggregatePubkeys(points);
111
- }
112
- /**
113
- * Single multisig leaf as the only script path
114
- */
115
- singleLeaf(locktime, sequence) {
116
- const leaf = buildTapLeafScript(this.points, this.k, locktime, sequence);
117
- return payments.p2tr({
118
- internalPubkey: this.defaultInternalPubkey,
119
- scriptTree: { output: leaf },
120
- });
121
- }
122
- /**
123
- * All k-of-n multisig combinations as separate leaf scripts, combined into one tree
124
- */
125
- multiLeafTree(locktime, sequence) {
126
- const leaves = [];
127
- for (const combo of combinations(this.points, this.k)) {
128
- leaves.push(buildTapLeafScript(combo, this.k, locktime, sequence));
129
- }
130
- const tree = buildMerkleTree(leaves);
131
- return payments.p2tr({
132
- internalPubkey: this.defaultInternalPubkey,
133
- scriptTree: tree,
134
- });
135
- }
136
- /**
137
- * MuSig key-path scripts for each k-of-n combination in the script tree
138
- */
139
- musigTree() {
140
- const leaves = [];
141
- for (const combo of combinations(this.points, this.k)) {
142
- leaves.push(buildMusigLeafScript(combo));
143
- }
144
- const tree = buildMerkleTree(leaves);
145
- return payments.p2tr({
146
- internalPubkey: this.defaultInternalPubkey,
147
- scriptTree: tree,
148
- });
149
- }
150
- /**
151
- * A two-branch tree: one branch is the singleLeaf script, the other is the muSig tree
152
- */
153
- musigAndSingleLeafTree(locktime, sequence) {
154
- const single = buildTapLeafScript(this.points, this.k, locktime, sequence);
155
- const musigLeaves = [];
156
- for (const combo of combinations(this.points, this.k)) {
157
- musigLeaves.push(buildMusigLeafScript(combo));
158
- }
159
- const tree = {
160
- output: single,
161
- scriptTree: buildMerkleTree(musigLeaves),
162
- };
163
- return payments.p2tr({
164
- internalPubkey: this.defaultInternalPubkey,
165
- scriptTree: tree,
166
- });
167
- }
168
- /**
169
- * Nested tree of singleLeaf, multiLeafTree, and musigTree
170
- */
171
- everythingTree(locktime, sequence) {
172
- const single = buildTapLeafScript(this.points, this.k, locktime, sequence);
173
- const multiLeaves = [];
174
- for (const combo of combinations(this.points, this.k)) {
175
- multiLeaves.push(buildTapLeafScript(combo, this.k, locktime, sequence));
176
- }
177
- const multiTree = buildMerkleTree(multiLeaves);
178
- const musigLeaves = [];
179
- for (const combo of combinations(this.points, this.k)) {
180
- musigLeaves.push(buildMusigLeafScript(combo));
181
- }
182
- const musigTree = buildMerkleTree(musigLeaves);
183
- const tree = {
184
- output: single,
185
- scriptTree: [multiTree, musigTree],
186
- };
187
- return payments.p2tr({
188
- internalPubkey: this.defaultInternalPubkey,
189
- scriptTree: tree,
190
- });
191
- }
192
- /**
193
- * Degrading multisig: k-of-n initially, then (k-1)-of-n after delay, ... until 1-of-n
194
- */
195
- degradingMultisigTree(sequenceBlockInterval, sequenceTimeInterval) {
196
- const leaves = [];
197
- for (let num = this.k; num >= 1; num--) {
198
- let seq;
199
- if (num === this.k) {
200
- seq = undefined;
201
- }
202
- else if (sequenceBlockInterval != null) {
203
- seq = sequenceBlockInterval * (this.k - num);
204
- }
205
- else if (sequenceTimeInterval != null) {
206
- seq = sequenceTimeInterval * (this.k - num);
207
- }
208
- for (const combo of combinations(this.points, num)) {
209
- leaves.push(buildTapLeafScript(combo, num, undefined, seq));
210
- }
211
- }
212
- const tree = buildMerkleTree(leaves);
213
- return payments.p2tr({
214
- internalPubkey: this.defaultInternalPubkey,
215
- scriptTree: tree,
216
- });
217
- }
218
- }
219
- //# sourceMappingURL=taproot.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"taproot.js","sourceRoot":"","sources":["../../src/taproot.ts"],"names":[],"mappings":"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"}
@@ -1,74 +0,0 @@
1
- import { Secp256k1SecretKey } from '@did-btcr2/keypair';
2
- import { schnorr } from '@noble/curves/secp256k1';
3
- import { bytesToHex } from '@noble/hashes/utils.js';
4
- import { CURVE, ProjectivePoint } from '@noble/secp256k1';
5
- import { payments } from 'bitcoinjs-lib';
6
- import { taggedHash } from 'bitcoinjs-lib/src/crypto';
7
- export class MuSig2Participant {
8
- secretKey;
9
- publicKey;
10
- nonce;
11
- noncePub;
12
- constructor(secretKey) {
13
- this.secretKey = secretKey ?? Secp256k1SecretKey.random();
14
- this.publicKey = schnorr.getPublicKey(this.secretKey);
15
- }
16
- generateNonce() {
17
- this.nonce = Secp256k1SecretKey.random();
18
- this.noncePub = ProjectivePoint.fromPrivateKey(this.nonce);
19
- return {
20
- sessionId: 'SESSION_ID',
21
- beaconAddress: Buffer.from(this.publicKey).toString('hex'),
22
- noncePoints: this.noncePub.toHex(true), // compressed
23
- };
24
- }
25
- sign(message, aggregatedNonceHex) {
26
- const R = ProjectivePoint.fromHex(aggregatedNonceHex);
27
- const L = ProjectivePoint.fromHex(this.publicKey);
28
- const e = taggedHash('BIP0340/challenge', new Uint8Array([
29
- ...R.toRawBytes(true),
30
- ...L.toRawBytes(true),
31
- ...message,
32
- ]));
33
- const eNum = BigInt('0x' + bytesToHex(e));
34
- const rNum = BigInt('0x' + bytesToHex(this.nonce));
35
- const xNum = BigInt('0x' + bytesToHex(this.secretKey));
36
- const s = (rNum + eNum * xNum) % CURVE.n;
37
- return {
38
- sessionId: crypto.randomUUID(),
39
- beaconAddress: payments.p2tr({ internalPubkey: this.publicKey }).address || '',
40
- txSig: s.toString(16).padStart(64, '0'),
41
- };
42
- }
43
- }
44
- export class MuSig2Coordinator {
45
- sessions = new Map();
46
- receiveNonce(contrib) {
47
- const session = this.sessions.get(contrib.sessionId);
48
- session?.publicNonces.set(contrib.beaconAddress, contrib.noncePoints);
49
- }
50
- aggregateNonces(sessionId) {
51
- const session = this.sessions.get(sessionId);
52
- if (!session)
53
- throw new Error('Session not found');
54
- const points = Array.from(session.publicNonces.values()).map(nonceHex => ProjectivePoint.fromHex(nonceHex));
55
- const aggregated = points.reduce((acc, pt) => acc.add(pt), ProjectivePoint.ZERO);
56
- session.aggregatedNonce = aggregated.toHex();
57
- return {
58
- sessionId,
59
- beaconAddress: session.beaconAddress,
60
- aggregatedNoncePoints: session.aggregatedNonce,
61
- };
62
- }
63
- collectSignature(auth) {
64
- const session = this.sessions.get(auth.sessionId);
65
- if (session) {
66
- session.partialSigs.set(auth.beaconAddress, auth.txSig);
67
- }
68
- }
69
- finalizeTransaction(psbt) {
70
- // Combine partial signatures (assuming MuSig2 multi-party logic handled externally)
71
- return psbt.toHex();
72
- }
73
- }
74
- //# sourceMappingURL=musig2.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"musig2.js","sourceRoot":"","sources":["../../src/musig2.ts"],"names":[],"mappings":"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"}
@@ -1,219 +0,0 @@
1
- import * as tinysecp from 'tiny-secp256k1';
2
- import { payments, script, opcodes } from 'bitcoinjs-lib';
3
- import { CompressedSecp256k1PublicKey } from '@did-btcr2/keypair';
4
- /**
5
- * Aggregate an array of public keys by point addition
6
- */
7
- function aggregatePubkeys(pubkeys) {
8
- if (pubkeys.length === 1)
9
- return pubkeys[0];
10
- return pubkeys.reduce((sum, pk) => {
11
- const added = tinysecp.pointAdd(sum, pk);
12
- if (!added)
13
- throw new Error('Point addition failed');
14
- return added;
15
- }, pubkeys[0]);
16
- }
17
- /**
18
- * Build a P2TR script leaf for a k-of-n multisig with optional locktime/sequence
19
- */
20
- function buildTapLeafScript(pubkeys, k, locktime, sequence) {
21
- const ops = [];
22
- // absolute timelock
23
- if (locktime !== undefined) {
24
- ops.push(script.number.encode(locktime));
25
- ops.push(opcodes.OP_CHECKLOCKTIMEVERIFY);
26
- ops.push(opcodes.OP_DROP);
27
- }
28
- // relative timelock
29
- if (sequence !== undefined) {
30
- ops.push(script.number.encode(sequence));
31
- ops.push(opcodes.OP_CHECKSEQUENCEVERIFY);
32
- ops.push(opcodes.OP_DROP);
33
- }
34
- // push each key as x-only pubkey
35
- for (const pk of pubkeys) {
36
- const [xOnly] = new CompressedSecp256k1PublicKey(pk).xOnly;
37
- ops.push(xOnly);
38
- }
39
- // push threshold k and total keys n
40
- ops.push(script.number.encode(k));
41
- ops.push(script.number.encode(pubkeys.length));
42
- ops.push(opcodes.OP_CHECKMULTISIG);
43
- return script.compile(ops);
44
- }
45
- /**
46
- * Build a P2TR script leaf for a aggregated MuSig key (key-path only)
47
- */
48
- function buildMusigLeafScript(pubkeys) {
49
- const agg = aggregatePubkeys(pubkeys);
50
- const [xOnly] = new CompressedSecp256k1PublicKey(agg).xOnly;
51
- // In a taproot script path, OP_CHECKSIG runs schnorr
52
- return script.compile([xOnly, opcodes.OP_CHECKSIG]);
53
- }
54
- /**
55
- * Recursively combine an array of leaves into a balanced Merkle tree structure
56
- */
57
- function buildMerkleTree(nodes) {
58
- if (nodes.length === 1)
59
- return { output: nodes[0] };
60
- const next = [];
61
- for (let i = 0; i < nodes.length; i += 2) {
62
- if (i + 1 === nodes.length) {
63
- next.push({ output: nodes[i] });
64
- }
65
- else {
66
- next.push([
67
- { output: nodes[i] },
68
- { output: nodes[i + 1] },
69
- ]);
70
- }
71
- }
72
- return buildMerkleTree(next);
73
- }
74
- /**
75
- * Generate combinations of length k from an array
76
- */
77
- function* combinations(array, k) {
78
- const n = array.length;
79
- if (k > n || k < 0)
80
- return;
81
- const indices = Array.from({ length: k }, (_, i) => i);
82
- while (true) {
83
- yield indices.map(i => array[i]);
84
- let i = k - 1;
85
- while (i >= 0 && indices[i] === i + n - k) {
86
- i--;
87
- }
88
- if (i < 0)
89
- break;
90
- indices[i]++;
91
- for (let j = i + 1; j < k; j++) {
92
- indices[j] = indices[j - 1] + 1;
93
- }
94
- }
95
- }
96
- /**
97
- * TapRootMultiSig: builds Taproot outputs and trees for multisig and MuSig branches
98
- */
99
- export class TapRootMultiSig {
100
- points;
101
- k;
102
- defaultInternalPubkey;
103
- constructor(points, k) {
104
- if (points.length < k || k < 1) {
105
- throw new Error(`${k} is invalid for ${points.length} keys`);
106
- }
107
- this.points = points;
108
- this.k = k;
109
- // MuSig aggregation for default internal key
110
- this.defaultInternalPubkey = aggregatePubkeys(points);
111
- }
112
- /**
113
- * Single multisig leaf as the only script path
114
- */
115
- singleLeaf(locktime, sequence) {
116
- const leaf = buildTapLeafScript(this.points, this.k, locktime, sequence);
117
- return payments.p2tr({
118
- internalPubkey: this.defaultInternalPubkey,
119
- scriptTree: { output: leaf },
120
- });
121
- }
122
- /**
123
- * All k-of-n multisig combinations as separate leaf scripts, combined into one tree
124
- */
125
- multiLeafTree(locktime, sequence) {
126
- const leaves = [];
127
- for (const combo of combinations(this.points, this.k)) {
128
- leaves.push(buildTapLeafScript(combo, this.k, locktime, sequence));
129
- }
130
- const tree = buildMerkleTree(leaves);
131
- return payments.p2tr({
132
- internalPubkey: this.defaultInternalPubkey,
133
- scriptTree: tree,
134
- });
135
- }
136
- /**
137
- * MuSig key-path scripts for each k-of-n combination in the script tree
138
- */
139
- musigTree() {
140
- const leaves = [];
141
- for (const combo of combinations(this.points, this.k)) {
142
- leaves.push(buildMusigLeafScript(combo));
143
- }
144
- const tree = buildMerkleTree(leaves);
145
- return payments.p2tr({
146
- internalPubkey: this.defaultInternalPubkey,
147
- scriptTree: tree,
148
- });
149
- }
150
- /**
151
- * A two-branch tree: one branch is the singleLeaf script, the other is the muSig tree
152
- */
153
- musigAndSingleLeafTree(locktime, sequence) {
154
- const single = buildTapLeafScript(this.points, this.k, locktime, sequence);
155
- const musigLeaves = [];
156
- for (const combo of combinations(this.points, this.k)) {
157
- musigLeaves.push(buildMusigLeafScript(combo));
158
- }
159
- const tree = {
160
- output: single,
161
- scriptTree: buildMerkleTree(musigLeaves),
162
- };
163
- return payments.p2tr({
164
- internalPubkey: this.defaultInternalPubkey,
165
- scriptTree: tree,
166
- });
167
- }
168
- /**
169
- * Nested tree of singleLeaf, multiLeafTree, and musigTree
170
- */
171
- everythingTree(locktime, sequence) {
172
- const single = buildTapLeafScript(this.points, this.k, locktime, sequence);
173
- const multiLeaves = [];
174
- for (const combo of combinations(this.points, this.k)) {
175
- multiLeaves.push(buildTapLeafScript(combo, this.k, locktime, sequence));
176
- }
177
- const multiTree = buildMerkleTree(multiLeaves);
178
- const musigLeaves = [];
179
- for (const combo of combinations(this.points, this.k)) {
180
- musigLeaves.push(buildMusigLeafScript(combo));
181
- }
182
- const musigTree = buildMerkleTree(musigLeaves);
183
- const tree = {
184
- output: single,
185
- scriptTree: [multiTree, musigTree],
186
- };
187
- return payments.p2tr({
188
- internalPubkey: this.defaultInternalPubkey,
189
- scriptTree: tree,
190
- });
191
- }
192
- /**
193
- * Degrading multisig: k-of-n initially, then (k-1)-of-n after delay, ... until 1-of-n
194
- */
195
- degradingMultisigTree(sequenceBlockInterval, sequenceTimeInterval) {
196
- const leaves = [];
197
- for (let num = this.k; num >= 1; num--) {
198
- let seq;
199
- if (num === this.k) {
200
- seq = undefined;
201
- }
202
- else if (sequenceBlockInterval != null) {
203
- seq = sequenceBlockInterval * (this.k - num);
204
- }
205
- else if (sequenceTimeInterval != null) {
206
- seq = sequenceTimeInterval * (this.k - num);
207
- }
208
- for (const combo of combinations(this.points, num)) {
209
- leaves.push(buildTapLeafScript(combo, num, undefined, seq));
210
- }
211
- }
212
- const tree = buildMerkleTree(leaves);
213
- return payments.p2tr({
214
- internalPubkey: this.defaultInternalPubkey,
215
- scriptTree: tree,
216
- });
217
- }
218
- }
219
- //# sourceMappingURL=taproot.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"taproot.js","sourceRoot":"","sources":["../../src/taproot.ts"],"names":[],"mappings":"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"}
@@ -1,44 +0,0 @@
1
- import { Hex } from '@did-btcr2/common';
2
- import { Point } from '@noble/secp256k1';
3
- import { Psbt } from 'bitcoinjs-lib';
4
- interface MuSig2Session {
5
- sessionId: string;
6
- beaconAddress: string;
7
- participants: Hex[];
8
- publicNonces: Map<Hex, Hex>;
9
- aggregatedNonce?: Hex;
10
- messageToSign?: Uint8Array;
11
- partialSigs: Map<Hex, Hex>;
12
- }
13
- interface MuSig2NonceContribution {
14
- sessionId: string;
15
- beaconAddress: string;
16
- noncePoints: Hex;
17
- }
18
- interface AggregatedMuSig2Nonce {
19
- sessionId: string;
20
- beaconAddress: string;
21
- aggregatedNoncePoints: Hex;
22
- }
23
- interface BeaconSignalAuthorization {
24
- sessionId: string;
25
- beaconAddress: string;
26
- txSig: Hex;
27
- }
28
- export declare class MuSig2Participant {
29
- secretKey: Uint8Array;
30
- publicKey: Uint8Array;
31
- nonce?: Uint8Array;
32
- noncePub?: Point;
33
- constructor(secretKey?: Uint8Array);
34
- generateNonce(): MuSig2NonceContribution;
35
- sign(message: Uint8Array, aggregatedNonceHex: string): BeaconSignalAuthorization;
36
- }
37
- export declare class MuSig2Coordinator {
38
- sessions: Map<string, MuSig2Session>;
39
- receiveNonce(contrib: MuSig2NonceContribution): void;
40
- aggregateNonces(sessionId: string): AggregatedMuSig2Nonce;
41
- collectSignature(auth: BeaconSignalAuthorization): void;
42
- finalizeTransaction(psbt: Psbt): string;
43
- }
44
- export {};