@subwallet/extension-base 1.1.40-1 → 1.1.42-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 (101) 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 +42 -10
  9. package/cjs/packageInfo.js +1 -1
  10. package/cjs/page/SubWalleEvmProvider.js +5 -9
  11. package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +58 -0
  12. package/cjs/services/chain-service/constants.js +11 -7
  13. package/cjs/services/chain-service/handler/chain-spec/goldberg.js +75 -8
  14. package/cjs/services/chain-service/index.js +88 -79
  15. package/cjs/services/chain-service/utils.js +11 -6
  16. package/cjs/services/earning-service/constants/chains.js +10 -5
  17. package/cjs/services/earning-service/handlers/liquid-staking/acala.js +9 -3
  18. package/cjs/services/earning-service/handlers/liquid-staking/bifrost.js +8 -1
  19. package/cjs/services/earning-service/handlers/liquid-staking/parallel.js +6 -1
  20. package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +25 -17
  21. package/cjs/services/earning-service/handlers/native-staking/amplitude.js +4 -0
  22. package/cjs/services/earning-service/handlers/native-staking/astar.js +6 -2
  23. package/cjs/services/earning-service/handlers/native-staking/para-chain.js +144 -45
  24. package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +14 -16
  25. package/cjs/services/earning-service/handlers/nomination-pool/index.js +9 -11
  26. package/cjs/services/earning-service/handlers/special.js +2 -0
  27. package/cjs/services/earning-service/service.js +51 -18
  28. package/cjs/services/fee-service/service.js +70 -0
  29. package/cjs/services/fee-service/utils/index.js +209 -0
  30. package/cjs/services/migration-service/scripts/DeleteChainStaking.js +23 -0
  31. package/cjs/services/migration-service/scripts/databases/MigrateAssetSetting.js +50 -0
  32. package/cjs/services/migration-service/scripts/index.js +6 -1
  33. package/cjs/services/transaction-service/index.js +37 -37
  34. package/cjs/types/fee/index.js +1 -0
  35. package/cjs/types/index.js +11 -0
  36. package/cjs/utils/eth.js +2 -105
  37. package/cjs/utils/index.js +12 -0
  38. package/cjs/utils/reportError.js +31 -0
  39. package/constants/index.d.ts +1 -1
  40. package/constants/index.js +1 -1
  41. package/koni/api/dotsama/transfer.js +1 -1
  42. package/koni/api/nft/bit.country/index.js +3 -1
  43. package/koni/api/nft/config.d.ts +1 -0
  44. package/koni/api/nft/config.js +1 -0
  45. package/koni/api/tokens/evm/transfer.js +1 -1
  46. package/koni/background/handlers/Extension.d.ts +1 -0
  47. package/koni/background/handlers/Extension.js +18 -3
  48. package/koni/background/handlers/State.d.ts +4 -1
  49. package/koni/background/handlers/State.js +33 -2
  50. package/package.json +36 -6
  51. package/packageInfo.js +1 -1
  52. package/page/SubWalleEvmProvider.d.ts +0 -1
  53. package/page/SubWalleEvmProvider.js +5 -9
  54. package/services/balance-service/helpers/subscribe/substrate/index.js +59 -1
  55. package/services/chain-service/constants.d.ts +2 -0
  56. package/services/chain-service/constants.js +11 -7
  57. package/services/chain-service/handler/chain-spec/goldberg.d.ts +70 -1
  58. package/services/chain-service/handler/chain-spec/goldberg.js +75 -8
  59. package/services/chain-service/index.d.ts +8 -4
  60. package/services/chain-service/index.js +74 -67
  61. package/services/chain-service/types.d.ts +4 -0
  62. package/services/chain-service/utils.d.ts +1 -0
  63. package/services/chain-service/utils.js +10 -6
  64. package/services/earning-service/constants/chains.d.ts +3 -0
  65. package/services/earning-service/constants/chains.js +7 -4
  66. package/services/earning-service/handlers/liquid-staking/acala.js +9 -3
  67. package/services/earning-service/handlers/liquid-staking/bifrost.js +8 -1
  68. package/services/earning-service/handlers/liquid-staking/parallel.d.ts +1 -1
  69. package/services/earning-service/handlers/liquid-staking/parallel.js +6 -1
  70. package/services/earning-service/handlers/liquid-staking/stella-swap.js +25 -17
  71. package/services/earning-service/handlers/native-staking/amplitude.js +4 -0
  72. package/services/earning-service/handlers/native-staking/astar.js +6 -2
  73. package/services/earning-service/handlers/native-staking/para-chain.js +144 -45
  74. package/services/earning-service/handlers/native-staking/relay-chain.js +15 -17
  75. package/services/earning-service/handlers/nomination-pool/index.js +10 -12
  76. package/services/earning-service/handlers/special.d.ts +1 -0
  77. package/services/earning-service/handlers/special.js +2 -0
  78. package/services/earning-service/service.d.ts +4 -1
  79. package/services/earning-service/service.js +52 -19
  80. package/services/fee-service/service.d.ts +12 -0
  81. package/services/fee-service/service.js +63 -0
  82. package/services/fee-service/utils/index.d.ts +8 -0
  83. package/services/fee-service/utils/index.js +193 -0
  84. package/services/migration-service/scripts/DeleteChainStaking.d.ts +4 -0
  85. package/services/migration-service/scripts/DeleteChainStaking.js +15 -0
  86. package/services/migration-service/scripts/databases/MigrateAssetSetting.d.ts +4 -0
  87. package/services/migration-service/scripts/databases/MigrateAssetSetting.js +42 -0
  88. package/services/migration-service/scripts/index.js +5 -1
  89. package/services/transaction-service/index.js +2 -2
  90. package/types/fee/index.d.ts +49 -0
  91. package/types/fee/index.js +1 -0
  92. package/types/index.d.ts +1 -0
  93. package/types/index.js +1 -0
  94. package/types/yield/info/account/unstake.d.ts +2 -0
  95. package/types/yield/info/pallet.d.ts +4 -0
  96. package/utils/eth.d.ts +0 -15
  97. package/utils/eth.js +0 -101
  98. package/utils/index.d.ts +1 -0
  99. package/utils/index.js +1 -0
  100. package/utils/reportError.d.ts +1 -0
  101. 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();
