@subwallet/extension-base 1.1.31-beta.0 → 1.1.32-beta.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 +1 -0
- package/cjs/koni/api/staking/bonding/index.js +2 -0
- package/cjs/koni/api/staking/bonding/paraChain.js +6 -3
- package/cjs/koni/background/cron.js +0 -28
- package/cjs/koni/background/handlers/Extension.js +17 -11
- package/cjs/koni/background/handlers/State.js +4 -46
- package/cjs/koni/background/subscription.js +0 -155
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/campaign-service/index.js +19 -0
- package/cjs/services/chain-service/constants.js +3 -2
- package/cjs/services/earning-service/constants/chains.js +1 -1
- package/cjs/services/earning-service/handlers/base.js +9 -6
- package/cjs/services/earning-service/handlers/lending/base.js +61 -0
- package/cjs/services/earning-service/handlers/lending/interlay.js +3 -2
- package/cjs/services/earning-service/handlers/liquid-staking/acala.js +3 -2
- package/cjs/services/earning-service/handlers/liquid-staking/base.js +54 -0
- package/cjs/services/earning-service/handlers/liquid-staking/bifrost.js +3 -2
- package/cjs/services/earning-service/handlers/liquid-staking/parallel.js +3 -2
- package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.js +16 -7
- package/cjs/services/earning-service/handlers/native-staking/amplitude.js +7 -2
- package/cjs/services/earning-service/handlers/native-staking/astar.js +7 -2
- package/cjs/services/earning-service/handlers/native-staking/base.js +4 -2
- package/cjs/services/earning-service/handlers/native-staking/para-chain.js +7 -2
- package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +12 -3
- package/cjs/services/earning-service/handlers/nomination-pool/index.js +9 -3
- package/cjs/services/earning-service/handlers/special.js +57 -67
- package/cjs/services/earning-service/service.js +370 -37
- package/cjs/services/event-service/index.js +1 -0
- package/cjs/services/migration-service/scripts/index.js +1 -2
- package/cjs/services/storage-service/DatabaseService.js +15 -0
- package/cjs/services/storage-service/db-stores/Campaign.js +9 -3
- package/cjs/services/storage-service/db-stores/YieldPositionStore.js +6 -0
- package/cjs/services/transaction-service/index.js +15 -1
- package/cjs/utils/number.js +3 -1
- package/koni/api/staking/bonding/index.d.ts +1 -0
- package/koni/api/staking/bonding/index.js +2 -0
- package/koni/api/staking/bonding/paraChain.js +6 -3
- package/koni/background/cron.d.ts +0 -5
- package/koni/background/cron.js +1 -29
- package/koni/background/handlers/Extension.js +17 -11
- package/koni/background/handlers/State.d.ts +1 -12
- package/koni/background/handlers/State.js +4 -46
- package/koni/background/subscription.d.ts +1 -11
- package/koni/background/subscription.js +2 -157
- package/package.json +6 -6
- package/packageInfo.js +1 -1
- package/services/campaign-service/index.js +19 -0
- package/services/chain-service/constants.js +3 -2
- package/services/earning-service/constants/chains.js +1 -1
- package/services/earning-service/handlers/base.d.ts +1 -0
- package/services/earning-service/handlers/base.js +9 -6
- package/services/earning-service/handlers/lending/base.d.ts +2 -0
- package/services/earning-service/handlers/lending/base.js +61 -0
- package/services/earning-service/handlers/lending/interlay.js +4 -3
- package/services/earning-service/handlers/liquid-staking/acala.js +4 -3
- package/services/earning-service/handlers/liquid-staking/base.d.ts +2 -0
- package/services/earning-service/handlers/liquid-staking/base.js +55 -1
- package/services/earning-service/handlers/liquid-staking/bifrost.js +4 -3
- package/services/earning-service/handlers/liquid-staking/parallel.js +4 -3
- package/services/earning-service/handlers/liquid-staking/stella-swap.js +16 -7
- package/services/earning-service/handlers/native-staking/amplitude.js +7 -2
- package/services/earning-service/handlers/native-staking/astar.js +7 -2
- package/services/earning-service/handlers/native-staking/base.js +5 -3
- package/services/earning-service/handlers/native-staking/para-chain.js +7 -2
- package/services/earning-service/handlers/native-staking/relay-chain.js +12 -3
- package/services/earning-service/handlers/nomination-pool/index.js +10 -4
- package/services/earning-service/handlers/special.d.ts +0 -1
- package/services/earning-service/handlers/special.js +58 -68
- package/services/earning-service/service.d.ts +49 -1
- package/services/earning-service/service.js +358 -28
- package/services/event-service/index.d.ts +1 -0
- package/services/event-service/index.js +1 -0
- package/services/event-service/types.d.ts +1 -0
- package/services/migration-service/scripts/index.js +1 -2
- package/services/storage-service/DatabaseService.d.ts +5 -0
- package/services/storage-service/DatabaseService.js +15 -0
- package/services/storage-service/db-stores/Campaign.js +9 -3
- package/services/storage-service/db-stores/YieldPositionStore.d.ts +2 -0
- package/services/storage-service/db-stores/YieldPositionStore.js +6 -0
- package/services/transaction-service/index.js +15 -1
- package/types/yield/actions/join/submit.d.ts +2 -1
- package/types/yield/info/account/reward.d.ts +2 -0
- package/utils/number.d.ts +1 -0
- package/utils/number.js +1 -0
|
@@ -2,20 +2,17 @@
|
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
4
|
import { subscribeCrowdloan } from '@subwallet/extension-base/koni/api/dotsama/crowdloan';
|
|
5
|
-
import { getNominationStakingRewardData
|
|
6
|
-
import { subscribeEssentialChainStakingMetadata } from '@subwallet/extension-base/koni/api/staking/bonding';
|
|
5
|
+
import { getNominationStakingRewardData } from '@subwallet/extension-base/koni/api/staking';
|
|
7
6
|
import { nftHandler } from '@subwallet/extension-base/koni/background/handlers';
|
|
8
7
|
import { subscribeBalance } from '@subwallet/extension-base/services/balance-service/helpers/subscribe/balance';
|
|
9
8
|
import { _isChainEnabled, _isChainSupportSubstrateStaking } from '@subwallet/extension-base/services/chain-service/utils';
|
|
10
9
|
import { COMMON_RELOAD_EVENTS } from '@subwallet/extension-base/services/event-service/types';
|
|
11
10
|
import { waitTimeout } from '@subwallet/extension-base/utils';
|
|
12
|
-
import { logger as createLogger
|
|
11
|
+
import { logger as createLogger } from '@polkadot/util';
|
|
13
12
|
export class KoniSubscription {
|
|
14
13
|
subscriptionMap = {
|
|
15
14
|
crowdloan: undefined,
|
|
16
15
|
balance: undefined,
|
|
17
|
-
stakingOnChain: undefined,
|
|
18
|
-
essentialChainStakingMetadata: undefined,
|
|
19
16
|
yieldPoolStats: undefined,
|
|
20
17
|
yieldPosition: undefined
|
|
21
18
|
};
|
|
@@ -44,20 +41,14 @@ export class KoniSubscription {
|
|
|
44
41
|
this.subscriptionMap.crowdloan();
|
|
45
42
|
delete this.subscriptionMap.crowdloan;
|
|
46
43
|
}
|
|
47
|
-
if (this.subscriptionMap.stakingOnChain) {
|
|
48
|
-
this.subscriptionMap.stakingOnChain();
|
|
49
|
-
delete this.subscriptionMap.stakingOnChain;
|
|
50
|
-
}
|
|
51
44
|
}
|
|
52
45
|
async start() {
|
|
53
46
|
var _this$state$keyringSe;
|
|
54
47
|
await Promise.all([this.state.eventService.waitCryptoReady, this.state.eventService.waitKeyringReady, this.state.eventService.waitAssetReady]);
|
|
55
48
|
const currentAddress = (_this$state$keyringSe = this.state.keyringService.currentAccount) === null || _this$state$keyringSe === void 0 ? void 0 : _this$state$keyringSe.address;
|
|
56
|
-
this.subscribeYieldPools(this.state.getChainInfoMap(), this.state.getAssetRegistry(), this.state.getSubstrateApiMap(), this.state.getEvmApiMap(), currentAddress);
|
|
57
49
|
if (currentAddress) {
|
|
58
50
|
this.subscribeBalances(currentAddress, this.state.getChainInfoMap(), this.state.getChainStateMap(), this.state.getSubstrateApiMap(), this.state.getEvmApiMap());
|
|
59
51
|
this.subscribeCrowdloans(currentAddress, this.state.getSubstrateApiMap());
|
|
60
|
-
this.subscribeStakingOnChain(currentAddress, this.state.getSubstrateApiMap());
|
|
61
52
|
}
|
|
62
53
|
this.eventHandler = (events, eventTypes) => {
|
|
63
54
|
var _serviceInfo$currentA;
|
|
@@ -67,15 +58,11 @@ export class KoniSubscription {
|
|
|
67
58
|
return;
|
|
68
59
|
}
|
|
69
60
|
const address = (_serviceInfo$currentA = serviceInfo.currentAccountInfo) === null || _serviceInfo$currentA === void 0 ? void 0 : _serviceInfo$currentA.address;
|
|
70
|
-
|
|
71
|
-
// @ts-ignore
|
|
72
|
-
this.subscribeYieldPools(serviceInfo.chainInfoMap, serviceInfo.assetRegistry, serviceInfo.chainApiMap.substrate, serviceInfo.chainApiMap.evm, address);
|
|
73
61
|
if (!address) {
|
|
74
62
|
return;
|
|
75
63
|
}
|
|
76
64
|
this.subscribeBalances(address, serviceInfo.chainInfoMap, serviceInfo.chainStateMap, serviceInfo.chainApiMap.substrate, serviceInfo.chainApiMap.evm);
|
|
77
65
|
this.subscribeCrowdloans(address, serviceInfo.chainApiMap.substrate);
|
|
78
|
-
this.subscribeStakingOnChain(address, serviceInfo.chainApiMap.substrate);
|
|
79
66
|
};
|
|
80
67
|
this.state.eventService.onLazy(this.eventHandler.bind(this));
|
|
81
68
|
}
|
|
@@ -105,121 +92,6 @@ export class KoniSubscription {
|
|
|
105
92
|
this.updateSubscription('crowdloan', this.initCrowdloanSubscription(addresses, substrateApiMap, onlyRunOnFirstTime));
|
|
106
93
|
}).catch(console.error);
|
|
107
94
|
}
|
|
108
|
-
subscribeYieldPools(chainInfoMap, assetInfoMap, substrateApiMap, evmApiMap, address, onlyRunOnFirstTime) {
|
|
109
|
-
this.updateSubscription('yieldPoolStats', this.initYieldPoolStatsSubscription(substrateApiMap, evmApiMap, onlyRunOnFirstTime));
|
|
110
|
-
if (address) {
|
|
111
|
-
const addresses = this.state.getDecodedAddresses(address);
|
|
112
|
-
if (!addresses.length) {
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
this.updateSubscription('yieldPosition', this.initYieldPositionSubscription(addresses, substrateApiMap, evmApiMap, chainInfoMap, assetInfoMap));
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
initYieldPositionSubscription(addresses, substrateApiMap, evmApiMap, chainInfoMap, assetInfoMap, onlyRunOnFirstTime) {
|
|
119
|
-
let cancel = false;
|
|
120
|
-
const updateYieldPoolStats = data => {
|
|
121
|
-
this.state.updateYieldPosition(data);
|
|
122
|
-
};
|
|
123
|
-
let unsub = noop;
|
|
124
|
-
this.state.earningService.subscribePoolPositions(addresses, updateYieldPoolStats).then(rs => {
|
|
125
|
-
if (cancel) {
|
|
126
|
-
rs();
|
|
127
|
-
} else {
|
|
128
|
-
if (onlyRunOnFirstTime) {
|
|
129
|
-
rs && rs();
|
|
130
|
-
} else {
|
|
131
|
-
unsub = rs;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
}).catch(console.error);
|
|
135
|
-
return () => {
|
|
136
|
-
cancel = true;
|
|
137
|
-
unsub && unsub();
|
|
138
|
-
};
|
|
139
|
-
}
|
|
140
|
-
initYieldPoolStatsSubscription(substrateApiMap, evmApiMap, onlyRunOnFirstTime) {
|
|
141
|
-
let cancel = false;
|
|
142
|
-
this.state.resetYieldPoolInfo(Object.keys(this.state.getChainInfoMap()));
|
|
143
|
-
const updateYieldPoolStats = data => {
|
|
144
|
-
this.state.updateYieldPoolInfo(data);
|
|
145
|
-
};
|
|
146
|
-
|
|
147
|
-
// const unsub = subscribeYieldPoolStats(substrateApiMap, evmApiMap, this.state.getActiveChainInfoMap(), this.state.getAssetRegistry(), updateYieldPoolStats);
|
|
148
|
-
let unsub = noop;
|
|
149
|
-
this.state.earningService.subscribePoolsInfo(updateYieldPoolStats).then(rs => {
|
|
150
|
-
if (cancel) {
|
|
151
|
-
rs();
|
|
152
|
-
} else {
|
|
153
|
-
if (onlyRunOnFirstTime) {
|
|
154
|
-
rs && rs();
|
|
155
|
-
} else {
|
|
156
|
-
unsub = rs;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
}).catch(console.error);
|
|
160
|
-
|
|
161
|
-
//
|
|
162
|
-
// if (onlyRunOnFirstTime) {
|
|
163
|
-
// unsub && unsub();
|
|
164
|
-
//
|
|
165
|
-
// return;
|
|
166
|
-
// }
|
|
167
|
-
|
|
168
|
-
return () => {
|
|
169
|
-
cancel = true;
|
|
170
|
-
// unsub && unsub();
|
|
171
|
-
unsub && unsub();
|
|
172
|
-
};
|
|
173
|
-
}
|
|
174
|
-
subscribeStakingOnChain(address, substrateApiMap, onlyRunOnFirstTime) {
|
|
175
|
-
this.state.resetStaking(address);
|
|
176
|
-
const addresses = this.state.getDecodedAddresses(address);
|
|
177
|
-
if (!addresses.length) {
|
|
178
|
-
return;
|
|
179
|
-
}
|
|
180
|
-
this.updateSubscription('stakingOnChain', this.initStakingOnChainSubscription(addresses, substrateApiMap, onlyRunOnFirstTime));
|
|
181
|
-
this.updateSubscription('essentialChainStakingMetadata', this.initEssentialChainStakingMetadataSubscription(substrateApiMap, onlyRunOnFirstTime)); // TODO: might not need to re-subscribe on changing account
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
initStakingOnChainSubscription(addresses, substrateApiMap, onlyRunOnFirstTime) {
|
|
185
|
-
const stakingCallback = (networkKey, rs) => {
|
|
186
|
-
this.state.setStakingItem(networkKey, rs);
|
|
187
|
-
};
|
|
188
|
-
const nominatorStateCallback = nominatorMetadata => {
|
|
189
|
-
this.state.updateStakingNominatorMetadata(nominatorMetadata);
|
|
190
|
-
};
|
|
191
|
-
const unsub = stakingOnChainApi(addresses, substrateApiMap, this.state.getActiveChainInfoMap(), stakingCallback, nominatorStateCallback);
|
|
192
|
-
if (onlyRunOnFirstTime) {
|
|
193
|
-
unsub && unsub();
|
|
194
|
-
return;
|
|
195
|
-
}
|
|
196
|
-
return () => {
|
|
197
|
-
unsub && unsub();
|
|
198
|
-
};
|
|
199
|
-
}
|
|
200
|
-
initEssentialChainStakingMetadataSubscription(substrateApiMap, onlyRunOnFirstTime) {
|
|
201
|
-
const unsub = subscribeEssentialChainStakingMetadata(substrateApiMap, this.state.getActiveChainInfoMap(), (networkKey, rs) => {
|
|
202
|
-
this.state.updateChainStakingMetadata(rs, {
|
|
203
|
-
era: rs.era,
|
|
204
|
-
minStake: rs.minStake,
|
|
205
|
-
maxValidatorPerNominator: rs.maxValidatorPerNominator,
|
|
206
|
-
// temporary fix for Astar, there's no limit for now
|
|
207
|
-
maxWithdrawalRequestPerValidator: rs.maxWithdrawalRequestPerValidator,
|
|
208
|
-
// by default
|
|
209
|
-
allowCancelUnstaking: rs.allowCancelUnstaking,
|
|
210
|
-
unstakingPeriod: rs.unstakingPeriod,
|
|
211
|
-
expectedReturn: rs.expectedReturn,
|
|
212
|
-
inflation: rs.inflation
|
|
213
|
-
});
|
|
214
|
-
});
|
|
215
|
-
if (onlyRunOnFirstTime) {
|
|
216
|
-
unsub && unsub();
|
|
217
|
-
return;
|
|
218
|
-
}
|
|
219
|
-
return () => {
|
|
220
|
-
unsub && unsub();
|
|
221
|
-
};
|
|
222
|
-
}
|
|
223
95
|
initBalanceSubscription(addresses, chainInfoMap, chainStateMap, substrateApiMap, evmApiMap, onlyRunOnFirstTime) {
|
|
224
96
|
const filteredChainInfoMap = {};
|
|
225
97
|
Object.values(chainStateMap).forEach(chainState => {
|
|
@@ -284,33 +156,6 @@ export class KoniSubscription {
|
|
|
284
156
|
this.state.updateStakingReward(rewardItem);
|
|
285
157
|
});
|
|
286
158
|
}
|
|
287
|
-
async subscribeStakingRewardFastInterval(address) {
|
|
288
|
-
const addresses = this.state.getDecodedAddresses(address);
|
|
289
|
-
if (!addresses.length) {
|
|
290
|
-
return;
|
|
291
|
-
}
|
|
292
|
-
const updateState = result => {
|
|
293
|
-
this.state.earningService.updateEarningReward(result);
|
|
294
|
-
};
|
|
295
|
-
await Promise.all([this.state.earningService.getPoolReward(addresses, updateState)]);
|
|
296
|
-
}
|
|
297
|
-
async subscribeEarningRewardHistoryInterval(address) {
|
|
298
|
-
const addresses = this.state.getDecodedAddresses(address);
|
|
299
|
-
if (!addresses.length) {
|
|
300
|
-
return;
|
|
301
|
-
}
|
|
302
|
-
const updateState = result => {
|
|
303
|
-
this.state.earningService.updateEarningRewardHistory(result);
|
|
304
|
-
};
|
|
305
|
-
await Promise.all([this.state.earningService.fetchPoolRewardHistory(addresses, updateState)]);
|
|
306
|
-
}
|
|
307
|
-
async reloadStaking() {
|
|
308
|
-
// const currentAddress = this.state.keyringService.currentAccount?.address;
|
|
309
|
-
|
|
310
|
-
// this.subscribeYieldPools(this.state.getSubstrateApiMap());
|
|
311
|
-
|
|
312
|
-
await waitTimeout(1800);
|
|
313
|
-
}
|
|
314
159
|
async reloadBalance() {
|
|
315
160
|
var _this$state$keyringSe2;
|
|
316
161
|
const currentAddress = (_this$state$keyringSe2 = this.state.keyringService.currentAccount) === null || _this$state$keyringSe2 === void 0 ? void 0 : _this$state$keyringSe2.address;
|
package/package.json
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"./cjs/detectPackage.js"
|
|
18
18
|
],
|
|
19
19
|
"type": "module",
|
|
20
|
-
"version": "1.1.
|
|
20
|
+
"version": "1.1.32-beta.0",
|
|
21
21
|
"main": "./cjs/index.js",
|
|
22
22
|
"module": "./index.js",
|
|
23
23
|
"types": "./index.d.ts",
|
|
@@ -1706,11 +1706,11 @@
|
|
|
1706
1706
|
"@reduxjs/toolkit": "^1.9.1",
|
|
1707
1707
|
"@sora-substrate/type-definitions": "^1.17.7",
|
|
1708
1708
|
"@substrate/connect": "^0.7.26",
|
|
1709
|
-
"@subwallet/chain-list": "
|
|
1710
|
-
"@subwallet/extension-base": "^1.1.
|
|
1711
|
-
"@subwallet/extension-chains": "^1.1.
|
|
1712
|
-
"@subwallet/extension-dapp": "^1.1.
|
|
1713
|
-
"@subwallet/extension-inject": "^1.1.
|
|
1709
|
+
"@subwallet/chain-list": "0.2.38",
|
|
1710
|
+
"@subwallet/extension-base": "^1.1.32-0",
|
|
1711
|
+
"@subwallet/extension-chains": "^1.1.32-0",
|
|
1712
|
+
"@subwallet/extension-dapp": "^1.1.32-0",
|
|
1713
|
+
"@subwallet/extension-inject": "^1.1.32-0",
|
|
1714
1714
|
"@subwallet/keyring": "^0.1.1",
|
|
1715
1715
|
"@subwallet/ui-keyring": "^0.1.1",
|
|
1716
1716
|
"@walletconnect/sign-client": "^2.8.4",
|
package/packageInfo.js
CHANGED
|
@@ -7,5 +7,5 @@ export const packageInfo = {
|
|
|
7
7
|
name: '@subwallet/extension-base',
|
|
8
8
|
path: (import.meta && import.meta.url) ? new URL(import.meta.url).pathname.substring(0, new URL(import.meta.url).pathname.lastIndexOf('/') + 1) : 'auto',
|
|
9
9
|
type: 'esm',
|
|
10
|
-
version: '1.1.
|
|
10
|
+
version: '1.1.32-0'
|
|
11
11
|
};
|
|
@@ -47,6 +47,7 @@ export default class CampaignService {
|
|
|
47
47
|
endTime,
|
|
48
48
|
startTime,
|
|
49
49
|
isDone: false,
|
|
50
|
+
isArchive: false,
|
|
50
51
|
campaignId,
|
|
51
52
|
type: CampaignDataType.BANNER,
|
|
52
53
|
buttons,
|
|
@@ -67,6 +68,7 @@ export default class CampaignService {
|
|
|
67
68
|
endTime,
|
|
68
69
|
startTime,
|
|
69
70
|
isDone: false,
|
|
71
|
+
isArchive: false,
|
|
70
72
|
campaignId,
|
|
71
73
|
type: CampaignDataType.NOTIFICATION,
|
|
72
74
|
buttons,
|
|
@@ -79,6 +81,23 @@ export default class CampaignService {
|
|
|
79
81
|
const exists = await this.#state.dbService.getCampaign(campaign.slug);
|
|
80
82
|
if (!exists) {
|
|
81
83
|
await this.#state.dbService.upsertCampaign(campaign);
|
|
84
|
+
} else {
|
|
85
|
+
const data = {
|
|
86
|
+
...campaign,
|
|
87
|
+
isDone: exists.isDone
|
|
88
|
+
};
|
|
89
|
+
await this.#state.dbService.upsertCampaign(data);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
const allCampaign = await this.#state.dbService.getAllCampaign();
|
|
93
|
+
for (const stored of allCampaign) {
|
|
94
|
+
const exists = campaigns.find(campaign => campaign.slug === stored.slug);
|
|
95
|
+
if (!exists) {
|
|
96
|
+
const data = {
|
|
97
|
+
...stored,
|
|
98
|
+
isArchive: true
|
|
99
|
+
};
|
|
100
|
+
await this.#state.dbService.upsertCampaign(data);
|
|
82
101
|
}
|
|
83
102
|
}
|
|
84
103
|
this.#state.eventService.emit('campaign.ready', true);
|
|
@@ -83,7 +83,8 @@ export const _STAKING_ERA_LENGTH_MAP = {
|
|
|
83
83
|
kate: 6,
|
|
84
84
|
creditcoin: 24,
|
|
85
85
|
vara_network: 12,
|
|
86
|
-
goldberg_testnet: 24
|
|
86
|
+
goldberg_testnet: 24,
|
|
87
|
+
manta_network: 6
|
|
87
88
|
};
|
|
88
89
|
export const _EXPECTED_BLOCK_TIME = {
|
|
89
90
|
// in seconds
|
|
@@ -229,7 +230,7 @@ export const _XCM_TYPE = {
|
|
|
229
230
|
PR: `${_SubstrateChainType.PARACHAIN}-${_SubstrateChainType.RELAYCHAIN}` // UMP
|
|
230
231
|
};
|
|
231
232
|
|
|
232
|
-
export const _DEFAULT_ACTIVE_CHAINS = [..._DEFAULT_CHAINS, 'vara_network'
|
|
233
|
+
export const _DEFAULT_ACTIVE_CHAINS = [..._DEFAULT_CHAINS, 'vara_network'];
|
|
233
234
|
export const EVM_PASS_CONNECT_STATUS = {
|
|
234
235
|
arbitrum_one: ['*']
|
|
235
236
|
};
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
export const _STAKING_CHAIN_GROUP = {
|
|
5
5
|
relay: ['polkadot', 'kusama', 'aleph', 'polkadex', 'ternoa', 'ternoa_alphanet', 'alephTest', 'polkadexTest', 'westend', 'kate', 'edgeware', 'creditcoin', 'vara_network', 'goldberg_testnet'],
|
|
6
|
-
para: ['moonbeam', 'moonriver', 'moonbase', 'turing', 'turingStaging', 'bifrost', 'bifrost_testnet', 'calamari_test', 'calamari'],
|
|
6
|
+
para: ['moonbeam', 'moonriver', 'moonbase', 'turing', 'turingStaging', 'bifrost', 'bifrost_testnet', 'calamari_test', 'calamari', 'manta_network'],
|
|
7
7
|
astar: ['astar', 'shiden', 'shibuya'],
|
|
8
8
|
amplitude: ['amplitude', 'amplitude_test', 'kilt', 'kilt_peregrine', 'pendulum'],
|
|
9
9
|
// amplitude and kilt only share some common logic
|
|
@@ -41,6 +41,7 @@ export default abstract class BasePoolHandler {
|
|
|
41
41
|
get chainInfo(): _ChainInfo;
|
|
42
42
|
protected get nativeToken(): _ChainAsset;
|
|
43
43
|
protected get baseInfo(): Omit<BasePoolInfo, 'type'>;
|
|
44
|
+
protected getAssetBySlug(slug: string): _ChainAsset;
|
|
44
45
|
protected abstract getDescription(amount?: string): string;
|
|
45
46
|
protected get maintainBalance(): string;
|
|
46
47
|
get metadataInfo(): Omit<BaseYieldPoolMetadata, 'description'>;
|
|
@@ -70,6 +70,9 @@ export default class BasePoolHandler {
|
|
|
70
70
|
slug: this.slug
|
|
71
71
|
};
|
|
72
72
|
}
|
|
73
|
+
getAssetBySlug(slug) {
|
|
74
|
+
return this.state.getAssetBySlug(slug);
|
|
75
|
+
}
|
|
73
76
|
get maintainBalance() {
|
|
74
77
|
const decimals = this.nativeToken.decimals || 0;
|
|
75
78
|
const defaultMaintainBalance = new BN(1).mul(BN_TEN.pow(new BN(decimals)));
|
|
@@ -95,10 +98,10 @@ export default class BasePoolHandler {
|
|
|
95
98
|
return false;
|
|
96
99
|
}
|
|
97
100
|
async getPoolInfo() {
|
|
98
|
-
return this.state.
|
|
101
|
+
return await this.state.earningService.getYieldPool(this.slug);
|
|
99
102
|
}
|
|
100
103
|
async getPoolPosition(address) {
|
|
101
|
-
return this.state.
|
|
104
|
+
return await this.state.earningService.getYieldPosition(address, this.slug);
|
|
102
105
|
}
|
|
103
106
|
|
|
104
107
|
/* Subscribe data */
|
|
@@ -117,7 +120,7 @@ export default class BasePoolHandler {
|
|
|
117
120
|
if (!poolInfo || !((_poolInfo$statistic = poolInfo.statistic) !== null && _poolInfo$statistic !== void 0 && _poolInfo$statistic.earningThreshold.join)) {
|
|
118
121
|
return {
|
|
119
122
|
passed: false,
|
|
120
|
-
errorMessage: 'There
|
|
123
|
+
errorMessage: 'There is a problem fetching your data. Check your Internet connection or change the network endpoint and try again.'
|
|
121
124
|
};
|
|
122
125
|
}
|
|
123
126
|
if (request.address === ALL_ACCOUNT_KEY) {
|
|
@@ -128,9 +131,9 @@ export default class BasePoolHandler {
|
|
|
128
131
|
const nativeTokenInfo = this.state.chainService.getNativeTokenInfo(this.chain);
|
|
129
132
|
const nativeTokenBalance = await this.state.balanceService.getTokenFreeBalance(request.address, this.chain);
|
|
130
133
|
const bnNativeTokenBalance = new BN(nativeTokenBalance.value);
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
const minJoin = formatNumber(
|
|
134
|
+
const bnMinBalanceToJoin = new BN(((_poolInfo$statistic2 = poolInfo.statistic) === null || _poolInfo$statistic2 === void 0 ? void 0 : (_poolInfo$statistic2$ = _poolInfo$statistic2.earningThreshold) === null || _poolInfo$statistic2$ === void 0 ? void 0 : _poolInfo$statistic2$.join) || '0').add(new BN(poolInfo.metadata.maintainBalance));
|
|
135
|
+
if (bnNativeTokenBalance.lte(bnMinBalanceToJoin)) {
|
|
136
|
+
const minJoin = formatNumber(bnMinBalanceToJoin.toString(), this.nativeToken.decimals || 0);
|
|
134
137
|
const originChain = this.state.getChainInfo(nativeTokenInfo.originChain);
|
|
135
138
|
return {
|
|
136
139
|
passed: false,
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
|
|
1
2
|
import { LendingYieldPoolInfo, YieldPoolType } from '@subwallet/extension-base/types';
|
|
2
3
|
import BaseSpecialStakingPoolHandler from '../special';
|
|
3
4
|
export default abstract class BaseLendingPoolHandler extends BaseSpecialStakingPoolHandler {
|
|
4
5
|
readonly type = YieldPoolType.LENDING;
|
|
5
6
|
abstract getPoolStat(): Promise<LendingYieldPoolInfo>;
|
|
7
|
+
validateYieldLeave(amount: string, address: string, fastLeave: boolean, selectedTarget?: string): Promise<TransactionError[]>;
|
|
6
8
|
}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
|
+
import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
|
|
5
|
+
import { BasicTxErrorType, StakingTxErrorType } from '@subwallet/extension-base/background/KoniTypes';
|
|
4
6
|
import { YieldPoolType } from '@subwallet/extension-base/types';
|
|
7
|
+
import { BN_ZERO, formatNumber } from '@subwallet/extension-base/utils';
|
|
8
|
+
import BigN from 'bignumber.js';
|
|
9
|
+
import { t } from 'i18next';
|
|
5
10
|
import BaseSpecialStakingPoolHandler from "../special.js";
|
|
6
11
|
export default class BaseLendingPoolHandler extends BaseSpecialStakingPoolHandler {
|
|
7
12
|
type = YieldPoolType.LENDING;
|
|
@@ -9,4 +14,60 @@ export default class BaseLendingPoolHandler extends BaseSpecialStakingPoolHandle
|
|
|
9
14
|
/* Subscribe pool info */
|
|
10
15
|
|
|
11
16
|
/* Subscribe pool info */
|
|
17
|
+
|
|
18
|
+
/* Leave pool action */
|
|
19
|
+
|
|
20
|
+
async validateYieldLeave(amount, address, fastLeave, selectedTarget) {
|
|
21
|
+
const poolInfo = await this.getPoolInfo();
|
|
22
|
+
const poolPosition = await this.getPoolPosition(address);
|
|
23
|
+
if (!poolInfo || !poolInfo.statistic || !poolPosition) {
|
|
24
|
+
return [new TransactionError(BasicTxErrorType.INTERNAL_ERROR)];
|
|
25
|
+
}
|
|
26
|
+
if (!this.availableMethod.defaultUnstake && !fastLeave) {
|
|
27
|
+
return [new TransactionError(BasicTxErrorType.INTERNAL_ERROR)];
|
|
28
|
+
}
|
|
29
|
+
if (!this.availableMethod.fastUnstake && fastLeave) {
|
|
30
|
+
return [new TransactionError(BasicTxErrorType.INTERNAL_ERROR)];
|
|
31
|
+
}
|
|
32
|
+
const errors = [];
|
|
33
|
+
const bnActiveStake = new BigN(poolPosition.activeStake).multipliedBy(poolInfo.statistic.assetEarning[0].exchangeRate || 1);
|
|
34
|
+
const bnAmount = new BigN(amount);
|
|
35
|
+
const bnRemainingStake = bnActiveStake.minus(bnAmount);
|
|
36
|
+
const minStake = new BigN(poolInfo.statistic.earningThreshold.join || '0');
|
|
37
|
+
const minUnstake = new BigN((fastLeave ? poolInfo.statistic.earningThreshold.fastUnstake : poolInfo.statistic.earningThreshold.defaultUnstake) || '0');
|
|
38
|
+
const maxUnstakeRequest = poolInfo.statistic.maxWithdrawalRequestPerFarmer;
|
|
39
|
+
const derivativeTokenInfo = this.state.getAssetBySlug(this.derivativeAssets[0]);
|
|
40
|
+
if (bnAmount.lte(BN_ZERO)) {
|
|
41
|
+
return [new TransactionError(BasicTxErrorType.INVALID_PARAMS, t('Amount must be greater than 0'))];
|
|
42
|
+
}
|
|
43
|
+
if (bnAmount.lt(minUnstake)) {
|
|
44
|
+
const minUnstakeStr = formatNumber(minUnstake.toString(), derivativeTokenInfo.decimals || 0);
|
|
45
|
+
errors.push(new TransactionError(StakingTxErrorType.NOT_ENOUGH_MIN_UNSTAKE, t('You need to unstake at least {{amount}} {{token}}', {
|
|
46
|
+
replace: {
|
|
47
|
+
amount: minUnstakeStr,
|
|
48
|
+
token: derivativeTokenInfo.symbol
|
|
49
|
+
}
|
|
50
|
+
})));
|
|
51
|
+
}
|
|
52
|
+
if (!fastLeave) {
|
|
53
|
+
if (!(bnRemainingStake.isZero() || bnRemainingStake.gte(minStake))) {
|
|
54
|
+
errors.push(new TransactionError(StakingTxErrorType.INVALID_ACTIVE_STAKE)); // TODO
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (poolPosition.unstakings.length > maxUnstakeRequest) {
|
|
58
|
+
errors.push(new TransactionError(StakingTxErrorType.EXCEED_MAX_UNSTAKING, t('You cannot unstake more than {{number}} times', {
|
|
59
|
+
replace: {
|
|
60
|
+
number: maxUnstakeRequest
|
|
61
|
+
}
|
|
62
|
+
})));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (bnRemainingStake.lt(0)) {
|
|
66
|
+
errors.push(new TransactionError(StakingTxErrorType.INVALID_ACTIVE_STAKE)); // TODO
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return Promise.resolve(errors);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/* Leave pool action */
|
|
12
73
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
4
|
import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
|
|
5
|
-
import { BasicTxErrorType, ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
|
|
5
|
+
import { BasicTxErrorType, ChainType, ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
|
|
6
6
|
import { _getTokenOnChainInfo } from '@subwallet/extension-base/services/chain-service/utils';
|
|
7
7
|
import { EarningStatus, YieldStepType } from '@subwallet/extension-base/types';
|
|
8
8
|
import { BN, BN_TEN, BN_ZERO } from '@polkadot/util';
|
|
@@ -101,7 +101,7 @@ export default class InterlayLendingPoolHandler extends BaseLendingPoolHandler {
|
|
|
101
101
|
totalStake: bnTotalBalance.toString(),
|
|
102
102
|
activeStake: bnActiveBalance.toString(),
|
|
103
103
|
unstakeBalance: '0',
|
|
104
|
-
status: EarningStatus.EARNING_REWARD,
|
|
104
|
+
status: bnActiveBalance.gt(BN_ZERO) ? EarningStatus.EARNING_REWARD : EarningStatus.NOT_EARNING,
|
|
105
105
|
derivativeToken: derivativeTokenSlug,
|
|
106
106
|
isBondedBefore: bnTotalBalance.gt(BN_ZERO),
|
|
107
107
|
nominations: [],
|
|
@@ -155,7 +155,8 @@ export default class InterlayLendingPoolHandler extends BaseLendingPoolHandler {
|
|
|
155
155
|
extrinsicType: ExtrinsicType.MINT_QDOT,
|
|
156
156
|
extrinsic,
|
|
157
157
|
txData: data,
|
|
158
|
-
transferNativeAmount: '0'
|
|
158
|
+
transferNativeAmount: '0',
|
|
159
|
+
chainType: ChainType.SUBSTRATE
|
|
159
160
|
};
|
|
160
161
|
}
|
|
161
162
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
|
-
import { ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
|
|
4
|
+
import { ChainType, ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
|
|
5
5
|
import { _getTokenOnChainInfo } from '@subwallet/extension-base/services/chain-service/utils';
|
|
6
6
|
import { fakeAddress } from '@subwallet/extension-base/services/earning-service/constants';
|
|
7
7
|
import { EarningStatus, UnstakingStatus, YieldStepType } from '@subwallet/extension-base/types';
|
|
@@ -141,7 +141,7 @@ export default class AcalaLiquidStakingPoolHandler extends BaseLiquidStakingPool
|
|
|
141
141
|
totalStake: totalBalance.toString(),
|
|
142
142
|
activeStake: activeTotalBalance.toString(),
|
|
143
143
|
unstakeBalance: unlockingBalance.toString(),
|
|
144
|
-
status: EarningStatus.EARNING_REWARD,
|
|
144
|
+
status: activeTotalBalance.gt(BN_ZERO) ? EarningStatus.EARNING_REWARD : EarningStatus.NOT_EARNING,
|
|
145
145
|
derivativeToken: derivativeTokenSlug,
|
|
146
146
|
isBondedBefore: totalBalance.gt(BN_ZERO),
|
|
147
147
|
nominations: [],
|
|
@@ -191,7 +191,8 @@ export default class AcalaLiquidStakingPoolHandler extends BaseLiquidStakingPool
|
|
|
191
191
|
extrinsicType: ExtrinsicType.MINT_LDOT,
|
|
192
192
|
extrinsic,
|
|
193
193
|
txData: data,
|
|
194
|
-
transferNativeAmount: '0'
|
|
194
|
+
transferNativeAmount: '0',
|
|
195
|
+
chainType: ChainType.SUBSTRATE
|
|
195
196
|
};
|
|
196
197
|
}
|
|
197
198
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
|
|
1
2
|
import { YieldPoolType } from '@subwallet/extension-base/types';
|
|
2
3
|
import BaseSpecialStakingPoolHandler from '../special';
|
|
3
4
|
export default abstract class BaseLiquidStakingPoolHandler extends BaseSpecialStakingPoolHandler {
|
|
@@ -6,4 +7,5 @@ export default abstract class BaseLiquidStakingPoolHandler extends BaseSpecialSt
|
|
|
6
7
|
readonly minAmountPercent: number;
|
|
7
8
|
static get defaultMinAmountPercent(): number;
|
|
8
9
|
createParamToRedeem(amount: string, address: string): Promise<number>;
|
|
10
|
+
validateYieldLeave(amount: string, address: string, fastLeave: boolean, selectedTarget?: string): Promise<TransactionError[]>;
|
|
9
11
|
}
|
|
@@ -2,9 +2,12 @@
|
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
4
|
import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
|
|
5
|
-
import { BasicTxErrorType } from '@subwallet/extension-base/background/KoniTypes';
|
|
5
|
+
import { BasicTxErrorType, StakingTxErrorType } from '@subwallet/extension-base/background/KoniTypes';
|
|
6
6
|
import { convertDerivativeToOriginToken } from '@subwallet/extension-base/koni/api/yield/helper/utils';
|
|
7
7
|
import { YieldPoolType } from '@subwallet/extension-base/types';
|
|
8
|
+
import { formatNumber } from '@subwallet/extension-base/utils';
|
|
9
|
+
import { t } from 'i18next';
|
|
10
|
+
import { BN, BN_ZERO } from '@polkadot/util';
|
|
8
11
|
import BaseSpecialStakingPoolHandler from "../special.js";
|
|
9
12
|
const DEFAULT_MIN_AMOUNT_PERCENT = 0.98;
|
|
10
13
|
export default class BaseLiquidStakingPoolHandler extends BaseSpecialStakingPoolHandler {
|
|
@@ -30,6 +33,57 @@ export default class BaseLiquidStakingPoolHandler extends BaseSpecialStakingPool
|
|
|
30
33
|
const formattedMinAmount = convertDerivativeToOriginToken(amount, poolInfo, derivativeTokenInfo, originTokenInfo);
|
|
31
34
|
return Math.floor(this.minAmountPercent * formattedMinAmount);
|
|
32
35
|
}
|
|
36
|
+
async validateYieldLeave(amount, address, fastLeave, selectedTarget) {
|
|
37
|
+
const poolInfo = await this.getPoolInfo();
|
|
38
|
+
const poolPosition = await this.getPoolPosition(address);
|
|
39
|
+
if (!poolInfo || !poolInfo.statistic || !poolPosition) {
|
|
40
|
+
return [new TransactionError(BasicTxErrorType.INTERNAL_ERROR)];
|
|
41
|
+
}
|
|
42
|
+
if (!this.availableMethod.defaultUnstake && !fastLeave) {
|
|
43
|
+
return [new TransactionError(BasicTxErrorType.INTERNAL_ERROR)];
|
|
44
|
+
}
|
|
45
|
+
if (!this.availableMethod.fastUnstake && fastLeave) {
|
|
46
|
+
return [new TransactionError(BasicTxErrorType.INTERNAL_ERROR)];
|
|
47
|
+
}
|
|
48
|
+
const errors = [];
|
|
49
|
+
const bnActiveStake = new BN(poolPosition.activeStake);
|
|
50
|
+
const bnAmount = new BN(amount);
|
|
51
|
+
const bnRemainingStake = bnActiveStake.sub(bnAmount);
|
|
52
|
+
const minStake = new BN(poolInfo.statistic.earningThreshold.join || '0');
|
|
53
|
+
const minUnstake = new BN((fastLeave ? poolInfo.statistic.earningThreshold.fastUnstake : poolInfo.statistic.earningThreshold.defaultUnstake) || '0');
|
|
54
|
+
const maxUnstakeRequest = poolInfo.statistic.maxWithdrawalRequestPerFarmer;
|
|
55
|
+
const derivativeTokenInfo = this.state.getAssetBySlug(this.derivativeAssets[0]);
|
|
56
|
+
if (bnAmount.lte(BN_ZERO)) {
|
|
57
|
+
return [new TransactionError(BasicTxErrorType.INVALID_PARAMS, t('Amount must be greater than 0'))];
|
|
58
|
+
}
|
|
59
|
+
if (bnAmount.lt(minUnstake)) {
|
|
60
|
+
const minUnstakeStr = formatNumber(minUnstake.toString(), derivativeTokenInfo.decimals || 0);
|
|
61
|
+
errors.push(new TransactionError(StakingTxErrorType.NOT_ENOUGH_MIN_UNSTAKE, t('You need to unstake at least {{amount}} {{token}}', {
|
|
62
|
+
replace: {
|
|
63
|
+
amount: minUnstakeStr,
|
|
64
|
+
token: derivativeTokenInfo.symbol
|
|
65
|
+
}
|
|
66
|
+
})));
|
|
67
|
+
}
|
|
68
|
+
if (!fastLeave) {
|
|
69
|
+
if (!(bnRemainingStake.isZero() || bnRemainingStake.gte(minStake))) {
|
|
70
|
+
errors.push(new TransactionError(StakingTxErrorType.INVALID_ACTIVE_STAKE)); // TODO
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (poolPosition.unstakings.length > maxUnstakeRequest) {
|
|
74
|
+
errors.push(new TransactionError(StakingTxErrorType.EXCEED_MAX_UNSTAKING, t('You cannot unstake more than {{number}} times', {
|
|
75
|
+
replace: {
|
|
76
|
+
number: maxUnstakeRequest
|
|
77
|
+
}
|
|
78
|
+
})));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (bnRemainingStake.lt(BN_ZERO)) {
|
|
82
|
+
errors.push(new TransactionError(StakingTxErrorType.INVALID_ACTIVE_STAKE)); // TODO
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return Promise.resolve(errors);
|
|
86
|
+
}
|
|
33
87
|
|
|
34
88
|
/* Leave pool action */
|
|
35
89
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
|
-
import { ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
|
|
4
|
+
import { ChainType, ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
|
|
5
5
|
import { _STAKING_ERA_LENGTH_MAP } from '@subwallet/extension-base/services/chain-service/constants';
|
|
6
6
|
import { _getAssetDecimals, _getTokenOnChainInfo } from '@subwallet/extension-base/services/chain-service/utils';
|
|
7
7
|
import { fakeAddress } from '@subwallet/extension-base/services/earning-service/constants';
|
|
@@ -207,7 +207,7 @@ export default class BifrostLiquidStakingPoolHandler extends BaseLiquidStakingPo
|
|
|
207
207
|
totalStake: totalBalance.toString(),
|
|
208
208
|
activeStake: bnActiveBalance.toString(),
|
|
209
209
|
unstakeBalance: unlockBalance.toString(),
|
|
210
|
-
status: bnActiveBalance.
|
|
210
|
+
status: bnActiveBalance.gt(BN_ZERO) ? EarningStatus.EARNING_REWARD : EarningStatus.NOT_EARNING,
|
|
211
211
|
isBondedBefore: totalBalance.gt(BN_ZERO.toString()),
|
|
212
212
|
nominations: [],
|
|
213
213
|
unstakings: unstakingList
|
|
@@ -260,7 +260,8 @@ export default class BifrostLiquidStakingPoolHandler extends BaseLiquidStakingPo
|
|
|
260
260
|
extrinsicType: ExtrinsicType.MINT_VDOT,
|
|
261
261
|
extrinsic,
|
|
262
262
|
txData: data,
|
|
263
|
-
transferNativeAmount: '0'
|
|
263
|
+
transferNativeAmount: '0',
|
|
264
|
+
chainType: ChainType.SUBSTRATE
|
|
264
265
|
};
|
|
265
266
|
}
|
|
266
267
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
|
-
import { ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
|
|
4
|
+
import { ChainType, ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
|
|
5
5
|
import { _STAKING_ERA_LENGTH_MAP } from '@subwallet/extension-base/services/chain-service/constants';
|
|
6
6
|
import { _getTokenOnChainAssetId } from '@subwallet/extension-base/services/chain-service/utils';
|
|
7
7
|
import { fakeAddress } from '@subwallet/extension-base/services/earning-service/constants';
|
|
@@ -144,7 +144,7 @@ export default class ParallelLiquidStakingPoolHandler extends BaseLiquidStakingP
|
|
|
144
144
|
totalStake: totalBalance.toString(),
|
|
145
145
|
activeStake: activeBalance.toString(),
|
|
146
146
|
unstakeBalance: unlockingBalance.toString(),
|
|
147
|
-
status: EarningStatus.EARNING_REWARD,
|
|
147
|
+
status: activeBalance.gt(BN_ZERO) ? EarningStatus.EARNING_REWARD : EarningStatus.NOT_EARNING,
|
|
148
148
|
derivativeToken: derivativeTokenSlug,
|
|
149
149
|
isBondedBefore: totalBalance.gt(BN_ZERO),
|
|
150
150
|
nominations: [],
|
|
@@ -194,7 +194,8 @@ export default class ParallelLiquidStakingPoolHandler extends BaseLiquidStakingP
|
|
|
194
194
|
extrinsicType: ExtrinsicType.MINT_SDOT,
|
|
195
195
|
extrinsic,
|
|
196
196
|
txData: data,
|
|
197
|
-
transferNativeAmount: '0'
|
|
197
|
+
transferNativeAmount: '0',
|
|
198
|
+
chainType: ChainType.SUBSTRATE
|
|
198
199
|
};
|
|
199
200
|
}
|
|
200
201
|
|