@dynamic-labs-wallet/btc 1.0.118 → 1.0.120
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/index.cjs +67 -26
- package/index.esm.js +68 -27
- package/package.json +3 -3
- package/src/client/client.d.ts +29 -1
- package/src/client/client.d.ts.map +1 -1
package/index.cjs
CHANGED
|
@@ -176,6 +176,53 @@ class DynamicBtcWalletClient extends browser.DynamicWalletClient {
|
|
|
176
176
|
};
|
|
177
177
|
}
|
|
178
178
|
/**
|
|
179
|
+
* Raw digest signing.
|
|
180
|
+
*
|
|
181
|
+
* Overridden so BTC can supply what getMPCChainConfig needs. The address
|
|
182
|
+
* type selects the derivation path and the signing algorithm, and taproot
|
|
183
|
+
* additionally needs the BIP-341 tweak: BIP340 signs under the tweaked
|
|
184
|
+
* output key, so a signature produced from the internal key alone would not
|
|
185
|
+
* verify against the wallet's own address. Computing it needs the derived
|
|
186
|
+
* public key, which only this layer has, so callers cannot supply it and the
|
|
187
|
+
* generic implementation cannot derive it.
|
|
188
|
+
*
|
|
189
|
+
* @param params - Raw sign parameters; bitcoinConfig is resolved here
|
|
190
|
+
* @returns The signature, Schnorr for taproot and ECDSA otherwise
|
|
191
|
+
*/ async sign(params) {
|
|
192
|
+
const { accountAddress, bitcoinConfig } = params;
|
|
193
|
+
const walletProperties = this.getWalletFromMap(accountAddress);
|
|
194
|
+
const addressType = btcUtils.resolveBitcoinAddressType({
|
|
195
|
+
accountAddress,
|
|
196
|
+
addressType: bitcoinConfig == null ? void 0 : bitcoinConfig.addressType,
|
|
197
|
+
derivationPath: walletProperties == null ? void 0 : walletProperties.derivationPath
|
|
198
|
+
});
|
|
199
|
+
let tweak = bitcoinConfig == null ? void 0 : bitcoinConfig.tweak;
|
|
200
|
+
if (addressType === browser.BitcoinAddressType.TAPROOT && !tweak) {
|
|
201
|
+
const clientKeyShares = await this.getClientKeySharesFromStorage({
|
|
202
|
+
accountAddress
|
|
203
|
+
});
|
|
204
|
+
var _walletProperties_derivationPath;
|
|
205
|
+
const derivedPublicKey = await this.derivePublicKey({
|
|
206
|
+
chainName: this.chainName,
|
|
207
|
+
keyShare: clientKeyShares[0],
|
|
208
|
+
derivationPath: parseDerivationPath((_walletProperties_derivationPath = walletProperties == null ? void 0 : walletProperties.derivationPath) != null ? _walletProperties_derivationPath : ''),
|
|
209
|
+
bitcoinConfig: _extends({}, bitcoinConfig, {
|
|
210
|
+
addressType
|
|
211
|
+
})
|
|
212
|
+
});
|
|
213
|
+
if (!derivedPublicKey) {
|
|
214
|
+
throw new Error('Failed to derive public key');
|
|
215
|
+
}
|
|
216
|
+
tweak = btcUtils.calculateTaprootTweak(btcUtils.normalizePublicKey(derivedPublicKey, addressType));
|
|
217
|
+
}
|
|
218
|
+
return super.sign(_extends({}, params, {
|
|
219
|
+
bitcoinConfig: _extends({}, bitcoinConfig, {
|
|
220
|
+
addressType,
|
|
221
|
+
tweak
|
|
222
|
+
})
|
|
223
|
+
}));
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
179
226
|
* Signs a message (BIP-322)
|
|
180
227
|
* @param message - The message to sign
|
|
181
228
|
* @param accountAddress - The account address
|
|
@@ -204,10 +251,11 @@ class DynamicBtcWalletClient extends browser.DynamicWalletClient {
|
|
|
204
251
|
if (derivationPath === undefined || derivationPath === null) {
|
|
205
252
|
throw new Error('Derivation path missing in walletMap');
|
|
206
253
|
}
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
addressType
|
|
210
|
-
|
|
254
|
+
const addressType = btcUtils.resolveBitcoinAddressType({
|
|
255
|
+
accountAddress,
|
|
256
|
+
addressType: walletProperties.addressType,
|
|
257
|
+
derivationPath
|
|
258
|
+
});
|
|
211
259
|
const clientKeyShares = await this.getClientKeySharesFromStorage({
|
|
212
260
|
accountAddress
|
|
213
261
|
});
|
|
@@ -319,17 +367,11 @@ class DynamicBtcWalletClient extends browser.DynamicWalletClient {
|
|
|
319
367
|
if (derivationPath === undefined || derivationPath === null) {
|
|
320
368
|
throw new Error('Derivation path missing in walletMap');
|
|
321
369
|
}
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
this.logger.warn('Failed to infer address type from derivation path', e);
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
if (!addressType) {
|
|
331
|
-
throw new Error('Address type not found in walletMap');
|
|
332
|
-
}
|
|
370
|
+
const addressType = btcUtils.resolveBitcoinAddressType({
|
|
371
|
+
accountAddress,
|
|
372
|
+
addressType: walletProperties.addressType,
|
|
373
|
+
derivationPath: walletProperties.derivationPath
|
|
374
|
+
});
|
|
333
375
|
const { derivedPrivateKey } = await this.exportKey({
|
|
334
376
|
accountAddress: accountAddress,
|
|
335
377
|
chainName: this.chainName,
|
|
@@ -529,10 +571,11 @@ class DynamicBtcWalletClient extends browser.DynamicWalletClient {
|
|
|
529
571
|
if (derivationPath === undefined || derivationPath === null) {
|
|
530
572
|
throw new Error('Derivation path missing in walletMap');
|
|
531
573
|
}
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
addressType
|
|
535
|
-
|
|
574
|
+
const addressType = btcUtils.resolveBitcoinAddressType({
|
|
575
|
+
accountAddress: senderAddress,
|
|
576
|
+
addressType: walletProperties.addressType,
|
|
577
|
+
derivationPath
|
|
578
|
+
});
|
|
536
579
|
const bitcoinConfig = {
|
|
537
580
|
addressType,
|
|
538
581
|
network
|
|
@@ -699,13 +742,11 @@ class DynamicBtcWalletClient extends browser.DynamicWalletClient {
|
|
|
699
742
|
if (!walletProperties) {
|
|
700
743
|
throw new Error('Wallet not found in walletMap');
|
|
701
744
|
}
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
addressType
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
throw new Error('Address type not determined');
|
|
708
|
-
}
|
|
745
|
+
const addressType = btcUtils.resolveBitcoinAddressType({
|
|
746
|
+
accountAddress: senderAddress,
|
|
747
|
+
addressType: walletProperties.addressType,
|
|
748
|
+
derivationPath: walletProperties.derivationPath
|
|
749
|
+
});
|
|
709
750
|
if (addressType === browser.BitcoinAddressType.TAPROOT) {
|
|
710
751
|
throw new Error('Taproot transaction creation not yet supported');
|
|
711
752
|
}
|
package/index.esm.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DynamicWalletClient, BitcoinNetwork, BitcoinAddressType, getMPCChainConfig, ERROR_CREATE_WALLET_ACCOUNT, ERROR_PASSWORD_MISMATCH, ERROR_MULTIPLE_WALLETS_PER_CHAIN, ERROR_ACCOUNT_ADDRESS_REQUIRED, ERROR_SIGN_MESSAGE, ERROR_IMPORT_PRIVATE_KEY } from '@dynamic-labs-wallet/browser';
|
|
2
2
|
import * as bitcoin from 'bitcoinjs-lib';
|
|
3
3
|
import ecc from '@bitcoinerlab/secp256k1';
|
|
4
|
-
import { extractPublicKeyHex, normalizePublicKey, publicKeyToBitcoinAddress,
|
|
4
|
+
import { extractPublicKeyHex, normalizePublicKey, publicKeyToBitcoinAddress, resolveBitcoinAddressType, calculateTaprootTweak, calculateBip322Hash, encodeBip322Signature, wifToPrivateKey, getPublicKeyFromPrivateKey, privateKeyToWIF, doesInputBelongToAddress, filterInputsBySigningIndexes, assertSighashAllowed, collectPSBTInputData, getSigHashType, convertSignatureToTaprootBuffer, getSegwitV0ScriptCode, getBitcoinNetwork, convertSignatureToDER, getFeeRates, getUTXOs, selectUTXOs, getDefaultRpcUrl, initEccLib } from '@dynamic-labs-wallet/btc-utils';
|
|
5
5
|
|
|
6
6
|
function _extends() {
|
|
7
7
|
_extends = Object.assign || function assign(target) {
|
|
@@ -155,6 +155,53 @@ class DynamicBtcWalletClient extends DynamicWalletClient {
|
|
|
155
155
|
};
|
|
156
156
|
}
|
|
157
157
|
/**
|
|
158
|
+
* Raw digest signing.
|
|
159
|
+
*
|
|
160
|
+
* Overridden so BTC can supply what getMPCChainConfig needs. The address
|
|
161
|
+
* type selects the derivation path and the signing algorithm, and taproot
|
|
162
|
+
* additionally needs the BIP-341 tweak: BIP340 signs under the tweaked
|
|
163
|
+
* output key, so a signature produced from the internal key alone would not
|
|
164
|
+
* verify against the wallet's own address. Computing it needs the derived
|
|
165
|
+
* public key, which only this layer has, so callers cannot supply it and the
|
|
166
|
+
* generic implementation cannot derive it.
|
|
167
|
+
*
|
|
168
|
+
* @param params - Raw sign parameters; bitcoinConfig is resolved here
|
|
169
|
+
* @returns The signature, Schnorr for taproot and ECDSA otherwise
|
|
170
|
+
*/ async sign(params) {
|
|
171
|
+
const { accountAddress, bitcoinConfig } = params;
|
|
172
|
+
const walletProperties = this.getWalletFromMap(accountAddress);
|
|
173
|
+
const addressType = resolveBitcoinAddressType({
|
|
174
|
+
accountAddress,
|
|
175
|
+
addressType: bitcoinConfig == null ? void 0 : bitcoinConfig.addressType,
|
|
176
|
+
derivationPath: walletProperties == null ? void 0 : walletProperties.derivationPath
|
|
177
|
+
});
|
|
178
|
+
let tweak = bitcoinConfig == null ? void 0 : bitcoinConfig.tweak;
|
|
179
|
+
if (addressType === BitcoinAddressType.TAPROOT && !tweak) {
|
|
180
|
+
const clientKeyShares = await this.getClientKeySharesFromStorage({
|
|
181
|
+
accountAddress
|
|
182
|
+
});
|
|
183
|
+
var _walletProperties_derivationPath;
|
|
184
|
+
const derivedPublicKey = await this.derivePublicKey({
|
|
185
|
+
chainName: this.chainName,
|
|
186
|
+
keyShare: clientKeyShares[0],
|
|
187
|
+
derivationPath: parseDerivationPath((_walletProperties_derivationPath = walletProperties == null ? void 0 : walletProperties.derivationPath) != null ? _walletProperties_derivationPath : ''),
|
|
188
|
+
bitcoinConfig: _extends({}, bitcoinConfig, {
|
|
189
|
+
addressType
|
|
190
|
+
})
|
|
191
|
+
});
|
|
192
|
+
if (!derivedPublicKey) {
|
|
193
|
+
throw new Error('Failed to derive public key');
|
|
194
|
+
}
|
|
195
|
+
tweak = calculateTaprootTweak(normalizePublicKey(derivedPublicKey, addressType));
|
|
196
|
+
}
|
|
197
|
+
return super.sign(_extends({}, params, {
|
|
198
|
+
bitcoinConfig: _extends({}, bitcoinConfig, {
|
|
199
|
+
addressType,
|
|
200
|
+
tweak
|
|
201
|
+
})
|
|
202
|
+
}));
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
158
205
|
* Signs a message (BIP-322)
|
|
159
206
|
* @param message - The message to sign
|
|
160
207
|
* @param accountAddress - The account address
|
|
@@ -183,10 +230,11 @@ class DynamicBtcWalletClient extends DynamicWalletClient {
|
|
|
183
230
|
if (derivationPath === undefined || derivationPath === null) {
|
|
184
231
|
throw new Error('Derivation path missing in walletMap');
|
|
185
232
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
addressType
|
|
189
|
-
|
|
233
|
+
const addressType = resolveBitcoinAddressType({
|
|
234
|
+
accountAddress,
|
|
235
|
+
addressType: walletProperties.addressType,
|
|
236
|
+
derivationPath
|
|
237
|
+
});
|
|
190
238
|
const clientKeyShares = await this.getClientKeySharesFromStorage({
|
|
191
239
|
accountAddress
|
|
192
240
|
});
|
|
@@ -298,17 +346,11 @@ class DynamicBtcWalletClient extends DynamicWalletClient {
|
|
|
298
346
|
if (derivationPath === undefined || derivationPath === null) {
|
|
299
347
|
throw new Error('Derivation path missing in walletMap');
|
|
300
348
|
}
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
this.logger.warn('Failed to infer address type from derivation path', e);
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
if (!addressType) {
|
|
310
|
-
throw new Error('Address type not found in walletMap');
|
|
311
|
-
}
|
|
349
|
+
const addressType = resolveBitcoinAddressType({
|
|
350
|
+
accountAddress,
|
|
351
|
+
addressType: walletProperties.addressType,
|
|
352
|
+
derivationPath: walletProperties.derivationPath
|
|
353
|
+
});
|
|
312
354
|
const { derivedPrivateKey } = await this.exportKey({
|
|
313
355
|
accountAddress: accountAddress,
|
|
314
356
|
chainName: this.chainName,
|
|
@@ -508,10 +550,11 @@ class DynamicBtcWalletClient extends DynamicWalletClient {
|
|
|
508
550
|
if (derivationPath === undefined || derivationPath === null) {
|
|
509
551
|
throw new Error('Derivation path missing in walletMap');
|
|
510
552
|
}
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
addressType
|
|
514
|
-
|
|
553
|
+
const addressType = resolveBitcoinAddressType({
|
|
554
|
+
accountAddress: senderAddress,
|
|
555
|
+
addressType: walletProperties.addressType,
|
|
556
|
+
derivationPath
|
|
557
|
+
});
|
|
515
558
|
const bitcoinConfig = {
|
|
516
559
|
addressType,
|
|
517
560
|
network
|
|
@@ -678,13 +721,11 @@ class DynamicBtcWalletClient extends DynamicWalletClient {
|
|
|
678
721
|
if (!walletProperties) {
|
|
679
722
|
throw new Error('Wallet not found in walletMap');
|
|
680
723
|
}
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
addressType
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
throw new Error('Address type not determined');
|
|
687
|
-
}
|
|
724
|
+
const addressType = resolveBitcoinAddressType({
|
|
725
|
+
accountAddress: senderAddress,
|
|
726
|
+
addressType: walletProperties.addressType,
|
|
727
|
+
derivationPath: walletProperties.derivationPath
|
|
728
|
+
});
|
|
688
729
|
if (addressType === BitcoinAddressType.TAPROOT) {
|
|
689
730
|
throw new Error('Taproot transaction creation not yet supported');
|
|
690
731
|
}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dynamic-labs-wallet/btc",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.120",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
7
7
|
"dependencies": {
|
|
8
8
|
"@dynamic-labs/sdk-api-core": "^0.16.0",
|
|
9
|
-
"@dynamic-labs-wallet/browser": "1.0.
|
|
10
|
-
"@dynamic-labs-wallet/btc-utils": "1.0.
|
|
9
|
+
"@dynamic-labs-wallet/browser": "1.0.120",
|
|
10
|
+
"@dynamic-labs-wallet/btc-utils": "1.0.120",
|
|
11
11
|
"@bitcoinerlab/secp256k1": "^1.2.0",
|
|
12
12
|
"bitcoinjs-lib": "^7.0.0"
|
|
13
13
|
},
|
package/src/client/client.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BitcoinAddressType, BitcoinNetwork, DynamicWalletClient, type BIP340KeygenResult, type BitcoinConfig, type DynamicWalletClientInternalOptions, type DynamicWalletClientProps, type EcdsaPublicKey, type ThresholdSignatureScheme, type RequestWithElevatedAccessToken } from '@dynamic-labs-wallet/browser';
|
|
1
|
+
import { BitcoinAddressType, BitcoinNetwork, DynamicWalletClient, type BIP340KeygenResult, type BitcoinConfig, type DynamicWalletClientInternalOptions, type DynamicWalletClientProps, type EcdsaPublicKey, type EcdsaSignature, type ThresholdSignatureScheme, type RequestWithElevatedAccessToken, type TraceContext } from '@dynamic-labs-wallet/browser';
|
|
2
2
|
import type { SignMessageContext } from '@dynamic-labs/sdk-api-core';
|
|
3
3
|
export declare class DynamicBtcWalletClient extends DynamicWalletClient {
|
|
4
4
|
readonly chainName = "BTC";
|
|
@@ -45,6 +45,34 @@ export declare class DynamicBtcWalletClient extends DynamicWalletClient {
|
|
|
45
45
|
}): {
|
|
46
46
|
accountAddress: string;
|
|
47
47
|
};
|
|
48
|
+
/**
|
|
49
|
+
* Raw digest signing.
|
|
50
|
+
*
|
|
51
|
+
* Overridden so BTC can supply what getMPCChainConfig needs. The address
|
|
52
|
+
* type selects the derivation path and the signing algorithm, and taproot
|
|
53
|
+
* additionally needs the BIP-341 tweak: BIP340 signs under the tweaked
|
|
54
|
+
* output key, so a signature produced from the internal key alone would not
|
|
55
|
+
* verify against the wallet's own address. Computing it needs the derived
|
|
56
|
+
* public key, which only this layer has, so callers cannot supply it and the
|
|
57
|
+
* generic implementation cannot derive it.
|
|
58
|
+
*
|
|
59
|
+
* @param params - Raw sign parameters; bitcoinConfig is resolved here
|
|
60
|
+
* @returns The signature, Schnorr for taproot and ECDSA otherwise
|
|
61
|
+
*/
|
|
62
|
+
sign(params: {
|
|
63
|
+
accountAddress: string;
|
|
64
|
+
message: string | Uint8Array;
|
|
65
|
+
chainName: string;
|
|
66
|
+
password?: string;
|
|
67
|
+
isFormatted?: boolean;
|
|
68
|
+
signedSessionId: string;
|
|
69
|
+
mfaToken?: string;
|
|
70
|
+
elevatedAccessToken?: string;
|
|
71
|
+
context?: SignMessageContext;
|
|
72
|
+
onError?: (error: Error) => void;
|
|
73
|
+
traceContext?: TraceContext;
|
|
74
|
+
bitcoinConfig?: BitcoinConfig;
|
|
75
|
+
}): Promise<EcdsaSignature | Uint8Array>;
|
|
48
76
|
/**
|
|
49
77
|
* Signs a message (BIP-322)
|
|
50
78
|
* @param message - The message to sign
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EAQnB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,kCAAkC,EACvC,KAAK,wBAAwB,EAC7B,KAAK,cAAc,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"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"}
|