@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.
- package/background/KoniTypes.d.ts +3 -1
- package/cjs/constants/index.js +1 -1
- package/cjs/koni/api/dotsama/transfer.js +1 -1
- package/cjs/koni/api/nft/bit.country/index.js +2 -0
- package/cjs/koni/api/nft/config.js +3 -1
- package/cjs/koni/api/tokens/evm/transfer.js +4 -4
- package/cjs/koni/background/handlers/Extension.js +32 -17
- package/cjs/koni/background/handlers/State.js +41 -9
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +58 -0
- package/cjs/services/chain-service/constants.js +11 -7
- package/cjs/services/chain-service/handler/chain-spec/goldberg.js +75 -8
- package/cjs/services/chain-service/index.js +71 -59
- package/cjs/services/chain-service/utils.js +11 -6
- package/cjs/services/earning-service/constants/chains.js +2 -2
- package/cjs/services/earning-service/handlers/liquid-staking/acala.js +9 -3
- package/cjs/services/earning-service/handlers/liquid-staking/bifrost.js +8 -1
- package/cjs/services/earning-service/handlers/liquid-staking/parallel.js +6 -1
- package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +25 -17
- package/cjs/services/earning-service/handlers/native-staking/amplitude.js +4 -0
- package/cjs/services/earning-service/handlers/native-staking/astar.js +6 -2
- package/cjs/services/earning-service/handlers/native-staking/para-chain.js +5 -0
- package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +14 -16
- package/cjs/services/earning-service/handlers/nomination-pool/index.js +9 -11
- package/cjs/services/earning-service/handlers/special.js +2 -0
- package/cjs/services/earning-service/service.js +51 -18
- package/cjs/services/fee-service/service.js +70 -0
- package/cjs/services/fee-service/utils/index.js +209 -0
- package/cjs/services/migration-service/scripts/DeleteChainStaking.js +23 -0
- package/cjs/services/migration-service/scripts/index.js +3 -1
- package/cjs/services/transaction-service/index.js +37 -37
- package/cjs/types/fee/index.js +1 -0
- package/cjs/types/index.js +11 -0
- package/cjs/utils/eth.js +2 -105
- package/cjs/utils/index.js +12 -0
- package/cjs/utils/reportError.js +31 -0
- package/constants/index.d.ts +1 -1
- package/constants/index.js +1 -1
- package/koni/api/dotsama/transfer.js +1 -1
- package/koni/api/nft/bit.country/index.js +3 -1
- package/koni/api/nft/config.d.ts +1 -0
- package/koni/api/nft/config.js +1 -0
- package/koni/api/tokens/evm/transfer.js +1 -1
- package/koni/background/handlers/Extension.d.ts +1 -0
- package/koni/background/handlers/Extension.js +18 -3
- package/koni/background/handlers/State.d.ts +4 -1
- package/koni/background/handlers/State.js +32 -1
- package/package.json +31 -6
- package/packageInfo.js +1 -1
- package/services/balance-service/helpers/subscribe/substrate/index.js +59 -1
- package/services/chain-service/constants.d.ts +2 -0
- package/services/chain-service/constants.js +11 -7
- package/services/chain-service/handler/chain-spec/goldberg.d.ts +70 -1
- package/services/chain-service/handler/chain-spec/goldberg.js +75 -8
- package/services/chain-service/index.d.ts +7 -3
- package/services/chain-service/index.js +62 -51
- package/services/chain-service/types.d.ts +4 -0
- package/services/chain-service/utils.d.ts +1 -0
- package/services/chain-service/utils.js +10 -6
- package/services/earning-service/constants/chains.js +2 -2
- package/services/earning-service/handlers/liquid-staking/acala.js +9 -3
- package/services/earning-service/handlers/liquid-staking/bifrost.js +8 -1
- package/services/earning-service/handlers/liquid-staking/parallel.d.ts +1 -1
- package/services/earning-service/handlers/liquid-staking/parallel.js +6 -1
- package/services/earning-service/handlers/liquid-staking/stella-swap.js +25 -17
- package/services/earning-service/handlers/native-staking/amplitude.js +4 -0
- package/services/earning-service/handlers/native-staking/astar.js +6 -2
- package/services/earning-service/handlers/native-staking/para-chain.js +5 -0
- package/services/earning-service/handlers/native-staking/relay-chain.js +15 -17
- package/services/earning-service/handlers/nomination-pool/index.js +10 -12
- package/services/earning-service/handlers/special.d.ts +1 -0
- package/services/earning-service/handlers/special.js +2 -0
- package/services/earning-service/service.d.ts +4 -1
- package/services/earning-service/service.js +52 -19
- package/services/fee-service/service.d.ts +12 -0
- package/services/fee-service/service.js +63 -0
- package/services/fee-service/utils/index.d.ts +8 -0
- package/services/fee-service/utils/index.js +193 -0
- package/services/migration-service/scripts/DeleteChainStaking.d.ts +4 -0
- package/services/migration-service/scripts/DeleteChainStaking.js +15 -0
- package/services/migration-service/scripts/index.js +3 -1
- package/services/transaction-service/index.js +2 -2
- package/types/fee/index.d.ts +49 -0
- package/types/fee/index.js +1 -0
- package/types/index.d.ts +1 -0
- package/types/index.js +1 -0
- package/types/yield/info/account/unstake.d.ts +2 -0
- package/types/yield/info/pallet.d.ts +4 -0
- package/utils/eth.d.ts +0 -15
- package/utils/eth.js +0 -101
- package/utils/index.d.ts +1 -0
- package/utils/index.js +1 -0
- package/utils/reportError.d.ts +1 -0
- 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: '
|
|
56
|
-
rows: '
|
|
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
|
-
|
|
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: '
|
|
73
|
-
col: '
|
|
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 `
|
|
155
|
+
description: 'Generate the data proof for the given `transaction_index`',
|
|
101
156
|
params: [{
|
|
102
|
-
name: '
|
|
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
|
-
|
|
357
|
-
|
|
358
|
-
|
|
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
|
-
|
|
488
|
-
|
|
489
|
-
|
|
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
|
-
|
|
494
|
-
|
|
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
|
-
|
|
506
|
-
|
|
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(
|
|
548
|
+
await Promise.all(Object.entries(chainInfoMap).filter(_ref5 => {
|
|
514
549
|
var _chainStateMap$slug;
|
|
515
|
-
let [slug] =
|
|
550
|
+
let [slug] = _ref5;
|
|
516
551
|
return (_chainStateMap$slug = chainStateMap[slug]) === null || _chainStateMap$slug === void 0 ? void 0 : _chainStateMap$slug.active;
|
|
517
|
-
}).map(
|
|
518
|
-
let [, chainInfo] =
|
|
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
|
|
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
|
-
|
|
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(
|
|
849
|
-
let [slug, chainInfo] =
|
|
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
|
-
(
|
|
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$
|
|
317
|
-
return ((_tokenInfo$
|
|
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$
|
|
321
|
-
return ((_tokenInfo$
|
|
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$
|
|
325
|
-
return (_tokenInfo$
|
|
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', '
|
|
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'
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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.
|
|
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.
|
|
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,
|