@aibtc/mcp-server 1.5.0 → 1.6.0

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.
@@ -0,0 +1,242 @@
1
+ /**
2
+ * Bitcoin transaction building and signing
3
+ *
4
+ * Uses @scure/btc-signer for P2WPKH (native SegWit) transactions.
5
+ * Follows Leather/Xverse wallet patterns.
6
+ */
7
+ import * as btc from "@scure/btc-signer";
8
+ /**
9
+ * P2WPKH transaction size constants (virtual bytes)
10
+ *
11
+ * Based on Bitcoin Core and @scure/btc-signer calculations:
12
+ * - P2WPKH input: ~68 vB (includes witness data at 1/4 weight)
13
+ * - P2WPKH output: ~31 vB
14
+ * - Base overhead: ~10.5 vB (version, locktime, witness marker/flag)
15
+ */
16
+ const P2WPKH_INPUT_VBYTES = 68;
17
+ const P2WPKH_OUTPUT_VBYTES = 31;
18
+ const TX_OVERHEAD_VBYTES = 10.5;
19
+ /**
20
+ * Minimum output value (dust threshold)
21
+ * Below this value, outputs are non-standard and won't be relayed
22
+ */
23
+ const DUST_THRESHOLD = 546;
24
+ /**
25
+ * Estimate the size of a P2WPKH transaction in virtual bytes
26
+ *
27
+ * Formula: overhead + (inputs * input_size) + (outputs * output_size)
28
+ *
29
+ * @param inputCount - Number of inputs
30
+ * @param outputCount - Number of outputs
31
+ * @returns Estimated size in virtual bytes
32
+ *
33
+ * @example
34
+ * ```typescript
35
+ * // 1 input, 2 outputs (recipient + change)
36
+ * const vsize = estimateTxSize(1, 2);
37
+ * console.log(vsize); // ~140.5 vB
38
+ * ```
39
+ */
40
+ export function estimateTxSize(inputCount, outputCount) {
41
+ if (inputCount < 1) {
42
+ throw new Error("Transaction must have at least 1 input");
43
+ }
44
+ if (outputCount < 1) {
45
+ throw new Error("Transaction must have at least 1 output");
46
+ }
47
+ const inputsSize = inputCount * P2WPKH_INPUT_VBYTES;
48
+ const outputsSize = outputCount * P2WPKH_OUTPUT_VBYTES;
49
+ return TX_OVERHEAD_VBYTES + inputsSize + outputsSize;
50
+ }
51
+ /**
52
+ * Get the @scure/btc-signer network object for a network name
53
+ */
54
+ function getBtcNetwork(network) {
55
+ return network === "testnet" ? btc.TEST_NETWORK : btc.NETWORK;
56
+ }
57
+ /**
58
+ * Build an unsigned Bitcoin transaction
59
+ *
60
+ * Creates a P2WPKH transaction with:
61
+ * - Selected UTXOs as inputs
62
+ * - Recipient output
63
+ * - Change output (if above dust threshold)
64
+ *
65
+ * @param options - Transaction building options
66
+ * @returns Unsigned transaction and metadata
67
+ * @throws Error if insufficient funds or invalid parameters
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * const result = buildBtcTransaction({
72
+ * utxos: [...],
73
+ * recipient: "bc1q...",
74
+ * amount: 50000,
75
+ * feeRate: 10,
76
+ * senderPubKey: pubKeyBytes,
77
+ * senderAddress: "bc1q...",
78
+ * network: "mainnet",
79
+ * });
80
+ * ```
81
+ */
82
+ export function buildBtcTransaction(options) {
83
+ const { utxos, recipient, amount, feeRate, senderPubKey, senderAddress, network } = options;
84
+ // Validate inputs
85
+ if (utxos.length === 0) {
86
+ throw new Error("No UTXOs provided");
87
+ }
88
+ if (amount <= 0) {
89
+ throw new Error("Amount must be positive");
90
+ }
91
+ if (amount < DUST_THRESHOLD) {
92
+ throw new Error(`Amount ${amount} is below dust threshold (${DUST_THRESHOLD} sats)`);
93
+ }
94
+ if (feeRate <= 0) {
95
+ throw new Error("Fee rate must be positive");
96
+ }
97
+ // Sort UTXOs by value descending for better coin selection
98
+ const sortedUtxos = [...utxos]
99
+ .filter((utxo) => utxo.status.confirmed) // Only use confirmed UTXOs
100
+ .sort((a, b) => b.value - a.value);
101
+ if (sortedUtxos.length === 0) {
102
+ throw new Error("No confirmed UTXOs available");
103
+ }
104
+ // Calculate total available
105
+ const totalAvailable = sortedUtxos.reduce((sum, utxo) => sum + utxo.value, 0);
106
+ // Estimate transaction size with change output
107
+ const estimatedVsize = estimateTxSize(sortedUtxos.length, 2);
108
+ const estimatedFee = Math.ceil(estimatedVsize * feeRate);
109
+ // Check if we have enough funds
110
+ const requiredTotal = amount + estimatedFee;
111
+ if (totalAvailable < requiredTotal) {
112
+ throw new Error(`Insufficient funds: have ${totalAvailable} sats, need ${requiredTotal} sats (${amount} + ${estimatedFee} fee)`);
113
+ }
114
+ // Select UTXOs using simple accumulator
115
+ let selectedTotal = 0;
116
+ const selectedUtxos = [];
117
+ for (const utxo of sortedUtxos) {
118
+ selectedUtxos.push(utxo);
119
+ selectedTotal += utxo.value;
120
+ // Check if we have enough (with potential change)
121
+ const vsizeWithChange = estimateTxSize(selectedUtxos.length, 2);
122
+ const feeWithChange = Math.ceil(vsizeWithChange * feeRate);
123
+ const neededWithChange = amount + feeWithChange;
124
+ if (selectedTotal >= neededWithChange) {
125
+ break;
126
+ }
127
+ }
128
+ // Final calculation
129
+ const finalVsizeWithChange = estimateTxSize(selectedUtxos.length, 2);
130
+ const finalFeeWithChange = Math.ceil(finalVsizeWithChange * feeRate);
131
+ const changeAmount = selectedTotal - amount - finalFeeWithChange;
132
+ // Determine if we should include a change output
133
+ const hasChange = changeAmount >= DUST_THRESHOLD;
134
+ const outputCount = hasChange ? 2 : 1;
135
+ // Recalculate fee if no change output
136
+ const finalVsize = estimateTxSize(selectedUtxos.length, outputCount);
137
+ const finalFee = hasChange
138
+ ? finalFeeWithChange
139
+ : Math.ceil(finalVsize * feeRate);
140
+ const finalChange = hasChange ? changeAmount : 0;
141
+ // Verify we still have enough
142
+ if (selectedTotal < amount + finalFee) {
143
+ throw new Error(`Insufficient funds after UTXO selection: have ${selectedTotal} sats, need ${amount + finalFee} sats`);
144
+ }
145
+ // Build the transaction
146
+ const btcNetwork = getBtcNetwork(network);
147
+ const tx = new btc.Transaction();
148
+ // Create sender's P2WPKH script for inputs
149
+ const senderP2wpkh = btc.p2wpkh(senderPubKey, btcNetwork);
150
+ // Add inputs
151
+ for (const utxo of selectedUtxos) {
152
+ tx.addInput({
153
+ txid: utxo.txid,
154
+ index: utxo.vout,
155
+ witnessUtxo: {
156
+ script: senderP2wpkh.script,
157
+ amount: BigInt(utxo.value),
158
+ },
159
+ });
160
+ }
161
+ // Add recipient output
162
+ tx.addOutputAddress(recipient, BigInt(amount), btcNetwork);
163
+ // Add change output if above dust
164
+ if (hasChange) {
165
+ tx.addOutputAddress(senderAddress, BigInt(finalChange), btcNetwork);
166
+ }
167
+ return {
168
+ tx,
169
+ fee: finalFee,
170
+ change: finalChange,
171
+ vsize: finalVsize,
172
+ inputUtxos: selectedUtxos,
173
+ };
174
+ }
175
+ /**
176
+ * Sign a Bitcoin transaction with a private key
177
+ *
178
+ * Signs all inputs and finalizes the transaction for broadcast.
179
+ *
180
+ * SECURITY: The private key should be a Uint8Array from the wallet session.
181
+ * Never serialize the private key to WIF/hex.
182
+ *
183
+ * @param tx - Unsigned transaction from buildBtcTransaction
184
+ * @param privateKey - Private key as Uint8Array (32 bytes)
185
+ * @returns Signed transaction hex and metadata
186
+ *
187
+ * @example
188
+ * ```typescript
189
+ * const { tx } = buildBtcTransaction({...});
190
+ * const result = signBtcTransaction(tx, privateKeyBytes);
191
+ * console.log(result.txHex); // Ready for broadcast
192
+ * console.log(result.txid); // Transaction ID
193
+ * ```
194
+ */
195
+ export function signBtcTransaction(tx, privateKey) {
196
+ if (privateKey.length !== 32) {
197
+ throw new Error("Private key must be 32 bytes");
198
+ }
199
+ // Sign all inputs
200
+ tx.sign(privateKey);
201
+ // Finalize the transaction
202
+ tx.finalize();
203
+ // Get the signed transaction hex
204
+ const txHex = tx.hex;
205
+ // Get the transaction ID
206
+ const txid = tx.id;
207
+ // Get actual vsize from the finalized transaction
208
+ const vsize = tx.vsize;
209
+ return {
210
+ txHex,
211
+ txid,
212
+ vsize,
213
+ };
214
+ }
215
+ /**
216
+ * Build and sign a Bitcoin transaction in one step
217
+ *
218
+ * Convenience function that combines buildBtcTransaction and signBtcTransaction.
219
+ *
220
+ * @param options - Transaction building options
221
+ * @param privateKey - Private key as Uint8Array (32 bytes)
222
+ * @returns Signed transaction ready for broadcast
223
+ *
224
+ * @example
225
+ * ```typescript
226
+ * const result = buildAndSignBtcTransaction(
227
+ * { utxos, recipient, amount, feeRate, senderPubKey, senderAddress, network },
228
+ * privateKey
229
+ * );
230
+ * // Broadcast result.txHex
231
+ * ```
232
+ */
233
+ export function buildAndSignBtcTransaction(options, privateKey) {
234
+ const buildResult = buildBtcTransaction(options);
235
+ const signResult = signBtcTransaction(buildResult.tx, privateKey);
236
+ return {
237
+ ...signResult,
238
+ fee: buildResult.fee,
239
+ change: buildResult.change,
240
+ };
241
+ }
242
+ //# sourceMappingURL=bitcoin-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitcoin-builder.js","sourceRoot":"","sources":["../../src/transactions/bitcoin-builder.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,15 @@ export interface Account {
4
4
  address: string;
