@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.
- 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 +42 -10
- package/cjs/packageInfo.js +1 -1
- package/cjs/page/SubWalleEvmProvider.js +5 -9
- 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 +88 -79
- package/cjs/services/chain-service/utils.js +11 -6
- package/cjs/services/earning-service/constants/chains.js +10 -5
- 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 +144 -45
- 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/databases/MigrateAssetSetting.js +50 -0
- package/cjs/services/migration-service/scripts/index.js +6 -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 +33 -2
- package/package.json +36 -6
- package/packageInfo.js +1 -1
- package/page/SubWalleEvmProvider.d.ts +0 -1
- package/page/SubWalleEvmProvider.js +5 -9
- 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 +8 -4
- package/services/chain-service/index.js +74 -67
- 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.d.ts +3 -0
- package/services/earning-service/constants/chains.js +7 -4
- 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 +144 -45
- 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/databases/MigrateAssetSetting.d.ts +4 -0
- package/services/migration-service/scripts/databases/MigrateAssetSetting.js +42 -0
- package/services/migration-service/scripts/index.js +5 -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();
|
|
@@ -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.
|
|
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
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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(
|
|
193
|
-
let [, chainState] =
|
|
199
|
+
return Object.entries(this.dataMap.chainStateMap).filter(_ref2 => {
|
|
200
|
+
let [, chainState] = _ref2;
|
|
194
201
|
return (0, _utils._isChainEnabled)(chainState);
|
|
195
|
-
}).map(
|
|
196
|
-
let [key] =
|
|
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.
|
|
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
|
-
|
|
357
|
-
|
|
358
|
-
|
|
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.
|
|
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.
|
|
513
|
+
this.xcmRefMapSubject.next(this.xcmRefMap);
|
|
484
514
|
this.logger.log('Finished updating latest asset ref');
|
|
485
515
|
}
|
|
486
516
|
handleLatestPriceId(latestPriceIds) {
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
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
|
-
|
|
494
|
-
|
|
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
|
-
|
|
506
|
-
|
|
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(
|
|
545
|
+
await Promise.all(Object.entries(chainInfoMap).filter(_ref6 => {
|
|
514
546
|
var _chainStateMap$slug;
|
|
515
|
-
let [slug] =
|
|
547
|
+
let [slug] = _ref6;
|
|
516
548
|
return (_chainStateMap$slug = chainStateMap[slug]) === null || _chainStateMap$slug === void 0 ? void 0 : _chainStateMap$slug.active;
|
|
517
|
-
}).map(
|
|
518
|
-
let [, chainInfo] =
|
|
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
|
|
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
|
-
|
|
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(
|
|
849
|
-
let [slug, chainInfo] =
|
|
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
|
-
(
|
|
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$
|
|
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;
|
|
@@ -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', '
|
|
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'
|
|
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:
|
|
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,
|