@@ -51,7 +52,7 @@ class ChainService {
51
52
  this.chainInfoMapSubject.next(this.dataMap.chainInfoMap);
52
53
  this.chainStateMapSubject.next(this.dataMap.chainStateMap);
53
54
  this.assetRegistrySubject.next(this.dataMap.assetRegistry);
54
- this.xcmRefMapSubject.next(this.dataMap.assetRefMap);
55
+ this.xcmRefMapSubject.next(this.xcmRefMap);
55
56
  if (_utils2.MODULE_SUPPORT.MANTA_ZK) {
56
57
  console.log('Init Manta ZK');
57
58
  this.mantaChainHandler = new _MantaPrivateHandler.MantaPrivateHandler(dbService);
@@ -62,19 +63,16 @@ class ChainService {
62
63
  }
63
64
 
64
65
  // Getter
65
- getXcmRefMap() {
66
- return this.dataMap.assetRefMap;
67
- // const result: Record<string, _AssetRef> = {};
68
- //
69
- // Object.entries(AssetRefMap).forEach(([key, assetRef]) => {
70
- // if (assetRef.path === _AssetRefPath.XCM) {
71
- // result[key] = assetRef;
72
- // }
73
- // });
74
- //
75
- // return result;
66
+ get xcmRefMap() {
67
+ const result = {};
68
+ Object.entries(_chainList.AssetRefMap).forEach(_ref => {
69
+ let [key, assetRef] = _ref;
70
+ if (assetRef.path === _types._AssetRefPath.XCM) {
71
+ result[key] = assetRef;
72
+ }
73
+ });
74
+ return result;
76
75
  }
77
-
78
76
  getEvmApi(slug) {
79
77
  return this.evmChainHandler.getEvmApiByChain(slug);
80
78
  }
@@ -111,6 +109,9 @@ class ChainService {
111
109
  subscribeChainStateMap() {
112
110
  return this.chainStateMapSubject;
113
111
  }
112
+ subscribeChainStatusMap() {
113
+ return this.chainStatusMapSubject;
114
+ }
114
115
  getAssetRegistry() {
115
116
  return this.dataMap.assetRegistry;
116
117
  }
@@ -188,12 +189,18 @@ class ChainService {
188
189
  getChainStateByKey(key) {
189
190
  return this.dataMap.chainStateMap[key];
190
191
  }
192
+ getChainStatusMap() {
193
+ return this.chainStatusMapSubject.getValue();
194
+ }
195
+ getChainStatusByKey(key) {
196
+ return this.getChainStatusMap()[key];
197
+ }
191
198
  getActiveChains() {
192
- return Object.entries(this.dataMap.chainStateMap).filter(_ref => {
193
- let [, chainState] = _ref;
199
+ return Object.entries(this.dataMap.chainStateMap).filter(_ref2 => {
200
+ let [, chainState] = _ref2;
194
201
  return (0, _utils._isChainEnabled)(chainState);
195
- }).map(_ref2 => {
196
- let [key] = _ref2;
202
+ }).map(_ref3 => {
203
+ let [key] = _ref3;
197
204
  return key;
198
205
  });
199
206
  }
@@ -264,7 +271,7 @@ class ChainService {
264
271
  if (asset.originChain === destinationChainSlug) {
265
272
  // check
266
273
  const assetRefKey = (0, _utils._parseAssetRefKey)(originTokenSlug, asset.slug);
267
- const assetRef = this.getAssetRefMap()[assetRefKey];
274
+ const assetRef = this.xcmRefMap[assetRefKey];
268
275
  if (assetRef && assetRef.path === _types._AssetRefPath.XCM) {
269
276
  // there's only 1 corresponding token on 1 chain
270
277
  destinationTokenInfo = asset;
@@ -353,9 +360,32 @@ class ChainService {
353
360
  this.lockChainInfoMap = false;
354
361
  return true;
355
362
  }
356
- setChainConnectionStatus(slug, connectionStatus) {
357
- const chainStateMap = this.getChainStateMap();
358
- chainStateMap[slug].connectionStatus = connectionStatus;
363
+ connectionStatusQueueMap = {};
364
+ updateChainConnectionStatus(slug, connectionStatus) {
365
+ this.connectionStatusQueueMap[slug] = connectionStatus;
366
+ (0, _utils2.addLazy)('updateChainConnectionStatus', () => {
367
+ const chainStatusMap = this.getChainStatusMap();
368
+ let update = false;
369
+ Object.entries(this.connectionStatusQueueMap).forEach(_ref4 => {
370
+ let [slug, status] = _ref4;
371
+ if (chainStatusMap[slug]) {
372
+ if (chainStatusMap[slug].connectionStatus !== status) {
373
+ chainStatusMap[slug].connectionStatus = status;
374
+ chainStatusMap[slug].lastUpdated = Date.now();
375
+ update = true;
376
+ }
377
+ } else {
378
+ chainStatusMap[slug] = {
379
+ slug,
380
+ connectionStatus: status,
381
+ lastUpdated: Date.now()
382
+ };
383
+ update = true;
384
+ }
385
+ });
386
+ this.connectionStatusQueueMap = {};
387
+ update && this.chainStatusMapSubject.next(chainStatusMap);
388
+ });
359
389
  }
360
390
  upsertCustomToken(token) {
361
391
  if (token.slug.length === 0) {
@@ -418,7 +448,7 @@ class ChainService {
418
448
  await this.initChains();
419
449
  this.chainInfoMapSubject.next(this.getChainInfoMap());
420
450
  this.assetRegistrySubject.next(this.getAssetRegistry());
421
- this.xcmRefMapSubject.next(this.dataMap.assetRefMap);
451
+ this.xcmRefMapSubject.next(this.xcmRefMap);
422
452
  await this.initApis();
423
453
  await this.initAssetSettings();
424
454
  await this.initAssetRefMap();
@@ -480,18 +510,22 @@ class ChainService {
480
510
  this.dataMap.assetRefMap = updatedAssetRefMap;
481
511
 
482
512
  // this.dbService.setAssetRef(this.dataMap.assetRefMap).catch(console.error);
483
- this.xcmRefMapSubject.next(this.dataMap.assetRefMap);
513
+ this.xcmRefMapSubject.next(this.xcmRefMap);
484
514
  this.logger.log('Finished updating latest asset ref');
485
515
  }
486
516
  handleLatestPriceId(latestPriceIds) {
487
- Object.entries(latestPriceIds).forEach(_ref3 => {
488
- let [slug, priceId] = _ref3;
489
- if (this.dataMap.assetRegistry[slug]) {
517
+ let isUpdated = false;
518
+ Object.entries(latestPriceIds).forEach(_ref5 => {
519
+ let [slug, priceId] = _ref5;
520
+ if (this.dataMap.assetRegistry[slug] && this.dataMap.assetRegistry[slug].priceId !== priceId) {
521
+ isUpdated = true;
490
522
  this.dataMap.assetRegistry[slug].priceId = priceId;
491
523
  }
492
524
  });
493
- this.assetRegistrySubject.next(this.dataMap.assetRegistry);
494
- this.eventService.emit('asset.updateState', '');
525
+ if (isUpdated) {
526
+ this.assetRegistrySubject.next(this.dataMap.assetRegistry);
527
+ this.eventService.emit('asset.updateState', '');
528
+ }
495
529
  this.logger.log('Finished updating latest price IDs');
496
530
  }
497
531
  handleLatestData() {
@@ -501,21 +535,19 @@ class ChainService {
501
535
  this.fetchLatestBlockedAssetRef().then(latestAssetRef => {
502
536
  this.handleLatestBlockedAssetRef(latestAssetRef);
503
537
  }).catch(console.error);
504
-
505
- // this.fetchLatestPriceIdsData().then((latestPriceIds) => {
506
- // this.handleLatestPriceId(latestPriceIds);
507
- // }).catch(console.error);
538
+ this.fetchLatestPriceIdsData().then(latestPriceIds => {
539
+ this.handleLatestPriceId(latestPriceIds);
540
+ }).catch(console.error);
508
541
  }
509
-
510
542
  async initApis() {
511
543
  const chainInfoMap = this.getChainInfoMap();
512
544
  const chainStateMap = this.getChainStateMap();
513
- await Promise.all(Object.entries(chainInfoMap).filter(_ref4 => {
545
+ await Promise.all(Object.entries(chainInfoMap).filter(_ref6 => {
514
546
  var _chainStateMap$slug;
515
- let [slug] = _ref4;
547
+ let [slug] = _ref6;
516
548
  return (_chainStateMap$slug = chainStateMap[slug]) === null || _chainStateMap$slug === void 0 ? void 0 : _chainStateMap$slug.active;
517
- }).map(_ref5 => {
518
- let [, chainInfo] = _ref5;
549
+ }).map(_ref7 => {
550
+ let [, chainInfo] = _ref7;
519
551
  try {
520
552
  return this.initApiForChain(chainInfo);
521
553
  } catch (e) {
@@ -530,13 +562,8 @@ class ChainService {
530
562
  providerName
531
563
  } = this.getChainCurrentProviderByKey(chainInfo.slug);
532
564
  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
- }
565
+ const slug = chainInfo.slug;
566
+ this.updateChainConnectionStatus(slug, status);
540
567
  };
541
568
  if (chainInfo.substrateInfo !== null && chainInfo.substrateInfo !== undefined) {
542
569
  if (_constants._MANTA_ZK_CHAIN_GROUP.includes(chainInfo.slug) && _utils2.MODULE_SUPPORT.MANTA_ZK && this.mantaChainHandler) {
@@ -635,7 +662,7 @@ class ChainService {
635
662
  this.lockChainInfoMap = true;
636
663
  chainStateMap[chainSlug].active = false;
637
664
  // Set disconnect state for inactive chain
638
- chainStateMap[chainSlug].connectionStatus = _types3._ChainConnectionStatus.DISCONNECTED;
665
+ this.updateChainConnectionStatus(chainSlug, _types3._ChainConnectionStatus.DISCONNECTED);
639
666
  this.destroyApiForChain(chainInfo);
640
667
  this.dbService.updateChainStore({
641
668
  ...chainInfo,
@@ -728,9 +755,9 @@ class ChainService {
728
755
  this.dataMap.chainStateMap[chainInfo.slug] = {
729
756
  currentProvider: providerKey,
730
757
  slug: chainInfo.slug,
731
- connectionStatus: _types3._ChainConnectionStatus.DISCONNECTED,
732
758
  active: _constants._DEFAULT_ACTIVE_CHAINS.includes(chainInfo.slug)
733
759
  };
760
+ this.updateChainConnectionStatus(chainInfo.slug, _types3._ChainConnectionStatus.DISCONNECTED);
734
761
 
735
762
  // create data for storage
736
763
  newStorageData.push({
@@ -781,9 +808,9 @@ class ChainService {
781
808
  this.dataMap.chainStateMap[storedSlug] = {
782
809
  currentProvider: selectedProvider,
783
810
  slug: storedSlug,
784
- connectionStatus: _types3._ChainConnectionStatus.DISCONNECTED,
785
811
  active: canActive && storedChainInfo.active
786
812
  };
813
+ this.updateChainConnectionStatus(storedSlug, _types3._ChainConnectionStatus.DISCONNECTED);
787
814
  newStorageData.push({
788
815
  ...mergedChainInfoMap[storedSlug],
789
816
  active: canActive && storedChainInfo.active,
@@ -803,9 +830,9 @@ class ChainService {
803
830
  this.dataMap.chainStateMap[duplicatedDefaultSlug] = {
804
831
  currentProvider: storedChainInfo.currentProvider,
805
832
  slug: duplicatedDefaultSlug,
806
- connectionStatus: _types3._ChainConnectionStatus.DISCONNECTED,
807
833
  active: storedChainInfo.active
808
834
  };
835
+ this.updateChainConnectionStatus(duplicatedDefaultSlug, _types3._ChainConnectionStatus.DISCONNECTED);
809
836
  newStorageData.push({
810
837
  ...mergedChainInfoMap[duplicatedDefaultSlug],
811
838
  active: storedChainInfo.active,
@@ -830,9 +857,9 @@ class ChainService {
830
857
  currentProvider: storedChainInfo.currentProvider,
831
858
  // TODO: review
832
859
  slug: storedSlug,
833
- connectionStatus: _types3._ChainConnectionStatus.DISCONNECTED,
834
860
  active: storedChainInfo.active
835
861
  };
862
+ this.updateChainConnectionStatus(storedSlug, _types3._ChainConnectionStatus.DISCONNECTED);
836
863
  newStorageData.push({
837
864
  ...mergedChainInfoMap[storedSlug],
838
865
  active: storedChainInfo.active,
@@ -845,15 +872,15 @@ class ChainService {
845
872
  }
846
873
 
847
874
  // Fill in the missing chainState and storageData (new chains never before seen)
848
- Object.entries(mergedChainInfoMap).forEach(_ref6 => {
849
- let [slug, chainInfo] = _ref6;
875
+ Object.entries(mergedChainInfoMap).forEach(_ref8 => {
876
+ let [slug, chainInfo] = _ref8;
850
877
  if (!(slug in this.dataMap.chainStateMap)) {
851
878
  this.dataMap.chainStateMap[slug] = {
852
879
  currentProvider: Object.keys(chainInfo.providers)[0],
853
880
  slug,
854
- connectionStatus: _types3._ChainConnectionStatus.DISCONNECTED,
855
881
  active: _constants._DEFAULT_ACTIVE_CHAINS.includes(slug)
856
882
  };
883
+ this.updateChainConnectionStatus(slug, _types3._ChainConnectionStatus.DISCONNECTED);
857
884
  newStorageData.push({
858
885
  ...mergedChainInfoMap[slug],
859
886
  active: _constants._DEFAULT_ACTIVE_CHAINS.includes(slug),
@@ -928,9 +955,7 @@ class ChainService {
928
955
  }
929
956
  }
930
957
  updateChainStateMapSubscription() {
931
- (0, _utils2.addLazy)('updateChainStateMapSubscription', () => {
932
- this.chainStateMapSubject.next(this.getChainStateMap());
933
- }, 300, 900);
958
+ this.chainStateMapSubject.next(this.getChainStateMap());
934
959
  }
935
960
  updateChainInfoMapSubscription() {
936
961
  this.chainInfoMapSubject.next(this.getChainInfoMap());
@@ -1039,10 +1064,17 @@ class ChainService {
1039
1064
  const chainStateMap = this.getChainStateMap();
1040
1065
  chainStateMap[newChainSlug] = {
1041
1066
  active: true,
1042
- connectionStatus: _types3._ChainConnectionStatus.DISCONNECTED,
1043
1067
  currentProvider: params.chainEditInfo.currentProvider,
1044
1068
  slug: newChainSlug
1045
1069
  };
1070
+
1071
+ // const chainStatusMap = this.getChainStatusMap();
1072
+ // const chainStatusMap[newChainSlug] = {
1073
+ // slug: newChainSlug,
1074
+ // connectionStatus: _ChainConnectionStatus.DISCONNECTED,
1075
+ // lastUpdated: Date.now()
1076
+ // };
1077
+
1046
1078
  await this.initApiForChain(chainInfo);
1047
1079
 
1048
1080
  // create a record in assetRegistry for native token and update store/subscription
@@ -1327,29 +1359,6 @@ class ChainService {
1327
1359
  await Promise.all([this.substrateChainHandler.wakeUp(), this.evmChainHandler.wakeUp()]);
1328
1360
  this.checkLatestData();
1329
1361
  }
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
1362
  async initAssetSettings() {
1354
1363
  const assetSettings = await this.getAssetSettings();
1355
1364
  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;
@@ -3,12 +3,12 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports._STAKING_CHAIN_GROUP = exports.ST_LIQUID_TOKEN_ABI = void 0;
6
+ exports._STAKING_CHAIN_GROUP = exports.ST_LIQUID_TOKEN_ABI = exports.MANTA_VALIDATOR_POINTS_PER_BLOCK = exports.MANTA_MIN_DELEGATION = void 0;
7
7
  // Copyright 2019-2022 @subwallet/extension-base
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,13 +18,18 @@ 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
- krest_network: ['krest_network']
24
+ krest_network: ['krest_network'],
25
+ manta: ['manta_network']
25
26
  };
26
27
 
27
28
  // eslint-disable-next-line @typescript-eslint/no-var-requires,@typescript-eslint/no-unsafe-assignment
28
29
  exports._STAKING_CHAIN_GROUP = _STAKING_CHAIN_GROUP;
29
30
  const ST_LIQUID_TOKEN_ABI = require('./abis/st_liquid_token_abi.json');
30
- exports.ST_LIQUID_TOKEN_ABI = ST_LIQUID_TOKEN_ABI;
31
+ exports.ST_LIQUID_TOKEN_ABI = ST_LIQUID_TOKEN_ABI;
32
+ const MANTA_VALIDATOR_POINTS_PER_BLOCK = 20;
33
+ exports.MANTA_VALIDATOR_POINTS_PER_BLOCK = MANTA_VALIDATOR_POINTS_PER_BLOCK;
34
+ const MANTA_MIN_DELEGATION = 500;
35
+ exports.MANTA_MIN_DELEGATION = MANTA_MIN_DELEGATION;
@@ -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,