@subwallet/extension-base 1.3.22-0 → 1.3.24-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/background/KoniTypes.d.ts +77 -4
  2. package/background/KoniTypes.js +2 -0
  3. package/cjs/background/KoniTypes.js +2 -0
  4. package/cjs/constants/environment.js +4 -2
  5. package/cjs/constants/index.js +21 -4
  6. package/cjs/constants/signing.js +6 -2
  7. package/cjs/core/logic-validation/recipientAddress.js +9 -1
  8. package/cjs/core/logic-validation/transfer.js +57 -36
  9. package/cjs/core/types.js +1 -0
  10. package/cjs/core/utils.js +12 -1
  11. package/cjs/defaults.js +1 -1
  12. package/cjs/koni/api/dotsama/crowdloan.js +1 -1
  13. package/cjs/koni/api/nft/index.js +9 -16
  14. package/cjs/koni/api/staking/index.js +3 -4
  15. package/cjs/koni/background/handlers/Extension.js +343 -185
  16. package/cjs/koni/background/handlers/State.js +17 -2
  17. package/cjs/koni/background/handlers/Tabs.js +1 -1
  18. package/cjs/packageInfo.js +1 -1
  19. package/cjs/services/balance-service/helpers/subscribe/cardano/consts.js +11 -0
  20. package/cjs/services/balance-service/helpers/subscribe/cardano/index.js +63 -0
  21. package/cjs/services/balance-service/helpers/subscribe/cardano/types.js +1 -0
  22. package/cjs/services/balance-service/helpers/subscribe/cardano/utils.js +74 -0
  23. package/cjs/services/balance-service/helpers/subscribe/index.js +21 -7
  24. package/cjs/services/balance-service/helpers/subscribe/ton/utils.js +2 -2
  25. package/cjs/services/balance-service/index.js +4 -2
  26. package/cjs/services/balance-service/transfer/cardano-transfer.js +122 -0
  27. package/cjs/services/balance-service/transfer/smart-contract.js +24 -3
  28. package/cjs/services/balance-service/transfer/token.js +4 -4
  29. package/cjs/services/chain-service/handler/CardanoApi.js +176 -0
  30. package/cjs/services/chain-service/handler/CardanoChainHandler.js +83 -0
  31. package/cjs/services/chain-service/handler/TonApi.js +2 -5
  32. package/cjs/services/chain-service/index.js +40 -7
  33. package/cjs/services/chain-service/utils/index.js +40 -11
  34. package/cjs/services/chain-service/utils/patch.js +1 -1
  35. package/cjs/services/earning-service/handlers/liquid-staking/bifrost-manta.js +1 -1
  36. package/cjs/services/earning-service/handlers/liquid-staking/bifrost.js +1 -1
  37. package/cjs/services/earning-service/service.js +6 -12
  38. package/cjs/services/fee-service/service.js +19 -8
  39. package/cjs/services/fee-service/utils/tokenPayFee.js +151 -0
  40. package/cjs/services/history-service/index.js +4 -6
  41. package/cjs/services/inapp-notification-service/index.js +12 -4
  42. package/cjs/services/keyring-service/context/account-context.js +17 -2
  43. package/cjs/services/keyring-service/context/handlers/Derive.js +10 -7
  44. package/cjs/services/keyring-service/context/handlers/Migration.js +268 -0
  45. package/cjs/services/keyring-service/context/handlers/Mnemonic.js +2 -2
  46. package/cjs/services/keyring-service/context/handlers/Secret.js +1 -1
  47. package/cjs/services/keyring-service/utils.js +18 -0
  48. package/cjs/services/request-service/handler/CardanoRequestHandler.js +172 -0
  49. package/cjs/services/request-service/handler/EvmRequestHandler.js +1 -1
  50. package/cjs/services/request-service/handler/MetadataRequestHandler.js +5 -13
  51. package/cjs/services/request-service/index.js +22 -4
  52. package/cjs/services/setting-service/constants.js +10 -1
  53. package/cjs/services/storage-service/DatabaseService.js +3 -0
  54. package/cjs/services/storage-service/db-stores/InappNotification.js +6 -0
  55. package/cjs/services/swap-service/handler/asset-hub/handler.js +0 -59
  56. package/cjs/services/swap-service/handler/chainflip-handler.js +33 -281
  57. package/cjs/services/swap-service/handler/hydradx-handler.js +23 -190
  58. package/cjs/services/swap-service/handler/simpleswap-handler.js +1 -222
  59. package/cjs/services/swap-service/handler/uniswap-handler.js +331 -0
  60. package/cjs/services/swap-service/index.js +31 -22
  61. package/cjs/services/swap-service/utils.js +21 -38
  62. package/cjs/services/transaction-service/helpers/index.js +6 -1
  63. package/cjs/services/transaction-service/index.js +286 -26
  64. package/cjs/services/transaction-service/utils.js +5 -1
  65. package/cjs/types/account/info/keyring.js +12 -1
  66. package/cjs/types/fee/cardano.js +1 -0
  67. package/cjs/types/swap/index.js +7 -2
  68. package/cjs/utils/account/analyze.js +2 -1
  69. package/cjs/utils/account/common.js +29 -20
  70. package/cjs/utils/account/derive/info/solo.js +9 -4
  71. package/cjs/utils/account/derive/validate.js +36 -2
  72. package/cjs/utils/account/transform.js +38 -13
  73. package/cjs/utils/fee/transfer.js +87 -21
  74. package/cjs/utils/index.js +2 -2
  75. package/cjs/utils/staticData/index.js +7 -2
  76. package/constants/environment.d.ts +1 -0
  77. package/constants/environment.js +2 -1
  78. package/constants/index.d.ts +6 -1
  79. package/constants/index.js +14 -1
  80. package/constants/signing.js +6 -2
  81. package/core/logic-validation/recipientAddress.js +11 -3
  82. package/core/logic-validation/transfer.d.ts +1 -1
  83. package/core/logic-validation/transfer.js +33 -12
  84. package/core/substrate/xcm-parser.d.ts +1 -1
  85. package/core/types.d.ts +1 -0
  86. package/core/types.js +1 -0
  87. package/core/utils.d.ts +1 -0
  88. package/core/utils.js +13 -3
  89. package/defaults.d.ts +1 -1
  90. package/defaults.js +1 -1
  91. package/koni/api/dotsama/crowdloan.js +3 -3
  92. package/koni/api/nft/index.js +10 -16
  93. package/koni/api/nft/story_odyssey_nft/index.d.ts +1 -1
  94. package/koni/api/staking/index.js +4 -5
  95. package/koni/background/handlers/Extension.d.ts +9 -0
  96. package/koni/background/handlers/Extension.js +225 -69
  97. package/koni/background/handlers/State.d.ts +6 -2
  98. package/koni/background/handlers/State.js +18 -3
  99. package/koni/background/handlers/Tabs.js +1 -1
  100. package/package.json +76 -9
  101. package/packageInfo.js +1 -1
  102. package/services/balance-service/helpers/subscribe/cardano/consts.d.ts +1 -0
  103. package/services/balance-service/helpers/subscribe/cardano/consts.js +4 -0
  104. package/services/balance-service/helpers/subscribe/cardano/index.d.ts +2 -0
  105. package/services/balance-service/helpers/subscribe/cardano/index.js +57 -0
  106. package/services/balance-service/helpers/subscribe/cardano/types.d.ts +34 -0
  107. package/services/balance-service/helpers/subscribe/cardano/types.js +1 -0
  108. package/services/balance-service/helpers/subscribe/cardano/utils.d.ts +15 -0
  109. package/services/balance-service/helpers/subscribe/cardano/utils.js +62 -0
  110. package/services/balance-service/helpers/subscribe/index.d.ts +2 -2
  111. package/services/balance-service/helpers/subscribe/index.js +23 -9
  112. package/services/balance-service/helpers/subscribe/ton/utils.d.ts +1 -1
  113. package/services/balance-service/helpers/subscribe/ton/utils.js +1 -1
  114. package/services/balance-service/index.js +4 -2
  115. package/services/balance-service/transfer/cardano-transfer.d.ts +24 -0
  116. package/services/balance-service/transfer/cardano-transfer.js +114 -0
  117. package/services/balance-service/transfer/smart-contract.d.ts +4 -2
  118. package/services/balance-service/transfer/smart-contract.js +24 -3
  119. package/services/balance-service/transfer/token.d.ts +1 -1
  120. package/services/balance-service/transfer/token.js +2 -2
  121. package/services/chain-service/handler/CardanoApi.d.ts +38 -0
  122. package/services/chain-service/handler/CardanoApi.js +167 -0
  123. package/services/chain-service/handler/CardanoChainHandler.d.ts +17 -0
  124. package/services/chain-service/handler/CardanoChainHandler.js +75 -0
  125. package/services/chain-service/handler/TonApi.js +3 -6
  126. package/services/chain-service/handler/types.d.ts +1 -0
  127. package/services/chain-service/index.d.ts +4 -1
  128. package/services/chain-service/index.js +41 -8
  129. package/services/chain-service/types.d.ts +9 -1
  130. package/services/chain-service/utils/index.d.ts +4 -0
  131. package/services/chain-service/utils/index.js +32 -11
  132. package/services/chain-service/utils/patch.js +1 -1
  133. package/services/earning-service/handlers/liquid-staking/bifrost-manta.js +1 -1
  134. package/services/earning-service/handlers/liquid-staking/bifrost.js +1 -1
  135. package/services/earning-service/service.js +8 -14
  136. package/services/fee-service/interfaces.d.ts +25 -0
  137. package/services/fee-service/service.js +19 -8
  138. package/services/fee-service/utils/tokenPayFee.d.ts +8 -0
  139. package/services/fee-service/utils/tokenPayFee.js +141 -0
  140. package/services/history-service/index.js +6 -8
  141. package/services/inapp-notification-service/index.d.ts +3 -4
  142. package/services/inapp-notification-service/index.js +14 -6
  143. package/services/keyring-service/context/account-context.d.ts +6 -2
  144. package/services/keyring-service/context/account-context.js +17 -2
  145. package/services/keyring-service/context/handlers/Derive.d.ts +1 -1
  146. package/services/keyring-service/context/handlers/Derive.js +10 -8
  147. package/services/keyring-service/context/handlers/Migration.d.ts +17 -0
  148. package/services/keyring-service/context/handlers/Migration.js +258 -0
  149. package/services/keyring-service/context/handlers/Mnemonic.js +2 -2
  150. package/services/keyring-service/context/handlers/Secret.js +2 -2
  151. package/services/keyring-service/utils.d.ts +2 -0
  152. package/services/keyring-service/utils.js +11 -0
  153. package/services/request-service/handler/CardanoRequestHandler.d.ts +16 -0
  154. package/services/request-service/handler/CardanoRequestHandler.js +163 -0
  155. package/services/request-service/handler/EvmRequestHandler.js +1 -1
  156. package/services/request-service/handler/MetadataRequestHandler.d.ts +1 -1
  157. package/services/request-service/handler/MetadataRequestHandler.js +5 -13
  158. package/services/request-service/index.d.ts +7 -4
  159. package/services/request-service/index.js +21 -7
  160. package/services/setting-service/constants.d.ts +3 -0
  161. package/services/setting-service/constants.js +6 -0
  162. package/services/storage-service/DatabaseService.d.ts +1 -0
  163. package/services/storage-service/DatabaseService.js +3 -0
  164. package/services/storage-service/db-stores/InappNotification.d.ts +1 -0
  165. package/services/storage-service/db-stores/InappNotification.js +6 -0
  166. package/services/swap-service/handler/asset-hub/handler.d.ts +1 -4
  167. package/services/swap-service/handler/asset-hub/handler.js +2 -61
  168. package/services/swap-service/handler/base-handler.d.ts +1 -4
  169. package/services/swap-service/handler/chainflip-handler.d.ts +2 -9
  170. package/services/swap-service/handler/chainflip-handler.js +31 -280
  171. package/services/swap-service/handler/hydradx-handler.d.ts +1 -6
  172. package/services/swap-service/handler/hydradx-handler.js +13 -180
  173. package/services/swap-service/handler/simpleswap-handler.d.ts +1 -4
  174. package/services/swap-service/handler/simpleswap-handler.js +5 -226
  175. package/services/swap-service/handler/uniswap-handler.d.ts +41 -0
  176. package/services/swap-service/handler/uniswap-handler.js +323 -0
  177. package/services/swap-service/index.js +30 -22
  178. package/services/swap-service/utils.d.ts +1 -5
  179. package/services/swap-service/utils.js +7 -21
  180. package/services/transaction-service/helpers/index.d.ts +2 -0
  181. package/services/transaction-service/helpers/index.js +4 -0
  182. package/services/transaction-service/index.d.ts +8 -2
  183. package/services/transaction-service/index.js +273 -17
  184. package/services/transaction-service/types.d.ts +7 -0
  185. package/services/transaction-service/utils.js +7 -2
  186. package/types/account/info/keyring.d.ts +4 -1
  187. package/types/account/info/keyring.js +9 -0
  188. package/types/account/info/proxy.d.ts +2 -0
  189. package/types/balance/index.d.ts +4 -1
  190. package/types/fee/base.d.ts +1 -1
  191. package/types/fee/cardano.d.ts +18 -0
  192. package/types/fee/cardano.js +1 -0
  193. package/types/fee/option.d.ts +1 -1
  194. package/types/fee/subscription.d.ts +4 -3
  195. package/types/swap/index.d.ts +11 -3
  196. package/types/swap/index.js +7 -2
  197. package/utils/account/analyze.js +2 -1
  198. package/utils/account/common.d.ts +11 -6
  199. package/utils/account/common.js +28 -19
  200. package/utils/account/derive/info/solo.js +10 -5
  201. package/utils/account/derive/validate.d.ts +1 -0
  202. package/utils/account/derive/validate.js +34 -1
  203. package/utils/account/transform.d.ts +2 -1
  204. package/utils/account/transform.js +37 -13
  205. package/utils/fee/transfer.d.ts +3 -2
  206. package/utils/fee/transfer.js +90 -24
  207. package/utils/index.js +4 -4
  208. package/utils/staticData/index.d.ts +4 -1
  209. package/utils/staticData/index.js +5 -1
  210. package/utils/staticData/oldChainPrefix.json +1 -0
