@sequence0/sdk 1.1.0 → 1.1.2

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.
@@ -7,10 +7,15 @@
7
7
  * FROST-secp256k1 produces BIP-340 compatible Schnorr signatures that are
8
8
  * NATIVE to Taproot key-path spends -- no signature format conversion needed.
9
9
  *
10
- * Depends on the WASM crate's bitcoin.rs for:
11
- * - Address derivation (group pubkey -> bc1p... P2TR address)
12
- * - Transaction construction (inputs/outputs -> unsigned TX + sighash)
13
- * - Signature attachment (FROST sig -> witness data)
10
+ * Key features:
11
+ * - **Real secp256k1 EC point arithmetic** for BIP-341 key tweaking
12
+ * (lift_x, point_add, scalar_mul -- no external crypto dependencies)
13
+ * - **Per-input sighash computation** for multi-input transactions
14
+ * (each input gets its own BIP-341 sighash for independent FROST signing)
15
+ * - **Full transaction serialization** with proper segwit witness structure
16
+ * - **Broadcast via Mempool.space API** (mainnet, testnet, signet, regtest)
17
+ *
18
+ * No external dependencies beyond Node.js crypto (SHA-256).
14
19
  *
15
20
  * @example
16
21
  * ```typescript
@@ -66,13 +71,32 @@ export interface TaprootAddressInfo {
66
71
  outputKey: string;
67
72
  /** ScriptPubKey (hex-encoded, OP_1 <32-byte output key>) */
68
73
  scriptPubkey: string;
74
+ /**
75
+ * Taproot tweak scalar (64-char hex).
76
+ * This must be applied to the FROST group private key during signing:
77
+ * tweaked_privkey = privkey + tweak (mod n)
78
+ * The FROST signing request should include this tweak so agents can
79
+ * adjust their secret shares before producing partial signatures.
80
+ */
81
+ tapTweak: string;
69
82
  /** Network */
70
83
  network: BitcoinNetwork;
71
84
  }
72
85
  /** Unsigned Taproot transaction ready for FROST signing */
73
86
  export interface UnsignedTaprootTx {
74
- /** Sighash to sign via FROST (32 bytes, hex-encoded) */
87
+ /**
88
+ * Sighash for the first input (32 bytes, hex-encoded).
89
+ * For single-input transactions this is all you need.
90
+ * For multi-input transactions, use `sighashes` instead.
91
+ */
75
92
  sighash: string;
93
+ /**
94
+ * Per-input sighashes (32 bytes each, hex-encoded).
95
+ * Each input has its own BIP-341 sighash that must be independently
96
+ * signed via FROST. The same key signs all inputs, but each sighash
97
+ * includes the input index and produces a different message.
98
+ */
99
+ sighashes: string[];
76
100
  /** Serialized unsigned transaction (hex-encoded) */
77
101
  rawUnsigned: string;
78
102
  /** Transaction inputs */
@@ -145,6 +169,21 @@ export declare class BitcoinTaprootAdapter implements ChainAdapter {
145
169
  * @returns TaprootAddressInfo with address, keys, and scriptPubkey
146
170
  */
147
171
  deriveAddress(groupPubkeyHex: string): TaprootAddressInfo;
172
+ /**
173
+ * Compute the Taproot tweak for a FROST group public key.
174
+ *
175
+ * The FROST signing protocol must apply this tweak to the group private key
176
+ * before signing. This ensures the Schnorr signature verifies against the
177
+ * tweaked output key (which is what the scriptPubKey commits to).
178
+ *
179
+ * The tweak scalar t = hash_TapTweak(internal_key) is returned as hex.
180
+ * During FROST signing, the group's secret share is tweaked:
181
+ * tweaked_share = share + t (mod n)
182
+ *
183
+ * @param groupPubkeyHex - Hex-encoded FROST group verifying key (33 or 32 bytes)
184
+ * @returns Hex-encoded 32-byte tweak scalar
185
+ */
186
+ getTapTweak(groupPubkeyHex: string): string;
148
187
  /**
149
188
  * Fetch unspent transaction outputs (UTXOs) for a Taproot address.
150
189
  *
@@ -212,24 +251,36 @@ export declare class BitcoinTaprootAdapter implements ChainAdapter {
212
251
  */
213
252
  buildUnsignedTx(inputs: TaprootTxInput[], outputs: TaprootTxOutput[], feeRate: number): UnsignedTaprootTx;
214
253
  /**
215
- * Attach a FROST Schnorr signature to an unsigned Taproot transaction.
254
+ * Attach FROST Schnorr signature(s) to an unsigned Taproot transaction.
255
+ *
256
+ * The FROST signing protocol produces 64-byte BIP-340 Schnorr signatures
257
+ * (R_x || s) that are directly used as Taproot witness for key-path spends.
216
258
  *
217
- * The FROST signing protocol produces a 64-byte BIP-340 Schnorr signature
218
- * (R_x || s) that is directly used as the Taproot witness for key-path spends.
259
+ * For single-input transactions: pass a single 128-char hex signature.
260
+ * For multi-input transactions: pass signatures separated by commas, or
261
+ * a single signature that will be applied to all inputs (if all inputs
262
+ * share the same signing key and the caller signs each sighash separately).
219
263
  *
220
264
  * @param unsignedTxHex - Hex-encoded unsigned transaction (from buildTransaction)
221
- * @param signatureHex - 64-byte FROST Schnorr signature (hex-encoded, 128 chars)
265
+ * @param signatureHex - 64-byte FROST Schnorr signature(s). For multi-input
266
+ * transactions, separate per-input signatures with commas.
222
267
  * @returns Hex-encoded signed transaction ready for broadcast
223
268
  */
224
269
  attachSignature(unsignedTxHex: string, signatureHex: string): Promise<string>;
225
270
  /**
226
- * Attach a FROST Schnorr signature with full output (returns structured data).
271
+ * Attach FROST Schnorr signature(s) with full output (returns structured data).
227
272
  *
228
273
  * @param unsignedTx - The UnsignedTaprootTx from buildUnsignedTx
229
- * @param signatureHex - 64-byte FROST Schnorr signature (hex, 128 chars)
274
+ * @param signatureHex - 64-byte FROST Schnorr signature(s) (hex). For multi-input
275
+ * transactions, pass an array of per-input signatures or a comma-separated string.
230
276
  * @returns SignedTaprootTx with raw_signed, txid, and vsize
231
277
  */
232
- attachSignatureToTx(unsignedTx: UnsignedTaprootTx, signatureHex: string): SignedTaprootTx;
278
+ attachSignatureToTx(unsignedTx: UnsignedTaprootTx, signatureHex: string | string[]): SignedTaprootTx;
279
+ /**
280
+ * Parse signature hex into per-input signatures.
281
+ * Supports: single sig (applied to all inputs), comma-separated, or concatenated.
282
+ */
283
+ private parseSignatures;
233
284
  /**
234
285
  * Broadcast a signed Taproot transaction to the Bitcoin network.
235
286
  *
@@ -276,7 +327,10 @@ export declare class BitcoinTaprootAdapter implements ChainAdapter {
276
327
  */
277
328
  private serializeUnsignedTx;
278
329
  /**
279
- * Serialize a signed Taproot transaction.
330
+ * Serialize a signed Taproot transaction with per-input signatures.
331
+ *
332
+ * @param unsignedTx - The unsigned transaction data
333
+ * @param signatures - Array of per-input signature hex strings (128 chars each)
280
334
  */
281
335
  private serializeSignedTx;
282
336
  /**
@@ -295,7 +349,16 @@ export declare class BitcoinTaprootAdapter implements ChainAdapter {
295
349
  * - Spend type (0x00 for key-path, no annex)
296
350
  * - Input index (4 bytes LE)
297
351
  */
298
- private computeSighash;
352
+ /**
353
+ * Compute all per-input BIP-341 sighashes for the transaction.
354
+ *
355
+ * Each input has its own sighash because the input_index field differs.
356
+ * The common transaction-level hashes (prevouts, amounts, scripts, sequences,
357
+ * outputs) are precomputed once and reused across all inputs.
358
+ *
359
+ * @returns Array of hex-encoded sighashes, one per input
360
+ */
361
+ private computeAllSighashes;
299
362
  }
300
363
  /**
301
364
  * Create a Bitcoin Taproot adapter for mainnet.
@@ -1 +1 @@
1
- {"version":3,"file":"bitcoin-taproot.d.ts","sourceRoot":"","sources":["../../src/chains/bitcoin-taproot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bitcoin-taproot.d.ts","sourceRoot":"","sources":["../../src/chains/bitcoin-taproot.ts"],"names":[],"mappings":"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"}