@dynamic-labs-wallet/node-evm 0.0.0-beta.3 → 0.0.0-beta.304.1

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 CHANGED
@@ -55,6 +55,10 @@ class DynamicEvmWalletClient extends node.DynamicWalletClient {
55
55
  }
56
56
  async createWalletAccount({ thresholdSignatureScheme, password = undefined, onError }) {
57
57
  try {
58
+ let ceremonyCeremonyCompleteResolver;
59
+ const ceremonyCompletePromise = new Promise((resolve)=>{
60
+ ceremonyCeremonyCompleteResolver = resolve;
61
+ });
58
62
  // Generate key shares for given threshold signature scheme (TSS)
59
63
  const { rawPublicKey, externalServerKeyShares } = await this.keyGen({
60
64
  chainName: this.chainName,
@@ -70,8 +74,18 @@ class DynamicEvmWalletClient extends node.DynamicWalletClient {
70
74
  thresholdSignatureScheme,
71
75
  externalServerKeySharesBackupInfo: node.getExternalServerKeyShareBackupInfo()
72
76
  });
77
+ this.logger.debug('walletMap updated for wallet', {
78
+ context: {
79
+ accountAddress,
80
+ walletId,
81
+ walletMap: this.walletMap
82
+ }
83
+ });
84
+ ceremonyCeremonyCompleteResolver(undefined);
73
85
  }
74
86
  });
87
+ // Wait for the ceremony to complete before proceeding
88
+ await ceremonyCompletePromise;
75
89
  if (!rawPublicKey || !externalServerKeyShares) {
76
90
  throw new Error(ERROR_KEYGEN_FAILED);
77
91
  }