@@ -40,6 +40,7 @@ class TransactionService {
40
40
  aliveProcessMap = new Map();
41
41
  transactionSubject = new _rxjs.BehaviorSubject({});
42
42
  aliveProcessSubject = new _rxjs.BehaviorSubject(this.aliveProcessMap);
43
+ cacheProcessInfo = {};
43
44
  get transactions() {
44
45
  return this.transactionSubject.getValue();
45
46
  }
@@ -96,8 +97,6 @@ class TransactionService {
96
97
  (0, _transfer.checkSupportForAction)(validationResponse, blockedActionsMap);
97
98
  }
98
99
  const transaction = transactionInput.transaction;
99
- const nativeTokenInfo = this.state.chainService.getNativeTokenInfo(chain);
100
- const tokenPayFeeInfo = transactionInput.nonNativeTokenPayFeeSlug ? this.chainService.getAssetBySlug(transactionInput.nonNativeTokenPayFeeSlug) : undefined;
101
100
 
102
101
  // Check duplicated transaction
103
102
  validationResponse.errors.push(...this.checkDuplicate(transactionInput));
@@ -110,16 +109,25 @@ class TransactionService {
110
109
  const substrateApi = this.state.chainService.getSubstrateApi(chainInfo.slug);
111
110
  const evmApi = this.state.chainService.getEvmApi(chainInfo.slug);
112
111
  const tonApi = this.state.chainService.getTonApi(chainInfo.slug);
113
- const isNoEvmApi = transaction && !(0, _helpers.isSubstrateTransaction)(transaction) && !(0, _helpers.isTonTransaction)(transaction) && !evmApi; // todo: should split isEvmTx && isNoEvmApi. Because other chains type also has no Evm Api
112
+ const cardanoApi = this.state.chainService.getCardanoApi(chainInfo.slug);
113
+ // todo: should split into isEvmTx && isNoEvmApi. Because other chains type also has no Evm Api. Same to all blockchain.
114
+ // todo: refactor check evmTransaction.
115
+ const isNoEvmApi = transaction && !(0, _helpers.isSubstrateTransaction)(transaction) && !(0, _helpers.isTonTransaction)(transaction) && !(0, _helpers.isCardanoTransaction)(transaction) && !evmApi;
114
116
  const isNoTonApi = transaction && (0, _helpers.isTonTransaction)(transaction) && !tonApi;
115
- if (isNoEvmApi || isNoTonApi) {
117
+ const isNoCardanoApi = transaction && (0, _helpers.isCardanoTransaction)(transaction) && !cardanoApi;
118
+ if (isNoEvmApi || isNoTonApi || isNoCardanoApi) {
116
119
  validationResponse.errors.push(new _TransactionError.TransactionError(_types.BasicTxErrorType.CHAIN_DISCONNECTED, undefined));
117
120
  }
118
121
 
119
122
  // Estimate fee for transaction
120
123
  const id = (0, _getId.getId)();
121
124
  const feeInfo = await this.state.feeService.subscribeChainFee(id, chain, 'evm');
122
- validationResponse.estimateFee = await (0, _transfer.estimateFeeForTransaction)(validationResponse, transaction, chainInfo, evmApi, substrateApi, feeInfo, nativeTokenInfo, tokenPayFeeInfo, transactionInput.isTransferLocalTokenAndPayThatTokenAsFee);
125
+ const nativeTokenInfo = this.state.chainService.getNativeTokenInfo(chain);
126
+ const tokenPayFeeSlug = transactionInput.tokenPayFeeSlug;
127
+ const isNonNativeTokenPayFee = tokenPayFeeSlug && !(0, _utils2._isNativeTokenBySlug)(tokenPayFeeSlug);
128
+ const nonNativeTokenPayFeeInfo = isNonNativeTokenPayFee ? this.chainService.getAssetBySlug(tokenPayFeeSlug) : undefined;
129
+ const priceMap = (await this.state.priceService.getPrice()).priceMap;
130
+ validationResponse.estimateFee = await (0, _transfer.estimateFeeForTransaction)(validationResponse, transaction, chainInfo, evmApi, substrateApi, priceMap, feeInfo, nativeTokenInfo, nonNativeTokenPayFeeInfo, transactionInput.isTransferLocalTokenAndPayThatTokenAsFee);
123
131
  const chainInfoMap = this.state.chainService.getChainInfoMap();
124
132
 
125
133
  // Check account signing transaction
@@ -176,6 +184,10 @@ class TransactionService {
176
184
  }
177
185
  };
178
186
  }
187
+ getCacheInfo(processId, step) {
188
+ var _this$cacheProcessInf;
189
+ return ((_this$cacheProcessInf = this.cacheProcessInfo[processId]) === null || _this$cacheProcessInf === void 0 ? void 0 : _this$cacheProcessInf[step]) || '';
190
+ }
179
191
  updateAliveProcess() {
180
192
  this.aliveProcessSubject.next(this.aliveProcessMap);
181
193
  }
@@ -270,9 +282,61 @@ class TransactionService {
270
282
  'eventsHandler' in validatedTransaction && delete validatedTransaction.eventsHandler;
271
283
  return validatedTransaction;
272
284
  }
285
+ async handlePermitTransaction(transaction) {
286
+ var _transaction$step;
287
+ const transactionId = (0, _helpers.getTransactionId)(transaction.chainType, transaction.chain, true);
288
+ const validatedTransaction = {
289
+ ...transaction,
290
+ id: transactionId,
291
+ extrinsicHash: '',
292
+ status: undefined,
293
+ errors: transaction.errors || [],
294
+ warnings: transaction.warnings || [],
295
+ processId: (_transaction$step = transaction.step) === null || _transaction$step === void 0 ? void 0 : _transaction$step.processId
296
+ };
297
+ const txInput = {
298
+ ...transaction,
299
+ isInternal: true,
300
+ status: _KoniTypes.ExtrinsicStatus.QUEUED,
301
+ id: transactionId,
302
+ extrinsicHash: transactionId,
303
+ createdAt: new Date().getTime(),
304
+ updatedAt: new Date().getTime()
305
+ };
306
+ const _data = transaction.data;
307
+ const emitter = this.sendPermitTransaction(txInput);
308
+ await new Promise((resolve, reject) => {
309
+ emitter.on('success', data => {
310
+ validatedTransaction.id = data.id;
311
+ validatedTransaction.extrinsicHash = data.extrinsicHash;
312
+ this.cacheProcessInfo[_data.processId] = {
313
+ [_data.step]: data.extrinsicHash
314
+ };
315
+ resolve();
316
+ });
317
+ emitter.on('error', data => {
318
+ if (data.errors.length > 0) {
319
+ validatedTransaction.errors.push(...data.errors);
320
+ resolve();
321
+ }
322
+ });
323
+ emitter.on('timeout', data => {
324
+ if (transaction.errorOnTimeOut && data.errors.length > 0) {
325
+ validatedTransaction.errors.push(...data.errors);
326
+ resolve();
327
+ }
328
+ });
329
+ });
330
+
331
+ // @ts-ignore
332
+ 'transaction' in validatedTransaction && delete validatedTransaction.transaction;
333
+ 'additionalValidator' in validatedTransaction && delete validatedTransaction.additionalValidator;
334
+ 'eventsHandler' in validatedTransaction && delete validatedTransaction.eventsHandler;
335
+ return validatedTransaction;
336
+ }
273
337
  async sendTransaction(transaction) {
274
338
  // Send Transaction
275
- const emitter = await (transaction.chainType === 'substrate' ? this.signAndSendSubstrateTransaction(transaction) : transaction.chainType === 'evm' ? this.signAndSendEvmTransaction(transaction) : this.signAndSendTonTransaction(transaction));
339
+ const emitter = await (transaction.chainType === 'substrate' ? this.signAndSendSubstrateTransaction(transaction) : transaction.chainType === 'evm' ? this.signAndSendEvmTransaction(transaction) : transaction.chainType === 'cardano' ? this.signAndSendCardanoTransaction(transaction) : this.signAndSendTonTransaction(transaction));
276
340
  const {
277
341
  eventsHandler,
278
342
  step
@@ -322,7 +386,12 @@ class TransactionService {
322
386
  }
323
387
  return false;
324
388
  });
325
- if (rejectError) {
389
+
390
+ /**
391
+ * Now simple check, first step have step id = 1.
392
+ * Improve to fetch the process from db
393
+ * */
394
+ if (rejectError && step.stepId === 1) {
326
395
  this.deleteProcess(step);
327
396
  } else {
328
397
  this.updateProcessStepStatus(step, {
@@ -348,6 +417,71 @@ class TransactionService {
348
417
  eventsHandler === null || eventsHandler === void 0 ? void 0 : eventsHandler(emitter);
349
418
  return emitter;
350
419
  }
420
+ sendPermitTransaction(transaction) {
421
+ // Send Transaction
422
+ const emitter = this.signAndSendEvmPermitTransaction(transaction);
423
+ const {
424
+ eventsHandler,
425
+ step
426
+ } = transaction;
427
+ emitter.on('send', data => {
428
+ if (step) {
429
+ this.updateProcessStepStatus(step, {
430
+ transactionId: transaction.id,
431
+ status: _types.StepStatus.SUBMITTING,
432
+ chain: transaction.chain
433
+ });
434
+ }
435
+ });
436
+ emitter.on('extrinsicHash', data => {
437
+ if (step) {
438
+ this.updateProcessStepStatus(step, {
439
+ extrinsicHash: data.extrinsicHash,
440
+ status: _types.StepStatus.PROCESSING
441
+ });
442
+ }
443
+ });
444
+ emitter.on('success', data => {
445
+ if (step) {
446
+ this.updateProcessStepStatus(step, {
447
+ status: _types.StepStatus.COMPLETE
448
+ });
449
+ }
450
+ });
451
+ emitter.on('error', data => {
452
+ // this.handlePostProcessing(data.id); // might enable this later
453
+ this.onFailed({
454
+ ...data,
455
+ errors: [...data.errors, new _TransactionError.TransactionError(_types.BasicTxErrorType.INTERNAL_ERROR)]
456
+ });
457
+ if (step) {
458
+ const rejectError = data.errors.find(error => {
459
+ // TODO: REFACTOR ERROR CODE
460
+ if ([_types.BasicTxErrorType.UNABLE_TO_SIGN, _types.BasicTxErrorType.USER_REJECT_REQUEST].includes(error.errorType)) {
461
+ return true;
462
+ }
463
+ return false;
464
+ });
465
+
466
+ /**
467
+ * Now simple check, first step have step id = 1.
468
+ * Improve to fetch the process from db
469
+ * */
470
+ if (rejectError && step.stepId === 1) {
471
+ this.deleteProcess(step);
472
+ } else {
473
+ this.updateProcessStepStatus(step, {
474
+ status: _types.StepStatus.FAILED
475
+ });
476
+ }
477
+ }
478
+ });
479
+
480
+ // Todo: handle any event with transaction.eventsHandler
481
+
482
+ eventsHandler === null || eventsHandler === void 0 ? void 0 : eventsHandler(emitter);
483
+ return emitter;
484
+ }
351
485
  removeTransaction(id) {
352
486
  if (this.transactions[id]) {
353
487
  delete this.transactions[id];
@@ -371,7 +505,7 @@ class TransactionService {
371
505
  return (0, _utils3.getExplorerLink)(chainInfo, transaction.extrinsicHash, 'tx');
372
506
  }
373
507
  transactionToHistories(id, startBlock, nonce, eventLogs) {
374
- var _transaction$step;
508
+ var _transaction$step2;
375
509
  const transaction = this.getTransaction(id);
376
510
  const extrinsicType = transaction.extrinsicType;
377
511
  const chainInfo = this.state.chainService.getChainInfoByKey(transaction.chain);
@@ -396,7 +530,7 @@ class TransactionService {
396
530
  // Will be added in next step
397
531
  nonce: nonce !== null && nonce !== void 0 ? nonce : 0,
398
532
  startBlock: startBlock || 0,
399
- processId: (_transaction$step = transaction.step) === null || _transaction$step === void 0 ? void 0 : _transaction$step.processId
533
+ processId: (_transaction$step2 = transaction.step) === null || _transaction$step2 === void 0 ? void 0 : _transaction$step2.processId
400
534
  };
401
535
  const nativeAsset = (0, _utils2._getChainNativeTokenBasicInfo)(chainInfo);
402
536
  const baseNativeAmount = {
@@ -1172,21 +1306,78 @@ class TransactionService {
1172
1306
  }
1173
1307
  return emitter;
1174
1308
  }
1175
- signAndSendSubstrateTransaction(_ref10) {
1309
+ signAndSendEvmPermitTransaction(_ref10) {
1310
+ let {
1311
+ address,
1312
+ id,
1313
+ isPassConfirmation,
1314
+ step,
1315
+ transaction,
1316
+ url
1317
+ } = _ref10;
1318
+ // Allow sign transaction
1319
+ const canSign = true;
1320
+ const emitter = new _eventemitter.default();
1321
+ const eventData = {
1322
+ id,
1323
+ errors: [],
1324
+ warnings: [],
1325
+ extrinsicHash: id,
1326
+ processId: step === null || step === void 0 ? void 0 : step.processId
1327
+ };
1328
+ const evmSignaturePayload = {
1329
+ id: id,
1330
+ type: 'eth_signTypedData_v4',
1331
+ payload: transaction,
1332
+ address: address,
1333
+ hashPayload: '',
1334
+ canSign: canSign,
1335
+ processId: step === null || step === void 0 ? void 0 : step.processId
1336
+ };
1337
+ this.state.requestService.addConfirmation(id, url || _constants2.EXTENSION_REQUEST_URL, 'evmSignatureRequest', evmSignaturePayload, {
1338
+ isPassConfirmation
1339
+ }).then(_ref11 => {
1340
+ let {
1341
+ isApproved,
1342
+ payload: signature
1343
+ } = _ref11;
1344
+ if (isApproved) {
1345
+ // Emit signed event
1346
+ emitter.emit('signed', eventData);
1347
+ emitter.emit('send', eventData); // This event is needed after sending transaction with queue
1348
+
1349
+ if (!signature) {
1350
+ throw new _EvmProviderError.EvmProviderError(_KoniTypes.EvmProviderErrorType.UNAUTHORIZED, (0, _i18next.t)('Failed to sign'));
1351
+ }
1352
+ eventData.extrinsicHash = signature;
1353
+ emitter.emit('extrinsicHash', eventData);
1354
+ emitter.emit('success', eventData);
1355
+ } else {
1356
+ eventData.errors.push(new _TransactionError.TransactionError(_types.BasicTxErrorType.USER_REJECT_REQUEST));
1357
+ emitter.emit('error', eventData);
1358
+ }
1359
+ }).catch(e => {
1360
+ this.removeTransaction(id);
1361
+ eventData.errors.push(new _TransactionError.TransactionError(_types.BasicTxErrorType.UNABLE_TO_SIGN, (0, _i18next.t)(e.message)));
1362
+ emitter.emit('error', eventData);
1363
+ });
1364
+ return emitter;
1365
+ }
1366
+ signAndSendSubstrateTransaction(_ref12) {
1176
1367
  var _this$state$chainServ;
1177
1368
  let {
1178
1369
  address,
1179
1370
  chain,
1180
1371
  feeCustom,
1181
1372
  id,
1182
- nonNativeTokenPayFeeSlug,
1183
1373
  signAfterCreate,
1184
1374
  step,
1375
+ tokenPayFeeSlug,
1185
1376
  transaction,
1186
1377
  url
1187
- } = _ref10;
1378
+ } = _ref12;
1188
1379
  const tip = (feeCustom === null || feeCustom === void 0 ? void 0 : feeCustom.tip) || '0';
1189
- const feeAssetId = nonNativeTokenPayFeeSlug ? (_this$state$chainServ = this.state.chainService.getAssetBySlug(nonNativeTokenPayFeeSlug).metadata) === null || _this$state$chainServ === void 0 ? void 0 : _this$state$chainServ.multilocation : undefined;
1380
+ const feeAssetId = tokenPayFeeSlug && !(0, _utils2._isNativeTokenBySlug)(tokenPayFeeSlug) && _constants._SUPPORT_TOKEN_PAY_FEE_GROUP.assetHub.includes(chain) ? (_this$state$chainServ = this.state.chainService.getAssetBySlug(tokenPayFeeSlug).metadata) === null || _this$state$chainServ === void 0 ? void 0 : _this$state$chainServ.multilocation : undefined;
1190
1381
  const emitter = new _eventemitter.default();
1191
1382
  const eventData = {
1192
1383
  id,
@@ -1255,20 +1446,20 @@ class TransactionService {
1255
1446
  eventData.extrinsicHash = txState.txHash.toHex();
1256
1447
  eventData.eventLogs = txState.events;
1257
1448
  // TODO: push block hash and block number into eventData
1258
- txState.events.filter(_ref11 => {
1449
+ txState.events.filter(_ref13 => {
1259
1450
  let {
1260
1451
  event: {
1261
1452
  section
1262
1453
  }
1263
- } = _ref11;
1454
+ } = _ref13;
1264
1455
  return section === 'system';
1265
- }).forEach(_ref12 => {
1456
+ }).forEach(_ref14 => {
1266
1457
  let {
1267
1458
  event: {
1268
1459
  data: [error],
1269
1460
  method
1270
1461
  }
1271
- } = _ref12;
1462
+ } = _ref14;
1272
1463
  if (method === 'ExtrinsicFailed') {
1273
1464
  eventData.errors.push(new _TransactionError.TransactionError(_types.BasicTxErrorType.SEND_TRANSACTION_FAILED, error.toString()));
1274
1465
  emitter.emit('error', eventData);
@@ -1288,7 +1479,7 @@ class TransactionService {
1288
1479
  });
1289
1480
  return emitter;
1290
1481
  }
1291
- signAndSendTonTransaction(_ref13) {
1482
+ signAndSendTonTransaction(_ref15) {
1292
1483
  let {
1293
1484
  address,
1294
1485
  chain,
@@ -1297,7 +1488,7 @@ class TransactionService {
1297
1488
  step,
1298
1489
  transaction,
1299
1490
  url
1300
- } = _ref13;
1491
+ } = _ref15;
1301
1492
  const walletContract = _uiKeyring.default.getPair(address).ton.currentContract;
1302
1493
  const emitter = new _eventemitter.default();
1303
1494
  const eventData = {
@@ -1314,11 +1505,11 @@ class TransactionService {
1314
1505
  ...payload,
1315
1506
  messagePayload: (0, _utils.cellToBase64Str)(message),
1316
1507
  messages: []
1317
- }, {}).then(_ref14 => {
1508
+ }, {}).then(_ref16 => {
1318
1509
  let {
1319
1510
  isApproved,
1320
1511
  payload
1321
- } = _ref14;
1512
+ } = _ref16;
1322
1513
  if (!isApproved) {
1323
1514
  this.removeTransaction(id);
1324
1515
  eventData.errors.push(new _TransactionError.TransactionError(_types.BasicTxErrorType.USER_REJECT_REQUEST));
@@ -1336,7 +1527,7 @@ class TransactionService {
1336
1527
  });
1337
1528
  });
1338
1529
  };
1339
- const tonTransactionConfig = transaction;
1530
+ const tonTransactionConfig = transaction; // todo: is this same as payload?
1340
1531
  const seqno = tonTransactionConfig.seqno;
1341
1532
  const messages = tonTransactionConfig.messages;
1342
1533
  const transferObjectPromise = (0, _utils.getTransferCellPromise)(walletContract, signer, payload, seqno, messages);
@@ -1353,8 +1544,8 @@ class TransactionService {
1353
1544
  if (!externalMsgHash) {
1354
1545
  return;
1355
1546
  }
1356
- tonApi.getStatusByExtMsgHash(externalMsgHash, extrinsicType).then(_ref15 => {
1357
- let [status, hex] = _ref15;
1547
+ tonApi.getStatusByExtMsgHash(externalMsgHash, extrinsicType).then(_ref17 => {
1548
+ let [status, hex] = _ref17;
1358
1549
  if (status && hex) {
1359
1550
  eventData.extrinsicHash = hex;
1360
1551
  emitter.emit('extrinsicHash', eventData);
@@ -1383,6 +1574,75 @@ class TransactionService {
1383
1574
  });
1384
1575
  return emitter;
1385
1576
  }
1577
+ signAndSendCardanoTransaction(_ref18) {
1578
+ let {
1579
+ chain,
1580
+ id,
1581
+ transaction,
1582
+ url
1583
+ } = _ref18;
1584
+ const emitter = new _eventemitter.default();
1585
+ const eventData = {
1586
+ id,
1587
+ errors: [],
1588
+ warnings: [],
1589
+ extrinsicHash: id
1590
+ };
1591
+ const transactionConfig = transaction;
1592
+ const cardanoApi = this.state.chainService.getCardanoApi(chain);
1593
+ this.state.requestService.addConfirmationCardano(id, url || _constants2.EXTENSION_REQUEST_URL, 'cardanoSendTransactionRequest', transactionConfig, {}).then(_ref19 => {
1594
+ let {
1595
+ isApproved,
1596
+ payload
1597
+ } = _ref19;
1598
+ if (!isApproved) {
1599
+ this.removeTransaction(id);
1600
+ eventData.errors.push(new _TransactionError.TransactionError(_types.BasicTxErrorType.USER_REJECT_REQUEST));
1601
+ emitter.emit('error', eventData);
1602
+ } else {
1603
+ if (!payload) {
1604
+ throw new Error('Failed to sign');
1605
+ }
1606
+
1607
+ // Emit signed event
1608
+ emitter.emit('signed', eventData);
1609
+
1610
+ // Send transaction
1611
+ this.handleTransactionTimeout(emitter, eventData);
1612
+ emitter.emit('send', eventData);
1613
+
1614
+ // send qua api
1615
+ cardanoApi.sendCardanoTxReturnHash(payload).then(txHash => {
1616
+ if (!txHash) {
1617
+ eventData.errors.push(new _TransactionError.TransactionError(_types.BasicTxErrorType.SEND_TRANSACTION_FAILED));
1618
+ emitter.emit('error', eventData);
1619
+ }
1620
+ eventData.extrinsicHash = txHash;
1621
+ emitter.emit('extrinsicHash', eventData);
1622
+
1623
+ // todo: wait transaction by fetch txHash by API
1624
+ cardanoApi.getStatusByTxHash(txHash, transactionConfig.cardanoTtlOffset).then(status => {
1625
+ if (!status) {
1626
+ eventData.errors.push(new _TransactionError.TransactionError(_types.BasicTxErrorType.SEND_TRANSACTION_FAILED));
1627
+ emitter.emit('error', eventData);
1628
+ }
1629
+ emitter.emit('success', eventData);
1630
+ }).catch(e => {
1631
+ eventData.errors.push(new _TransactionError.TransactionError(_types.BasicTxErrorType.SEND_TRANSACTION_FAILED, e.message));
1632
+ emitter.emit('error', eventData);
1633
+ });
1634
+ }).catch(e => {
1635
+ eventData.errors.push(new _TransactionError.TransactionError(_types.BasicTxErrorType.SEND_TRANSACTION_FAILED, e.message));
1636
+ emitter.emit('error', eventData);
1637
+ });
1638
+ }
1639
+ }).catch(e => {
1640
+ this.removeTransaction(id);
1641
+ eventData.errors.push(new _TransactionError.TransactionError(_types.BasicTxErrorType.UNABLE_TO_SIGN, (0, _i18next.t)(e.message)));
1642
+ emitter.emit('error', eventData);
1643
+ });
1644
+ return emitter;
1645
+ }
1386
1646
  handleTransactionTimeout(emitter, eventData) {
1387
1647
  const timeout = setTimeout(() => {
1388
1648
  const transaction = this.getTransaction(eventData.id);
@@ -1525,9 +1785,9 @@ class TransactionService {
1525
1785
  }
1526
1786
  }
1527
1787
  async createProcessNotification(transactionId) {
1528
- var _transaction$step2;
1788
+ var _transaction$step3;
1529
1789
  const transaction = this.getTransaction(transactionId);
1530
- if (transaction && (_transaction$step2 = transaction.step) !== null && _transaction$step2 !== void 0 && _transaction$step2.processId) {
1790
+ if (transaction && (_transaction$step3 = transaction.step) !== null && _transaction$step3 !== void 0 && _transaction$step3.processId) {
1531
1791
  const process = this.aliveProcessMap.get(transaction.step.processId);
1532
1792
  if (process) {
1533
1793
  await this.state.inappNotificationService.createProcessNotification(process);
@@ -9,6 +9,7 @@ exports.getSimpleSwapExplorerLink = getSimpleSwapExplorerLink;
9
9
  exports.parseTransactionData = parseTransactionData;
10
10
  var _utils = require("@subwallet/extension-base/services/chain-service/utils");
11
11
  var _utils2 = require("@subwallet/extension-base/services/swap-service/utils");
12
+ var _util = require("@polkadot/util");
12
13
  // Copyright 2019-2022 @subwallet/extension-base authors & contributors
13
14
  // SPDX-License-Identifier: Apache-2.0
14
15
 
@@ -55,6 +56,9 @@ function getBlockExplorerTxRoute(chainInfo) {
55
56
  if ((0, _utils._isPureEvmChain)(chainInfo)) {
56
57
  return 'tx';
57
58
  }
59
+ if ((0, _utils._isPureCardanoChain)(chainInfo)) {
60
+ return 'transaction';
61
+ }
58
62
  if (['aventus', 'deeper_network'].includes(chainInfo.slug)) {
59
63
  return 'transaction';
60
64
  }
@@ -69,7 +73,7 @@ function getExplorerLink(chainInfo, value, type) {
69
73
  const route = getBlockExplorerAccountRoute(explorerLink);
70
74
  return `${explorerLink}${explorerLink.endsWith('/') ? '' : '/'}${route}/${value}`;
71
75
  }
72
- if (explorerLink && value.startsWith('0x')) {
76
+ if (explorerLink && (0, _util.isHex)((0, _util.hexAddPrefix)(value))) {
73
77
  if (chainInfo.slug === 'bittensor') {
74
78
  return undefined;
75
79
  }
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.AccountSignMode = exports.AccountChainType = exports.AccountActions = void 0;
6
+ exports.SUPPORTED_ACCOUNT_CHAIN_TYPES = exports.AccountSignMode = exports.AccountChainType = exports.AccountActions = exports.ACCOUNT_CHAIN_TYPE_ORDINAL_MAP = void 0;
7
7
  // Copyright 2019-2022 @subwallet/extension-base authors & contributors
8
8
  // SPDX-License-Identifier: Apache-2.0
9
9
  /**
@@ -67,7 +67,18 @@ exports.AccountChainType = AccountChainType;
67
67
  AccountChainType["ETHEREUM"] = "ethereum";
68
68
  AccountChainType["BITCOIN"] = "bitcoin";
69
69
  AccountChainType["TON"] = "ton";
70
+ AccountChainType["CARDANO"] = "cardano";
70
71
  })(AccountChainType || (exports.AccountChainType = AccountChainType = {}));
72
+ const ACCOUNT_CHAIN_TYPE_ORDINAL_MAP = {
73
+ [AccountChainType.SUBSTRATE]: 1,
74
+ [AccountChainType.ETHEREUM]: 2,
75
+ [AccountChainType.TON]: 3,
76
+ [AccountChainType.CARDANO]: 4,
77
+ [AccountChainType.BITCOIN]: 5
78
+ };
79
+ exports.ACCOUNT_CHAIN_TYPE_ORDINAL_MAP = ACCOUNT_CHAIN_TYPE_ORDINAL_MAP;
80
+ const SUPPORTED_ACCOUNT_CHAIN_TYPES = ['substrate', 'ethereum', 'ton', 'cardano'];
81
+ exports.SUPPORTED_ACCOUNT_CHAIN_TYPES = SUPPORTED_ACCOUNT_CHAIN_TYPES;
71
82
  let AccountActions;
72
83
  /**
73
84
  * Represents the actions associated with an account.
@@ -0,0 +1 @@
1
+ "use strict";
@@ -27,6 +27,7 @@ let SwapStepType;
27
27
  exports.SwapStepType = SwapStepType;
28
28
  (function (SwapStepType) {
29
29
  SwapStepType["SWAP"] = "SWAP";
30
+ SwapStepType["PERMIT"] = "PERMIT";
30
31
  })(SwapStepType || (exports.SwapStepType = SwapStepType = {}));
31
32
  let SwapProviderId;
32
33
  exports.SwapProviderId = SwapProviderId;
@@ -40,10 +41,14 @@ exports.SwapProviderId = SwapProviderId;
40
41
  SwapProviderId["ROCOCO_ASSET_HUB"] = "ROCOCO_ASSET_HUB";
41
42
  SwapProviderId["WESTEND_ASSET_HUB"] = "WESTEND_ASSET_HUB";
42
43
  SwapProviderId["SIMPLE_SWAP"] = "SIMPLE_SWAP";
44
+ SwapProviderId["UNISWAP"] = "UNISWAP";
43
45
  })(SwapProviderId || (exports.SwapProviderId = SwapProviderId = {}));
44
- const _SUPPORTED_SWAP_PROVIDERS = [SwapProviderId.CHAIN_FLIP_TESTNET, SwapProviderId.CHAIN_FLIP_MAINNET, SwapProviderId.HYDRADX_MAINNET, SwapProviderId.HYDRADX_TESTNET, SwapProviderId.POLKADOT_ASSET_HUB, SwapProviderId.KUSAMA_ASSET_HUB, SwapProviderId.ROCOCO_ASSET_HUB,
46
+ const _SUPPORTED_SWAP_PROVIDERS = [SwapProviderId.CHAIN_FLIP_TESTNET, SwapProviderId.CHAIN_FLIP_MAINNET, SwapProviderId.HYDRADX_MAINNET,
47
+ // SwapProviderId.HYDRADX_TESTNET,
48
+ SwapProviderId.POLKADOT_ASSET_HUB, SwapProviderId.KUSAMA_ASSET_HUB,
49
+ // SwapProviderId.ROCOCO_ASSET_HUB,
45
50
  // SwapProviderId.WESTEND_ASSET_HUB,
46
- SwapProviderId.SIMPLE_SWAP];
51
+ SwapProviderId.SIMPLE_SWAP, SwapProviderId.UNISWAP];
47
52
  exports._SUPPORTED_SWAP_PROVIDERS = _SUPPORTED_SWAP_PROVIDERS;
48
53
  // process handling
49
54
  let SwapFeeType;
@@ -21,7 +21,8 @@ const isStrValidWithAddress = (str, account, chainInfo) => {
21
21
  } else if (account.address.toLowerCase().includes(str) || reformated.toLowerCase().includes(str)) {
22
22
  return 'valid';
23
23
  }
24
- } else if (account.chainType === _types.AccountChainType.TON) {
24
+ } else if (account.chainType === _types.AccountChainType.TON || account.chainType === _types.AccountChainType.CARDANO) {
25
+ // todo: recheck for Cardano
25
26
  const isTestnet = chainInfo.isTestnet;
26
27
  const reformated = (0, _common.reformatAddress)(account.address, isTestnet ? 0 : 1);
27
28
  if (account.address.toLowerCase() === str || reformated.toLowerCase() === str) {
@@ -3,13 +3,14 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports._reformatAddressWithChain = void 0;
7
- exports.categoryAddresses = categoryAddresses;
8
- exports.getAccountChainTypeForAddress = void 0;
6
+ exports.getAccountChainTypeForAddress = exports._reformatAddressWithChain = void 0;
7
+ exports.getAddressesByChainType = getAddressesByChainType;
8
+ exports.getAddressesByChainTypeMap = getAddressesByChainTypeMap;
9
9
  exports.isAccountAll = isAccountAll;
10
10
  exports.modifyAccountName = void 0;
11
11
  exports.quickFormatAddressToCompare = quickFormatAddressToCompare;
12
12
  exports.reformatAddress = reformatAddress;
13
+ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
13
14
  var _constants = require("@subwallet/extension-base/constants");
14
15
  var _utils = require("@subwallet/extension-base/services/chain-service/utils");
15
16
  var _types = require("@subwallet/extension-base/types");
@@ -50,10 +51,11 @@ function reformatAddress(address) {
50
51
  }
51
52
  }
52
53
  const _reformatAddressWithChain = (address, chainInfo) => {
54
+ // todo: check for cardano
53
55
  const chainType = (0, _utils._chainInfoToChainType)(chainInfo);
54
56
  if (chainType === _types.AccountChainType.SUBSTRATE) {
55
57
  return reformatAddress(address, (0, _utils._getChainSubstrateAddressPrefix)(chainInfo));
56
- } else if (chainType === _types.AccountChainType.TON) {
58
+ } else if (chainType === _types.AccountChainType.TON || chainType === _types.AccountChainType.CARDANO) {
57
59
  const isTestnet = chainInfo.isTestnet;
58
60
  return reformatAddress(address, isTestnet ? 0 : 1);
59
61
  } else {
@@ -63,31 +65,38 @@ const _reformatAddressWithChain = (address, chainInfo) => {
63
65
  exports._reformatAddressWithChain = _reformatAddressWithChain;
64
66
  const getAccountChainTypeForAddress = address => {
65
67
  const type = (0, _keyring.getKeypairTypeByAddress)(address);
66
- return (0, _utils2.getAccountChainType)(type);
68
+ return (0, _utils2.getAccountChainTypeFromKeypairType)(type);
67
69
  };
68
70
  exports.getAccountChainTypeForAddress = getAccountChainTypeForAddress;
69
- function categoryAddresses(addresses) {
70
- const substrate = [];
71
- const evm = [];
72
- const ton = [];
73
- const bitcoin = [];
71
+ function getAddressesByChainType(addresses, chainTypes) {
72
+ const addressByChainTypeMap = getAddressesByChainTypeMap(addresses);
73
+ return chainTypes.map(chainType => {
74
+ return addressByChainTypeMap[chainType];
75
+ }).flat(); // todo: recheck
76
+ }
77
+
78
+ function getAddressesByChainTypeMap(addresses) {
79
+ const addressByChainType = {
80
+ substrate: [],
81
+ evm: [],
82
+ bitcoin: [],
83
+ ton: [],
84
+ cardano: []
85
+ };
74
86
  addresses.forEach(address => {
75
87
  if ((0, _utilCrypto.isEthereumAddress)(address)) {
76
- evm.push(address);
88
+ addressByChainType.evm.push(address);
77
89
  } else if ((0, _keyring.isTonAddress)(address)) {
78
- ton.push(address);
90
+ addressByChainType.ton.push(address);
79
91
  } else if ((0, _keyring.isBitcoinAddress)(address)) {
80
- bitcoin.push(address);
92
+ addressByChainType.bitcoin.push(address);
93
+ } else if ((0, _keyring.isCardanoAddress)(address)) {
94
+ addressByChainType.cardano.push(address);
81
95
  } else {
82
- substrate.push(address);
96
+ addressByChainType.substrate.push(address);
83
97
  }
84
98
  });
85
- return {
86
- bitcoin,
87
- evm,
88
- substrate,
89
- ton
90
- };
99
+ return addressByChainType;
91
100
  }
92
101
  function quickFormatAddressToCompare(address) {
93
102
  if (!(0, _keyring.isAddress)(address)) {