@dynamic-labs-wallet/node-ton 0.0.353 → 1.0.0-beta
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 +108 -140
- package/index.esm.js +108 -140
- package/package.json +2 -2
- package/src/client/client.d.ts +30 -25
- package/src/client/client.d.ts.map +1 -1
package/index.cjs
CHANGED
|
@@ -273,13 +273,13 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
273
273
|
* @param thresholdSignatureScheme - The threshold signature scheme to use for the wallet.
|
|
274
274
|
* @param password - The password to use for the wallet.
|
|
275
275
|
* @param onError - The function to call if an error occurs.
|
|
276
|
-
* @param
|
|
277
|
-
* @returns The
|
|
276
|
+
* @param backUpToDynamic - Whether to back up the external server key shares to the client share service. By default, it is false.
|
|
277
|
+
* @returns The walletMetadata, public key hex, raw public key, and external server key shares.
|
|
278
278
|
*/ function createWalletAccount(param) {
|
|
279
|
-
var thresholdSignatureScheme = param.thresholdSignatureScheme,
|
|
279
|
+
var thresholdSignatureScheme = param.thresholdSignatureScheme, password = param.password, onError = param.onError, _param_backUpToDynamic = param.backUpToDynamic, backUpToDynamic = _param_backUpToDynamic === void 0 ? false : _param_backUpToDynamic;
|
|
280
280
|
var _this = this;
|
|
281
281
|
return _async_to_generator(function() {
|
|
282
|
-
var
|
|
282
|
+
var resolvedWalletId, ceremonyCeremonyCompleteResolver, ceremonyCompletePromise, _ref, rawPublicKey, externalServerKeyShares, publicKeyHex, accountAddress, chainConfig, walletMetadata, _ref1, keySharesWithBackupStatus, backupInfo, error;
|
|
283
283
|
return _ts_generator(this, function(_state) {
|
|
284
284
|
switch(_state.label){
|
|
285
285
|
case 0:
|
|
@@ -297,21 +297,11 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
297
297
|
_this.keyGen({
|
|
298
298
|
thresholdSignatureScheme: thresholdSignatureScheme,
|
|
299
299
|
chainName: _this.chainName,
|
|
300
|
+
password: password,
|
|
301
|
+
backUpToDynamic: backUpToDynamic,
|
|
300
302
|
onError: onError,
|
|
301
|
-
onCeremonyComplete: function(
|
|
302
|
-
|
|
303
|
-
_this.initializeWalletMapEntry({
|
|
304
|
-
accountAddress: accountAddress,
|
|
305
|
-
walletId: walletId,
|
|
306
|
-
chainName: _this.chainName,
|
|
307
|
-
thresholdSignatureScheme: thresholdSignatureScheme,
|
|
308
|
-
derivationPath: JSON.stringify(Object.fromEntries(chainConfig.derivationPath.map(function(value, index) {
|
|
309
|
-
return [
|
|
310
|
-
index,
|
|
311
|
-
value
|
|
312
|
-
];
|
|
313
|
-
})))
|
|
314
|
-
});
|
|
303
|
+
onCeremonyComplete: function(_accountAddress, walletId) {
|
|
304
|
+
resolvedWalletId = walletId;
|
|
315
305
|
ceremonyCeremonyCompleteResolver(undefined);
|
|
316
306
|
}
|
|
317
307
|
})
|
|
@@ -325,7 +315,7 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
325
315
|
];
|
|
326
316
|
case 2:
|
|
327
317
|
_state.sent();
|
|
328
|
-
if (!rawPublicKey || !externalServerKeyShares || !(typeof rawPublicKey === 'string' || _instanceof(rawPublicKey, Uint8Array))) {
|
|
318
|
+
if (!rawPublicKey || !externalServerKeyShares || !resolvedWalletId || !(typeof rawPublicKey === 'string' || _instanceof(rawPublicKey, Uint8Array))) {
|
|
329
319
|
throw new Error(ERROR_KEYGEN_FAILED);
|
|
330
320
|
}
|
|
331
321
|
publicKeyHex = typeof rawPublicKey === 'string' ? rawPublicKey : Buffer.from(rawPublicKey).toString('hex');
|
|
@@ -333,26 +323,40 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
333
323
|
publicKeyHex: publicKeyHex,
|
|
334
324
|
workchain: 0
|
|
335
325
|
});
|
|
326
|
+
chainConfig = node.getMPCChainConfig(_this.chainName);
|
|
327
|
+
walletMetadata = {
|
|
328
|
+
walletId: resolvedWalletId,
|
|
329
|
+
accountAddress: accountAddress,
|
|
330
|
+
chainName: _this.chainName,
|
|
331
|
+
thresholdSignatureScheme: thresholdSignatureScheme,
|
|
332
|
+
derivationPath: JSON.stringify(Object.fromEntries(chainConfig.derivationPath.map(function(value, index) {
|
|
333
|
+
return [
|
|
334
|
+
index,
|
|
335
|
+
value
|
|
336
|
+
];
|
|
337
|
+
})))
|
|
338
|
+
};
|
|
336
339
|
return [
|
|
337
340
|
4,
|
|
338
341
|
_this.storeEncryptedBackupByWalletWithRetry({
|
|
339
342
|
accountAddress: accountAddress,
|
|
340
343
|
externalServerKeyShares: externalServerKeyShares,
|
|
341
344
|
password: password,
|
|
342
|
-
|
|
345
|
+
backUpToDynamic: backUpToDynamic,
|
|
346
|
+
walletMetadata: walletMetadata
|
|
343
347
|
})
|
|
344
348
|
];
|
|
345
349
|
case 3:
|
|
346
|
-
|
|
350
|
+
_ref1 = _state.sent(), keySharesWithBackupStatus = _ref1.keySharesWithBackupStatus, backupInfo = _ref1.backupInfo;
|
|
351
|
+
walletMetadata.externalServerKeySharesBackupInfo = backupInfo;
|
|
347
352
|
return [
|
|
348
353
|
2,
|
|
349
354
|
{
|
|
350
|
-
|
|
351
|
-
accountAddress: accountAddress,
|
|
355
|
+
walletMetadata: walletMetadata,
|
|
352
356
|
publicKeyHex: publicKeyHex,
|
|
353
357
|
rawPublicKey: rawPublicKey,
|
|
354
358
|
externalServerKeyShares: externalServerKeyShares,
|
|
355
|
-
externalKeySharesWithBackupStatus:
|
|
359
|
+
externalKeySharesWithBackupStatus: keySharesWithBackupStatus
|
|
356
360
|
}
|
|
357
361
|
];
|
|
358
362
|
case 4:
|
|
@@ -377,19 +381,20 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
377
381
|
value: /**
|
|
378
382
|
* Signs a message using MPC
|
|
379
383
|
* @param message - The message to sign
|
|
380
|
-
* @param
|
|
384
|
+
* @param walletMetadata - Wallet metadata (the full object returned by createWalletAccount/importPrivateKey, with backupInfo merged from any subsequent updatePassword/refresh/reshare)
|
|
381
385
|
* @param password - The password for encrypted backup shares
|
|
382
386
|
* @param externalServerKeyShares - The external server key shares
|
|
383
387
|
* @param onError - The function to call if an error occurs
|
|
384
388
|
* @returns The signature as a base64 string
|
|
385
389
|
*/ function signMessage(param) {
|
|
386
|
-
var message = param.message,
|
|
390
|
+
var message = param.message, walletMetadata = param.walletMetadata, _param_password = param.password, password = _param_password === void 0 ? undefined : _param_password, externalServerKeyShares = param.externalServerKeyShares, onError = param.onError;
|
|
387
391
|
var _this = this;
|
|
388
392
|
return _async_to_generator(function() {
|
|
389
|
-
var signatureEd25519, formattedSignature, error;
|
|
393
|
+
var accountAddress, signatureEd25519, formattedSignature, error;
|
|
390
394
|
return _ts_generator(this, function(_state) {
|
|
391
395
|
switch(_state.label){
|
|
392
396
|
case 0:
|
|
397
|
+
accountAddress = walletMetadata.accountAddress;
|
|
393
398
|
if (!accountAddress) {
|
|
394
399
|
throw new Error(ERROR_ACCOUNT_ADDRESS_REQUIRED);
|
|
395
400
|
}
|
|
@@ -397,23 +402,10 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
397
402
|
case 1:
|
|
398
403
|
_state.trys.push([
|
|
399
404
|
1,
|
|
400
|
-
|
|
405
|
+
3,
|
|
401
406
|
,
|
|
402
|
-
|
|
407
|
+
4
|
|
403
408
|
]);
|
|
404
|
-
// Attempt to recover key shares from backup if not provided
|
|
405
|
-
return [
|
|
406
|
-
4,
|
|
407
|
-
_this.ensureKeySharesRecovered({
|
|
408
|
-
accountAddress: accountAddress,
|
|
409
|
-
password: password,
|
|
410
|
-
walletOperation: node.WalletOperation.SIGN_MESSAGE,
|
|
411
|
-
externalServerKeyShares: externalServerKeyShares,
|
|
412
|
-
errorMessage: 'External server key shares are required to sign a message. No backup shares available for recovery.'
|
|
413
|
-
})
|
|
414
|
-
];
|
|
415
|
-
case 2:
|
|
416
|
-
_state.sent();
|
|
417
409
|
return [
|
|
418
410
|
4,
|
|
419
411
|
_this.sign({
|
|
@@ -422,17 +414,18 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
422
414
|
chainName: _this.chainName,
|
|
423
415
|
password: password,
|
|
424
416
|
externalServerKeyShares: externalServerKeyShares,
|
|
425
|
-
onError: onError
|
|
417
|
+
onError: onError,
|
|
418
|
+
walletMetadata: walletMetadata
|
|
426
419
|
})
|
|
427
420
|
];
|
|
428
|
-
case
|
|
421
|
+
case 2:
|
|
429
422
|
signatureEd25519 = _state.sent();
|
|
430
423
|
formattedSignature = Buffer.from(signatureEd25519).toString('base64');
|
|
431
424
|
return [
|
|
432
425
|
2,
|
|
433
426
|
formattedSignature
|
|
434
427
|
];
|
|
435
|
-
case
|
|
428
|
+
case 3:
|
|
436
429
|
error = _state.sent();
|
|
437
430
|
logError({
|
|
438
431
|
message: ERROR_SIGN_MESSAGE,
|
|
@@ -441,8 +434,10 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
441
434
|
accountAddress: accountAddress
|
|
442
435
|
}
|
|
443
436
|
});
|
|
444
|
-
throw new Error(ERROR_SIGN_MESSAGE
|
|
445
|
-
|
|
437
|
+
throw new Error(ERROR_SIGN_MESSAGE, {
|
|
438
|
+
cause: error
|
|
439
|
+
});
|
|
440
|
+
case 4:
|
|
446
441
|
return [
|
|
447
442
|
2
|
|
448
443
|
];
|
|
@@ -455,82 +450,68 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
455
450
|
key: "signTransaction",
|
|
456
451
|
value: /**
|
|
457
452
|
* Signs a transaction using MPC
|
|
458
|
-
* @param
|
|
453
|
+
* @param walletMetadata - Wallet metadata (the full object returned by createWalletAccount/importPrivateKey, with backupInfo merged from any subsequent updatePassword/refresh/reshare)
|
|
459
454
|
* @param transaction - The serialized transaction to sign
|
|
460
455
|
* @param password - The password for encrypted backup shares
|
|
461
456
|
* @param externalServerKeyShares - The external server key shares
|
|
462
457
|
* @param onError - The function to call if an error occurs
|
|
463
458
|
* @returns The signature as a base64 string
|
|
464
459
|
*/ function signTransaction(param) {
|
|
465
|
-
var
|
|
460
|
+
var walletMetadata = param.walletMetadata, transaction = param.transaction, _param_password = param.password, password = _param_password === void 0 ? undefined : _param_password, externalServerKeyShares = param.externalServerKeyShares, onError = param.onError;
|
|
466
461
|
var _this = this;
|
|
467
462
|
return _async_to_generator(function() {
|
|
468
|
-
var signatureEd25519, formattedSignature, error;
|
|
463
|
+
var accountAddress, signatureEd25519, formattedSignature, error;
|
|
469
464
|
return _ts_generator(this, function(_state) {
|
|
470
465
|
switch(_state.label){
|
|
471
466
|
case 0:
|
|
472
|
-
|
|
467
|
+
accountAddress = walletMetadata.accountAddress;
|
|
468
|
+
if (!accountAddress) {
|
|
473
469
|
throw new Error(ERROR_ACCOUNT_ADDRESS_REQUIRED);
|
|
474
470
|
}
|
|
475
|
-
|
|
476
|
-
4,
|
|
477
|
-
_this.verifyPassword({
|
|
478
|
-
accountAddress: senderAddress,
|
|
479
|
-
password: password
|
|
480
|
-
})
|
|
481
|
-
];
|
|
471
|
+
_state.label = 1;
|
|
482
472
|
case 1:
|
|
483
|
-
_state.sent();
|
|
484
|
-
_state.label = 2;
|
|
485
|
-
case 2:
|
|
486
473
|
_state.trys.push([
|
|
487
|
-
|
|
488
|
-
|
|
474
|
+
1,
|
|
475
|
+
3,
|
|
489
476
|
,
|
|
490
|
-
|
|
477
|
+
4
|
|
491
478
|
]);
|
|
492
|
-
// Attempt to recover key shares from backup if not provided
|
|
493
|
-
return [
|
|
494
|
-
4,
|
|
495
|
-
_this.ensureKeySharesRecovered({
|
|
496
|
-
accountAddress: senderAddress,
|
|
497
|
-
password: password,
|
|
498
|
-
walletOperation: node.WalletOperation.SIGN_TRANSACTION,
|
|
499
|
-
externalServerKeyShares: externalServerKeyShares,
|
|
500
|
-
errorMessage: 'External server key shares are required to sign a transaction. No backup shares available for recovery.'
|
|
501
|
-
})
|
|
502
|
-
];
|
|
503
|
-
case 3:
|
|
504
|
-
_state.sent();
|
|
505
479
|
return [
|
|
506
480
|
4,
|
|
507
481
|
_this.sign({
|
|
508
482
|
message: transaction,
|
|
509
|
-
accountAddress:
|
|
483
|
+
accountAddress: accountAddress,
|
|
510
484
|
chainName: _this.chainName,
|
|
511
485
|
password: password,
|
|
512
486
|
externalServerKeyShares: externalServerKeyShares,
|
|
513
|
-
onError: onError
|
|
487
|
+
onError: onError,
|
|
488
|
+
walletMetadata: walletMetadata,
|
|
489
|
+
walletOperation: node.WalletOperation.SIGN_TRANSACTION
|
|
514
490
|
})
|
|
515
491
|
];
|
|
516
|
-
case
|
|
492
|
+
case 2:
|
|
517
493
|
signatureEd25519 = _state.sent();
|
|
494
|
+
if (!_instanceof(signatureEd25519, Uint8Array)) {
|
|
495
|
+
throw new TypeError('Invalid signature format returned from MPC signing');
|
|
496
|
+
}
|
|
518
497
|
formattedSignature = Buffer.from(signatureEd25519).toString('base64');
|
|
519
498
|
return [
|
|
520
499
|
2,
|
|
521
500
|
formattedSignature
|
|
522
501
|
];
|
|
523
|
-
case
|
|
502
|
+
case 3:
|
|
524
503
|
error = _state.sent();
|
|
525
504
|
logError({
|
|
526
505
|
message: ERROR_SIGN_TRANSACTION,
|
|
527
506
|
error: error,
|
|
528
507
|
context: {
|
|
529
|
-
|
|
508
|
+
accountAddress: accountAddress
|
|
530
509
|
}
|
|
531
510
|
});
|
|
532
|
-
throw new Error(ERROR_SIGN_TRANSACTION
|
|
533
|
-
|
|
511
|
+
throw new Error(ERROR_SIGN_TRANSACTION, {
|
|
512
|
+
cause: error
|
|
513
|
+
});
|
|
514
|
+
case 4:
|
|
534
515
|
return [
|
|
535
516
|
2
|
|
536
517
|
];
|
|
@@ -542,57 +523,39 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
542
523
|
{
|
|
543
524
|
key: "exportPrivateKey",
|
|
544
525
|
value: /**
|
|
545
|
-
* Exports the private key for a given
|
|
546
|
-
* @param
|
|
526
|
+
* Exports the private key for a given wallet
|
|
527
|
+
* @param walletMetadata - Wallet metadata (the full object returned by createWalletAccount/importPrivateKey, with backupInfo merged from any subsequent updatePassword/refresh/reshare)
|
|
547
528
|
* @param password - The password for encrypted backup shares
|
|
548
529
|
* @param externalServerKeyShares - The external server key shares
|
|
549
530
|
* @returns The private key as a hex string
|
|
550
531
|
*/ function exportPrivateKey(param) {
|
|
551
|
-
var
|
|
532
|
+
var walletMetadata = param.walletMetadata, _param_password = param.password, password = _param_password === void 0 ? undefined : _param_password, externalServerKeyShares = param.externalServerKeyShares;
|
|
552
533
|
var _this = this;
|
|
553
534
|
return _async_to_generator(function() {
|
|
554
|
-
var derivedPrivateKey, privateScalarHex, error;
|
|
535
|
+
var accountAddress, derivedPrivateKey, privateScalarHex, error;
|
|
555
536
|
return _ts_generator(this, function(_state) {
|
|
556
537
|
switch(_state.label){
|
|
557
538
|
case 0:
|
|
539
|
+
accountAddress = walletMetadata.accountAddress;
|
|
540
|
+
_state.label = 1;
|
|
541
|
+
case 1:
|
|
558
542
|
_state.trys.push([
|
|
559
|
-
|
|
560
|
-
|
|
543
|
+
1,
|
|
544
|
+
3,
|
|
561
545
|
,
|
|
562
|
-
|
|
546
|
+
4
|
|
563
547
|
]);
|
|
564
|
-
return [
|
|
565
|
-
4,
|
|
566
|
-
_this.verifyPassword({
|
|
567
|
-
accountAddress: accountAddress,
|
|
568
|
-
password: password
|
|
569
|
-
})
|
|
570
|
-
];
|
|
571
|
-
case 1:
|
|
572
|
-
_state.sent();
|
|
573
|
-
// Attempt to recover key shares from backup if not provided
|
|
574
|
-
return [
|
|
575
|
-
4,
|
|
576
|
-
_this.ensureKeySharesRecovered({
|
|
577
|
-
accountAddress: accountAddress,
|
|
578
|
-
password: password,
|
|
579
|
-
walletOperation: node.WalletOperation.EXPORT_PRIVATE_KEY,
|
|
580
|
-
externalServerKeyShares: externalServerKeyShares,
|
|
581
|
-
errorMessage: 'External server key shares are required to export private key. No backup shares available for recovery.'
|
|
582
|
-
})
|
|
583
|
-
];
|
|
584
|
-
case 2:
|
|
585
|
-
_state.sent();
|
|
586
548
|
return [
|
|
587
549
|
4,
|
|
588
550
|
_this.exportKey({
|
|
589
551
|
accountAddress: accountAddress,
|
|
590
552
|
chainName: _this.chainName,
|
|
591
553
|
password: password,
|
|
592
|
-
externalServerKeyShares: externalServerKeyShares
|
|
554
|
+
externalServerKeyShares: externalServerKeyShares,
|
|
555
|
+
walletMetadata: walletMetadata
|
|
593
556
|
})
|
|
594
557
|
];
|
|
595
|
-
case
|
|
558
|
+
case 2:
|
|
596
559
|
derivedPrivateKey = _state.sent().derivedPrivateKey;
|
|
597
560
|
if (!derivedPrivateKey) {
|
|
598
561
|
throw new Error('Derived private key is undefined');
|
|
@@ -603,7 +566,7 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
603
566
|
2,
|
|
604
567
|
privateScalarHex
|
|
605
568
|
];
|
|
606
|
-
case
|
|
569
|
+
case 3:
|
|
607
570
|
error = _state.sent();
|
|
608
571
|
logError({
|
|
609
572
|
message: ERROR_EXPORT_PRIVATE_KEY,
|
|
@@ -613,7 +576,7 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
613
576
|
}
|
|
614
577
|
});
|
|
615
578
|
throw new Error(ERROR_EXPORT_PRIVATE_KEY);
|
|
616
|
-
case
|
|
579
|
+
case 4:
|
|
617
580
|
return [
|
|
618
581
|
2
|
|
619
582
|
];
|
|
@@ -667,14 +630,14 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
667
630
|
* @param thresholdSignatureScheme - The threshold signature scheme to use for the wallet.
|
|
668
631
|
* @param password - The password to use for the wallet.
|
|
669
632
|
* @param onError - The function to call if an error occurs.
|
|
670
|
-
* @param
|
|
633
|
+
* @param backUpToDynamic - Whether to back up the external server key shares to the client share service.
|
|
671
634
|
* @param publicAddressCheck - Optional public address to verify against the derived address.
|
|
672
|
-
* @returns The
|
|
635
|
+
* @returns The walletMetadata, public key hex, raw public key, and external server key shares.
|
|
673
636
|
*/ function importPrivateKey(param) {
|
|
674
|
-
var privateKey = param.privateKey, chainName = param.chainName, thresholdSignatureScheme = param.thresholdSignatureScheme,
|
|
637
|
+
var privateKey = param.privateKey, chainName = param.chainName, thresholdSignatureScheme = param.thresholdSignatureScheme, password = param.password, onError = param.onError, _param_backUpToDynamic = param.backUpToDynamic, backUpToDynamic = _param_backUpToDynamic === void 0 ? false : _param_backUpToDynamic, publicAddressCheck = param.publicAddressCheck;
|
|
675
638
|
var _this = this;
|
|
676
639
|
return _async_to_generator(function() {
|
|
677
|
-
var ceremonyCeremonyCompleteResolver, ceremonyCompletePromise, formattedPrivateKey, publicKeyHex, derivedAddress, _ref, rawPublicKey, externalServerKeyShares, resultPublicKeyHex, accountAddress,
|
|
640
|
+
var resolvedWalletId, ceremonyCeremonyCompleteResolver, ceremonyCompletePromise, formattedPrivateKey, publicKeyHex, derivedAddress, _ref, rawPublicKey, externalServerKeyShares, resultPublicKeyHex, accountAddress, chainConfig, walletMetadata, _ref1, keySharesWithBackupStatus, backupInfo, error;
|
|
678
641
|
return _ts_generator(this, function(_state) {
|
|
679
642
|
switch(_state.label){
|
|
680
643
|
case 0:
|
|
@@ -702,20 +665,10 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
702
665
|
chainName: chainName,
|
|
703
666
|
thresholdSignatureScheme: thresholdSignatureScheme,
|
|
704
667
|
privateKey: formattedPrivateKey,
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
walletId: walletId,
|
|
710
|
-
chainName: _this.chainName,
|
|
711
|
-
thresholdSignatureScheme: thresholdSignatureScheme,
|
|
712
|
-
derivationPath: JSON.stringify(Object.fromEntries(chainConfig.derivationPath.map(function(value, index) {
|
|
713
|
-
return [
|
|
714
|
-
index,
|
|
715
|
-
value
|
|
716
|
-
];
|
|
717
|
-
})))
|
|
718
|
-
});
|
|
668
|
+
password: password,
|
|
669
|
+
backUpToDynamic: backUpToDynamic,
|
|
670
|
+
onCeremonyComplete: function(_accountAddress, walletId) {
|
|
671
|
+
resolvedWalletId = walletId;
|
|
719
672
|
ceremonyCeremonyCompleteResolver(undefined);
|
|
720
673
|
},
|
|
721
674
|
onError: function(e) {
|
|
@@ -736,7 +689,7 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
736
689
|
];
|
|
737
690
|
case 2:
|
|
738
691
|
_state.sent();
|
|
739
|
-
if (!rawPublicKey || !externalServerKeyShares || !(typeof rawPublicKey === 'string' || _instanceof(rawPublicKey, Uint8Array))) {
|
|
692
|
+
if (!rawPublicKey || !externalServerKeyShares || !resolvedWalletId || !(typeof rawPublicKey === 'string' || _instanceof(rawPublicKey, Uint8Array))) {
|
|
740
693
|
throw new Error(ERROR_IMPORT_PRIVATE_KEY);
|
|
741
694
|
}
|
|
742
695
|
resultPublicKeyHex = typeof rawPublicKey === 'string' ? rawPublicKey : Buffer.from(rawPublicKey).toString('hex');
|
|
@@ -747,25 +700,40 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
747
700
|
if (accountAddress !== derivedAddress) {
|
|
748
701
|
throw new Error("Public key mismatch: derived address ".concat(accountAddress, " !== expected ").concat(derivedAddress));
|
|
749
702
|
}
|
|
703
|
+
chainConfig = node.getMPCChainConfig(_this.chainName);
|
|
704
|
+
walletMetadata = {
|
|
705
|
+
walletId: resolvedWalletId,
|
|
706
|
+
accountAddress: accountAddress,
|
|
707
|
+
chainName: _this.chainName,
|
|
708
|
+
thresholdSignatureScheme: thresholdSignatureScheme,
|
|
709
|
+
derivationPath: JSON.stringify(Object.fromEntries(chainConfig.derivationPath.map(function(value, index) {
|
|
710
|
+
return [
|
|
711
|
+
index,
|
|
712
|
+
value
|
|
713
|
+
];
|
|
714
|
+
})))
|
|
715
|
+
};
|
|
750
716
|
return [
|
|
751
717
|
4,
|
|
752
718
|
_this.storeEncryptedBackupByWalletWithRetry({
|
|
753
719
|
accountAddress: accountAddress,
|
|
754
720
|
externalServerKeyShares: externalServerKeyShares,
|
|
755
721
|
password: password,
|
|
756
|
-
|
|
722
|
+
backUpToDynamic: backUpToDynamic,
|
|
723
|
+
walletMetadata: walletMetadata
|
|
757
724
|
})
|
|
758
725
|
];
|
|
759
726
|
case 3:
|
|
760
|
-
|
|
727
|
+
_ref1 = _state.sent(), keySharesWithBackupStatus = _ref1.keySharesWithBackupStatus, backupInfo = _ref1.backupInfo;
|
|
728
|
+
walletMetadata.externalServerKeySharesBackupInfo = backupInfo;
|
|
761
729
|
return [
|
|
762
730
|
2,
|
|
763
731
|
{
|
|
764
|
-
|
|
732
|
+
walletMetadata: walletMetadata,
|
|
765
733
|
publicKeyHex: resultPublicKeyHex,
|
|
766
734
|
rawPublicKey: rawPublicKey,
|
|
767
735
|
externalServerKeyShares: externalServerKeyShares,
|
|
768
|
-
externalKeySharesWithBackupStatus:
|
|
736
|
+
externalKeySharesWithBackupStatus: keySharesWithBackupStatus
|
|
769
737
|
}
|
|
770
738
|
];
|
|
771
739
|
case 4:
|
package/index.esm.js
CHANGED
|
@@ -271,13 +271,13 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
271
271
|
* @param thresholdSignatureScheme - The threshold signature scheme to use for the wallet.
|
|
272
272
|
* @param password - The password to use for the wallet.
|
|
273
273
|
* @param onError - The function to call if an error occurs.
|
|
274
|
-
* @param
|
|
275
|
-
* @returns The
|
|
274
|
+
* @param backUpToDynamic - Whether to back up the external server key shares to the client share service. By default, it is false.
|
|
275
|
+
* @returns The walletMetadata, public key hex, raw public key, and external server key shares.
|
|
276
276
|
*/ function createWalletAccount(param) {
|
|
277
|
-
var thresholdSignatureScheme = param.thresholdSignatureScheme,
|
|
277
|
+
var thresholdSignatureScheme = param.thresholdSignatureScheme, password = param.password, onError = param.onError, _param_backUpToDynamic = param.backUpToDynamic, backUpToDynamic = _param_backUpToDynamic === void 0 ? false : _param_backUpToDynamic;
|
|
278
278
|
var _this = this;
|
|
279
279
|
return _async_to_generator(function() {
|
|
280
|
-
var
|
|
280
|
+
var resolvedWalletId, ceremonyCeremonyCompleteResolver, ceremonyCompletePromise, _ref, rawPublicKey, externalServerKeyShares, publicKeyHex, accountAddress, chainConfig, walletMetadata, _ref1, keySharesWithBackupStatus, backupInfo, error;
|
|
281
281
|
return _ts_generator(this, function(_state) {
|
|
282
282
|
switch(_state.label){
|
|
283
283
|
case 0:
|
|
@@ -295,21 +295,11 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
295
295
|
_this.keyGen({
|
|
296
296
|
thresholdSignatureScheme: thresholdSignatureScheme,
|
|
297
297
|
chainName: _this.chainName,
|
|
298
|
+
password: password,
|
|
299
|
+
backUpToDynamic: backUpToDynamic,
|
|
298
300
|
onError: onError,
|
|
299
|
-
onCeremonyComplete: function(
|
|
300
|
-
|
|
301
|
-
_this.initializeWalletMapEntry({
|
|
302
|
-
accountAddress: accountAddress,
|
|
303
|
-
walletId: walletId,
|
|
304
|
-
chainName: _this.chainName,
|
|
305
|
-
thresholdSignatureScheme: thresholdSignatureScheme,
|
|
306
|
-
derivationPath: JSON.stringify(Object.fromEntries(chainConfig.derivationPath.map(function(value, index) {
|
|
307
|
-
return [
|
|
308
|
-
index,
|
|
309
|
-
value
|
|
310
|
-
];
|
|
311
|
-
})))
|
|
312
|
-
});
|
|
301
|
+
onCeremonyComplete: function(_accountAddress, walletId) {
|
|
302
|
+
resolvedWalletId = walletId;
|
|
313
303
|
ceremonyCeremonyCompleteResolver(undefined);
|
|
314
304
|
}
|
|
315
305
|
})
|
|
@@ -323,7 +313,7 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
323
313
|
];
|
|
324
314
|
case 2:
|
|
325
315
|
_state.sent();
|
|
326
|
-
if (!rawPublicKey || !externalServerKeyShares || !(typeof rawPublicKey === 'string' || _instanceof(rawPublicKey, Uint8Array))) {
|
|
316
|
+
if (!rawPublicKey || !externalServerKeyShares || !resolvedWalletId || !(typeof rawPublicKey === 'string' || _instanceof(rawPublicKey, Uint8Array))) {
|
|
327
317
|
throw new Error(ERROR_KEYGEN_FAILED);
|
|
328
318
|
}
|
|
329
319
|
publicKeyHex = typeof rawPublicKey === 'string' ? rawPublicKey : Buffer.from(rawPublicKey).toString('hex');
|
|
@@ -331,26 +321,40 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
331
321
|
publicKeyHex: publicKeyHex,
|
|
332
322
|
workchain: 0
|
|
333
323
|
});
|
|
324
|
+
chainConfig = getMPCChainConfig(_this.chainName);
|
|
325
|
+
walletMetadata = {
|
|
326
|
+
walletId: resolvedWalletId,
|
|
327
|
+
accountAddress: accountAddress,
|
|
328
|
+
chainName: _this.chainName,
|
|
329
|
+
thresholdSignatureScheme: thresholdSignatureScheme,
|
|
330
|
+
derivationPath: JSON.stringify(Object.fromEntries(chainConfig.derivationPath.map(function(value, index) {
|
|
331
|
+
return [
|
|
332
|
+
index,
|
|
333
|
+
value
|
|
334
|
+
];
|
|
335
|
+
})))
|
|
336
|
+
};
|
|
334
337
|
return [
|
|
335
338
|
4,
|
|
336
339
|
_this.storeEncryptedBackupByWalletWithRetry({
|
|
337
340
|
accountAddress: accountAddress,
|
|
338
341
|
externalServerKeyShares: externalServerKeyShares,
|
|
339
342
|
password: password,
|
|
340
|
-
|
|
343
|
+
backUpToDynamic: backUpToDynamic,
|
|
344
|
+
walletMetadata: walletMetadata
|
|
341
345
|
})
|
|
342
346
|
];
|
|
343
347
|
case 3:
|
|
344
|
-
|
|
348
|
+
_ref1 = _state.sent(), keySharesWithBackupStatus = _ref1.keySharesWithBackupStatus, backupInfo = _ref1.backupInfo;
|
|
349
|
+
walletMetadata.externalServerKeySharesBackupInfo = backupInfo;
|
|
345
350
|
return [
|
|
346
351
|
2,
|
|
347
352
|
{
|
|
348
|
-
|
|
349
|
-
accountAddress: accountAddress,
|
|
353
|
+
walletMetadata: walletMetadata,
|
|
350
354
|
publicKeyHex: publicKeyHex,
|
|
351
355
|
rawPublicKey: rawPublicKey,
|
|
352
356
|
externalServerKeyShares: externalServerKeyShares,
|
|
353
|
-
externalKeySharesWithBackupStatus:
|
|
357
|
+
externalKeySharesWithBackupStatus: keySharesWithBackupStatus
|
|
354
358
|
}
|
|
355
359
|
];
|
|
356
360
|
case 4:
|
|
@@ -375,19 +379,20 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
375
379
|
value: /**
|
|
376
380
|
* Signs a message using MPC
|
|
377
381
|
* @param message - The message to sign
|
|
378
|
-
* @param
|
|
382
|
+
* @param walletMetadata - Wallet metadata (the full object returned by createWalletAccount/importPrivateKey, with backupInfo merged from any subsequent updatePassword/refresh/reshare)
|
|
379
383
|
* @param password - The password for encrypted backup shares
|
|
380
384
|
* @param externalServerKeyShares - The external server key shares
|
|
381
385
|
* @param onError - The function to call if an error occurs
|
|
382
386
|
* @returns The signature as a base64 string
|
|
383
387
|
*/ function signMessage(param) {
|
|
384
|
-
var message = param.message,
|
|
388
|
+
var message = param.message, walletMetadata = param.walletMetadata, _param_password = param.password, password = _param_password === void 0 ? undefined : _param_password, externalServerKeyShares = param.externalServerKeyShares, onError = param.onError;
|
|
385
389
|
var _this = this;
|
|
386
390
|
return _async_to_generator(function() {
|
|
387
|
-
var signatureEd25519, formattedSignature, error;
|
|
391
|
+
var accountAddress, signatureEd25519, formattedSignature, error;
|
|
388
392
|
return _ts_generator(this, function(_state) {
|
|
389
393
|
switch(_state.label){
|
|
390
394
|
case 0:
|
|
395
|
+
accountAddress = walletMetadata.accountAddress;
|
|
391
396
|
if (!accountAddress) {
|
|
392
397
|
throw new Error(ERROR_ACCOUNT_ADDRESS_REQUIRED);
|
|
393
398
|
}
|
|
@@ -395,23 +400,10 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
395
400
|
case 1:
|
|
396
401
|
_state.trys.push([
|
|
397
402
|
1,
|
|
398
|
-
|
|
403
|
+
3,
|
|
399
404
|
,
|
|
400
|
-
|
|
405
|
+
4
|
|
401
406
|
]);
|
|
402
|
-
// Attempt to recover key shares from backup if not provided
|
|
403
|
-
return [
|
|
404
|
-
4,
|
|
405
|
-
_this.ensureKeySharesRecovered({
|
|
406
|
-
accountAddress: accountAddress,
|
|
407
|
-
password: password,
|
|
408
|
-
walletOperation: WalletOperation.SIGN_MESSAGE,
|
|
409
|
-
externalServerKeyShares: externalServerKeyShares,
|
|
410
|
-
errorMessage: 'External server key shares are required to sign a message. No backup shares available for recovery.'
|
|
411
|
-
})
|
|
412
|
-
];
|
|
413
|
-
case 2:
|
|
414
|
-
_state.sent();
|
|
415
407
|
return [
|
|
416
408
|
4,
|
|
417
409
|
_this.sign({
|
|
@@ -420,17 +412,18 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
420
412
|
chainName: _this.chainName,
|
|
421
413
|
password: password,
|
|
422
414
|
externalServerKeyShares: externalServerKeyShares,
|
|
423
|
-
onError: onError
|
|
415
|
+
onError: onError,
|
|
416
|
+
walletMetadata: walletMetadata
|
|
424
417
|
})
|
|
425
418
|
];
|
|
426
|
-
case
|
|
419
|
+
case 2:
|
|
427
420
|
signatureEd25519 = _state.sent();
|
|
428
421
|
formattedSignature = Buffer.from(signatureEd25519).toString('base64');
|
|
429
422
|
return [
|
|
430
423
|
2,
|
|
431
424
|
formattedSignature
|
|
432
425
|
];
|
|
433
|
-
case
|
|
426
|
+
case 3:
|
|
434
427
|
error = _state.sent();
|
|
435
428
|
logError({
|
|
436
429
|
message: ERROR_SIGN_MESSAGE,
|
|
@@ -439,8 +432,10 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
439
432
|
accountAddress: accountAddress
|
|
440
433
|
}
|
|
441
434
|
});
|
|
442
|
-
throw new Error(ERROR_SIGN_MESSAGE
|
|
443
|
-
|
|
435
|
+
throw new Error(ERROR_SIGN_MESSAGE, {
|
|
436
|
+
cause: error
|
|
437
|
+
});
|
|
438
|
+
case 4:
|
|
444
439
|
return [
|
|
445
440
|
2
|
|
446
441
|
];
|
|
@@ -453,82 +448,68 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
453
448
|
key: "signTransaction",
|
|
454
449
|
value: /**
|
|
455
450
|
* Signs a transaction using MPC
|
|
456
|
-
* @param
|
|
451
|
+
* @param walletMetadata - Wallet metadata (the full object returned by createWalletAccount/importPrivateKey, with backupInfo merged from any subsequent updatePassword/refresh/reshare)
|
|
457
452
|
* @param transaction - The serialized transaction to sign
|
|
458
453
|
* @param password - The password for encrypted backup shares
|
|
459
454
|
* @param externalServerKeyShares - The external server key shares
|
|
460
455
|
* @param onError - The function to call if an error occurs
|
|
461
456
|
* @returns The signature as a base64 string
|
|
462
457
|
*/ function signTransaction(param) {
|
|
463
|
-
var
|
|
458
|
+
var walletMetadata = param.walletMetadata, transaction = param.transaction, _param_password = param.password, password = _param_password === void 0 ? undefined : _param_password, externalServerKeyShares = param.externalServerKeyShares, onError = param.onError;
|
|
464
459
|
var _this = this;
|
|
465
460
|
return _async_to_generator(function() {
|
|
466
|
-
var signatureEd25519, formattedSignature, error;
|
|
461
|
+
var accountAddress, signatureEd25519, formattedSignature, error;
|
|
467
462
|
return _ts_generator(this, function(_state) {
|
|
468
463
|
switch(_state.label){
|
|
469
464
|
case 0:
|
|
470
|
-
|
|
465
|
+
accountAddress = walletMetadata.accountAddress;
|
|
466
|
+
if (!accountAddress) {
|
|
471
467
|
throw new Error(ERROR_ACCOUNT_ADDRESS_REQUIRED);
|
|
472
468
|
}
|
|
473
|
-
|
|
474
|
-
4,
|
|
475
|
-
_this.verifyPassword({
|
|
476
|
-
accountAddress: senderAddress,
|
|
477
|
-
password: password
|
|
478
|
-
})
|
|
479
|
-
];
|
|
469
|
+
_state.label = 1;
|
|
480
470
|
case 1:
|
|
481
|
-
_state.sent();
|
|
482
|
-
_state.label = 2;
|
|
483
|
-
case 2:
|
|
484
471
|
_state.trys.push([
|
|
485
|
-
|
|
486
|
-
|
|
472
|
+
1,
|
|
473
|
+
3,
|
|
487
474
|
,
|
|
488
|
-
|
|
475
|
+
4
|
|
489
476
|
]);
|
|
490
|
-
// Attempt to recover key shares from backup if not provided
|
|
491
|
-
return [
|
|
492
|
-
4,
|
|
493
|
-
_this.ensureKeySharesRecovered({
|
|
494
|
-
accountAddress: senderAddress,
|
|
495
|
-
password: password,
|
|
496
|
-
walletOperation: WalletOperation.SIGN_TRANSACTION,
|
|
497
|
-
externalServerKeyShares: externalServerKeyShares,
|
|
498
|
-
errorMessage: 'External server key shares are required to sign a transaction. No backup shares available for recovery.'
|
|
499
|
-
})
|
|
500
|
-
];
|
|
501
|
-
case 3:
|
|
502
|
-
_state.sent();
|
|
503
477
|
return [
|
|
504
478
|
4,
|
|
505
479
|
_this.sign({
|
|
506
480
|
message: transaction,
|
|
507
|
-
accountAddress:
|
|
481
|
+
accountAddress: accountAddress,
|
|
508
482
|
chainName: _this.chainName,
|
|
509
483
|
password: password,
|
|
510
484
|
externalServerKeyShares: externalServerKeyShares,
|
|
511
|
-
onError: onError
|
|
485
|
+
onError: onError,
|
|
486
|
+
walletMetadata: walletMetadata,
|
|
487
|
+
walletOperation: WalletOperation.SIGN_TRANSACTION
|
|
512
488
|
})
|
|
513
489
|
];
|
|
514
|
-
case
|
|
490
|
+
case 2:
|
|
515
491
|
signatureEd25519 = _state.sent();
|
|
492
|
+
if (!_instanceof(signatureEd25519, Uint8Array)) {
|
|
493
|
+
throw new TypeError('Invalid signature format returned from MPC signing');
|
|
494
|
+
}
|
|
516
495
|
formattedSignature = Buffer.from(signatureEd25519).toString('base64');
|
|
517
496
|
return [
|
|
518
497
|
2,
|
|
519
498
|
formattedSignature
|
|
520
499
|
];
|
|
521
|
-
case
|
|
500
|
+
case 3:
|
|
522
501
|
error = _state.sent();
|
|
523
502
|
logError({
|
|
524
503
|
message: ERROR_SIGN_TRANSACTION,
|
|
525
504
|
error: error,
|
|
526
505
|
context: {
|
|
527
|
-
|
|
506
|
+
accountAddress: accountAddress
|
|
528
507
|
}
|
|
529
508
|
});
|
|
530
|
-
throw new Error(ERROR_SIGN_TRANSACTION
|
|
531
|
-
|
|
509
|
+
throw new Error(ERROR_SIGN_TRANSACTION, {
|
|
510
|
+
cause: error
|
|
511
|
+
});
|
|
512
|
+
case 4:
|
|
532
513
|
return [
|
|
533
514
|
2
|
|
534
515
|
];
|
|
@@ -540,57 +521,39 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
540
521
|
{
|
|
541
522
|
key: "exportPrivateKey",
|
|
542
523
|
value: /**
|
|
543
|
-
* Exports the private key for a given
|
|
544
|
-
* @param
|
|
524
|
+
* Exports the private key for a given wallet
|
|
525
|
+
* @param walletMetadata - Wallet metadata (the full object returned by createWalletAccount/importPrivateKey, with backupInfo merged from any subsequent updatePassword/refresh/reshare)
|
|
545
526
|
* @param password - The password for encrypted backup shares
|
|
546
527
|
* @param externalServerKeyShares - The external server key shares
|
|
547
528
|
* @returns The private key as a hex string
|
|
548
529
|
*/ function exportPrivateKey(param) {
|
|
549
|
-
var
|
|
530
|
+
var walletMetadata = param.walletMetadata, _param_password = param.password, password = _param_password === void 0 ? undefined : _param_password, externalServerKeyShares = param.externalServerKeyShares;
|
|
550
531
|
var _this = this;
|
|
551
532
|
return _async_to_generator(function() {
|
|
552
|
-
var derivedPrivateKey, privateScalarHex, error;
|
|
533
|
+
var accountAddress, derivedPrivateKey, privateScalarHex, error;
|
|
553
534
|
return _ts_generator(this, function(_state) {
|
|
554
535
|
switch(_state.label){
|
|
555
536
|
case 0:
|
|
537
|
+
accountAddress = walletMetadata.accountAddress;
|
|
538
|
+
_state.label = 1;
|
|
539
|
+
case 1:
|
|
556
540
|
_state.trys.push([
|
|
557
|
-
|
|
558
|
-
|
|
541
|
+
1,
|
|
542
|
+
3,
|
|
559
543
|
,
|
|
560
|
-
|
|
544
|
+
4
|
|
561
545
|
]);
|
|
562
|
-
return [
|
|
563
|
-
4,
|
|
564
|
-
_this.verifyPassword({
|
|
565
|
-
accountAddress: accountAddress,
|
|
566
|
-
password: password
|
|
567
|
-
})
|
|
568
|
-
];
|
|
569
|
-
case 1:
|
|
570
|
-
_state.sent();
|
|
571
|
-
// Attempt to recover key shares from backup if not provided
|
|
572
|
-
return [
|
|
573
|
-
4,
|
|
574
|
-
_this.ensureKeySharesRecovered({
|
|
575
|
-
accountAddress: accountAddress,
|
|
576
|
-
password: password,
|
|
577
|
-
walletOperation: WalletOperation.EXPORT_PRIVATE_KEY,
|
|
578
|
-
externalServerKeyShares: externalServerKeyShares,
|
|
579
|
-
errorMessage: 'External server key shares are required to export private key. No backup shares available for recovery.'
|
|
580
|
-
})
|
|
581
|
-
];
|
|
582
|
-
case 2:
|
|
583
|
-
_state.sent();
|
|
584
546
|
return [
|
|
585
547
|
4,
|
|
586
548
|
_this.exportKey({
|
|
587
549
|
accountAddress: accountAddress,
|
|
588
550
|
chainName: _this.chainName,
|
|
589
551
|
password: password,
|
|
590
|
-
externalServerKeyShares: externalServerKeyShares
|
|
552
|
+
externalServerKeyShares: externalServerKeyShares,
|
|
553
|
+
walletMetadata: walletMetadata
|
|
591
554
|
})
|
|
592
555
|
];
|
|
593
|
-
case
|
|
556
|
+
case 2:
|
|
594
557
|
derivedPrivateKey = _state.sent().derivedPrivateKey;
|
|
595
558
|
if (!derivedPrivateKey) {
|
|
596
559
|
throw new Error('Derived private key is undefined');
|
|
@@ -601,7 +564,7 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
601
564
|
2,
|
|
602
565
|
privateScalarHex
|
|
603
566
|
];
|
|
604
|
-
case
|
|
567
|
+
case 3:
|
|
605
568
|
error = _state.sent();
|
|
606
569
|
logError({
|
|
607
570
|
message: ERROR_EXPORT_PRIVATE_KEY,
|
|
@@ -611,7 +574,7 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
611
574
|
}
|
|
612
575
|
});
|
|
613
576
|
throw new Error(ERROR_EXPORT_PRIVATE_KEY);
|
|
614
|
-
case
|
|
577
|
+
case 4:
|
|
615
578
|
return [
|
|
616
579
|
2
|
|
617
580
|
];
|
|
@@ -665,14 +628,14 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
665
628
|
* @param thresholdSignatureScheme - The threshold signature scheme to use for the wallet.
|
|
666
629
|
* @param password - The password to use for the wallet.
|
|
667
630
|
* @param onError - The function to call if an error occurs.
|
|
668
|
-
* @param
|
|
631
|
+
* @param backUpToDynamic - Whether to back up the external server key shares to the client share service.
|
|
669
632
|
* @param publicAddressCheck - Optional public address to verify against the derived address.
|
|
670
|
-
* @returns The
|
|
633
|
+
* @returns The walletMetadata, public key hex, raw public key, and external server key shares.
|
|
671
634
|
*/ function importPrivateKey(param) {
|
|
672
|
-
var privateKey = param.privateKey, chainName = param.chainName, thresholdSignatureScheme = param.thresholdSignatureScheme,
|
|
635
|
+
var privateKey = param.privateKey, chainName = param.chainName, thresholdSignatureScheme = param.thresholdSignatureScheme, password = param.password, onError = param.onError, _param_backUpToDynamic = param.backUpToDynamic, backUpToDynamic = _param_backUpToDynamic === void 0 ? false : _param_backUpToDynamic, publicAddressCheck = param.publicAddressCheck;
|
|
673
636
|
var _this = this;
|
|
674
637
|
return _async_to_generator(function() {
|
|
675
|
-
var ceremonyCeremonyCompleteResolver, ceremonyCompletePromise, formattedPrivateKey, publicKeyHex, derivedAddress, _ref, rawPublicKey, externalServerKeyShares, resultPublicKeyHex, accountAddress,
|
|
638
|
+
var resolvedWalletId, ceremonyCeremonyCompleteResolver, ceremonyCompletePromise, formattedPrivateKey, publicKeyHex, derivedAddress, _ref, rawPublicKey, externalServerKeyShares, resultPublicKeyHex, accountAddress, chainConfig, walletMetadata, _ref1, keySharesWithBackupStatus, backupInfo, error;
|
|
676
639
|
return _ts_generator(this, function(_state) {
|
|
677
640
|
switch(_state.label){
|
|
678
641
|
case 0:
|
|
@@ -700,20 +663,10 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
700
663
|
chainName: chainName,
|
|
701
664
|
thresholdSignatureScheme: thresholdSignatureScheme,
|
|
702
665
|
privateKey: formattedPrivateKey,
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
walletId: walletId,
|
|
708
|
-
chainName: _this.chainName,
|
|
709
|
-
thresholdSignatureScheme: thresholdSignatureScheme,
|
|
710
|
-
derivationPath: JSON.stringify(Object.fromEntries(chainConfig.derivationPath.map(function(value, index) {
|
|
711
|
-
return [
|
|
712
|
-
index,
|
|
713
|
-
value
|
|
714
|
-
];
|
|
715
|
-
})))
|
|
716
|
-
});
|
|
666
|
+
password: password,
|
|
667
|
+
backUpToDynamic: backUpToDynamic,
|
|
668
|
+
onCeremonyComplete: function(_accountAddress, walletId) {
|
|
669
|
+
resolvedWalletId = walletId;
|
|
717
670
|
ceremonyCeremonyCompleteResolver(undefined);
|
|
718
671
|
},
|
|
719
672
|
onError: function(e) {
|
|
@@ -734,7 +687,7 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
734
687
|
];
|
|
735
688
|
case 2:
|
|
736
689
|
_state.sent();
|
|
737
|
-
if (!rawPublicKey || !externalServerKeyShares || !(typeof rawPublicKey === 'string' || _instanceof(rawPublicKey, Uint8Array))) {
|
|
690
|
+
if (!rawPublicKey || !externalServerKeyShares || !resolvedWalletId || !(typeof rawPublicKey === 'string' || _instanceof(rawPublicKey, Uint8Array))) {
|
|
738
691
|
throw new Error(ERROR_IMPORT_PRIVATE_KEY);
|
|
739
692
|
}
|
|
740
693
|
resultPublicKeyHex = typeof rawPublicKey === 'string' ? rawPublicKey : Buffer.from(rawPublicKey).toString('hex');
|
|
@@ -745,25 +698,40 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
745
698
|
if (accountAddress !== derivedAddress) {
|
|
746
699
|
throw new Error("Public key mismatch: derived address ".concat(accountAddress, " !== expected ").concat(derivedAddress));
|
|
747
700
|
}
|
|
701
|
+
chainConfig = getMPCChainConfig(_this.chainName);
|
|
702
|
+
walletMetadata = {
|
|
703
|
+
walletId: resolvedWalletId,
|
|
704
|
+
accountAddress: accountAddress,
|
|
705
|
+
chainName: _this.chainName,
|
|
706
|
+
thresholdSignatureScheme: thresholdSignatureScheme,
|
|
707
|
+
derivationPath: JSON.stringify(Object.fromEntries(chainConfig.derivationPath.map(function(value, index) {
|
|
708
|
+
return [
|
|
709
|
+
index,
|
|
710
|
+
value
|
|
711
|
+
];
|
|
712
|
+
})))
|
|
713
|
+
};
|
|
748
714
|
return [
|
|
749
715
|
4,
|
|
750
716
|
_this.storeEncryptedBackupByWalletWithRetry({
|
|
751
717
|
accountAddress: accountAddress,
|
|
752
718
|
externalServerKeyShares: externalServerKeyShares,
|
|
753
719
|
password: password,
|
|
754
|
-
|
|
720
|
+
backUpToDynamic: backUpToDynamic,
|
|
721
|
+
walletMetadata: walletMetadata
|
|
755
722
|
})
|
|
756
723
|
];
|
|
757
724
|
case 3:
|
|
758
|
-
|
|
725
|
+
_ref1 = _state.sent(), keySharesWithBackupStatus = _ref1.keySharesWithBackupStatus, backupInfo = _ref1.backupInfo;
|
|
726
|
+
walletMetadata.externalServerKeySharesBackupInfo = backupInfo;
|
|
759
727
|
return [
|
|
760
728
|
2,
|
|
761
729
|
{
|
|
762
|
-
|
|
730
|
+
walletMetadata: walletMetadata,
|
|
763
731
|
publicKeyHex: resultPublicKeyHex,
|
|
764
732
|
rawPublicKey: rawPublicKey,
|
|
765
733
|
externalServerKeyShares: externalServerKeyShares,
|
|
766
|
-
externalKeySharesWithBackupStatus:
|
|
734
|
+
externalKeySharesWithBackupStatus: keySharesWithBackupStatus
|
|
767
735
|
}
|
|
768
736
|
];
|
|
769
737
|
case 4:
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dynamic-labs-wallet/node-ton",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "1.0.0-beta",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
7
|
-
"@dynamic-labs-wallet/node": "0.0
|
|
7
|
+
"@dynamic-labs-wallet/node": "1.0.0-beta",
|
|
8
8
|
"@ton/crypto": "^3.3.0",
|
|
9
9
|
"@ton/ton": "^16.0.0"
|
|
10
10
|
},
|
package/src/client/client.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DynamicWalletClient, type DynamicWalletClientProps, type Ed25519KeygenResult, type ServerKeyShare, type ThresholdSignatureScheme } from '@dynamic-labs-wallet/node';
|
|
1
|
+
import { DynamicWalletClient, type DynamicWalletClientProps, type Ed25519KeygenResult, type ServerKeyShare, type ThresholdSignatureScheme, type WalletMetadata } from '@dynamic-labs-wallet/node';
|
|
2
2
|
export declare class DynamicTonWalletClient extends DynamicWalletClient {
|
|
3
3
|
readonly chainName = "TON";
|
|
4
4
|
constructor({ environmentId, baseApiUrl, baseMPCRelayApiUrl, debug, enableMPCAccelerator, logger, }: DynamicWalletClientProps);
|
|
@@ -7,20 +7,18 @@ export declare class DynamicTonWalletClient extends DynamicWalletClient {
|
|
|
7
7
|
* @param thresholdSignatureScheme - The threshold signature scheme to use for the wallet.
|
|
8
8
|
* @param password - The password to use for the wallet.
|
|
9
9
|
* @param onError - The function to call if an error occurs.
|
|
10
|
-
* @param
|
|
11
|
-
* @returns The
|
|
10
|
+
* @param backUpToDynamic - Whether to back up the external server key shares to the client share service. By default, it is false.
|
|
11
|
+
* @returns The walletMetadata, public key hex, raw public key, and external server key shares.
|
|
12
12
|
*/
|
|
13
|
-
createWalletAccount({ thresholdSignatureScheme, password, onError,
|
|
13
|
+
createWalletAccount({ thresholdSignatureScheme, password, onError, backUpToDynamic, }: {
|
|
14
14
|
thresholdSignatureScheme: ThresholdSignatureScheme;
|
|
15
15
|
password?: string;
|
|
16
16
|
onError?: (error: Error) => void;
|
|
17
|
-
|
|
17
|
+
backUpToDynamic?: boolean;
|
|
18
18
|
}): Promise<{
|
|
19
|
-
|
|
19
|
+
walletMetadata: WalletMetadata;
|
|
20
20
|
publicKeyHex: string;
|
|
21
21
|
rawPublicKey: Uint8Array | string;
|
|
22
|
-
walletId: string;
|
|
23
|
-
/** @deprecated Use externalKeySharesWithBackupStatus instead */
|
|
24
22
|
externalServerKeyShares: ServerKeyShare[];
|
|
25
23
|
externalKeySharesWithBackupStatus: Array<{
|
|
26
24
|
share: ServerKeyShare;
|
|
@@ -30,44 +28,44 @@ export declare class DynamicTonWalletClient extends DynamicWalletClient {
|
|
|
30
28
|
/**
|
|
31
29
|
* Signs a message using MPC
|
|
32
30
|
* @param message - The message to sign
|
|
33
|
-
* @param
|
|
31
|
+
* @param walletMetadata - Wallet metadata (the full object returned by createWalletAccount/importPrivateKey, with backupInfo merged from any subsequent updatePassword/refresh/reshare)
|
|
34
32
|
* @param password - The password for encrypted backup shares
|
|
35
33
|
* @param externalServerKeyShares - The external server key shares
|
|
36
34
|
* @param onError - The function to call if an error occurs
|
|
37
35
|
* @returns The signature as a base64 string
|
|
38
36
|
*/
|
|
39
|
-
signMessage({ message,
|
|
37
|
+
signMessage({ message, walletMetadata, password, externalServerKeyShares, onError, }: {
|
|
40
38
|
message: string;
|
|
41
|
-
|
|
39
|
+
walletMetadata: WalletMetadata;
|
|
42
40
|
password?: string;
|
|
43
41
|
externalServerKeyShares?: ServerKeyShare[];
|
|
44
42
|
onError?: (error: Error) => void;
|
|
45
43
|
}): Promise<string>;
|
|
46
44
|
/**
|
|
47
45
|
* Signs a transaction using MPC
|
|
48
|
-
* @param
|
|
46
|
+
* @param walletMetadata - Wallet metadata (the full object returned by createWalletAccount/importPrivateKey, with backupInfo merged from any subsequent updatePassword/refresh/reshare)
|
|
49
47
|
* @param transaction - The serialized transaction to sign
|
|
50
48
|
* @param password - The password for encrypted backup shares
|
|
51
49
|
* @param externalServerKeyShares - The external server key shares
|
|
52
50
|
* @param onError - The function to call if an error occurs
|
|
53
51
|
* @returns The signature as a base64 string
|
|
54
52
|
*/
|
|
55
|
-
signTransaction({
|
|
56
|
-
|
|
53
|
+
signTransaction({ walletMetadata, transaction, password, externalServerKeyShares, onError, }: {
|
|
54
|
+
walletMetadata: WalletMetadata;
|
|
57
55
|
transaction: string;
|
|
58
56
|
password?: string;
|
|
59
57
|
externalServerKeyShares?: ServerKeyShare[];
|
|
60
58
|
onError?: (error: Error) => void;
|
|
61
59
|
}): Promise<string>;
|
|
62
60
|
/**
|
|
63
|
-
* Exports the private key for a given
|
|
64
|
-
* @param
|
|
61
|
+
* Exports the private key for a given wallet
|
|
62
|
+
* @param walletMetadata - Wallet metadata (the full object returned by createWalletAccount/importPrivateKey, with backupInfo merged from any subsequent updatePassword/refresh/reshare)
|
|
65
63
|
* @param password - The password for encrypted backup shares
|
|
66
64
|
* @param externalServerKeyShares - The external server key shares
|
|
67
65
|
* @returns The private key as a hex string
|
|
68
66
|
*/
|
|
69
|
-
exportPrivateKey({
|
|
70
|
-
|
|
67
|
+
exportPrivateKey({ walletMetadata, password, externalServerKeyShares, }: {
|
|
68
|
+
walletMetadata: WalletMetadata;
|
|
71
69
|
password?: string;
|
|
72
70
|
externalServerKeyShares?: ServerKeyShare[];
|
|
73
71
|
}): Promise<string>;
|
|
@@ -90,23 +88,22 @@ export declare class DynamicTonWalletClient extends DynamicWalletClient {
|
|
|
90
88
|
* @param thresholdSignatureScheme - The threshold signature scheme to use for the wallet.
|
|
91
89
|
* @param password - The password to use for the wallet.
|
|
92
90
|
* @param onError - The function to call if an error occurs.
|
|
93
|
-
* @param
|
|
91
|
+
* @param backUpToDynamic - Whether to back up the external server key shares to the client share service.
|
|
94
92
|
* @param publicAddressCheck - Optional public address to verify against the derived address.
|
|
95
|
-
* @returns The
|
|
93
|
+
* @returns The walletMetadata, public key hex, raw public key, and external server key shares.
|
|
96
94
|
*/
|
|
97
|
-
importPrivateKey({ privateKey, chainName, thresholdSignatureScheme, password, onError,
|
|
95
|
+
importPrivateKey({ privateKey, chainName, thresholdSignatureScheme, password, onError, backUpToDynamic, publicAddressCheck, }: {
|
|
98
96
|
privateKey: string;
|
|
99
97
|
chainName: string;
|
|
100
98
|
thresholdSignatureScheme: ThresholdSignatureScheme;
|
|
101
99
|
password?: string;
|
|
102
100
|
onError?: (error: Error) => void;
|
|
103
|
-
|
|
101
|
+
backUpToDynamic?: boolean;
|
|
104
102
|
publicAddressCheck?: string;
|
|
105
103
|
}): Promise<{
|
|
106
|
-
|
|
104
|
+
walletMetadata: WalletMetadata;
|
|
107
105
|
publicKeyHex: string;
|
|
108
106
|
rawPublicKey: Uint8Array | string | undefined;
|
|
109
|
-
/** @deprecated Use externalKeySharesWithBackupStatus instead */
|
|
110
107
|
externalServerKeyShares: ServerKeyShare[];
|
|
111
108
|
externalKeySharesWithBackupStatus: Array<{
|
|
112
109
|
share: ServerKeyShare;
|
|
@@ -131,6 +128,14 @@ export declare class DynamicTonWalletClient extends DynamicWalletClient {
|
|
|
131
128
|
* Gets all TON wallets
|
|
132
129
|
* @returns Array of TON wallets
|
|
133
130
|
*/
|
|
134
|
-
getTonWallets(): Promise<
|
|
131
|
+
getTonWallets(): Promise<{
|
|
132
|
+
walletId: string;
|
|
133
|
+
chainName: string;
|
|
134
|
+
accountAddress: string;
|
|
135
|
+
externalServerKeySharesBackupInfo: import("@dynamic-labs-wallet/core").KeyShareBackupInfo;
|
|
136
|
+
externalServerKeyShares: never[];
|
|
137
|
+
derivationPath: string | undefined;
|
|
138
|
+
thresholdSignatureScheme: ThresholdSignatureScheme;
|
|
139
|
+
}[]>;
|
|
135
140
|
}
|
|
136
141
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,mBAAmB,EACnB,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,wBAAwB,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"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"}
|