@subwallet/extension-base 1.1.40-1 → 1.1.41-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 (94) hide show
  1. package/background/KoniTypes.d.ts +3 -1
  2. package/cjs/constants/index.js +1 -1
  3. package/cjs/koni/api/dotsama/transfer.js +1 -1
  4. package/cjs/koni/api/nft/bit.country/index.js +2 -0
  5. package/cjs/koni/api/nft/config.js +3 -1
  6. package/cjs/koni/api/tokens/evm/transfer.js +4 -4
  7. package/cjs/koni/background/handlers/Extension.js +32 -17
  8. package/cjs/koni/background/handlers/State.js +41 -9
  9. package/cjs/packageInfo.js +1 -1
  10. package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +58 -0
  11. package/cjs/services/chain-service/constants.js +11 -7
  12. package/cjs/services/chain-service/handler/chain-spec/goldberg.js +75 -8
  13. package/cjs/services/chain-service/index.js +71 -59
  14. package/cjs/services/chain-service/utils.js +11 -6
  15. package/cjs/services/earning-service/constants/chains.js +2 -2
  16. package/cjs/services/earning-service/handlers/liquid-staking/acala.js +9 -3
  17. package/cjs/services/earning-service/handlers/liquid-staking/bifrost.js +8 -1
  18. package/cjs/services/earning-service/handlers/liquid-staking/parallel.js +6 -1
  19. package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +25 -17
  20. package/cjs/services/earning-service/handlers/native-staking/amplitude.js +4 -0
  21. package/cjs/services/earning-service/handlers/native-staking/astar.js +6 -2
  22. package/cjs/services/earning-service/handlers/native-staking/para-chain.js +5 -0
  23. package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +14 -16
  24. package/cjs/services/earning-service/handlers/nomination-pool/index.js +9 -11
  25. package/cjs/services/earning-service/handlers/special.js +2 -0
  26. package/cjs/services/earning-service/service.js +51 -18
  27. package/cjs/services/fee-service/service.js +70 -0
  28. package/cjs/services/fee-service/utils/index.js +209 -0
  29. package/cjs/services/migration-service/scripts/DeleteChainStaking.js +23 -0
  30. package/cjs/services/migration-service/scripts/index.js +3 -1
  31. package/cjs/services/transaction-service/index.js +37 -37
  32. package/cjs/types/fee/index.js +1 -0
  33. package/cjs/types/index.js +11 -0
  34. package/cjs/utils/eth.js +2 -105
  35. package/cjs/utils/index.js +12 -0
  36. package/cjs/utils/reportError.js +31 -0
  37. package/constants/index.d.ts +1 -1
  38. package/constants/index.js +1 -1
  39. package/koni/api/dotsama/transfer.js +1 -1
  40. package/koni/api/nft/bit.country/index.js +3 -1
  41. package/koni/api/nft/config.d.ts +1 -0
  42. package/koni/api/nft/config.js +1 -0
  43. package/koni/api/tokens/evm/transfer.js +1 -1
  44. package/koni/background/handlers/Extension.d.ts +1 -0
  45. package/koni/background/handlers/Extension.js +18 -3
  46. package/koni/background/handlers/State.d.ts +4 -1
  47. package/koni/background/handlers/State.js +32 -1
  48. package/package.json +31 -6
  49. package/packageInfo.js +1 -1
  50. package/services/balance-service/helpers/subscribe/substrate/index.js +59 -1
  51. package/services/chain-service/constants.d.ts +2 -0
  52. package/services/chain-service/constants.js +11 -7
  53. package/services/chain-service/handler/chain-spec/goldberg.d.ts +70 -1
  54. package/services/chain-service/handler/chain-spec/goldberg.js +75 -8
  55. package/services/chain-service/index.d.ts +7 -3
  56. package/services/chain-service/index.js +62 -51
  57. package/services/chain-service/types.d.ts +4 -0
  58. package/services/chain-service/utils.d.ts +1 -0
  59. package/services/chain-service/utils.js +10 -6
  60. package/services/earning-service/constants/chains.js +2 -2
  61. package/services/earning-service/handlers/liquid-staking/acala.js +9 -3
  62. package/services/earning-service/handlers/liquid-staking/bifrost.js +8 -1
  63. package/services/earning-service/handlers/liquid-staking/parallel.d.ts +1 -1
  64. package/services/earning-service/handlers/liquid-staking/parallel.js +6 -1
  65. package/services/earning-service/handlers/liquid-staking/stella-swap.js +25 -17
  66. package/services/earning-service/handlers/native-staking/amplitude.js +4 -0
  67. package/services/earning-service/handlers/native-staking/astar.js +6 -2
  68. package/services/earning-service/handlers/native-staking/para-chain.js +5 -0
  69. package/services/earning-service/handlers/native-staking/relay-chain.js +15 -17
  70. package/services/earning-service/handlers/nomination-pool/index.js +10 -12
  71. package/services/earning-service/handlers/special.d.ts +1 -0
  72. package/services/earning-service/handlers/special.js +2 -0
  73. package/services/earning-service/service.d.ts +4 -1
  74. package/services/earning-service/service.js +52 -19
  75. package/services/fee-service/service.d.ts +12 -0
  76. package/services/fee-service/service.js +63 -0
  77. package/services/fee-service/utils/index.d.ts +8 -0
  78. package/services/fee-service/utils/index.js +193 -0
  79. package/services/migration-service/scripts/DeleteChainStaking.d.ts +4 -0
  80. package/services/migration-service/scripts/DeleteChainStaking.js +15 -0
  81. package/services/migration-service/scripts/index.js +3 -1
  82. package/services/transaction-service/index.js +2 -2
  83. package/types/fee/index.d.ts +49 -0
  84. package/types/fee/index.js +1 -0
  85. package/types/index.d.ts +1 -0
  86. package/types/index.js +1 -0
  87. package/types/yield/info/account/unstake.d.ts +2 -0
  88. package/types/yield/info/pallet.d.ts +4 -0
  89. package/utils/eth.d.ts +0 -15
  90. package/utils/eth.js +0 -101
  91. package/utils/index.d.ts +1 -0
  92. package/utils/index.js +1 -0
  93. package/utils/reportError.d.ts +1 -0
  94. package/utils/reportError.js +23 -0