5
5
  btcAddress?: string;
6
6
  privateKey: string;
7
+ /**
8
+ * Bitcoin private key as raw bytes (32 bytes) for signing BTC transactions.
9
+ * SECURITY: Never serialize to WIF/hex. Only held in memory during session.
10
+ */
11
+ btcPrivateKey?: Uint8Array;
12
+ /**
13
+ * Bitcoin public key as raw bytes (33 bytes compressed) for building transactions.
14
+ */
15
+ btcPublicKey?: Uint8Array;
7
16
  network: Network;
8
17
  }
9
18
  export interface TransferResult {
@@ -1 +1 @@
1
- {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/transactions/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAmC,KAAK,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEtF,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,YAAY,EAAE,CAAC;IAC7B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,CAAC,CA0BzB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,cAAc,CAAC,CA6BzB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,cAAc,CAAC,CAyBzB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAe7C;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAkB7C;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAmB3B"}
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/transactions/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAmC,KAAK,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEtF,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B;;OAEG;IACH,YAAY,CAAC,EAAE,UAAU,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,YAAY,EAAE,CAAC;IAC7B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,CAAC,CA0BzB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,cAAc,CAAC,CA6BzB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,cAAc,CAAC,CAyBzB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAe7C;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAkB7C;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAmB3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/transactions/builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/transactions/builder.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,28 @@ export interface BitcoinAddress {
12
12
  */
13
13
  publicKey: string;
14
14
  }
15
+ /**
16
+ * Bitcoin key pair derivation result (includes private key for signing)
17
+ *
18
+ * SECURITY: This interface exposes the private key as Uint8Array.
19
+ * The private key should:
20
+ * - NEVER be serialized to WIF or hex string
21
+ * - NEVER be logged or stored persistently
22
+ * - Only be held in memory during signing operations
23
+ * - Be cleared after use (session lock)
24
+ */
25
+ export interface BitcoinKeyPair extends BitcoinAddress {
26
+ /**
27
+ * Private key as raw bytes (32 bytes)
28
+ * SECURITY: Never serialize to WIF/hex. Use only for signing.
29
+ */
30
+ privateKey: Uint8Array;
31
+ /**
32
+ * Public key as raw bytes (33 bytes compressed)
33
+ * Used for building P2WPKH transactions.
34
+ */
35
+ publicKeyBytes: Uint8Array;
36
+ }
15
37
  /**
16
38
  * Derive Bitcoin L1 native SegWit address from BIP39 mnemonic
17
39
  *
@@ -37,4 +59,34 @@ export interface BitcoinAddress {
37
59
  * ```
38
60
  */
39
61
  export declare function deriveBitcoinAddress(mnemonic: string, network: Network): BitcoinAddress;
62
+ /**
63
+ * Derive Bitcoin L1 key pair from BIP39 mnemonic (includes private key for signing)
64
+ *
65
+ * Follows BIP84 derivation path:
66
+ * - Mainnet: m/84'/0'/0'/0/0 (coin type 0)
67
+ * - Testnet: m/84'/1'/0'/0/0 (coin type 1)
68
+ *
69
+ * Returns native SegWit (P2WPKH) address and key pair:
70
+ * - Mainnet: bc1q... prefix
71
+ * - Testnet: tb1q... prefix
72
+ *
73
+ * SECURITY WARNING: This function returns the private key as Uint8Array.
74
+ * - NEVER serialize the private key to WIF or hex string
75
+ * - NEVER log or store the private key persistently
76
+ * - Only hold in memory during signing operations
77
+ * - Clear from memory when wallet is locked
78
+ *
79
+ * @param mnemonic - BIP39 mnemonic phrase (12 or 24 words)
80
+ * @param network - Network to derive keys for ('mainnet' | 'testnet')
81
+ * @returns Bitcoin address, public key, and private key (Uint8Array)
82
+ *
83
+ * @example
84
+ * ```typescript
85
+ * const { address, publicKey, privateKey } = deriveBitcoinKeyPair(mnemonic, 'mainnet');
86
+ * console.log(address); // bc1q...
87
+ * console.log(publicKey); // 02... or 03... (33 bytes compressed)
88
+ * // privateKey is Uint8Array(32) - use for signing, never serialize
89
+ * ```
90
+ */
91
+ export declare function deriveBitcoinKeyPair(mnemonic: string, network: Network): BitcoinKeyPair;
40
92
  //# sourceMappingURL=bitcoin.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bitcoin.d.ts","sourceRoot":"","sources":["../../src/utils/bitcoin.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,GACf,cAAc,CAmDhB"}
1
+ {"version":3,"file":"bitcoin.d.ts","sourceRoot":"","sources":["../../src/utils/bitcoin.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD;;;OAGG;IACH,UAAU,EAAE,UAAU,CAAC;IACvB;;;OAGG;IACH,cAAc,EAAE,UAAU,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,GACf,cAAc,CAmDhB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,GACf,cAAc,CAiDhB"}
@@ -69,4 +69,73 @@ export function deriveBitcoinAddress(mnemonic, network) {
69
69
  publicKey,
70
70
  };
71
71
  }
72
+ /**
73
+ * Derive Bitcoin L1 key pair from BIP39 mnemonic (includes private key for signing)
74
+ *
75
+ * Follows BIP84 derivation path:
76
+ * - Mainnet: m/84'/0'/0'/0/0 (coin type 0)
77
+ * - Testnet: m/84'/1'/0'/0/0 (coin type 1)
78
+ *
79
+ * Returns native SegWit (P2WPKH) address and key pair:
80
+ * - Mainnet: bc1q... prefix
81
+ * - Testnet: tb1q... prefix
82
+ *
83
+ * SECURITY WARNING: This function returns the private key as Uint8Array.
84
+ * - NEVER serialize the private key to WIF or hex string
85
+ * - NEVER log or store the private key persistently
86
+ * - Only hold in memory during signing operations
87
+ * - Clear from memory when wallet is locked
88
+ *
89
+ * @param mnemonic - BIP39 mnemonic phrase (12 or 24 words)
90
+ * @param network - Network to derive keys for ('mainnet' | 'testnet')
91
+ * @returns Bitcoin address, public key, and private key (Uint8Array)
92
+ *
93
+ * @example
94
+ * ```typescript
95
+ * const { address, publicKey, privateKey } = deriveBitcoinKeyPair(mnemonic, 'mainnet');
96
+ * console.log(address); // bc1q...
97
+ * console.log(publicKey); // 02... or 03... (33 bytes compressed)
98
+ * // privateKey is Uint8Array(32) - use for signing, never serialize
99
+ * ```
100
+ */
101
+ export function deriveBitcoinKeyPair(mnemonic, network) {
102
+ // Convert mnemonic to seed
103
+ const seed = mnemonicToSeedSync(mnemonic);
104
+ // Create master key from seed
105
+ const masterKey = HDKey.fromMasterSeed(seed);
106
+ // BIP84 derivation path
107
+ // m / purpose' / coin_type' / account' / change / address_index
108
+ // Purpose: 84 (native SegWit)
109
+ // Coin type: 0 (Bitcoin mainnet) or 1 (Bitcoin testnet)
110
+ // Account: 0 (first account)
111
+ // Change: 0 (external/receiving addresses)
112
+ // Address index: 0 (first address)
113
+ const coinType = network === "mainnet" ? 0 : 1;
114
+ const derivationPath = `m/84'/${coinType}'/0'/0/0`;
115
+ // Derive key at path
116
+ const derivedKey = masterKey.derive(derivationPath);
117
+ if (!derivedKey.publicKey) {
118
+ throw new Error("Failed to derive public key");
119
+ }
120
+ if (!derivedKey.privateKey) {
121
+ throw new Error("Failed to derive private key");
122
+ }
123
+ // Get compressed public key as hex string and bytes
124
+ const publicKeyBytes = new Uint8Array(derivedKey.publicKey);
125
+ const publicKey = Buffer.from(derivedKey.publicKey).toString("hex");
126
+ // Get private key as Uint8Array (never convert to WIF/hex)
127
+ const privateKey = new Uint8Array(derivedKey.privateKey);
128
+ // Create native SegWit (P2WPKH) address
129
+ const btcNetwork = network === "testnet" ? btc.TEST_NETWORK : btc.NETWORK;
130
+ const p2wpkh = btc.p2wpkh(derivedKey.publicKey, btcNetwork);
131
+ if (!p2wpkh.address) {
132
+ throw new Error("Failed to generate address");
133
+ }
134
+ return {
135
+ address: p2wpkh.address,
136
+ publicKey,
137
+ privateKey,
138
+ publicKeyBytes,
139
+ };
140
+ }
72
141
  //# sourceMappingURL=bitcoin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bitcoin.js","sourceRoot":"","sources":["../../src/utils/bitcoin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,KAAK,GAAG,MAAM,mBAAmB,CAAC;AAiBzC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAAgB,EAChB,OAAgB;IAEhB,2BAA2B;IAC3B,MAAM,IAAI,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAE1C,8BAA8B;IAC9B,MAAM,SAAS,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAE7C,wBAAwB;IACxB,gEAAgE;IAChE,8BAA8B;IAC9B,wDAAwD;IACxD,6BAA6B;IAC7B,2CAA2C;IAC3C,mCAAmC;IACnC,MAAM,QAAQ,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,MAAM,cAAc,GAAG,SAAS,QAAQ,UAAU,CAAC;IAEnD,qBAAqB;IACrB,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAEpD,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IAED,4BAA4B;IAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEpE,wCAAwC;IACxC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAE7D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IAED,qDAAqD;IACrD,IAAI,OAAe,CAAC;IACpB,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,6BAA6B;QAC7B,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;QACzE,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAC3B,CAAC;IAED,OAAO;QACL,OAAO;QACP,SAAS;KACV,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"bitcoin.js","sourceRoot":"","sources":["../../src/utils/bitcoin.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aibtc/mcp-server",
3
- "version": "1.5.0",
3
+ "version": "1.6.0",
4
4
  "description": "Claude Code MCP server for x402 endpoint discovery and execution with Stacks wallet integration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",