@subwallet/extension-base 1.3.35-0 → 1.3.37-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 (39) hide show
  1. package/background/KoniTypes.d.ts +13 -0
  2. package/background/types.d.ts +2 -1
  3. package/cjs/core/logic-validation/request.js +13 -1
  4. package/cjs/koni/background/handlers/Extension.js +189 -108
  5. package/cjs/koni/background/handlers/State.js +14 -9
  6. package/cjs/packageInfo.js +1 -1
  7. package/cjs/services/request-service/handler/AuthRequestHandler.js +4 -1
  8. package/cjs/services/request-service/handler/EvmRequestHandler.js +4 -1
  9. package/cjs/services/swap-service/handler/kyber-handler.js +355 -0
  10. package/cjs/services/swap-service/handler/uniswap-handler.js +209 -40
  11. package/cjs/services/swap-service/index.js +28 -2
  12. package/cjs/services/swap-service/utils.js +4 -1
  13. package/cjs/services/transaction-service/index.js +252 -28
  14. package/cjs/types/swap/index.js +2 -1
  15. package/cjs/utils/cardano.js +10 -2
  16. package/core/logic-validation/request.js +13 -1
  17. package/koni/background/handlers/Extension.d.ts +1 -0
  18. package/koni/background/handlers/Extension.js +82 -2
  19. package/koni/background/handlers/State.js +15 -10
  20. package/package.json +14 -9
  21. package/packageInfo.js +1 -1
  22. package/services/chain-service/types.d.ts +1 -1
  23. package/services/event-service/types.d.ts +6 -6
  24. package/services/request-service/handler/AuthRequestHandler.js +4 -1
  25. package/services/request-service/handler/EvmRequestHandler.js +4 -1
  26. package/services/swap-service/handler/kyber-handler.d.ts +28 -0
  27. package/services/swap-service/handler/kyber-handler.js +346 -0
  28. package/services/swap-service/handler/uniswap-handler.d.ts +48 -0
  29. package/services/swap-service/handler/uniswap-handler.js +209 -40
  30. package/services/swap-service/index.js +28 -2
  31. package/services/swap-service/utils.js +4 -1
  32. package/services/transaction-service/helpers/index.d.ts +5 -5
  33. package/services/transaction-service/index.d.ts +10 -5
  34. package/services/transaction-service/index.js +234 -12
  35. package/services/transaction-service/types.d.ts +23 -10
  36. package/types/swap/index.d.ts +4 -1
  37. package/types/swap/index.js +2 -1
  38. package/utils/cardano.d.ts +2 -0
  39. package/utils/cardano.js +7 -0
@@ -200,6 +200,22 @@ export default class TransactionService {
200
200
  extrinsicHash: transactionId
201
201
  };
202
202
  }
203
+ fillDutchTransactionDefaultInfo(transaction) {
204
+ const isInternal = !transaction.url;
205
+ const transactionId = getTransactionId(transaction.chainType, transaction.chain, isInternal, isWalletConnectRequest(transaction.id));
206
+ return {
207
+ ...transaction,
208
+ createdAt: new Date().getTime(),
209
+ updatedAt: new Date().getTime(),
210
+ errors: transaction.errors || [],
211
+ warnings: transaction.warnings || [],
212
+ url: transaction.url || EXTENSION_REQUEST_URL,
213
+ status: ExtrinsicStatus.QUEUED,
214
+ isInternal,
215
+ id: transactionId,
216
+ extrinsicHash: transactionId
217
+ };
218
+ }
203
219
  async addTransaction(inputTransaction) {
204
220
  const transactions = this.transactions;
205
221
  // Fill transaction default info
@@ -212,6 +228,15 @@ export default class TransactionService {
212
228
  });
213
229
  return await this.sendTransaction(transaction);
214
230
  }