@@ -28,9 +28,25 @@ const chainSpec = {
28
28
  appLookup: 'DataLookup',
29
29
  commitment: 'KateCommitment'
30
30
  },
31
+ V2HeaderExtension: {
32
+ appLookup: 'DataLookup',
33
+ commitment: 'KateCommitment'
34
+ },
35
+ V3HeaderExtension: {
36
+ appLookup: 'DataLookup',
37
+ commitment: 'KateCommitment'
38
+ },
39
+ VTHeaderExtension: {
40
+ newField: 'Vec<u8>',
41
+ commitment: 'KateCommitment',
42
+ appLookup: 'DataLookup'
43
+ },
31
44
  HeaderExtension: {
32
45
  _enum: {
33
- V1: 'V1HeaderExtension'
46
+ V1: 'V1HeaderExtension',
47
+ V2: 'V2HeaderExtension',
48
+ V3: 'V3HeaderExtension',
49
+ VTest: 'VTHeaderExtension'
34
50
  }
35
51
  },
36
52
  DaHeader: {
@@ -50,10 +66,12 @@ const chainSpec = {
50
66
  extra: 'CheckAppIdExtra',
51
67
  types: 'CheckAppIdTypes'
52
68
  },
69
+ BlockLengthColumns: 'Compact<u32>',
70
+ BlockLengthRows: 'Compact<u32>',
53
71
  BlockLength: {
54
72
  max: 'PerDispatchClass',
55
- cols: 'Compact<u32>',
56
- rows: 'Compact<u32>',
73
+ cols: 'BlockLengthColumns',
74
+ rows: 'BlockLengthRows',
57
75
  chunkSize: 'Compact<u32>'
58
76
  },
59
77
  PerDispatchClass: {
@@ -65,12 +83,37 @@ const chainSpec = {
65
83
  root: 'H256',
66
84
  proof: 'Vec<H256>',
67
85
  numberOfLeaves: 'Compact<u32>',
68
- leaf_index: 'Compact<u32>',
86
+ leafIndex: 'Compact<u32>',
69
87
  leaf: 'H256'
70
88
  },
89
+ DataProofV2: {
90
+ dataRoot: 'H256',
91
+ blobRoot: 'H256',
92
+ bridgeRoot: 'H256',
93
+ proof: 'Vec<H256>',
94
+ numberOfLeaves: 'Compact<u32>',
95
+ leafIndex: 'Compact<u32>',
96
+ leaf: 'H256'
97
+ },
98
+ ProofResponse: {
99
+ dataProof: 'DataProofV2',
100
+ message: 'Option<Message>'
101
+ },
102
+ Message: {
103
+ messageType: 'MessageType',
104
+ from: 'H256',
105
+ to: 'H256',
106
+ originDomain: 'u32',
107
+ destinationDomain: 'u32',
108
+ data: 'Vec<u8>',
109
+ id: 'u64'
110
+ },
111
+ MessageType: {
112
+ _enum: ['ArbitraryMessage', 'FungibleToken']
113
+ },
71
114
  Cell: {
72
- row: 'u32',
73
- col: 'u32'
115
+ row: 'BlockLengthRows',
116
+ col: 'BlockLengthColumns'
74
117
  }
75
118
  },
76
119
  rpc: {
@@ -96,10 +139,22 @@ const chainSpec = {
96
139
  }],
97
140
  type: 'Vec<u8>'
98
141
  },