@@ -79,12 +93,13 @@ class DynamicEvmWalletClient extends node.DynamicWalletClient {
79
93
  const { accountAddress, publicKeyHex } = deriveAccountAddress({
80
94
  rawPublicKey: rawPublicKey
81
95
  });
82
- void this.storeEncryptedBackupByWalletWithRetry({
96
+ await this.storeEncryptedBackupByWalletWithRetry({
83
97
  accountAddress,
84
98
  externalServerKeyShares,
85
99
  password
86
100
  });
87
101
  return {
102
+ walletId: this.walletMap[accountAddress].walletId,
88
103
  accountAddress,
89
104
  rawPublicKey,
90
105
  publicKeyHex,
@@ -95,7 +110,7 @@ class DynamicEvmWalletClient extends node.DynamicWalletClient {
95
110
  throw new Error(ERROR_CREATE_WALLET_ACCOUNT);
96
111
  }
97
112
  }
98
- async signMessage({ message, accountAddress, password = undefined }) {
113
+ async signMessage({ message, accountAddress, password = undefined, externalServerKeyShares }) {
99
114
  await this.verifyPassword({
100
115
  accountAddress,
101
116
  password,
@@ -116,7 +131,8 @@ class DynamicEvmWalletClient extends node.DynamicWalletClient {
116
131
  message: formattedMessage,
117
132
  accountAddress: accountAddress,
118
133
  chainName: this.chainName,
119
- password
134
+ password,
135
+ externalServerKeyShares
120
136
  });
121
137
  // Serialize the signature
122
138
  const serializedSignature = serializeECDSASignature(signatureEcdsa);
@@ -143,7 +159,7 @@ class DynamicEvmWalletClient extends node.DynamicWalletClient {
143
159
  throw new Error(ERROR_VERIFY_MESSAGE_SIGNATURE);
144
160
  }
145
161
  }
146
- async signTransaction({ senderAddress, transaction, password = undefined }) {
162
+ async signTransaction({ senderAddress, transaction, password = undefined, signedSessionId, externalServerKeyShares }) {
147
163
  await this.verifyPassword({
148
164
  accountAddress: senderAddress,
149
165
  password,
@@ -159,7 +175,8 @@ class DynamicEvmWalletClient extends node.DynamicWalletClient {
159
175
  message: serializedTxBytes,
160
176
  accountAddress: senderAddress,
161
177
  chainName: this.chainName,
162
- password
178
+ password,
179
+ externalServerKeyShares
163
180
  });
164
181
  if (!('r' in signatureEcdsa && 's' in signatureEcdsa && 'v' in signatureEcdsa)) {
165
182
  throw new Error('Invalid signature format returned from MPC signing');
@@ -180,7 +197,7 @@ class DynamicEvmWalletClient extends node.DynamicWalletClient {
180
197
  throw error;
181
198
  }
182
199
  }
183
- async exportPrivateKey({ accountAddress, password = undefined }) {
200
+ async exportPrivateKey({ accountAddress, password = undefined, externalServerKeyShares }) {
184
201
  await this.verifyPassword({
185
202
  accountAddress,
186
203
  password,
@@ -189,7 +206,8 @@ class DynamicEvmWalletClient extends node.DynamicWalletClient {
189
206
  const { derivedPrivateKey } = await this.exportKey({
190
207
  accountAddress,
191
208
  chainName: this.chainName,
192
- password
209
+ password,
210
+ externalServerKeyShares
193
211
  });
194
212
  return {
195
213
  derivedPrivateKey
@@ -205,7 +223,11 @@ class DynamicEvmWalletClient extends node.DynamicWalletClient {
205
223
  derivedPrivateKey
206
224
  };
207
225
  }
208
- async importPrivateKey({ privateKey, chainName, thresholdSignatureScheme, password = undefined, onError }) {
226
+ async importPrivateKey({ privateKey, chainName, thresholdSignatureScheme, password = undefined, onError, signedSessionId }) {
227
+ let ceremonyCeremonyCompleteResolver;
228
+ const ceremonyCompletePromise = new Promise((resolve)=>{
229
+ ceremonyCeremonyCompleteResolver = resolve;
230
+ });
209
231
  // TODO: validate private key for EVM
210
232
  const { rawPublicKey, externalServerKeyShares } = await this.importRawPrivateKey({
211
233
  chainName,
@@ -222,15 +244,18 @@ class DynamicEvmWalletClient extends node.DynamicWalletClient {
222
244
  thresholdSignatureScheme,
223
245
  externalServerKeySharesBackupInfo: node.getExternalServerKeyShareBackupInfo()
224
246
  });
247
+ ceremonyCeremonyCompleteResolver(undefined);
225
248
  }
226
249
  });
250
+ // Wait for the ceremony to complete before proceeding
251
+ await ceremonyCompletePromise;
227
252
  if (!rawPublicKey || !externalServerKeyShares) {
228
253
  throw new Error('Error creating wallet account');
229
254
  }
230
255
  const { accountAddress, publicKeyHex } = deriveAccountAddress({
231
256
  rawPublicKey: rawPublicKey
232
257
  });
233
- void this.storeEncryptedBackupByWalletWithRetry({
258
+ await this.storeEncryptedBackupByWalletWithRetry({
234
259
  accountAddress,
235
260
  externalServerKeyShares,
236
261
  password
package/index.esm.js CHANGED
@@ -53,6 +53,10 @@ class DynamicEvmWalletClient extends DynamicWalletClient {
53
53
  }
54
54
  async createWalletAccount({ thresholdSignatureScheme, password = undefined, onError }) {
55
55
  try {
56
+ let ceremonyCeremonyCompleteResolver;
57
+ const ceremonyCompletePromise = new Promise((resolve)=>{
58
+ ceremonyCeremonyCompleteResolver = resolve;
59
+ });
56
60
  // Generate key shares for given threshold signature scheme (TSS)
57
61
  const { rawPublicKey, externalServerKeyShares } = await this.keyGen({
58
62
  chainName: this.chainName,
@@ -68,8 +72,18 @@ class DynamicEvmWalletClient extends DynamicWalletClient {
68
72
  thresholdSignatureScheme,
69
73
  externalServerKeySharesBackupInfo: getExternalServerKeyShareBackupInfo()
70
74
  });
75
+ this.logger.debug('walletMap updated for wallet', {
76
+ context: {
77
+ accountAddress,
78
+ walletId,
79
+ walletMap: this.walletMap
80
+ }
81
+ });
82
+ ceremonyCeremonyCompleteResolver(undefined);
71
83
  }
72
84
  });
85
+ // Wait for the ceremony to complete before proceeding
86
+ await ceremonyCompletePromise;
73
87
  if (!rawPublicKey || !externalServerKeyShares) {
74
88
  throw new Error(ERROR_KEYGEN_FAILED);
75
89
  }
@@ -77,12 +91,13 @@ class DynamicEvmWalletClient extends DynamicWalletClient {
77
91
  const { accountAddress, publicKeyHex } = deriveAccountAddress({
78
92
  rawPublicKey: rawPublicKey
79
93
  });
80
- void this.storeEncryptedBackupByWalletWithRetry({
94
+ await this.storeEncryptedBackupByWalletWithRetry({
81
95
  accountAddress,
82
96
  externalServerKeyShares,
83
97
  password
84
98
  });
85
99
  return {
100
+ walletId: this.walletMap[accountAddress].walletId,
86
101
  accountAddress,
87
102
  rawPublicKey,
88
103
  publicKeyHex,
@@ -93,7 +108,7 @@ class DynamicEvmWalletClient extends DynamicWalletClient {
93
108
  throw new Error(ERROR_CREATE_WALLET_ACCOUNT);
94
109
  }
95
110
  }
96
- async signMessage({ message, accountAddress, password = undefined }) {
111
+ async signMessage({ message, accountAddress, password = undefined, externalServerKeyShares }) {
97
112
  await this.verifyPassword({
98
113
  accountAddress,
99
114
  password,
@@ -114,7 +129,8 @@ class DynamicEvmWalletClient extends DynamicWalletClient {
114
129
  message: formattedMessage,
115
130
  accountAddress: accountAddress,
116
131
  chainName: this.chainName,
117
- password
132
+ password,
133
+ externalServerKeyShares
118
134
  });
119
135
  // Serialize the signature
120
136
  const serializedSignature = serializeECDSASignature(signatureEcdsa);
@@ -141,7 +157,7 @@ class DynamicEvmWalletClient extends DynamicWalletClient {
141
157
  throw new Error(ERROR_VERIFY_MESSAGE_SIGNATURE);
142
158
  }
143
159
  }
144
- async signTransaction({ senderAddress, transaction, password = undefined }) {
160
+ async signTransaction({ senderAddress, transaction, password = undefined, signedSessionId, externalServerKeyShares }) {
145
161
  await this.verifyPassword({
146
162
  accountAddress: senderAddress,
147
163
  password,
@@ -157,7 +173,8 @@ class DynamicEvmWalletClient extends DynamicWalletClient {
157
173
  message: serializedTxBytes,
158
174
  accountAddress: senderAddress,
159
175
  chainName: this.chainName,
160
- password
176
+ password,
177
+ externalServerKeyShares
161
178
  });
162
179
  if (!('r' in signatureEcdsa && 's' in signatureEcdsa && 'v' in signatureEcdsa)) {
163
180
  throw new Error('Invalid signature format returned from MPC signing');
@@ -178,7 +195,7 @@ class DynamicEvmWalletClient extends DynamicWalletClient {
178
195
  throw error;
179
196
  }
180
197
  }
181
- async exportPrivateKey({ accountAddress, password = undefined }) {
198
+ async exportPrivateKey({ accountAddress, password = undefined, externalServerKeyShares }) {
182
199
  await this.verifyPassword({
183
200
  accountAddress,
184
201
  password,
@@ -187,7 +204,8 @@ class DynamicEvmWalletClient extends DynamicWalletClient {
187
204
  const { derivedPrivateKey } = await this.exportKey({
188
205
  accountAddress,
189
206
  chainName: this.chainName,
190
- password
207
+ password,
208
+ externalServerKeyShares
191
209
  });
192
210
  return {
193
211
  derivedPrivateKey
@@ -203,7 +221,11 @@ class DynamicEvmWalletClient extends DynamicWalletClient {
203
221
  derivedPrivateKey
204
222
  };
205
223
  }
206
- async importPrivateKey({ privateKey, chainName, thresholdSignatureScheme, password = undefined, onError }) {
224
+ async importPrivateKey({ privateKey, chainName, thresholdSignatureScheme, password = undefined, onError, signedSessionId }) {
225
+ let ceremonyCeremonyCompleteResolver;
226
+ const ceremonyCompletePromise = new Promise((resolve)=>{
227
+ ceremonyCeremonyCompleteResolver = resolve;
228
+ });
207
229
  // TODO: validate private key for EVM
208
230
  const { rawPublicKey, externalServerKeyShares } = await this.importRawPrivateKey({
209
231
  chainName,
@@ -220,15 +242,18 @@ class DynamicEvmWalletClient extends DynamicWalletClient {
220
242
  thresholdSignatureScheme,
221
243
  externalServerKeySharesBackupInfo: getExternalServerKeyShareBackupInfo()
222
244
  });
245
+ ceremonyCeremonyCompleteResolver(undefined);
223
246
  }
224
247
  });
248
+ // Wait for the ceremony to complete before proceeding
249
+ await ceremonyCompletePromise;
225
250
  if (!rawPublicKey || !externalServerKeyShares) {
226
251
  throw new Error('Error creating wallet account');
227
252
  }
228
253
  const { accountAddress, publicKeyHex } = deriveAccountAddress({
229
254
  rawPublicKey: rawPublicKey
230
255
  });
231
- void this.storeEncryptedBackupByWalletWithRetry({
256
+ await this.storeEncryptedBackupByWalletWithRetry({
232
257
  accountAddress,
233
258
  externalServerKeyShares,
234
259
  password
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@dynamic-labs-wallet/node-evm",
3
- "version": "0.0.0-beta.3",
3
+ "version": "0.0.0-beta.304.1",
4
4
  "license": "MIT",
5
5
  "dependencies": {
6
- "@dynamic-labs-wallet/node": "0.0.0-beta.3"
6
+ "@dynamic-labs-wallet/node": "0.0.0-beta.304.1"
7
7
  },
8
8
  "publishConfig": {
9
9
  "access": "public"
@@ -26,13 +26,13 @@
26
26
  "main": "./index.cjs.js",
27
27
  "module": "./index.esm.js",
28
28
  "types": "./index.esm.d.ts",
29
+ "type": "module",
29
30
  "exports": {
30
31
  "./package.json": "./package.json",
31
32
  ".": {
32
33
  "types": "./index.esm.d.ts",
33
34
  "import": "./index.esm.js",
34
- "require": "./index.cjs.js",
35
- "default": "./index.cjs.js"
35
+ "require": "./index.cjs.js"
36
36
  }
37
37
  }
38
38
  }
@@ -14,27 +14,32 @@ export declare class DynamicEvmWalletClient extends DynamicWalletClient {
14
14
  }): Promise<{
15
15
  accountAddress: string;
16
16
  publicKeyHex: string;
17
- rawPublicKey: EcdsaPublicKey | Uint8Array | undefined;
17
+ rawPublicKey: EcdsaPublicKey | Uint8Array | string | undefined;
18
18
  externalServerKeyShares: ServerKeyShare[];
19
+ walletId: string;
19
20
  }>;
20
- signMessage({ message, accountAddress, password, }: {
21
+ signMessage({ message, accountAddress, password, externalServerKeyShares, }: {
21
22
  message: string;
22
23
  accountAddress: string;
23
24
  password?: string;
25
+ externalServerKeyShares: ServerKeyShare[];
24
26
  }): Promise<`0x${string}`>;
25
27
  verifyMessageSignature({ accountAddress, message, signature, }: {
26
28
  accountAddress: string;
27
29
  message: SignableMessage;
28
30
  signature: any;
29
31
  }): Promise<boolean>;
30
- signTransaction({ senderAddress, transaction, password, }: {
32
+ signTransaction({ senderAddress, transaction, password, signedSessionId, externalServerKeyShares, }: {
31
33
  senderAddress: string;
32
34
  transaction: TransactionSerializable;
33
35
  password?: string;
36
+ signedSessionId: string;
37
+ externalServerKeyShares: ServerKeyShare[];
34
38
  }): Promise<string>;
35
- exportPrivateKey({ accountAddress, password, }: {
39
+ exportPrivateKey({ accountAddress, password, externalServerKeyShares, }: {
36
40
  accountAddress: string;
37
41
  password?: string;
42
+ externalServerKeyShares: ServerKeyShare[];
38
43
  }): Promise<{
39
44
  derivedPrivateKey: string | undefined;
40
45
  }>;
@@ -44,16 +49,17 @@ export declare class DynamicEvmWalletClient extends DynamicWalletClient {
44
49
  }): Promise<{
45
50
  derivedPrivateKey: string | undefined;
46
51
  }>;
47
- importPrivateKey({ privateKey, chainName, thresholdSignatureScheme, password, onError, }: {
52
+ importPrivateKey({ privateKey, chainName, thresholdSignatureScheme, password, onError, signedSessionId, }: {
48
53
  privateKey: string;
49
54
  chainName: string;
50
55
  thresholdSignatureScheme: ThresholdSignatureScheme;
51
56
  password?: string;
52
57
  onError?: (error: Error) => void;
58
+ signedSessionId: string;
53
59
  }): Promise<{
54
60
  accountAddress: string;
55
61
  publicKeyHex: string;
56
- rawPublicKey: EcdsaPublicKey | Uint8Array | undefined;
62
+ rawPublicKey: EcdsaPublicKey | Uint8Array | string | undefined;
57
63
  externalServerKeyShares: ServerKeyShare[];
58
64
  }>;
59
65
  getEvmWallets(): Promise<any>;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EAEd,mBAAmB,EACnB,wBAAwB,EACxB,wBAAwB,EAGzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,KAAK,EAEV,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAE7B,MAAM,MAAM,CAAC;AAed,qBAAa,sBAAuB,SAAQ,mBAAmB;IAC7D,QAAQ,CAAC,SAAS,SAAS;gBAEf,EACV,aAAa,EACb,UAAU,EACV,kBAAkB,EAClB,KAAK,GACN,EAAE,wBAAwB;IAS3B,sBAAsB,CAAC,EACrB,KAAK,EACL,MAAM,GACP,EAAE;QACD,KAAK,EAAE,KAAK,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,YAAY;IAOV,mBAAmB,CAAC,EACxB,wBAAwB,EACxB,QAAoB,EACpB,OAAO,GACR,EAAE;QACD,wBAAwB,EAAE,wBAAwB,CAAC;QACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;KAClC,GAAG,OAAO,CAAC;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,cAAc,GAAG,UAAU,GAAG,SAAS,CAAC;QACtD,uBAAuB,EAAE,cAAc,EAAE,CAAC;KAC3C,CAAC;IAiDI,WAAW,CAAC,EAChB,OAAO,EACP,cAAc,EACd,QAAoB,GACrB,EAAE;QACD,OAAO,EAAE,MAAM,CAAC;QAChB,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;IAqCK,sBAAsB,CAAC,EAC3B,cAAc,EACd,OAAO,EACP,SAAS,GACV,EAAE;QACD,cAAc,EAAE,MAAM,CAAC;QACvB,OAAO,EAAE,eAAe,CAAC;QACzB,SAAS,EAAE,GAAG,CAAC;KAChB;IAmBK,eAAe,CAAC,EACpB,aAAa,EACb,WAAW,EACX,QAAoB,GACrB,EAAE;QACD,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,uBAAuB,CAAC;QACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,MAAM,CAAC;IAmDb,gBAAgB,CAAC,EACrB,cAAc,EACd,QAAoB,GACrB,EAAE;QACD,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;;;IAeK,uBAAuB,CAAC,EAC5B,SAAS,EACT,cAAc,GACf,EAAE;QACD,SAAS,EAAE,CAAC,iBAAiB,GAAG,mBAAmB,CAAC,EAAE,CAAC;QACvD,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB;;;IASK,gBAAgB,CAAC,EACrB,UAAU,EACV,SAAS,EACT,wBAAwB,EACxB,QAAoB,EACpB,OAAO,GACR,EAAE;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,wBAAwB,EAAE,wBAAwB,CAAC;QACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;KAClC,GAAG,OAAO,CAAC;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,cAAc,GAAG,UAAU,GAAG,SAAS,CAAC;QACtD,uBAAuB,EAAE,cAAc,EAAE,CAAC;KAC3C,CAAC;IA4CI,aAAa;CAOpB"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"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"}