231
+ addDutchTransaction(inputTransaction) {
232
+ const transactions = this.transactions;
233
+ const transaction = this.fillDutchTransactionDefaultInfo(inputTransaction);
234
+ transactions[transaction.id] = transaction;
235
+ this.transactionSubject.next({
236
+ ...transactions
237
+ });
238
+ return this.sendDutchTransaction(transaction);
239
+ }
215
240
  generateBeforeHandleResponseErrors(errors) {
216
241
  return {
217
242
  errors,
@@ -327,6 +352,62 @@ export default class TransactionService {
327
352
  'eventsHandler' in validatedTransaction && delete validatedTransaction.eventsHandler;
328
353
  return validatedTransaction;
329
354
  }
355
+ async handleDutchTransaction(transaction) {
356
+ var _transaction$step2;
357
+ const transactionId = getTransactionId(transaction.chainType, transaction.chain, true);
358
+ const validatedTransaction = {
359
+ ...transaction,
360
+ id: transactionId,
361
+ extrinsicHash: '',
362
+ status: undefined,
363
+ errors: transaction.errors || [],
364
+ warnings: transaction.warnings || [],
365
+ processId: (_transaction$step2 = transaction.step) === null || _transaction$step2 === void 0 ? void 0 : _transaction$step2.processId
366
+ };
367
+ const txInput = {
368
+ ...transaction,
369
+ isInternal: true,
370
+ status: ExtrinsicStatus.QUEUED,
371
+ id: transactionId,
372
+ extrinsicHash: transactionId,
373
+ createdAt: new Date().getTime(),
374
+ updatedAt: new Date().getTime()
375
+ };
376
+ const emitter = this.addDutchTransaction(txInput);
377
+ await new Promise(resolve => {
378
+ if (transaction.resolveOnDone) {
379
+ emitter.on('success', data => {
380
+ validatedTransaction.id = data.id;
381
+ validatedTransaction.extrinsicHash = data.extrinsicHash;
382
+ resolve();
383
+ });
384
+ } else {
385
+ emitter.on('signed', data => {
386
+ validatedTransaction.id = data.id;
387
+ validatedTransaction.extrinsicHash = data.extrinsicHash;
388
+ resolve();
389
+ });
390
+ }
391
+ emitter.on('error', data => {
392
+ if (data.errors.length > 0) {
393
+ validatedTransaction.errors.push(...data.errors);
394
+ resolve();
395
+ }
396
+ });
397
+ emitter.on('timeout', data => {
398
+ if (transaction.errorOnTimeOut && data.errors.length > 0) {
399
+ validatedTransaction.errors.push(...data.errors);
400
+ resolve();
401
+ }
402
+ });
403
+ });
404
+
405
+ // @ts-ignore
406
+ 'transaction' in validatedTransaction && delete validatedTransaction.transaction;
407
+ 'additionalValidator' in validatedTransaction && delete validatedTransaction.additionalValidator;
408
+ 'eventsHandler' in validatedTransaction && delete validatedTransaction.eventsHandler;
409
+ return validatedTransaction;
410
+ }
330
411
  async sendTransaction(transaction) {
331
412
  // Send Transaction
332
413
  const emitter = await (transaction.chainType === 'substrate' ? this.signAndSendSubstrateTransaction(transaction) : transaction.chainType === 'evm' ? this.signAndSendEvmTransaction(transaction) : transaction.chainType === 'cardano' ? this.signAndSendCardanoTransaction(transaction) : this.signAndSendTonTransaction(transaction));
@@ -374,10 +455,7 @@ export default class TransactionService {
374
455
  if (step) {
375
456
  const rejectError = data.errors.find(error => {
376
457
  // TODO: REFACTOR ERROR CODE
377
- if ([BasicTxErrorType.UNABLE_TO_SIGN, BasicTxErrorType.USER_REJECT_REQUEST].includes(error.errorType)) {
378
- return true;
379
- }
380
- return false;
458
+ return [BasicTxErrorType.UNABLE_TO_SIGN, BasicTxErrorType.USER_REJECT_REQUEST].includes(error.errorType);
381
459
  });
382
460
 
383
461
  /**
@@ -450,10 +528,73 @@ export default class TransactionService {
450
528
  if (step) {
451
529
  const rejectError = data.errors.find(error => {
452
530
  // TODO: REFACTOR ERROR CODE
453
- if ([BasicTxErrorType.UNABLE_TO_SIGN, BasicTxErrorType.USER_REJECT_REQUEST].includes(error.errorType)) {
454
- return true;
455
- }
456
- return false;
531
+ return [BasicTxErrorType.UNABLE_TO_SIGN, BasicTxErrorType.USER_REJECT_REQUEST].includes(error.errorType);
532
+ });
533
+
534
+ /**
535
+ * Now simple check, first step have step id = 1.
536
+ * Improve to fetch the process from db
537
+ * */
538
+ if (rejectError && step.stepId === 1) {
539
+ this.deleteProcess(step);
540
+ } else {
541
+ this.updateProcessStepStatus(step, {
542
+ status: StepStatus.FAILED
543
+ });
544
+ }
545
+ }
546
+ });
547
+
548
+ // Todo: handle any event with transaction.eventsHandler
549
+
550
+ eventsHandler === null || eventsHandler === void 0 ? void 0 : eventsHandler(emitter);
551
+ return emitter;
552
+ }
553
+ sendDutchTransaction(transaction) {
554
+ // Send Transaction
555
+ const emitter = this.signAndSendEvmDutchTransaction(transaction);
556
+ const {
557
+ eventsHandler,
558
+ step
559
+ } = transaction;
560
+ emitter.on('send', data => {
561
+ this.onSend(data);
562
+ if (step) {
563
+ this.updateProcessStepStatus(step, {
564
+ transactionId: transaction.id,
565
+ status: StepStatus.SUBMITTING,
566
+ chain: transaction.chain
567
+ });
568
+ }
569
+ });
570
+ emitter.on('extrinsicHash', data => {
571
+ this.onHasTransactionHash(data);
572
+ if (step) {
573
+ this.updateProcessStepStatus(step, {
574
+ extrinsicHash: data.extrinsicHash,
575
+ status: StepStatus.PROCESSING
576
+ });
577
+ }
578
+ });
579
+ emitter.on('success', data => {
580
+ this.handlePostProcessing(data.id);
581
+ this.onSuccess(data);
582
+ if (step) {
583
+ this.updateProcessStepStatus(step, {
584
+ status: StepStatus.COMPLETE
585
+ });
586
+ }
587
+ });
588
+ emitter.on('error', data => {
589
+ // this.handlePostProcessing(data.id); // might enable this later
590
+ this.onFailed({
591
+ ...data,
592
+ errors: [...data.errors, new TransactionError(BasicTxErrorType.INTERNAL_ERROR)]
593
+ });
594
+ if (step) {
595
+ const rejectError = data.errors.find(error => {
596
+ // TODO: REFACTOR ERROR CODE
597
+ return [BasicTxErrorType.UNABLE_TO_SIGN, BasicTxErrorType.USER_REJECT_REQUEST].includes(error.errorType);
457
598
  });
458
599
 
459
600
  /**
@@ -469,6 +610,17 @@ export default class TransactionService {
469
610
  }
470
611
  }
471
612
  });
613
+ emitter.on('timeout', data => {
614
+ this.onTimeOut({
615
+ ...data,
616
+ errors: [...data.errors, new TransactionError(BasicTxErrorType.TIMEOUT)]
617
+ });
618
+ if (step) {
619
+ this.updateProcessStepStatus(step, {
620
+ status: StepStatus.TIMEOUT
621
+ });
622
+ }
623
+ });
472
624
 
473
625
  // Todo: handle any event with transaction.eventsHandler
474
626
 
@@ -498,7 +650,7 @@ export default class TransactionService {
498
650
  return getExplorerLink(chainInfo, transaction.extrinsicHash, 'tx');
499
651
  }
500
652
  transactionToHistories(id, startBlock, nonce, eventLogs) {
501
- var _transaction$step2;
653
+ var _transaction$step3;
502
654
  const transaction = this.getTransaction(id);
503
655
  const extrinsicType = transaction.extrinsicType;
504
656
  const chainInfo = this.state.chainService.getChainInfoByKey(transaction.chain);
@@ -523,7 +675,7 @@ export default class TransactionService {
523
675
  // Will be added in next step
524
676
  nonce: nonce !== null && nonce !== void 0 ? nonce : 0,
525
677
  startBlock: startBlock || 0,
526
- processId: (_transaction$step2 = transaction.step) === null || _transaction$step2 === void 0 ? void 0 : _transaction$step2.processId
678
+ processId: (_transaction$step3 = transaction.step) === null || _transaction$step3 === void 0 ? void 0 : _transaction$step3.processId
527
679
  };
528
680
  const nativeAsset = _getChainNativeTokenBasicInfo(chainInfo);
529
681
  const baseNativeAmount = {
@@ -1351,6 +1503,76 @@ export default class TransactionService {
1351
1503
  });
1352
1504
  return emitter;
1353
1505
  }
1506
+ signAndSendEvmDutchTransaction({
1507
+ address,
1508
+ id,
1509
+ isPassConfirmation,
1510
+ step,
1511
+ transaction,
1512
+ url
1513
+ }) {
1514
+ const emitter = new EventEmitter();
1515
+ const eventData = {
1516
+ id,
1517
+ errors: [],
1518
+ warnings: [],
1519
+ extrinsicHash: id,
1520
+ processId: step === null || step === void 0 ? void 0 : step.processId
1521
+ };
1522
+
1523
+ // todo: review this object
1524
+ const evmSignaturePayload = {
1525
+ id: id,
1526
+ type: 'eth_signTypedData_v4',
1527
+ payload: transaction,
1528
+ address: address,
1529
+ hashPayload: '',
1530
+ canSign: true,
1531
+ processId: step === null || step === void 0 ? void 0 : step.processId
1532
+ };
1533
+ this.state.requestService.addConfirmation(id, url || EXTENSION_REQUEST_URL, 'submitApiRequest', evmSignaturePayload, {
1534
+ isPassConfirmation
1535
+ }).then(({
1536
+ isApproved,
1537
+ payload: signature
1538
+ }) => {
1539
+ if (isApproved) {
1540
+ emitter.emit('signed', eventData);
1541
+ emitter.emit('send', eventData);
1542
+ transaction.submitSwapOrder().then(isSendSuccess => {
1543
+ if (!isSendSuccess) {
1544
+ throw new EvmProviderError(EvmProviderErrorType.UNAUTHORIZED, t('Failed to sign'));
1545
+ }
1546
+ this.handleTransactionTimeout(emitter, eventData);
1547
+ transaction.cronCheckTxSuccess().then(order => {
1548
+ if (!order) {
1549
+ eventData.errors.push(new TransactionError(BasicTxErrorType.SEND_TRANSACTION_FAILED));
1550
+ emitter.emit('error', eventData);
1551
+ } else {
1552
+ eventData.extrinsicHash = order.txHash;
1553
+ emitter.emit('extrinsicHash', eventData);
1554
+ emitter.emit('success', eventData);
1555
+ }
1556
+ }).catch(e => {
1557
+ eventData.errors.push(new TransactionError(BasicTxErrorType.SEND_TRANSACTION_FAILED, t(e.message)));
1558
+ emitter.emit('error', eventData);
1559
+ });
1560
+ }).catch(e => {
1561
+ eventData.errors.push(new TransactionError(BasicTxErrorType.UNABLE_TO_SEND, t(e.message)));
1562
+ emitter.emit('error', eventData);
1563
+ });
1564
+ } else {
1565
+ this.removeTransaction(id);
1566
+ eventData.errors.push(new TransactionError(BasicTxErrorType.USER_REJECT_REQUEST));
1567
+ emitter.emit('error', eventData);
1568
+ }
1569
+ }).catch(e => {
1570
+ this.removeTransaction(id);
1571
+ eventData.errors.push(new TransactionError(BasicTxErrorType.UNABLE_TO_SIGN, t(e.message)));
1572
+ emitter.emit('error', eventData);
1573
+ });
1574
+ return emitter;
1575
+ }
1354
1576
  signAndSendSubstrateTransaction({
1355
1577
  address,
1356
1578
  chain,
@@ -1784,9 +2006,9 @@ export default class TransactionService {
1784
2006
  }
1785
2007
  }
1786
2008
  async createProcessNotification(transactionId) {
1787
- var _transaction$step3;
2009
+ var _transaction$step4;
1788
2010
  const transaction = this.getTransaction(transactionId);
1789
- if (transaction && (_transaction$step3 = transaction.step) !== null && _transaction$step3 !== void 0 && _transaction$step3.processId) {
2011
+ if (transaction && (_transaction$step4 = transaction.step) !== null && _transaction$step4 !== void 0 && _transaction$step4.processId) {
1790
2012
  const process = this.aliveProcessMap.get(transaction.step.processId);
1791
2013
  if (process) {
1792
2014
  await this.state.inappNotificationService.createProcessNotification(process);
@@ -1,12 +1,13 @@
1
1
  import { ChainType, ExtrinsicDataTypeMap, ExtrinsicStatus, ExtrinsicType, FeeData, ValidateTransactionResponse } from '@subwallet/extension-base/background/KoniTypes';
2
2
  import { SignTypedDataMessageV3V4 } from '@subwallet/extension-base/core/logic-validation';
3
3
  import { TonTransactionConfig } from '@subwallet/extension-base/services/balance-service/transfer/ton-transfer';
4
+ import { UniswapOrderInfo } from '@subwallet/extension-base/services/swap-service/handler/uniswap-handler';
4
5
  import { BaseRequestSign, BriefProcessStep, ProcessTransactionData, TransactionFee } from '@subwallet/extension-base/types';
5
6
  import EventEmitter from 'eventemitter3';
6
7
  import { TransactionConfig } from 'web3-core';
7
8
  import { SubmittableExtrinsic } from '@polkadot/api/promise/types';
8
9
  import { EventRecord } from '@polkadot/types/interfaces';
9
- export interface SWTransaction extends ValidateTransactionResponse, Partial<Pick<BaseRequestSign, 'ignoreWarnings'>>, TransactionFee {
10
+ export interface SWTransactionBase extends ValidateTransactionResponse, Partial<Pick<BaseRequestSign, 'ignoreWarnings'>>, TransactionFee {
10
11
  id: string;
11
12
  url?: string;
12
13
  isInternal: boolean;
@@ -21,7 +22,7 @@ export interface SWTransaction extends ValidateTransactionResponse, Partial<Pick
21
22
  updatedAt: number;
22
23
  estimateFee?: FeeData;
23
24
  xcmFeeDryRun?: string;
24
- transaction: SubmittableExtrinsic | TransactionConfig | TonTransactionConfig;
25
+ transaction: any;
25
26
  additionalValidator?: (inputTransaction: SWTransactionResponse) => Promise<void>;
26
27
  eventsHandler?: (eventEmitter: TransactionEmitter) => void;
27
28
  isPassConfirmation?: boolean;
@@ -29,18 +30,27 @@ export interface SWTransaction extends ValidateTransactionResponse, Partial<Pick
29
30
  signAfterCreate?: (id: string) => void;
30
31
  step?: BriefProcessStep;
31
32
  }
32
- export interface SWPermitTransaction extends Omit<SWTransaction, 'transaction'> {
33
+ export interface SWTransaction extends SWTransactionBase {
34
+ transaction: SubmittableExtrinsic | TransactionConfig | TonTransactionConfig;
35
+ }
36
+ export interface SWPermitTransaction extends SWTransactionBase {
33
37
  transaction: SignTypedDataMessageV3V4;
34
38
  }
35
- export interface SWTransactionResult extends Omit<SWTransaction, 'transaction' | 'additionalValidator' | 'eventsHandler' | 'process'> {
39
+ export interface SWDutchTransaction extends SWTransactionBase {
40
+ transaction: {
41
+ submitSwapOrder: () => Promise<boolean>;
42
+ cronCheckTxSuccess: () => Promise<UniswapOrderInfo | undefined>;
43
+ };
44
+ }
45
+ export interface SWTransactionResult extends Omit<SWTransactionBase, 'transaction' | 'additionalValidator' | 'eventsHandler' | 'process'> {
36
46
  process?: ProcessTransactionData;
37
47
  }
38
- declare type SwInputBase = Pick<SWTransaction, 'address' | 'url' | 'data' | 'extrinsicType' | 'chain' | 'chainType' | 'ignoreWarnings' | 'transferNativeAmount'> & Partial<Pick<SWTransaction, 'additionalValidator' | 'eventsHandler'>>;
39
- export interface SWTransactionInput extends SwInputBase, Partial<Pick<SWTransaction, 'estimateFee' | 'signAfterCreate' | 'isPassConfirmation' | 'step' | 'errorOnTimeOut' | 'xcmFeeDryRun'>>, TransactionFee {
48
+ declare type SwInputBase = Pick<SWTransactionBase, 'address' | 'url' | 'data' | 'extrinsicType' | 'chain' | 'chainType' | 'ignoreWarnings' | 'transferNativeAmount'> & Partial<Pick<SWTransactionBase, 'additionalValidator' | 'eventsHandler'>>;
49
+ export interface SWTransactionInput extends SwInputBase, Partial<Pick<SWTransactionBase, 'estimateFee' | 'signAfterCreate' | 'isPassConfirmation' | 'step' | 'errorOnTimeOut' | 'xcmFeeDryRun'>>, TransactionFee {
40
50
  id?: string;
41
- transaction?: SWTransaction['transaction'] | null;
42
- warnings?: SWTransaction['warnings'];
43
- errors?: SWTransaction['errors'];
51
+ transaction?: SWTransactionBase['transaction'] | null;
52
+ warnings?: SWTransactionBase['warnings'];
53
+ errors?: SWTransactionBase['errors'];
44
54
  edAsWarning?: boolean;
45
55
  isTransferAll?: boolean;
46
56
  isTransferLocalTokenAndPayThatTokenAsFee?: boolean;
@@ -50,7 +60,10 @@ export interface SWTransactionInput extends SwInputBase, Partial<Pick<SWTransact
50
60
  export interface SWPermitTransactionInput extends Omit<SWTransactionInput, 'transaction'> {
51
61
  transaction?: SWPermitTransaction['transaction'] | null;
52
62
  }
53
- export declare type SWTransactionResponse = SwInputBase & Pick<SWTransaction, 'warnings' | 'errors'> & Partial<Pick<SWTransaction, 'id' | 'extrinsicHash' | 'status' | 'estimateFee' | 'xcmFeeDryRun'>> & TransactionFee & {
63
+ export interface SWDutchTransactionInput extends Omit<SWTransactionInput, 'transaction'> {
64
+ transaction?: SWDutchTransaction['transaction'] | null;
65
+ }
66
+ export declare type SWTransactionResponse = SwInputBase & Pick<SWTransactionBase, 'warnings' | 'errors'> & Partial<Pick<SWTransactionBase, 'id' | 'extrinsicHash' | 'status' | 'estimateFee' | 'xcmFeeDryRun'>> & TransactionFee & {
54
67
  processId?: string;
55
68
  };
56
69
  export declare type ValidateTransactionResponseInput = SWTransactionInput;
@@ -62,7 +62,8 @@ export declare enum SwapProviderId {
62
62
  ROCOCO_ASSET_HUB = "ROCOCO_ASSET_HUB",
63
63
  WESTEND_ASSET_HUB = "WESTEND_ASSET_HUB",
64
64
  SIMPLE_SWAP = "SIMPLE_SWAP",
65
- UNISWAP = "UNISWAP"
65
+ UNISWAP = "UNISWAP",
66
+ KYBER = "KYBER"
66
67
  }
67
68
  export declare const _SUPPORTED_SWAP_PROVIDERS: SwapProviderId[];
68
69
  export interface SwapProvider {
@@ -138,6 +139,7 @@ export interface SwapRequestV2 {
138
139
  feeToken?: string;
139
140
  preferredProvider?: SwapProviderId;
140
141
  isCrossChain?: boolean;
142
+ isSupportKyberVersion?: boolean;
141
143
  }
142
144
  export interface SwapRequestResult {
143
145
  process: CommonOptimalSwapPath;
@@ -166,6 +168,7 @@ export interface SwapSubmitStepData {
166
168
  extrinsicType: ExtrinsicType;
167
169
  chainType: ChainType;
168
170
  isPermit?: boolean;
171
+ isDutch?: boolean;
169
172
  }
170
173
  export declare enum DynamicSwapType {
171
174
  SWAP = "SWAP",
@@ -35,13 +35,14 @@ export let SwapProviderId;
35
35
  SwapProviderId["WESTEND_ASSET_HUB"] = "WESTEND_ASSET_HUB";
36
36
  SwapProviderId["SIMPLE_SWAP"] = "SIMPLE_SWAP";
37
37
  SwapProviderId["UNISWAP"] = "UNISWAP";
38
+ SwapProviderId["KYBER"] = "KYBER";
38
39
  })(SwapProviderId || (SwapProviderId = {}));
39
40
  export const _SUPPORTED_SWAP_PROVIDERS = [SwapProviderId.CHAIN_FLIP_TESTNET, SwapProviderId.CHAIN_FLIP_MAINNET, SwapProviderId.HYDRADX_MAINNET,
40
41
  // SwapProviderId.HYDRADX_TESTNET,
41
42
  SwapProviderId.POLKADOT_ASSET_HUB, SwapProviderId.KUSAMA_ASSET_HUB,
42
43
  // SwapProviderId.ROCOCO_ASSET_HUB,
43
44
  // SwapProviderId.WESTEND_ASSET_HUB,
44
- SwapProviderId.SIMPLE_SWAP, SwapProviderId.UNISWAP];
45
+ SwapProviderId.SIMPLE_SWAP, SwapProviderId.UNISWAP, SwapProviderId.KYBER];
45
46
  // process handling
46
47
  export let SwapFeeType;
47
48
  (function (SwapFeeType) {
@@ -1,2 +1,4 @@
1
+ import { _ChainInfo } from '@subwallet/chain-list/types';
1
2
  export declare const convertCardanoAddressToHex: (bech32Address: string) => string;
2
3
  export declare const convertCardanoHexToBech32: (hexAddress: string) => string;
4
+ export declare const validateAddressNetwork: (address: string, chainInfo?: _ChainInfo) => boolean;
package/utils/cardano.js CHANGED
@@ -2,6 +2,7 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  import { Address } from '@emurgo/cardano-serialization-lib-nodejs';
5
+ import { isCardanoMainnetAddress, isCardanoTestnetAddress } from '@subwallet/keyring';
5
6
  export const convertCardanoAddressToHex = bech32Address => {
6
7
  const addr = Address.from_bech32(bech32Address);
7
8
  return addr.to_hex();
@@ -9,4 +10,10 @@ export const convertCardanoAddressToHex = bech32Address => {
9
10
  export const convertCardanoHexToBech32 = hexAddress => {
10
11
  const addr = Address.from_hex(hexAddress);
11
12
  return addr.to_bech32();
13
+ };
14
+ export const validateAddressNetwork = (address, chainInfo) => {
15
+ if (!(chainInfo !== null && chainInfo !== void 0 && chainInfo.cardanoInfo) || !chainInfo.isTestnet) {
16
+ return isCardanoMainnetAddress(address);
17
+ }
18
+ return isCardanoTestnetAddress(address);
12
19
  };