142
+ queryAppData: {
143
+ description: 'Fetches app data rows for the given app',
144
+ params: [{
145
+ name: 'app_id',
146
+ type: 'AppId'
147
+ }, {
148
+ name: 'at',
149
+ type: 'Hash',
150
+ isOptional: true
151
+ }],
152
+ type: 'Vec<Option<Vec<u8>>>'
153
+ },
99
154
  queryDataProof: {
100
- description: 'Generate the data proof for the given `index`',
155
+ description: 'Generate the data proof for the given `transaction_index`',
101
156
  params: [{
102
- name: 'data_index',
157
+ name: 'transaction_index',
103
158
  type: 'u32'
104
159
  }, {
105
160
  name: 'at',
@@ -107,6 +162,18 @@ const chainSpec = {
107
162
  isOptional: true
108
163
  }],
109
164
  type: 'DataProof'
165
+ },
166
+ queryDataProofV2: {
167
+ description: 'Generate the data proof for the given `transaction_index`',
168
+ params: [{
169
+ name: 'transaction_index',
170
+ type: 'u32'
171
+ }, {
172
+ name: 'at',
173
+ type: 'Hash',
174
+ isOptional: true
175
+ }],
176
+ type: 'ProofResponse'
110
177
  }
111
178
  }
112
179
  },
