@dynamic-labs-wallet/browser 0.0.18 → 0.0.20
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.js +83 -39
- package/index.esm.js +84 -40
- package/package.json +2 -2
- package/src/client.d.ts +30 -7
- package/src/client.d.ts.map +1 -1
package/index.cjs.js
CHANGED
|
@@ -295,7 +295,7 @@ class DynamicWalletClient {
|
|
|
295
295
|
}
|
|
296
296
|
}
|
|
297
297
|
async serverInitializeKeyGen({ chainName, clientKeygenIds, thresholdSignatureScheme }) {
|
|
298
|
-
//
|
|
298
|
+
// Initialize keygen, create room, and create the wallet account on the server
|
|
299
299
|
const data = await this.apiClient.createWalletAccount({
|
|
300
300
|
chainName,
|
|
301
301
|
clientKeygenIds,
|
|
@@ -464,13 +464,6 @@ class DynamicWalletClient {
|
|
|
464
464
|
});
|
|
465
465
|
return refreshResults;
|
|
466
466
|
}
|
|
467
|
-
async serverReshareRemainingParty({ walletId, clientKeygenIds }) {
|
|
468
|
-
const data = await this.apiClient.reshareRemainingParty({
|
|
469
|
-
walletId,
|
|
470
|
-
clientKeygenIds
|
|
471
|
-
});
|
|
472
|
-
return data;
|
|
473
|
-
}
|
|
474
467
|
async getExportId({ chainName, clientKeyShare }) {
|
|
475
468
|
const mpcSigner = getMPCSigner({
|
|
476
469
|
chainName,
|
|
@@ -479,48 +472,94 @@ class DynamicWalletClient {
|
|
|
479
472
|
const exportId = await mpcSigner.exportID(clientKeyShare);
|
|
480
473
|
return exportId;
|
|
481
474
|
}
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
475
|
+
/**
|
|
476
|
+
* Helper function to create client shares required to complete a reshare ceremony.
|
|
477
|
+
* @param {string} chainName - The chain to create shares for
|
|
478
|
+
* @param {WalletProperties} wallet - The wallet to reshare
|
|
479
|
+
* @param {ThresholdSignatureScheme} oldThresholdSignatureScheme - The current threshold signature scheme
|
|
480
|
+
* @param {ThresholdSignatureScheme} newThresholdSignatureScheme - The target threshold signature scheme
|
|
481
|
+
* @returns {Promise<{
|
|
482
|
+
* newClientInitKeygenResults: ClientInitKeygenResult[],
|
|
483
|
+
* newClientKeygenIds: string[],
|
|
484
|
+
* existingClientKeygenIds: string[],
|
|
485
|
+
* existingClientKeyShares: ClientKeyShare[]
|
|
486
|
+
* }>} Object containing new and existing client keygen results, IDs and shares
|
|
487
|
+
* @todo Support higher to lower reshare strategies
|
|
488
|
+
*/ async reshareStrategy({ chainName, wallet, oldThresholdSignatureScheme, newThresholdSignatureScheme }) {
|
|
487
489
|
const mpcSigner = getMPCSigner({
|
|
488
490
|
chainName,
|
|
489
491
|
baseRelayUrl: this.baseMPCRelayApiUrl
|
|
490
492
|
});
|
|
491
|
-
//
|
|
492
|
-
const
|
|
493
|
-
|
|
494
|
-
|
|
493
|
+
// Determine share counts based on threshold signature schemes
|
|
494
|
+
const { newClientShareCount, existingClientShareCount } = core.getReshareConfig({
|
|
495
|
+
oldThresholdSignatureScheme,
|
|
496
|
+
newThresholdSignatureScheme
|
|
497
|
+
});
|
|
498
|
+
// Create new client shares
|
|
499
|
+
const newClientInitKeygenResults = await Promise.all(Array.from({
|
|
500
|
+
length: newClientShareCount
|
|
501
|
+
}, ()=>mpcSigner.initKeygen()));
|
|
502
|
+
const newClientKeygenIds = newClientInitKeygenResults.map((result)=>result.keygenId);
|
|
503
|
+
// Get existing client shares
|
|
504
|
+
const existingClientKeyShares = wallet.clientKeyShares.slice(0, existingClientShareCount);
|
|
505
|
+
const existingClientKeygenIds = await Promise.all(existingClientKeyShares.map(async (keyShare)=>await this.getExportId({
|
|
506
|
+
chainName,
|
|
507
|
+
clientKeyShare: keyShare
|
|
508
|
+
})));
|
|
509
|
+
return {
|
|
510
|
+
newClientInitKeygenResults,
|
|
511
|
+
newClientKeygenIds,
|
|
512
|
+
existingClientKeygenIds,
|
|
513
|
+
existingClientKeyShares
|
|
514
|
+
};
|
|
515
|
+
}
|
|
516
|
+
async reshare({ chainName, accountAddress, oldThresholdSignatureScheme, newThresholdSignatureScheme }) {
|
|
517
|
+
const wallet = await this.getWallet({
|
|
518
|
+
accountAddress
|
|
519
|
+
});
|
|
520
|
+
console.log(`Resharing from ${oldThresholdSignatureScheme} to ${newThresholdSignatureScheme}`);
|
|
521
|
+
const { newClientInitKeygenResults, newClientKeygenIds, existingClientKeygenIds, existingClientKeyShares } = await this.reshareStrategy({
|
|
495
522
|
chainName,
|
|
496
|
-
|
|
523
|
+
wallet,
|
|
524
|
+
oldThresholdSignatureScheme,
|
|
525
|
+
newThresholdSignatureScheme
|
|
497
526
|
});
|
|
498
|
-
|
|
499
|
-
|
|
527
|
+
const clientKeygenIds = [
|
|
528
|
+
...newClientKeygenIds,
|
|
529
|
+
...existingClientKeygenIds
|
|
530
|
+
];
|
|
531
|
+
// Server to create the room and complete the server reshare logics
|
|
532
|
+
const data = await this.apiClient.reshare({
|
|
500
533
|
walletId: wallet.walletId,
|
|
501
|
-
clientKeygenIds:
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
]
|
|
534
|
+
clientKeygenIds: clientKeygenIds,
|
|
535
|
+
oldThresholdSignatureScheme,
|
|
536
|
+
newThresholdSignatureScheme
|
|
505
537
|
});
|
|
506
|
-
const roomId = data
|
|
538
|
+
const { roomId, serverKeygenIds, newServerKeygenIds } = data;
|
|
507
539
|
// Get the MPC config for the threshold signature scheme
|
|
508
|
-
const
|
|
509
|
-
const
|
|
510
|
-
|
|
511
|
-
|
|
540
|
+
const oldMpcConfig = core.MPC_CONFIG[oldThresholdSignatureScheme];
|
|
541
|
+
const newMpcConfig = core.MPC_CONFIG[newThresholdSignatureScheme];
|
|
542
|
+
const allPartyKeygenIds = [
|
|
543
|
+
...clientKeygenIds,
|
|
544
|
+
...serverKeygenIds,
|
|
545
|
+
...newServerKeygenIds
|
|
512
546
|
];
|
|
513
|
-
const
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
mpcSigner.reshareNewParty(roomId, mpcConfig.threshold, mpcConfig.threshold, newPartyInitKeygen, newClientPrimaryKeygenIds),
|
|
521
|
-
mpcSigner.reshareRemainingParty(roomId, mpcConfig.threshold, wallet.clientKeyShares[1], clientSecondaryKeygenIds)
|
|
547
|
+
const mpcSigner = getMPCSigner({
|
|
548
|
+
chainName,
|
|
549
|
+
baseRelayUrl: this.baseMPCRelayApiUrl
|
|
550
|
+
});
|
|
551
|
+
const reshareResults = await Promise.all([
|
|
552
|
+
...newClientInitKeygenResults.map((keygenResult)=>mpcSigner.reshareNewParty(roomId, oldMpcConfig.threshold, newMpcConfig.threshold, keygenResult, allPartyKeygenIds)),
|
|
553
|
+
...existingClientKeyShares.map((keyShare)=>mpcSigner.reshareRemainingParty(roomId, newMpcConfig.threshold, keyShare, allPartyKeygenIds))
|
|
522
554
|
]);
|
|
523
|
-
|
|
555
|
+
this.walletMap[accountAddress] = _extends({}, this.walletMap[accountAddress], {
|
|
556
|
+
clientKeyShares: reshareResults
|
|
557
|
+
});
|
|
558
|
+
await this.storeEncryptedBackupByWallet({
|
|
559
|
+
accountAddress,
|
|
560
|
+
password: undefined
|
|
561
|
+
});
|
|
562
|
+
return reshareResults;
|
|
524
563
|
}
|
|
525
564
|
async exportKey({ accountAddress, chainName }) {
|
|
526
565
|
const wallet = await this.getWallet({
|
|
@@ -777,6 +816,11 @@ class DynamicWalletClient {
|
|
|
777
816
|
accountAddress,
|
|
778
817
|
password: this.environmentId
|
|
779
818
|
});
|
|
819
|
+
// update threshold signature scheme
|
|
820
|
+
const thresholdSignatureScheme = wallet.walletProperties.thresholdSignatureScheme;
|
|
821
|
+
this.walletMap[accountAddress] = _extends({}, this.walletMap[accountAddress], {
|
|
822
|
+
thresholdSignatureScheme
|
|
823
|
+
});
|
|
780
824
|
//todo: check to see if their are other backups ie google drive, etc
|
|
781
825
|
this.logger.debug('recovery decryptedKeyShares', decryptedKeyShares);
|
|
782
826
|
}
|
package/index.esm.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SigningAlgorithm, MPC_RELAY_PROD_API_URL, getMPCChainConfig, getClientThreshold, MPC_CONFIG, getTSSConfig, DynamicApiClient } from '@dynamic-labs-wallet/core';
|
|
1
|
+
import { SigningAlgorithm, MPC_RELAY_PROD_API_URL, getMPCChainConfig, getClientThreshold, MPC_CONFIG, getReshareConfig, getTSSConfig, DynamicApiClient } from '@dynamic-labs-wallet/core';
|
|
2
2
|
export * from '@dynamic-labs-wallet/core';
|
|
3
3
|
import { BIP340, Ed25519, Ecdsa, MessageHash, EcdsaKeygenResult, Ed25519KeygenResult, BIP340KeygenResult } from '@internal/web';
|
|
4
4
|
export { BIP340, BIP340InitKeygenResult, BIP340KeygenResult, Ecdsa, EcdsaInitKeygenResult, EcdsaKeygenResult, EcdsaPublicKey, EcdsaSignature, Ed25519, Ed25519InitKeygenResult, Ed25519KeygenResult, MessageHash } from '@internal/web';
|
|
@@ -295,7 +295,7 @@ class DynamicWalletClient {
|
|
|
295
295
|
}
|
|
296
296
|
}
|
|
297
297
|
async serverInitializeKeyGen({ chainName, clientKeygenIds, thresholdSignatureScheme }) {
|
|
298
|
-
//
|
|
298
|
+
// Initialize keygen, create room, and create the wallet account on the server
|
|
299
299
|
const data = await this.apiClient.createWalletAccount({
|
|
300
300
|
chainName,
|
|
301
301
|
clientKeygenIds,
|
|
@@ -464,13 +464,6 @@ class DynamicWalletClient {
|
|
|
464
464
|
});
|
|
465
465
|
return refreshResults;
|
|
466
466
|
}
|
|
467
|
-
async serverReshareRemainingParty({ walletId, clientKeygenIds }) {
|
|
468
|
-
const data = await this.apiClient.reshareRemainingParty({
|
|
469
|
-
walletId,
|
|
470
|
-
clientKeygenIds
|
|
471
|
-
});
|
|
472
|
-
return data;
|
|
473
|
-
}
|
|
474
467
|
async getExportId({ chainName, clientKeyShare }) {
|
|
475
468
|
const mpcSigner = getMPCSigner({
|
|
476
469
|
chainName,
|
|
@@ -479,48 +472,94 @@ class DynamicWalletClient {
|
|
|
479
472
|
const exportId = await mpcSigner.exportID(clientKeyShare);
|
|
480
473
|
return exportId;
|
|
481
474
|
}
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
475
|
+
/**
|
|
476
|
+
* Helper function to create client shares required to complete a reshare ceremony.
|
|
477
|
+
* @param {string} chainName - The chain to create shares for
|
|
478
|
+
* @param {WalletProperties} wallet - The wallet to reshare
|
|
479
|
+
* @param {ThresholdSignatureScheme} oldThresholdSignatureScheme - The current threshold signature scheme
|
|
480
|
+
* @param {ThresholdSignatureScheme} newThresholdSignatureScheme - The target threshold signature scheme
|
|
481
|
+
* @returns {Promise<{
|
|
482
|
+
* newClientInitKeygenResults: ClientInitKeygenResult[],
|
|
483
|
+
* newClientKeygenIds: string[],
|
|
484
|
+
* existingClientKeygenIds: string[],
|
|
485
|
+
* existingClientKeyShares: ClientKeyShare[]
|
|
486
|
+
* }>} Object containing new and existing client keygen results, IDs and shares
|
|
487
|
+
* @todo Support higher to lower reshare strategies
|
|
488
|
+
*/ async reshareStrategy({ chainName, wallet, oldThresholdSignatureScheme, newThresholdSignatureScheme }) {
|
|
487
489
|
const mpcSigner = getMPCSigner({
|
|
488
490
|
chainName,
|
|
489
491
|
baseRelayUrl: this.baseMPCRelayApiUrl
|
|
490
492
|
});
|
|
491
|
-
//
|
|
492
|
-
const
|
|
493
|
-
|
|
494
|
-
|
|
493
|
+
// Determine share counts based on threshold signature schemes
|
|
494
|
+
const { newClientShareCount, existingClientShareCount } = getReshareConfig({
|
|
495
|
+
oldThresholdSignatureScheme,
|
|
496
|
+
newThresholdSignatureScheme
|
|
497
|
+
});
|
|
498
|
+
// Create new client shares
|
|
499
|
+
const newClientInitKeygenResults = await Promise.all(Array.from({
|
|
500
|
+
length: newClientShareCount
|
|
501
|
+
}, ()=>mpcSigner.initKeygen()));
|
|
502
|
+
const newClientKeygenIds = newClientInitKeygenResults.map((result)=>result.keygenId);
|
|
503
|
+
// Get existing client shares
|
|
504
|
+
const existingClientKeyShares = wallet.clientKeyShares.slice(0, existingClientShareCount);
|
|
505
|
+
const existingClientKeygenIds = await Promise.all(existingClientKeyShares.map(async (keyShare)=>await this.getExportId({
|
|
506
|
+
chainName,
|
|
507
|
+
clientKeyShare: keyShare
|
|
508
|
+
})));
|
|
509
|
+
return {
|
|
510
|
+
newClientInitKeygenResults,
|
|
511
|
+
newClientKeygenIds,
|
|
512
|
+
existingClientKeygenIds,
|
|
513
|
+
existingClientKeyShares
|
|
514
|
+
};
|
|
515
|
+
}
|
|
516
|
+
async reshare({ chainName, accountAddress, oldThresholdSignatureScheme, newThresholdSignatureScheme }) {
|
|
517
|
+
const wallet = await this.getWallet({
|
|
518
|
+
accountAddress
|
|
519
|
+
});
|
|
520
|
+
console.log(`Resharing from ${oldThresholdSignatureScheme} to ${newThresholdSignatureScheme}`);
|
|
521
|
+
const { newClientInitKeygenResults, newClientKeygenIds, existingClientKeygenIds, existingClientKeyShares } = await this.reshareStrategy({
|
|
495
522
|
chainName,
|
|
496
|
-
|
|
523
|
+
wallet,
|
|
524
|
+
oldThresholdSignatureScheme,
|
|
525
|
+
newThresholdSignatureScheme
|
|
497
526
|
});
|
|
498
|
-
|
|
499
|
-
|
|
527
|
+
const clientKeygenIds = [
|
|
528
|
+
...newClientKeygenIds,
|
|
529
|
+
...existingClientKeygenIds
|
|
530
|
+
];
|
|
531
|
+
// Server to create the room and complete the server reshare logics
|
|
532
|
+
const data = await this.apiClient.reshare({
|
|
500
533
|
walletId: wallet.walletId,
|
|
501
|
-
clientKeygenIds:
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
]
|
|
534
|
+
clientKeygenIds: clientKeygenIds,
|
|
535
|
+
oldThresholdSignatureScheme,
|
|
536
|
+
newThresholdSignatureScheme
|
|
505
537
|
});
|
|
506
|
-
const roomId = data
|
|
538
|
+
const { roomId, serverKeygenIds, newServerKeygenIds } = data;
|
|
507
539
|
// Get the MPC config for the threshold signature scheme
|
|
508
|
-
const
|
|
509
|
-
const
|
|
510
|
-
|
|
511
|
-
|
|
540
|
+
const oldMpcConfig = MPC_CONFIG[oldThresholdSignatureScheme];
|
|
541
|
+
const newMpcConfig = MPC_CONFIG[newThresholdSignatureScheme];
|
|
542
|
+
const allPartyKeygenIds = [
|
|
543
|
+
...clientKeygenIds,
|
|
544
|
+
...serverKeygenIds,
|
|
545
|
+
...newServerKeygenIds
|
|
512
546
|
];
|
|
513
|
-
const
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
mpcSigner.reshareNewParty(roomId, mpcConfig.threshold, mpcConfig.threshold, newPartyInitKeygen, newClientPrimaryKeygenIds),
|
|
521
|
-
mpcSigner.reshareRemainingParty(roomId, mpcConfig.threshold, wallet.clientKeyShares[1], clientSecondaryKeygenIds)
|
|
547
|
+
const mpcSigner = getMPCSigner({
|
|
548
|
+
chainName,
|
|
549
|
+
baseRelayUrl: this.baseMPCRelayApiUrl
|
|
550
|
+
});
|
|
551
|
+
const reshareResults = await Promise.all([
|
|
552
|
+
...newClientInitKeygenResults.map((keygenResult)=>mpcSigner.reshareNewParty(roomId, oldMpcConfig.threshold, newMpcConfig.threshold, keygenResult, allPartyKeygenIds)),
|
|
553
|
+
...existingClientKeyShares.map((keyShare)=>mpcSigner.reshareRemainingParty(roomId, newMpcConfig.threshold, keyShare, allPartyKeygenIds))
|
|
522
554
|
]);
|
|
523
|
-
|
|
555
|
+
this.walletMap[accountAddress] = _extends({}, this.walletMap[accountAddress], {
|
|
556
|
+
clientKeyShares: reshareResults
|
|
557
|
+
});
|
|
558
|
+
await this.storeEncryptedBackupByWallet({
|
|
559
|
+
accountAddress,
|
|
560
|
+
password: undefined
|
|
561
|
+
});
|
|
562
|
+
return reshareResults;
|
|
524
563
|
}
|
|
525
564
|
async exportKey({ accountAddress, chainName }) {
|
|
526
565
|
const wallet = await this.getWallet({
|
|
@@ -777,6 +816,11 @@ class DynamicWalletClient {
|
|
|
777
816
|
accountAddress,
|
|
778
817
|
password: this.environmentId
|
|
779
818
|
});
|
|
819
|
+
// update threshold signature scheme
|
|
820
|
+
const thresholdSignatureScheme = wallet.walletProperties.thresholdSignatureScheme;
|
|
821
|
+
this.walletMap[accountAddress] = _extends({}, this.walletMap[accountAddress], {
|
|
822
|
+
thresholdSignatureScheme
|
|
823
|
+
});
|
|
780
824
|
//todo: check to see if their are other backups ie google drive, etc
|
|
781
825
|
this.logger.debug('recovery decryptedKeyShares', decryptedKeyShares);
|
|
782
826
|
}
|
package/package.json
CHANGED
package/src/client.d.ts
CHANGED
|
@@ -71,18 +71,41 @@ export declare class DynamicWalletClient {
|
|
|
71
71
|
accountAddress: string;
|
|
72
72
|
chainName: string;
|
|
73
73
|
}): Promise<(EcdsaKeygenResult | BIP340KeygenResult)[]>;
|
|
74
|
-
serverReshareRemainingParty({ walletId, clientKeygenIds, }: {
|
|
75
|
-
walletId: string;
|
|
76
|
-
clientKeygenIds: string[];
|
|
77
|
-
}): Promise<any>;
|
|
78
74
|
getExportId({ chainName, clientKeyShare, }: {
|
|
79
75
|
chainName: string;
|
|
80
76
|
clientKeyShare: EcdsaKeygenResult | Ed25519KeygenResult | BIP340KeygenResult;
|
|
81
77
|
}): Promise<string>;
|
|
82
|
-
|
|
78
|
+
/**
|
|
79
|
+
* Helper function to create client shares required to complete a reshare ceremony.
|
|
80
|
+
* @param {string} chainName - The chain to create shares for
|
|
81
|
+
* @param {WalletProperties} wallet - The wallet to reshare
|
|
82
|
+
* @param {ThresholdSignatureScheme} oldThresholdSignatureScheme - The current threshold signature scheme
|
|
83
|
+
* @param {ThresholdSignatureScheme} newThresholdSignatureScheme - The target threshold signature scheme
|
|
84
|
+
* @returns {Promise<{
|
|
85
|
+
* newClientInitKeygenResults: ClientInitKeygenResult[],
|
|
86
|
+
* newClientKeygenIds: string[],
|
|
87
|
+
* existingClientKeygenIds: string[],
|
|
88
|
+
* existingClientKeyShares: ClientKeyShare[]
|
|
89
|
+
* }>} Object containing new and existing client keygen results, IDs and shares
|
|
90
|
+
* @todo Support higher to lower reshare strategies
|
|
91
|
+
*/
|
|
92
|
+
reshareStrategy({ chainName, wallet, oldThresholdSignatureScheme, newThresholdSignatureScheme, }: {
|
|
93
|
+
chainName: string;
|
|
94
|
+
wallet: WalletProperties;
|
|
95
|
+
oldThresholdSignatureScheme: ThresholdSignatureScheme;
|
|
96
|
+
newThresholdSignatureScheme: ThresholdSignatureScheme;
|
|
97
|
+
}): Promise<{
|
|
98
|
+
newClientInitKeygenResults: ClientInitKeygenResult[];
|
|
99
|
+
newClientKeygenIds: string[];
|
|
100
|
+
existingClientKeygenIds: string[];
|
|
101
|
+
existingClientKeyShares: ClientKeyShare[];
|
|
102
|
+
}>;
|
|
103
|
+
reshare({ chainName, accountAddress, oldThresholdSignatureScheme, newThresholdSignatureScheme, }: {
|
|
104
|
+
chainName: string;
|
|
83
105
|
accountAddress: string;
|
|
84
|
-
|
|
85
|
-
|
|
106
|
+
oldThresholdSignatureScheme: ThresholdSignatureScheme;
|
|
107
|
+
newThresholdSignatureScheme: ThresholdSignatureScheme;
|
|
108
|
+
}): Promise<(EcdsaKeygenResult | BIP340KeygenResult)[]>;
|
|
86
109
|
exportKey({ accountAddress, chainName, }: {
|
|
87
110
|
accountAddress: string;
|
|
88
111
|
chainName: string;
|
package/src/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../packages/src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,wBAAwB,EACxB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../packages/src/client.ts"],"names":[],"mappings":"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"}
|