@@ -38,6 +38,7 @@ class ChainService {
38
38
  // TODO: consider BehaviorSubject
39
39
  chainInfoMapSubject = new _rxjs.Subject();
40
40
  chainStateMapSubject = new _rxjs.Subject();
41
+ chainStatusMapSubject = new _rxjs.BehaviorSubject({});
41
42
  assetRegistrySubject = new _rxjs.Subject();
42
43
  multiChainAssetMapSubject = new _rxjs.Subject();
43
44
  xcmRefMapSubject = new _rxjs.Subject();
@@ -111,6 +112,9 @@ class ChainService {
111
112
  subscribeChainStateMap() {
112
113
  return this.chainStateMapSubject;
113
114
  }
115
+ subscribeChainStatusMap() {
116
+ return this.chainStatusMapSubject;
117
+ }
114
118
  getAssetRegistry() {
115
119
  return this.dataMap.assetRegistry;
116
120
  }
@@ -188,6 +192,12 @@ class ChainService {
188
192
  getChainStateByKey(key) {
189
193
  return this.dataMap.chainStateMap[key];
190
194
  }
195
+ getChainStatusMap() {
196
+ return this.chainStatusMapSubject.getValue();
197
+ }
198
+ getChainStatusByKey(key) {
199
+ return this.getChainStatusMap()[key];
200
+ }
191
201
  getActiveChains() {
192
202
  return Object.entries(this.dataMap.chainStateMap).filter(_ref => {
193
203
  let [, chainState] = _ref;
@@ -353,9 +363,32 @@ class ChainService {
353
363
  this.lockChainInfoMap = false;
354
364
  return true;
355
365
  }
356
- setChainConnectionStatus(slug, connectionStatus) {
357
- const chainStateMap = this.getChainStateMap();
358
- chainStateMap[slug].connectionStatus = connectionStatus;
366
+ connectionStatusQueueMap = {};
367
+ updateChainConnectionStatus(slug, connectionStatus) {
368
+ this.connectionStatusQueueMap[slug] = connectionStatus;
369
+ (0, _utils2.addLazy)('updateChainConnectionStatus', () => {
370
+ const chainStatusMap = this.getChainStatusMap();
371
+ let update = false;
372
+ Object.entries(this.connectionStatusQueueMap).forEach(_ref3 => {
373
+ let [slug, status] = _ref3;
374
+ if (chainStatusMap[slug]) {
375
+ if (chainStatusMap[slug].connectionStatus !== status) {
376
+ chainStatusMap[slug].connectionStatus = status;
377
+ chainStatusMap[slug].lastUpdated = Date.now();
378
+ update = true;
379
+ }
380
+ } else {
381
+ chainStatusMap[slug] = {
382
+ slug,
383
+ connectionStatus: status,
384
+ lastUpdated: Date.now()
385
+ };
386
+ update = true;
387
+ }
388
+ });
389
+ this.connectionStatusQueueMap = {};
390
+ update && this.chainStatusMapSubject.next(chainStatusMap);
391
+ });
359
392
  }
360
393
  upsertCustomToken(token) {
361
394
  if (token.slug.length === 0) {
@@ -484,14 +517,18 @@ class ChainService {
484
517
  this.logger.log('Finished updating latest asset ref');
485
518
  }
486
519
  handleLatestPriceId(latestPriceIds) {
487
- Object.entries(latestPriceIds).forEach(_ref3 => {
488
- let [slug, priceId] = _ref3;
489
- if (this.dataMap.assetRegistry[slug]) {
520
+ let isUpdated = false;
521
+ Object.entries(latestPriceIds).forEach(_ref4 => {
522
+ let [slug, priceId] = _ref4;
523
+ if (this.dataMap.assetRegistry[slug] && this.dataMap.assetRegistry[slug].priceId !== priceId) {
524
+ isUpdated = true;
490
525
  this.dataMap.assetRegistry[slug].priceId = priceId;
491
526
  }
492
527
  });
493
- this.assetRegistrySubject.next(this.dataMap.assetRegistry);
494
- this.eventService.emit('asset.updateState', '');
528
+ if (isUpdated) {
529
+ this.assetRegistrySubject.next(this.dataMap.assetRegistry);
530
+ this.eventService.emit('asset.updateState', '');
531
+ }
495
532
  this.logger.log('Finished updating latest price IDs');
496
533
  }
497
534
  handleLatestData() {
@@ -501,21 +538,19 @@ class ChainService {
501
538
  this.fetchLatestBlockedAssetRef().then(latestAssetRef => {
502
539
  this.handleLatestBlockedAssetRef(latestAssetRef);
503
540
  }).catch(console.error);
504
-
505
- // this.fetchLatestPriceIdsData().then((latestPriceIds) => {
506
- // this.handleLatestPriceId(latestPriceIds);
507
- // }).catch(console.error);
541
+ this.fetchLatestPriceIdsData().then(latestPriceIds => {
542
+ this.handleLatestPriceId(latestPriceIds);
543
+ }).catch(console.error);
508
544
  }
509
-
510
545
  async initApis() {
511
546
  const chainInfoMap = this.getChainInfoMap();
512
547
  const chainStateMap = this.getChainStateMap();
513
- await Promise.all(Object.entries(chainInfoMap).filter(_ref4 => {
548
+ await Promise.all(Object.entries(chainInfoMap).filter(_ref5 => {
514
549
  var _chainStateMap$slug;
515
- let [slug] = _ref4;
550
+ let [slug] = _ref5;
516
551
  return (_chainStateMap$slug = chainStateMap[slug]) === null || _chainStateMap$slug === void 0 ? void 0 : _chainStateMap$slug.active;
517
- }).map(_ref5 => {
518
- let [, chainInfo] = _ref5;
552
+ }).map(_ref6 => {
553
+ let [, chainInfo] = _ref6;
519
554
  try {
520
555
  return this.initApiForChain(chainInfo);
521
556
  } catch (e) {
@@ -530,13 +565,8 @@ class ChainService {
530
565
  providerName
531
566
  } = this.getChainCurrentProviderByKey(chainInfo.slug);
532
567
  const onUpdateStatus = status => {
533
- const currentStatus = this.getChainStateByKey(chainInfo.slug).connectionStatus;
534
-
535
- // Avoid unnecessary update in case disable chain
536
- if (currentStatus !== status) {
537
- this.setChainConnectionStatus(chainInfo.slug, status);
538
- this.updateChainStateMapSubscription();
539
- }
568
+ const slug = chainInfo.slug;
569
+ this.updateChainConnectionStatus(slug, status);
540
570
  };
541
571
  if (chainInfo.substrateInfo !== null && chainInfo.substrateInfo !== undefined) {
542
572
  if (_constants._MANTA_ZK_CHAIN_GROUP.includes(chainInfo.slug) && _utils2.MODULE_SUPPORT.MANTA_ZK && this.mantaChainHandler) {
@@ -635,7 +665,7 @@ class ChainService {
635
665
  this.lockChainInfoMap = true;
636
666
  chainStateMap[chainSlug].active = false;
637
667
  // Set disconnect state for inactive chain
638
- chainStateMap[chainSlug].connectionStatus = _types3._ChainConnectionStatus.DISCONNECTED;
668
+ this.updateChainConnectionStatus(chainSlug, _types3._ChainConnectionStatus.DISCONNECTED);
639
669
  this.destroyApiForChain(chainInfo);
640
670
  this.dbService.updateChainStore({
641
671
  ...chainInfo,
@@ -728,9 +758,9 @@ class ChainService {
728
758
  this.dataMap.chainStateMap[chainInfo.slug] = {
729
759
  currentProvider: providerKey,
730
760
  slug: chainInfo.slug,
731
- connectionStatus: _types3._ChainConnectionStatus.DISCONNECTED,
732
761
  active: _constants._DEFAULT_ACTIVE_CHAINS.includes(chainInfo.slug)
733
762
  };
763
+ this.updateChainConnectionStatus(chainInfo.slug, _types3._ChainConnectionStatus.DISCONNECTED);
734
764
 
735
765
  // create data for storage
736
766
  newStorageData.push({
@@ -781,9 +811,9 @@ class ChainService {
781
811
  this.dataMap.chainStateMap[storedSlug] = {
782
812
  currentProvider: selectedProvider,
783
813
  slug: storedSlug,
784
- connectionStatus: _types3._ChainConnectionStatus.DISCONNECTED,
785
814
  active: canActive && storedChainInfo.active
786
815
  };
816
+ this.updateChainConnectionStatus(storedSlug, _types3._ChainConnectionStatus.DISCONNECTED);
787
817
  newStorageData.push({
788
818
  ...mergedChainInfoMap[storedSlug],
789
819
  active: canActive && storedChainInfo.active,
@@ -803,9 +833,9 @@ class ChainService {
803
833
  this.dataMap.chainStateMap[duplicatedDefaultSlug] = {
804
834
  currentProvider: storedChainInfo.currentProvider,
805
835
  slug: duplicatedDefaultSlug,
806
- connectionStatus: _types3._ChainConnectionStatus.DISCONNECTED,
807
836
  active: storedChainInfo.active
808
837
  };
838
+ this.updateChainConnectionStatus(duplicatedDefaultSlug, _types3._ChainConnectionStatus.DISCONNECTED);
809
839
  newStorageData.push({
810
840
  ...mergedChainInfoMap[duplicatedDefaultSlug],
811
841
  active: storedChainInfo.active,
@@ -830,9 +860,9 @@ class ChainService {
830
860
  currentProvider: storedChainInfo.currentProvider,
831
861
  // TODO: review
832
862
  slug: storedSlug,
833
- connectionStatus: _types3._ChainConnectionStatus.DISCONNECTED,
834
863
  active: storedChainInfo.active
835
864
  };
865
+ this.updateChainConnectionStatus(storedSlug, _types3._ChainConnectionStatus.DISCONNECTED);
836
866
  newStorageData.push({
837
867
  ...mergedChainInfoMap[storedSlug],
838
868
  active: storedChainInfo.active,
@@ -845,15 +875,15 @@ class ChainService {
845
875
  }
846
876
 
847
877
  // Fill in the missing chainState and storageData (new chains never before seen)
848
- Object.entries(mergedChainInfoMap).forEach(_ref6 => {
849
- let [slug, chainInfo] = _ref6;
878
+ Object.entries(mergedChainInfoMap).forEach(_ref7 => {
879
+ let [slug, chainInfo] = _ref7;
850
880
  if (!(slug in this.dataMap.chainStateMap)) {
851
881
  this.dataMap.chainStateMap[slug] = {
852
882
  currentProvider: Object.keys(chainInfo.providers)[0],
853
883
  slug,
854
- connectionStatus: _types3._ChainConnectionStatus.DISCONNECTED,
855
884
  active: _constants._DEFAULT_ACTIVE_CHAINS.includes(slug)
856
885
  };
886
+ this.updateChainConnectionStatus(slug, _types3._ChainConnectionStatus.DISCONNECTED);
857
887
  newStorageData.push({
858
888
  ...mergedChainInfoMap[slug],
859
889
  active: _constants._DEFAULT_ACTIVE_CHAINS.includes(slug),
@@ -928,9 +958,7 @@ class ChainService {
928
958
  }
929
959
  }
930
960
  updateChainStateMapSubscription() {
931
- (0, _utils2.addLazy)('updateChainStateMapSubscription', () => {
932
- this.chainStateMapSubject.next(this.getChainStateMap());
933
- }, 300, 900);
961
+ this.chainStateMapSubject.next(this.getChainStateMap());
934
962
  }
935
963
  updateChainInfoMapSubscription() {
936
964
  this.chainInfoMapSubject.next(this.getChainInfoMap());
@@ -1039,10 +1067,17 @@ class ChainService {
1039
1067
  const chainStateMap = this.getChainStateMap();
1040
1068
  chainStateMap[newChainSlug] = {
1041
1069
  active: true,
1042
- connectionStatus: _types3._ChainConnectionStatus.DISCONNECTED,
1043
1070
  currentProvider: params.chainEditInfo.currentProvider,
1044
1071
  slug: newChainSlug
1045
1072
  };
1073
+
1074
+ // const chainStatusMap = this.getChainStatusMap();
1075
+ // const chainStatusMap[newChainSlug] = {
1076
+ // slug: newChainSlug,
1077
+ // connectionStatus: _ChainConnectionStatus.DISCONNECTED,
1078
+ // lastUpdated: Date.now()
1079
+ // };
1080
+
1046
1081
  await this.initApiForChain(chainInfo);
1047
1082
 
1048
1083
  // create a record in assetRegistry for native token and update store/subscription
@@ -1327,29 +1362,6 @@ class ChainService {
1327
1362
  await Promise.all([this.substrateChainHandler.wakeUp(), this.evmChainHandler.wakeUp()]);
1328
1363
  this.checkLatestData();
1329
1364
  }
1330
- checkAndUpdateStatusMapForChain(chainSlug) {
1331
- const substrateApiMap = this.getSubstrateApiMap();
1332
- const evmApiMap = this.getEvmApiMap();
1333
- const chainState = this.getChainStateByKey(chainSlug);
1334
- let update = false;
1335
- function updateState(current, status) {
1336
- if (current.connectionStatus !== status) {
1337
- current.connectionStatus = status;
1338
- update = true;
1339
- }
1340
- }
1341
- if (chainState.active) {
1342
- const api = substrateApiMap[chainSlug] || evmApiMap[chainSlug];
1343
- if (api) {
1344
- updateState(chainState, api.isApiConnected ? _types3._ChainConnectionStatus.CONNECTED : _types3._ChainConnectionStatus.DISCONNECTED);
1345
- }
1346
- } else {
1347
- updateState(chainState, _types3._ChainConnectionStatus.DISCONNECTED);
1348
- }
1349
- if (update) {
1350
- this.dataMap.chainStateMap[chainSlug] = chainState;
1351
- }
1352
- }
1353
1365
  async initAssetSettings() {
1354
1366
  const assetSettings = await this.getAssetSettings();
1355
1367
  const activeChainSlugs = this.getActiveChainSlugs();
@@ -38,6 +38,7 @@ exports._getXcmTransferType = _getXcmTransferType;
38
38
  exports._isAssetFungibleToken = _isAssetFungibleToken;
39
39
  exports._isAssetSmartContractNft = _isAssetSmartContractNft;
40
40
  exports._isAssetValuable = _isAssetValuable;
41
+ exports._isBridgedToken = _isBridgedToken;
41
42
  exports._isChainEnabled = _isChainEnabled;
42
43
  exports._isChainEvmCompatible = _isChainEvmCompatible;
43
44
  exports._isChainSupportEvmNft = _isChainSupportEvmNft;
@@ -160,6 +161,10 @@ function _getTokenOnChainInfo(tokenInfo) {
160
161
  var _tokenInfo$metadata4;
161
162
  return (_tokenInfo$metadata4 = tokenInfo.metadata) === null || _tokenInfo$metadata4 === void 0 ? void 0 : _tokenInfo$metadata4.onChainInfo;
162
163
  }
164
+ function _isBridgedToken(tokenInfo) {
165
+ var _tokenInfo$metadata5;
166
+ return (_tokenInfo$metadata5 = tokenInfo.metadata) === null || _tokenInfo$metadata5 === void 0 ? void 0 : _tokenInfo$metadata5.isBridged;
167
+ }
163
168
  function _getTokenMinAmount(tokenInfo) {
164
169
  return tokenInfo.minAmount || '0';
165
170
  }
@@ -313,16 +318,16 @@ function _isXcmPathSupported(originTokenSlug, destinationTokenSlug, assetRefMap)
313
318
  return assetRef.path === _types._AssetRefPath.XCM;
314
319
  }
315
320
  function _getXcmAssetType(tokenInfo) {
316
- var _tokenInfo$metadata5;
317
- return ((_tokenInfo$metadata5 = tokenInfo.metadata) === null || _tokenInfo$metadata5 === void 0 ? void 0 : _tokenInfo$metadata5.assetType) || '';
321
+ var _tokenInfo$metadata6;
322
+ return ((_tokenInfo$metadata6 = tokenInfo.metadata) === null || _tokenInfo$metadata6 === void 0 ? void 0 : _tokenInfo$metadata6.assetType) || '';
318
323
  }
319
324
  function _getXcmAssetId(tokenInfo) {
320
- var _tokenInfo$metadata6;
321
- return ((_tokenInfo$metadata6 = tokenInfo.metadata) === null || _tokenInfo$metadata6 === void 0 ? void 0 : _tokenInfo$metadata6.assetId) || '-1';
325
+ var _tokenInfo$metadata7;
326
+ return ((_tokenInfo$metadata7 = tokenInfo.metadata) === null || _tokenInfo$metadata7 === void 0 ? void 0 : _tokenInfo$metadata7.assetId) || '-1';
322
327
  }
323
328
  function _getXcmAssetMultilocation(tokenInfo) {
324
- var _tokenInfo$metadata7;
325
- return (_tokenInfo$metadata7 = tokenInfo.metadata) === null || _tokenInfo$metadata7 === void 0 ? void 0 : _tokenInfo$metadata7.multilocation;
329
+ var _tokenInfo$metadata8;
330
+ return (_tokenInfo$metadata8 = tokenInfo.metadata) === null || _tokenInfo$metadata8 === void 0 ? void 0 : _tokenInfo$metadata8.multilocation;
326
331
  }
327
332
  function _getXcmTransferType(originChainInfo, destinationChainInfo) {
328
333
  var _originChainInfo$subs, _destinationChainInfo;
@@ -8,7 +8,7 @@ exports._STAKING_CHAIN_GROUP = exports.ST_LIQUID_TOKEN_ABI = void 0;
8
8
  // SPDX-License-Identifier: Apache-2.0
9
9
 
10
10
  const _STAKING_CHAIN_GROUP = {
11
- relay: ['polkadot', 'kusama', 'aleph', 'polkadex', 'ternoa', 'ternoa_alphanet', 'alephTest', 'polkadexTest', 'westend', 'kate', 'edgeware', 'creditcoin', 'vara_network', 'goldberg_testnet'],
11
+ relay: ['polkadot', 'kusama', 'aleph', 'polkadex', 'ternoa', 'alephTest', 'polkadexTest', 'westend', 'kate', 'edgeware', 'creditcoin', 'vara_network', 'goldberg_testnet'],
12
12
  para: ['moonbeam', 'moonriver', 'moonbase', 'turing', 'turingStaging', 'bifrost', 'bifrost_testnet', 'calamari_test', 'calamari', 'manta_network'],
13
13
  astar: ['astar', 'shiden', 'shibuya'],
14
14
  amplitude: ['amplitude', 'amplitude_test', 'kilt', 'kilt_peregrine', 'pendulum', 'krest_network'],
@@ -18,7 +18,7 @@ const _STAKING_CHAIN_GROUP = {
18
18
  bifrost: ['bifrost', 'bifrost_testnet'],
19
19
  aleph: ['aleph', 'alephTest'],
20
20
  // A0 has distinct tokenomics
21
- ternoa: ['ternoa', 'ternoa_alphanet'],
21
+ ternoa: ['ternoa'],
22
22
  liquidStaking: ['bifrost_dot', 'acala', 'parallel', 'moonbeam'],
23
23
  lending: ['interlay'],
24
24
  krest_network: ['krest_network']
@@ -30,7 +30,8 @@ class AcalaLiquidStakingPoolHandler extends _base.default {
30
30
  defaultUnstake: true,
31
31
  fastUnstake: true,
32
32
  cancelUnstake: false,
33
- withdraw: true,
33
+ withdraw: false,
34
+ // TODO: Change after verify unstake info
34
35
  claimReward: false
35
36
  };
36
37
  constructor(state, chain) {
@@ -119,6 +120,7 @@ class AcalaLiquidStakingPoolHandler extends _base.default {
119
120
  }
120
121
  const balances = _balances;
121
122
  const redeemRequests = await substrateApi.api.query.homa.redeemRequests.multi(useAddresses);
123
+ // This rate is multiple with decimals
122
124
  const exchangeRate = await this.getExchangeRate();
123
125
  const decimals = _util.BN_TEN.pow(new _util.BN(this.rateDecimals));
124
126
  for (let i = 0; i < balances.length; i++) {
@@ -130,14 +132,17 @@ class AcalaLiquidStakingPoolHandler extends _base.default {
130
132
  const unstakings = [];
131
133
  const redeemRequest = redeemRequests[i].toPrimitive();
132
134
  if (redeemRequest) {
135
+ // If withdrawable = false, redeem request is claimed
133
136
  const [redeemAmount, withdrawable] = redeemRequest;
134
- const amount = new _util.BN(redeemAmount);
137
+
138
+ // Redeem amount in derivative token
139
+ const amount = new _util.BN(redeemAmount).mul(new _util.BN(exchangeRate)).div(decimals);
135
140
  totalBalance = totalBalance.add(amount);
136
141
  unlockingBalance = unlockingBalance.add(amount);
137
142
  unstakings.push({
138
143
  chain: this.chain,
139
144
  status: withdrawable ? _types.UnstakingStatus.CLAIMABLE : _types.UnstakingStatus.UNLOCKING,
140
- claimable: redeemAmount.toString()
145
+ claimable: amount.toString()
141
146
  });
142
147
  }
143
148
  const result = {
@@ -210,6 +215,7 @@ class AcalaLiquidStakingPoolHandler extends _base.default {
210
215
  async handleYieldRedeem(amount, address, selectedTarget) {
211
216
  const substrateApi = await this.substrateApi.isReady;
212
217
  const weightedMinAmount = await this.createParamToRedeem(amount, address);
218
+ // const extrinsic = substrateApi.api.tx.stableAsset.swap(0, 1, 0, amount, weightedMinAmount);
213
219
  const extrinsic = substrateApi.api.tx.aggregatedDex.swapWithExactSupply(
214
220
  // Swap path
215
221
  [{
@@ -83,6 +83,8 @@ class BifrostLiquidStakingPoolHandler extends _base.default {
83
83
  const assetInfo = this.state.getAssetBySlug(this.inputAsset);
84
84
  const assetDecimals = 10 ** (0, _utils._getAssetDecimals)(assetInfo);
85
85
  const rate = parseFloat(exchangeRate.data.slp_polkadot_ratio[0].ratio);
86
+
87
+ /** Special for bifrost, the rate is divined and unknown decimals to convert (asset decimal is 10 but the rate length is 18) */
86
88
  this.updateExchangeRate(rate);
87
89
  return {
88
90
  ...this.baseInfo,
@@ -135,7 +137,7 @@ class BifrostLiquidStakingPoolHandler extends _base.default {
135
137
  const [_unlockLedgerList, _currentRelayEra, rate] = await Promise.all([substrateApi.api.query.vtokenMinting.userUnlockLedger.multi(useAddresses.map(address => [address, (0, _utils._getTokenOnChainInfo)(inputTokenInfo)])), substrateApi.api.query.vtokenMinting.ongoingTimeUnit((0, _utils._getTokenOnChainInfo)(inputTokenInfo)), this.getExchangeRate()]);
136
138
  const exchangeRate = new _bignumber.default(rate);
137
139
  const currentRelayEraObj = _currentRelayEra.toPrimitive();
138
- const currentRelayEra = currentRelayEraObj.Era;
140
+ const currentRelayEra = currentRelayEraObj.era;
139
141
  const unlockLedgerList = [];
140
142
  const activeBalanceMap = {};
141
143
  for (let i = 0; i < balances.length; i++) {
@@ -198,15 +200,20 @@ class BifrostLiquidStakingPoolHandler extends _base.default {
198
200
  const isClaimable = unlocking.era - currentRelayEra < 0;
199
201
  const remainingEra = unlocking.era - currentRelayEra;
200
202
  const waitingTime = remainingEra * _constants._STAKING_ERA_LENGTH_MAP[this.chain];
203
+ // const currentTimestampMs = Date.now();
204
+ // const targetTimestampMs = currentTimestampMs + waitingTime * 60 * 60 * 1000;
205
+
201
206
  unlockBalance = unlockBalance.add(new _util.BN(unlocking.balance));
202
207
  unstakingList.push({
203
208
  chain: this.chain,
204
209
  status: isClaimable ? _types.UnstakingStatus.CLAIMABLE : _types.UnstakingStatus.UNLOCKING,
205
210
  claimable: unlocking.balance,
206
211
  waitingTime: waitingTime
212
+ // targetTimestampMs: targetTimestampMs
207
213
  });
208
214
  });
209
215
  }
216
+
210
217
  const activeToTotalBalance = exchangeRate.multipliedBy(bnActiveBalance.toString());
211
218
  const totalBalance = activeToTotalBalance.plus(unlockBalance.toString());
212
219
  const result = {
@@ -21,7 +21,7 @@ class ParallelLiquidStakingPoolHandler extends _base.default {
21
21
  inputAsset = 'parallel-LOCAL-DOT';
22
22
  rewardAssets = ['parallel-LOCAL-DOT'];
23
23
  feeAssets = ['parallel-NATIVE-PARA'];
24
- minAmountPercent = 0.97;
24
+ minAmountPercent = 0.96;
25
25
  rateDecimals = 18;
26
26
  availableMethod = {
27
27
  join: true,
@@ -133,6 +133,9 @@ class ParallelLiquidStakingPoolHandler extends _base.default {
133
133
  const remainingEra = chunk.era - currentEra;
134
134
  const eraTime = _constants._STAKING_ERA_LENGTH_MAP[this.chain] || _constants._STAKING_ERA_LENGTH_MAP.default;
135
135
  const waitingTime = remainingEra * eraTime;
136
+ // const currentTimestampMs = Date.now();
137
+ // const targetTimestampMs = currentTimestampMs + waitingTime * 60 * 60 * 1000;
138
+
136
139
  totalBalance = totalBalance.add(amount);
137
140
  unlockingBalance = unlockingBalance.add(amount);
138
141
  unstakings.push({
@@ -140,9 +143,11 @@ class ParallelLiquidStakingPoolHandler extends _base.default {
140
143
  status: isClaimable ? _types.UnstakingStatus.CLAIMABLE : _types.UnstakingStatus.UNLOCKING,
141
144
  claimable: amount.toString(),
142
145
  waitingTime: waitingTime
146
+ // targetTimestampMs: targetTimestampMs
143
147
  });
144
148
  }
145
149
  }
150
+
146
151
  const result = {
147
152
  ...this.baseInfo,
148
153
  type: this.type,