@subwallet/extension-base 1.3.45-1 → 1.3.47-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 +5 -0
- package/background/KoniTypes.js +5 -0
- package/background/types.d.ts +2 -0
- package/cjs/background/KoniTypes.js +7 -1
- package/cjs/core/logic-validation/request.js +55 -28
- package/cjs/core/utils.js +22 -0
- package/cjs/koni/api/nft/ordinal_nft/index.js +3 -2
- package/cjs/koni/background/handlers/Extension.js +84 -61
- package/cjs/koni/background/handlers/State.js +3 -0
- package/cjs/koni/background/handlers/Tabs.js +11 -3
- package/cjs/packageInfo.js +1 -1
- package/cjs/page/evm/index.js +64 -105
- package/cjs/page/index.js +5 -3
- package/cjs/page/substrate/Accounts.js +2 -1
- package/cjs/services/balance-service/helpers/subscribe/index.js +3 -76
- package/cjs/services/balance-service/helpers/subscribe/substrate/index.js +8 -14
- package/cjs/services/buy-service/index.js +2 -0
- package/cjs/services/chain-service/index.js +3 -0
- package/cjs/services/chain-service/utils/index.js +34 -1
- package/cjs/services/chain-service/utils/patch.js +1 -1
- package/cjs/services/earning-service/constants/chains.js +2 -1
- package/cjs/services/earning-service/handlers/native-staking/amplitude.js +32 -0
- package/cjs/services/earning-service/handlers/native-staking/astar.js +18 -0
- package/cjs/services/earning-service/handlers/native-staking/base.js +40 -29
- package/cjs/services/earning-service/handlers/native-staking/dtao.js +5 -0
- package/cjs/services/earning-service/handlers/native-staking/mythos.js +28 -0
- package/cjs/services/earning-service/handlers/native-staking/para-chain.js +17 -0
- package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +25 -2
- package/cjs/services/earning-service/handlers/native-staking/tao.js +5 -0
- package/cjs/services/earning-service/handlers/nomination-pool/index.js +6 -3
- package/cjs/services/earning-service/service.js +65 -22
- package/cjs/services/history-service/index.js +12 -7
- package/cjs/services/keyring-service/context/handlers/Json.js +2 -1
- package/cjs/services/keyring-service/context/handlers/Ledger.js +7 -2
- package/cjs/services/request-service/handler/AuthRequestHandler.js +30 -6
- package/cjs/services/subscan-service/index.js +35 -104
- package/cjs/services/transaction-service/utils.js +10 -1
- package/cjs/strategy/api-request-strategy/index.js +1 -0
- package/cjs/strategy/api-request-strategy/utils/index.js +2 -2
- package/cjs/strategy/api-request-strategy-v2/index.js +138 -0
- package/cjs/strategy/api-request-strategy-v2/types.js +1 -0
- package/cjs/types/account/info/keyring.js +1 -0
- package/cjs/utils/account/analyze.js +5 -2
- package/cjs/utils/account/common.js +93 -2
- package/cjs/utils/account/transform.js +10 -0
- package/cjs/utils/asset.js +9 -2
- package/cjs/utils/gear/combine.js +4 -3
- package/cjs/utils/gear/vft.js +104 -135
- package/cjs/utils/staticData/index.js +7 -2
- package/core/logic-validation/request.js +31 -4
- package/core/types.d.ts +3 -2
- package/core/utils.js +24 -2
- package/koni/api/nft/ordinal_nft/index.js +3 -2
- package/koni/background/handlers/Extension.js +31 -8
- package/koni/background/handlers/State.js +4 -1
- package/koni/background/handlers/Tabs.js +11 -4
- package/package.json +21 -9
- package/packageInfo.js +1 -1
- package/page/evm/index.d.ts +9 -18
- package/page/evm/index.js +62 -101
- package/page/index.js +5 -3
- package/page/substrate/Accounts.js +2 -1
- package/services/balance-service/helpers/subscribe/index.d.ts +1 -11
- package/services/balance-service/helpers/subscribe/index.js +3 -74
- package/services/balance-service/helpers/subscribe/substrate/index.js +8 -14
- package/services/buy-service/index.js +2 -0
- package/services/chain-service/index.d.ts +1 -0
- package/services/chain-service/index.js +3 -0
- package/services/chain-service/utils/index.d.ts +10 -2
- package/services/chain-service/utils/index.js +29 -2
- package/services/chain-service/utils/patch.js +1 -1
- package/services/earning-service/constants/chains.d.ts +1 -0
- package/services/earning-service/constants/chains.js +2 -1
- package/services/earning-service/handlers/native-staking/amplitude.d.ts +1 -0
- package/services/earning-service/handlers/native-staking/amplitude.js +32 -0
- package/services/earning-service/handlers/native-staking/astar.d.ts +1 -0
- package/services/earning-service/handlers/native-staking/astar.js +18 -0
- package/services/earning-service/handlers/native-staking/base.d.ts +2 -0
- package/services/earning-service/handlers/native-staking/base.js +40 -29
- package/services/earning-service/handlers/native-staking/dtao.d.ts +1 -0
- package/services/earning-service/handlers/native-staking/dtao.js +5 -0
- package/services/earning-service/handlers/native-staking/mythos.d.ts +1 -0
- package/services/earning-service/handlers/native-staking/mythos.js +28 -0
- package/services/earning-service/handlers/native-staking/para-chain.d.ts +1 -0
- package/services/earning-service/handlers/native-staking/para-chain.js +17 -0
- package/services/earning-service/handlers/native-staking/relay-chain.d.ts +1 -0
- package/services/earning-service/handlers/native-staking/relay-chain.js +25 -2
- package/services/earning-service/handlers/native-staking/tao.d.ts +1 -0
- package/services/earning-service/handlers/native-staking/tao.js +5 -0
- package/services/earning-service/handlers/nomination-pool/index.d.ts +1 -0
- package/services/earning-service/handlers/nomination-pool/index.js +6 -3
- package/services/earning-service/service.d.ts +3 -0
- package/services/earning-service/service.js +68 -25
- package/services/history-service/index.js +12 -7
- package/services/keyring-service/context/handlers/Json.js +2 -1
- package/services/keyring-service/context/handlers/Ledger.js +7 -2
- package/services/request-service/handler/AuthRequestHandler.d.ts +1 -0
- package/services/request-service/handler/AuthRequestHandler.js +30 -6
- package/services/request-service/types.d.ts +1 -0
- package/services/subscan-service/index.d.ts +13 -27
- package/services/subscan-service/index.js +26 -95
- package/services/transaction-service/utils.js +11 -2
- package/strategy/api-request-strategy/context/base.d.ts +2 -6
- package/strategy/api-request-strategy/index.js +1 -0
- package/strategy/api-request-strategy/types.d.ts +4 -2
- package/strategy/api-request-strategy/utils/index.js +2 -2
- package/strategy/api-request-strategy-v2/index.d.ts +22 -0
- package/strategy/api-request-strategy-v2/index.js +128 -0
- package/strategy/api-request-strategy-v2/types.d.ts +11 -0
- package/strategy/api-request-strategy-v2/types.js +1 -0
- package/types/account/action/subscribe.d.ts +3 -0
- package/types/account/info/keyring.d.ts +3 -0
- package/types/account/info/keyring.js +1 -0
- package/types/balance/transfer.d.ts +1 -0
- package/types/buy.d.ts +1 -1
- package/utils/account/analyze.js +5 -2
- package/utils/account/common.d.ts +13 -1
- package/utils/account/common.js +91 -2
- package/utils/account/transform.js +10 -0
- package/utils/asset.d.ts +2 -1
- package/utils/asset.js +7 -1
- package/utils/gear/combine.d.ts +2 -1
- package/utils/gear/combine.js +4 -4
- package/utils/gear/vft.d.ts +20 -9
- package/utils/gear/vft.js +104 -135
- package/utils/staticData/assetHubStaking.json +1 -0
- package/utils/staticData/index.d.ts +4 -1
- package/utils/staticData/index.js +5 -1
|
@@ -5,7 +5,7 @@ const PRODUCTION_BRANCHES = ['master', 'webapp', 'webapp-dev'];
|
|
|
5
5
|
const branchName = process.env.BRANCH_NAME || 'subwallet-dev';
|
|
6
6
|
const fetchDomain = PRODUCTION_BRANCHES.indexOf(branchName) > -1 ? 'https://chain-list-assets.subwallet.app' : 'https://dev.sw-chain-list-assets.pages.dev';
|
|
7
7
|
const fetchFile = PRODUCTION_BRANCHES.indexOf(branchName) > -1 ? 'list.json' : 'preview.json';
|
|
8
|
-
const ChainListVersion = '0.2.
|
|
8
|
+
const ChainListVersion = '0.2.109'; // update this when build chainlist
|
|
9
9
|
|
|
10
10
|
// todo: move this interface to chainlist
|
|
11
11
|
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
4
|
export const _STAKING_CHAIN_GROUP = {
|
|
5
|
-
relay: ['polkadot', 'kusama', 'aleph', 'polkadex', 'ternoa', 'alephTest', 'polkadexTest', 'westend', 'kate', 'edgeware', 'creditcoin', 'vara_network', 'goldberg_testnet', 'availTuringTest', 'avail_mainnet', 'vara_testnet', 'dentnet', 'cere'],
|
|
5
|
+
relay: ['polkadot', 'kusama', 'aleph', 'polkadex', 'ternoa', 'alephTest', 'polkadexTest', 'westend', 'kate', 'edgeware', 'creditcoin', 'vara_network', 'goldberg_testnet', 'availTuringTest', 'avail_mainnet', 'vara_testnet', 'dentnet', 'cere', 'statemine', 'statemint', 'westend_assethub'],
|
|
6
|
+
assetHub: ['statemine', 'statemint', 'westend_assethub'],
|
|
6
7
|
para: ['moonbeam', 'moonriver', 'moonbase', 'turing', 'turingStaging', 'bifrost', 'bifrost_testnet', 'calamari_test', 'calamari', 'manta_network', 'polimec'],
|
|
7
8
|
astar: ['astar', 'shiden', 'shibuya'],
|
|
8
9
|
amplitude: ['amplitude', 'amplitude_test', 'kilt', 'kilt_peregrine', 'pendulum', 'krest_network'],
|
|
@@ -7,6 +7,7 @@ import BaseParaNativeStakingPoolHandler from './base-para';
|
|
|
7
7
|
export default class AmplitudeNativeStakingPoolHandler extends BaseParaNativeStakingPoolHandler {
|
|
8
8
|
subscribePoolInfo(callback: (data: YieldPoolInfo) => void): Promise<VoidFunction>;
|
|
9
9
|
parseNominatorMetadata(chainInfo: _ChainInfo, address: string, substrateApi: _SubstrateApi, delegatorState: ParachainStakingStakeOption[], unstakingInfo: Record<string, number>): Promise<Omit<YieldPositionInfo, keyof BaseYieldPositionInfo>>;
|
|
10
|
+
checkAccountHaveStake(useAddresses: string[]): Promise<string[]>;
|
|
10
11
|
subscribePoolPosition(useAddresses: string[], resultCallback: (rs: YieldPositionInfo) => void): Promise<VoidFunction>;
|
|
11
12
|
getPoolReward(useAddresses: string[], callBack: (rs: EarningRewardItem) => void): Promise<VoidFunction>;
|
|
12
13
|
getKrestPoolTargets(chainApi: _SubstrateApi): Promise<ValidatorInfo[]>;
|
|
@@ -171,6 +171,38 @@ export default class AmplitudeNativeStakingPoolHandler extends BaseParaNativeSta
|
|
|
171
171
|
unstakings: unstakingList
|
|
172
172
|
};
|
|
173
173
|
}
|
|
174
|
+
async checkAccountHaveStake(useAddresses) {
|
|
175
|
+
var _substrateApi$api$que, _substrateApi$api$que2, _substrateApi$api$que3, _substrateApi$api$que4, _substrateApi$api$que5, _substrateApi$api$que6;
|
|
176
|
+
const result = [];
|
|
177
|
+
const substrateApi = await this.substrateApi.isReady;
|
|
178
|
+
const ledgers = await ((_substrateApi$api$que = substrateApi.api.query.parachainStaking) === null || _substrateApi$api$que === void 0 ? void 0 : (_substrateApi$api$que2 = _substrateApi$api$que.delegatorState) === null || _substrateApi$api$que2 === void 0 ? void 0 : (_substrateApi$api$que3 = _substrateApi$api$que2.multi) === null || _substrateApi$api$que3 === void 0 ? void 0 : _substrateApi$api$que3.call(_substrateApi$api$que2, useAddresses));
|
|
179
|
+
const _unstakingStates = await ((_substrateApi$api$que4 = substrateApi.api.query.parachainStaking) === null || _substrateApi$api$que4 === void 0 ? void 0 : (_substrateApi$api$que5 = _substrateApi$api$que4.unstaking) === null || _substrateApi$api$que5 === void 0 ? void 0 : (_substrateApi$api$que6 = _substrateApi$api$que5.multi) === null || _substrateApi$api$que6 === void 0 ? void 0 : _substrateApi$api$que6.call(_substrateApi$api$que5, useAddresses));
|
|
180
|
+
if (!ledgers || !_unstakingStates) {
|
|
181
|
+
return [];
|
|
182
|
+
}
|
|
183
|
+
for (let i = 0; i < useAddresses.length; i++) {
|
|
184
|
+
const owner = useAddresses[i];
|
|
185
|
+
const _delegatorState = ledgers[i];
|
|
186
|
+
let delegatorState = [];
|
|
187
|
+
const unstakingInfo = _unstakingStates[i].toPrimitive();
|
|
188
|
+
if (_STAKING_CHAIN_GROUP.krest_network.includes(this.chain)) {
|
|
189
|
+
const krestDelegatorState = _delegatorState.toPrimitive();
|
|
190
|
+
const delegates = krestDelegatorState === null || krestDelegatorState === void 0 ? void 0 : krestDelegatorState.delegations;
|
|
191
|
+
if (delegates) {
|
|
192
|
+
delegatorState = delegatorState.concat(delegates);
|
|
193
|
+
}
|
|
194
|
+
} else {
|
|
195
|
+
const delegate = _delegatorState.toPrimitive();
|
|
196
|
+
if (delegate) {
|
|
197
|
+
delegatorState.push(delegate);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
if (delegatorState.length || unstakingInfo && Object.keys(unstakingInfo).length) {
|
|
201
|
+
result.push(owner);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return Promise.resolve(result);
|
|
205
|
+
}
|
|
174
206
|
async subscribePoolPosition(useAddresses, resultCallback) {
|
|
175
207
|
let cancel = false;
|
|
176
208
|
const substrateApi = await this.substrateApi.isReady;
|
|
@@ -9,6 +9,7 @@ export default class AstarNativeStakingPoolHandler extends BaseParaNativeStaking
|
|
|
9
9
|
subscribePoolInfo(callback: (data: YieldPoolInfo) => void): Promise<VoidFunction>;
|
|
10
10
|
parseNominatorMetadata(chainInfo: _ChainInfo, address: string, substrateApi: _SubstrateApi, ledger: PalletDappsStakingAccountLedger): Promise<Omit<YieldPositionInfo, keyof BaseYieldPositionInfo>>;
|
|
11
11
|
subscribePoolPosition(useAddresses: string[], resultCallback: (rs: YieldPositionInfo) => void): Promise<VoidFunction>;
|
|
12
|
+
checkAccountHaveStake(useAddresses: string[]): Promise<Array<string>>;
|
|
12
13
|
getPoolTargets(): Promise<ValidatorInfo[]>;
|
|
13
14
|
get defaultSubmitStep(): YieldStepBaseInfo;
|
|
14
15
|
createJoinExtrinsic(data: SubmitJoinNativeStaking, positionInfo?: YieldPositionInfo, bondDest?: string): Promise<[TransactionData, YieldTokenBaseInfo]>;
|
|
@@ -286,6 +286,24 @@ export default class AstarNativeStakingPoolHandler extends BaseParaNativeStaking
|
|
|
286
286
|
unsub && unsub();
|
|
287
287
|
};
|
|
288
288
|
}
|
|
289
|
+
async checkAccountHaveStake(useAddresses) {
|
|
290
|
+
var _substrateApi$api$que2, _substrateApi$api$que3, _substrateApi$api$que4;
|
|
291
|
+
const result = [];
|
|
292
|
+
const substrateApi = await this.substrateApi.isReady;
|
|
293
|
+
const ledgers = await ((_substrateApi$api$que2 = substrateApi.api.query.dappsStaking) === null || _substrateApi$api$que2 === void 0 ? void 0 : (_substrateApi$api$que3 = _substrateApi$api$que2.ledger) === null || _substrateApi$api$que3 === void 0 ? void 0 : (_substrateApi$api$que4 = _substrateApi$api$que3.multi) === null || _substrateApi$api$que4 === void 0 ? void 0 : _substrateApi$api$que4.call(_substrateApi$api$que3, useAddresses));
|
|
294
|
+
if (!ledgers) {
|
|
295
|
+
return [];
|
|
296
|
+
}
|
|
297
|
+
for (let i = 0; i < useAddresses.length; i++) {
|
|
298
|
+
const owner = useAddresses[i];
|
|
299
|
+
const _ledger = ledgers[i];
|
|
300
|
+
const ledger = _ledger.toPrimitive();
|
|
301
|
+
if (ledger && ledger.locked > 0) {
|
|
302
|
+
result.push(owner);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
return result;
|
|
306
|
+
}
|
|
289
307
|
|
|
290
308
|
/* Subscribe pool position */
|
|
291
309
|
|
|
@@ -8,9 +8,11 @@ export default abstract class BaseNativeStakingPoolHandler extends BasePoolHandl
|
|
|
8
8
|
protected readonly shortName: string;
|
|
9
9
|
slug: string;
|
|
10
10
|
protected readonly availableMethod: YieldPoolMethodInfo;
|
|
11
|
+
static generateSlug(symbol: string, chain: string): string;
|
|
11
12
|
constructor(state: KoniState, chain: string);
|
|
12
13
|
protected getDescription(amount?: string): string;
|
|
13
14
|
getPoolReward(useAddresses: string[], callBack: (rs: EarningRewardItem) => void): Promise<VoidFunction>;
|
|
15
|
+
abstract checkAccountHaveStake(useAddresses: string[]): Promise<Array<string>>;
|
|
14
16
|
getPoolRewardHistory(useAddresses: string[], callBack: (rs: EarningRewardHistoryItem) => void): Promise<VoidFunction>;
|
|
15
17
|
get defaultSubmitStep(): YieldStepBaseInfo;
|
|
16
18
|
abstract createJoinExtrinsic(data: SubmitJoinNativeStaking, positionInfo?: YieldPositionInfo, bondDest?: string, netuid?: number): Promise<[TransactionData, YieldTokenBaseInfo]>;
|
|
@@ -16,6 +16,9 @@ export default class BaseNativeStakingPoolHandler extends BasePoolHandler {
|
|
|
16
16
|
withdraw: true,
|
|
17
17
|
claimReward: false
|
|
18
18
|
};
|
|
19
|
+
static generateSlug(symbol, chain) {
|
|
20
|
+
return `${symbol}___native_staking___${chain}`;
|
|
21
|
+
}
|
|
19
22
|
constructor(state, chain) {
|
|
20
23
|
super(state, chain);
|
|
21
24
|
const _chainAsset = this.nativeToken;
|
|
@@ -39,40 +42,48 @@ export default class BaseNativeStakingPoolHandler extends BasePoolHandler {
|
|
|
39
42
|
async getPoolRewardHistory(useAddresses, callBack) {
|
|
40
43
|
let cancel = false;
|
|
41
44
|
const haveSubscanService = this.state.subscanService.checkSupportedSubscanChain(this.chain);
|
|
45
|
+
const requestGroupId = this.state.subscanService.getGroupId();
|
|
42
46
|
if (haveSubscanService) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
if (items) {
|
|
51
|
-
for (const item of items) {
|
|
52
|
-
const now = new Date();
|
|
53
|
-
const isMillisecond = now.getTime().toString().length === item.block_timestamp.toString().length;
|
|
54
|
-
const timeStamp = isMillisecond ? item.block_timestamp : item.block_timestamp * 1000;
|
|
55
|
-
const data = {
|
|
56
|
-
slug: this.slug,
|
|
57
|
-
type: this.type,
|
|
58
|
-
chain: this.chain,
|
|
59
|
-
address: address,
|
|
60
|
-
group: this.group,
|
|
61
|
-
blockTimestamp: timeStamp,
|
|
62
|
-
amount: item.amount,
|
|
63
|
-
eventIndex: item.event_index
|
|
64
|
-
};
|
|
65
|
-
callBack(data);
|
|
66
|
-
}
|
|
47
|
+
this.checkAccountHaveStake(useAddresses).then(activeAddresses => {
|
|
48
|
+
for (const address of useAddresses) {
|
|
49
|
+
if (cancel) {
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
if (!activeAddresses.includes(address)) {
|
|
53
|
+
continue;
|
|
67
54
|
}
|
|
68
|
-
|
|
69
|
-
|
|
55
|
+
this.state.subscanService.getRewardHistoryList(requestGroupId, this.chain, address).then(rs => {
|
|
56
|
+
const items = rs === null || rs === void 0 ? void 0 : rs.list;
|
|
57
|
+
if (cancel) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
if (items) {
|
|
61
|
+
for (const item of items) {
|
|
62
|
+
const now = new Date();
|
|
63
|
+
const isMillisecond = now.getTime().toString().length === item.block_timestamp.toString().length;
|
|
64
|
+
const timeStamp = isMillisecond ? item.block_timestamp : item.block_timestamp * 1000;
|
|
65
|
+
const data = {
|
|
66
|
+
slug: this.slug,
|
|
67
|
+
type: this.type,
|
|
68
|
+
chain: this.chain,
|
|
69
|
+
address: address,
|
|
70
|
+
group: this.group,
|
|
71
|
+
blockTimestamp: timeStamp,
|
|
72
|
+
amount: item.amount,
|
|
73
|
+
eventIndex: item.event_index
|
|
74
|
+
};
|
|
75
|
+
callBack(data);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}).catch(console.error);
|
|
70
79
|
}
|
|
71
|
-
}
|
|
80
|
+
}).catch(console.error);
|
|
72
81
|
}
|
|
73
|
-
return () => {
|
|
82
|
+
return Promise.resolve(() => {
|
|
83
|
+
console.log('Cancel get pool reward history', requestGroupId);
|
|
74
84
|
cancel = false;
|
|
75
|
-
|
|
85
|
+
this.state.subscanService.cancelGroupRequest(requestGroupId);
|
|
86
|
+
});
|
|
76
87
|
}
|
|
77
88
|
|
|
78
89
|
/* Get pool reward */
|
|
@@ -61,6 +61,7 @@ export default class SubnetTaoStakingPoolHandler extends BaseParaStakingPoolHand
|
|
|
61
61
|
subscribePoolInfo(callback: (data: YieldPoolInfo) => void): Promise<VoidFunction>;
|
|
62
62
|
parseNominatorMetadata(chainInfo: _ChainInfo, address: string, delegatorState: TaoStakingStakeOption[]): Promise<Omit<YieldPositionInfo, keyof BaseYieldPositionInfo>>;
|
|
63
63
|
subscribePoolPosition(useAddresses: string[], rsCallback: (rs: YieldPositionInfo) => void): Promise<VoidFunction>;
|
|
64
|
+
checkAccountHaveStake(useAddresses: string[]): Promise<string[]>;
|
|
64
65
|
private getDevnetPoolTargets;
|
|
65
66
|
private getMainnetPoolTargets;
|
|
66
67
|
getPoolTargets(): Promise<ValidatorInfo[]>;
|
|
@@ -364,6 +364,11 @@ export default class SubnetTaoStakingPoolHandler extends BaseParaStakingPoolHand
|
|
|
364
364
|
};
|
|
365
365
|
}
|
|
366
366
|
|
|
367
|
+
// Because not have subscan api
|
|
368
|
+
async checkAccountHaveStake(useAddresses) {
|
|
369
|
+
return Promise.resolve([]);
|
|
370
|
+
}
|
|
371
|
+
|
|
367
372
|
/* Subscribe pool position */
|
|
368
373
|
|
|
369
374
|
/* Get pool targets */
|
|
@@ -13,6 +13,7 @@ interface PalletCollatorStakingUserStakeInfo {
|
|
|
13
13
|
export default class MythosNativeStakingPoolHandler extends BaseParaStakingPoolHandler {
|
|
14
14
|
protected readonly availableMethod: YieldPoolMethodInfo;
|
|
15
15
|
subscribePoolInfo(callback: (data: YieldPoolInfo) => void): Promise<VoidFunction>;
|
|
16
|
+
checkAccountHaveStake(useAddresses: string[]): Promise<Array<string>>;
|
|
16
17
|
subscribePoolPosition(useAddresses: string[], resultCallback: (rs: YieldPositionInfo) => void): Promise<VoidFunction>;
|
|
17
18
|
parseCollatorMetadata(chainInfo: _ChainInfo, stakerAddress: string, substrateApi: _SubstrateApi, userStake: PalletCollatorStakingUserStakeInfo): Promise<{
|
|
18
19
|
status: EarningStatus;
|
|
@@ -119,6 +119,34 @@ export default class MythosNativeStakingPoolHandler extends BaseParaStakingPoolH
|
|
|
119
119
|
|
|
120
120
|
/* Subscribe pool position */
|
|
121
121
|
|
|
122
|
+
async checkAccountHaveStake(useAddresses) {
|
|
123
|
+
var _substrateApi$api$que, _substrateApi$api$que2, _substrateApi$api$que3;
|
|
124
|
+
const result = [];
|
|
125
|
+
const substrateApi = await this.substrateApi.isReady;
|
|
126
|
+
const ledgers = await ((_substrateApi$api$que = substrateApi.api.query.collatorStaking) === null || _substrateApi$api$que === void 0 ? void 0 : (_substrateApi$api$que2 = _substrateApi$api$que.userStake) === null || _substrateApi$api$que2 === void 0 ? void 0 : (_substrateApi$api$que3 = _substrateApi$api$que2.multi) === null || _substrateApi$api$que3 === void 0 ? void 0 : _substrateApi$api$que3.call(_substrateApi$api$que2, useAddresses));
|
|
127
|
+
const _unstakings = await Promise.all(useAddresses.map(stakerAddress => {
|
|
128
|
+
var _substrateApi$api$que4, _substrateApi$api$que5;
|
|
129
|
+
return (_substrateApi$api$que4 = substrateApi.api.query.collatorStaking) === null || _substrateApi$api$que4 === void 0 ? void 0 : (_substrateApi$api$que5 = _substrateApi$api$que4.releaseQueues) === null || _substrateApi$api$que5 === void 0 ? void 0 : _substrateApi$api$que5.call(_substrateApi$api$que4, stakerAddress);
|
|
130
|
+
}));
|
|
131
|
+
if (!ledgers || !_unstakings) {
|
|
132
|
+
return [];
|
|
133
|
+
}
|
|
134
|
+
for (let i = 0; i < useAddresses.length; i++) {
|
|
135
|
+
const owner = useAddresses[i];
|
|
136
|
+
const _userStake = ledgers[i];
|
|
137
|
+
const userStake = _userStake.toPrimitive();
|
|
138
|
+
const _unstaking = _unstakings[i];
|
|
139
|
+
const unstakings = _unstaking.toPrimitive();
|
|
140
|
+
|
|
141
|
+
// TODO: Need to improve, check if can only load stake info
|
|
142
|
+
if (userStake && userStake.stake !== '0') {
|
|
143
|
+
result.push(owner);
|
|
144
|
+
} else if (unstakings && unstakings.some(unstake => unstake.amount !== '0')) {
|
|
145
|
+
result.push(owner);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return result;
|
|
149
|
+
}
|
|
122
150
|
async subscribePoolPosition(useAddresses, resultCallback) {
|
|
123
151
|
let cancel = false;
|
|
124
152
|
const substrateApi = await this.substrateApi.isReady;
|
|
@@ -7,6 +7,7 @@ export default class ParaNativeStakingPoolHandler extends BaseParaNativeStakingP
|
|
|
7
7
|
subscribePoolInfo(callback: (data: YieldPoolInfo) => void): Promise<VoidFunction>;
|
|
8
8
|
parseNominatorMetadata(chainInfo: _ChainInfo, address: string, substrateApi: _SubstrateApi, delegatorState: PalletParachainStakingDelegator): Promise<Omit<YieldPositionInfo, keyof BaseYieldPositionInfo>>;
|
|
9
9
|
subscribePoolPosition(useAddresses: string[], resultCallback: (rs: YieldPositionInfo) => void): Promise<VoidFunction>;
|
|
10
|
+
checkAccountHaveStake(useAddresses: string[]): Promise<string[]>;
|
|
10
11
|
getMantaPoolTargets(): Promise<ValidatorInfo[]>;
|
|
11
12
|
getParachainPoolTargets(): Promise<ValidatorInfo[]>;
|
|
12
13
|
getPoolTargets(): Promise<ValidatorInfo[]>;
|
|
@@ -268,6 +268,23 @@ export default class ParaNativeStakingPoolHandler extends BaseParaNativeStakingP
|
|
|
268
268
|
unsub();
|
|
269
269
|
};
|
|
270
270
|
}
|
|
271
|
+
async checkAccountHaveStake(useAddresses) {
|
|
272
|
+
var _substrateApi$api$que, _substrateApi$api$que2, _substrateApi$api$que3;
|
|
273
|
+
const result = [];
|
|
274
|
+
const substrateApi = await this.substrateApi.isReady;
|
|
275
|
+
const ledgers = await ((_substrateApi$api$que = substrateApi.api.query.parachainStaking) === null || _substrateApi$api$que === void 0 ? void 0 : (_substrateApi$api$que2 = _substrateApi$api$que.delegatorState) === null || _substrateApi$api$que2 === void 0 ? void 0 : (_substrateApi$api$que3 = _substrateApi$api$que2.multi) === null || _substrateApi$api$que3 === void 0 ? void 0 : _substrateApi$api$que3.call(_substrateApi$api$que2, useAddresses));
|
|
276
|
+
if (!ledgers) {
|
|
277
|
+
return [];
|
|
278
|
+
}
|
|
279
|
+
for (let i = 0; i < useAddresses.length; i++) {
|
|
280
|
+
const owner = useAddresses[i];
|
|
281
|
+
const delegatorState = ledgers[i].toPrimitive();
|
|
282
|
+
if (delegatorState && delegatorState.total > 0) {
|
|
283
|
+
result.push(owner);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
return result;
|
|
287
|
+
}
|
|
271
288
|
|
|
272
289
|
/* Subscribe pool position */
|
|
273
290
|
|
|
@@ -12,6 +12,7 @@ export default class RelayNativeStakingPoolHandler extends BaseNativeStakingPool
|
|
|
12
12
|
parseNominatorMetadata(chainInfo: _ChainInfo, address: string, substrateApi: _SubstrateApi, ledger: PalletStakingStakingLedger, currentEra: string, minStake: BN, _deriveSessionProgress: DeriveSessionProgress): Promise<Omit<YieldPositionInfo, keyof BaseYieldPositionInfo>>;
|
|
13
13
|
handleNominationsList(substrateApi: _SubstrateApi, chain: string, nominations: PalletStakingNominations, currentEra: string, address: string, maxNominatorRewardedPerValidator: number | undefined): Promise<NominationInfo[]>;
|
|
14
14
|
subscribePoolPosition(useAddresses: string[], resultCallback: (rs: YieldPositionInfo) => void): Promise<VoidFunction>;
|
|
15
|
+
checkAccountHaveStake(useAddresses: string[]): Promise<string[]>;
|
|
15
16
|
getPoolTargets(): Promise<ValidatorInfo[]>;
|
|
16
17
|
private getValidatorExpectedReturn;
|
|
17
18
|
private parseEraStakerData;
|
|
@@ -283,6 +283,22 @@ export default class RelayNativeStakingPoolHandler extends BaseNativeStakingPool
|
|
|
283
283
|
unsub === null || unsub === void 0 ? void 0 : unsub();
|
|
284
284
|
};
|
|
285
285
|
}
|
|
286
|
+
async checkAccountHaveStake(useAddresses) {
|
|
287
|
+
var _substrateApi$api$que22, _substrateApi$api$que23, _substrateApi$api$que24;
|
|
288
|
+
const result = [];
|
|
289
|
+
const substrateApi = await this.substrateApi.isReady;
|
|
290
|
+
const ledgers = await ((_substrateApi$api$que22 = substrateApi.api.query.staking) === null || _substrateApi$api$que22 === void 0 ? void 0 : (_substrateApi$api$que23 = _substrateApi$api$que22.ledger) === null || _substrateApi$api$que23 === void 0 ? void 0 : (_substrateApi$api$que24 = _substrateApi$api$que23.multi) === null || _substrateApi$api$que24 === void 0 ? void 0 : _substrateApi$api$que24.call(_substrateApi$api$que23, useAddresses));
|
|
291
|
+
if (ledgers) {
|
|
292
|
+
for (let i = 0; i < useAddresses.length; i++) {
|
|
293
|
+
const address = useAddresses[i];
|
|
294
|
+
const _ledger = ledgers[i].toPrimitive();
|
|
295
|
+
if (_ledger.total > 0) {
|
|
296
|
+
result.push(address);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return result;
|
|
301
|
+
}
|
|
286
302
|
|
|
287
303
|
/* Subscribe pool position */
|
|
288
304
|
|
|
@@ -651,8 +667,15 @@ export default class RelayNativeStakingPoolHandler extends BaseNativeStakingPool
|
|
|
651
667
|
async handleYieldWithdraw(address, unstakingInfo) {
|
|
652
668
|
const chainApi = await this.substrateApi.isReady;
|
|
653
669
|
if (chainApi.api.tx.staking.withdrawUnbonded.meta.args.length === 1) {
|
|
654
|
-
|
|
655
|
-
|
|
670
|
+
let slashingSpanCount;
|
|
671
|
+
if (chainApi.api.query.staking.nominatorSlashInEra) {
|
|
672
|
+
const currentEra = await chainApi.api.query.staking.currentEra();
|
|
673
|
+
const slashingSpans = (await chainApi.api.query.staking.nominatorSlashInEra(currentEra.toPrimitive(), address)).toPrimitive();
|
|
674
|
+
slashingSpanCount = slashingSpans !== null ? slashingSpans.toString() : '0';
|
|
675
|
+
} else {
|
|
676
|
+
const _slashingSpans = (await chainApi.api.query.staking.slashingSpans(address)).toHuman();
|
|
677
|
+
slashingSpanCount = _slashingSpans !== null ? _slashingSpans.spanIndex : '0';
|
|
678
|
+
}
|
|
656
679
|
return chainApi.api.tx.staking.withdrawUnbonded(slashingSpanCount);
|
|
657
680
|
} else {
|
|
658
681
|
// @ts-ignore
|
|
@@ -57,6 +57,7 @@ export default class TaoNativeStakingPoolHandler extends BaseParaStakingPoolHand
|
|
|
57
57
|
subscribePoolInfo(callback: (data: YieldPoolInfo) => void): Promise<VoidFunction>;
|
|
58
58
|
parseNominatorMetadata(chainInfo: _ChainInfo, address: string, delegatorState: TaoStakingStakeOption[]): Promise<Omit<YieldPositionInfo, keyof BaseYieldPositionInfo>>;
|
|
59
59
|
subscribePoolPosition(useAddresses: string[], rsCallback: (rs: YieldPositionInfo) => void): Promise<VoidFunction>;
|
|
60
|
+
checkAccountHaveStake(useAddresses: string[]): Promise<string[]>;
|
|
60
61
|
private getDevnetPoolTargets;
|
|
61
62
|
private getMainnetPoolTargets;
|
|
62
63
|
getPoolTargets(): Promise<ValidatorInfo[]>;
|
|
@@ -380,6 +380,11 @@ export default class TaoNativeStakingPoolHandler extends BaseParaStakingPoolHand
|
|
|
380
380
|
};
|
|
381
381
|
}
|
|
382
382
|
|
|
383
|
+
// Because not have subscan api
|
|
384
|
+
async checkAccountHaveStake(useAddresses) {
|
|
385
|
+
return Promise.resolve([]);
|
|
386
|
+
}
|
|
387
|
+
|
|
383
388
|
/* Subscribe pool position */
|
|
384
389
|
|
|
385
390
|
/* Get pool targets */
|
|
@@ -12,6 +12,7 @@ export default class NominationPoolHandler extends BasePoolHandler {
|
|
|
12
12
|
protected readonly shortName: string;
|
|
13
13
|
slug: string;
|
|
14
14
|
protected readonly availableMethod: YieldPoolMethodInfo;
|
|
15
|
+
static generateSlug(symbol: string, chain: string): string;
|
|
15
16
|
constructor(state: KoniState, chain: string);
|
|
16
17
|
protected getDescription(amount?: string): string;
|
|
17
18
|
subscribePoolInfo(callback: (data: YieldPoolInfo) => void): Promise<VoidFunction>;
|
|
@@ -22,6 +22,9 @@ export default class NominationPoolHandler extends BasePoolHandler {
|
|
|
22
22
|
withdraw: true,
|
|
23
23
|
claimReward: true
|
|
24
24
|
};
|
|
25
|
+
static generateSlug(symbol, chain) {
|
|
26
|
+
return `${symbol}___nomination_pool___${chain}`;
|
|
27
|
+
}
|
|
25
28
|
constructor(state, chain) {
|
|
26
29
|
super(state, chain);
|
|
27
30
|
const _chainAsset = this.nativeToken;
|
|
@@ -79,7 +82,8 @@ export default class NominationPoolHandler extends BasePoolHandler {
|
|
|
79
82
|
const maxUnlockingChunks = substrateApi.api.consts.staking.maxUnlockingChunks.toString();
|
|
80
83
|
const unlockingEras = substrateApi.api.consts.staking.bondingDuration.toString();
|
|
81
84
|
const maxSupportedEras = substrateApi.api.consts.staking.historyDepth.toString();
|
|
82
|
-
const
|
|
85
|
+
const eraInHours = _STAKING_ERA_LENGTH_MAP[chainInfo.slug] || _STAKING_ERA_LENGTH_MAP.default; // in hours
|
|
86
|
+
const erasPerDay = 24 / eraInHours; // Can be exactly calculate from epochDuration, blockTime, sessionsPerEra
|
|
83
87
|
|
|
84
88
|
const supportedDays = getSupportedDaysByHistoryDepth(erasPerDay, parseInt(maxSupportedEras), parseInt(currentEra) / erasPerDay);
|
|
85
89
|
const startEra = parseInt(currentEra) - supportedDays * erasPerDay;
|
|
@@ -560,8 +564,7 @@ export default class NominationPoolHandler extends BasePoolHandler {
|
|
|
560
564
|
async handleYieldWithdraw(address, unstakingInfo) {
|
|
561
565
|
const chainApi = await this.substrateApi.isReady;
|
|
562
566
|
if (chainApi.api.tx.nominationPools.withdrawUnbonded.meta.args.length === 2) {
|
|
563
|
-
const
|
|
564
|
-
const slashingSpanCount = _slashingSpans !== null ? _slashingSpans.spanIndex : '0';
|
|
567
|
+
const slashingSpanCount = await chainApi.api.call.nominationPoolsApi.memberPendingSlash(address);
|
|
565
568
|
return chainApi.api.tx.nominationPools.withdrawUnbonded({
|
|
566
569
|
Id: address
|
|
567
570
|
}, slashingSpanCount);
|
|
@@ -12,6 +12,7 @@ export default class EarningService implements StoppableServiceInterface, Persis
|
|
|
12
12
|
protected readonly state: KoniState;
|
|
13
13
|
protected handlers: Record<string, BasePoolHandler>;
|
|
14
14
|
private handlerCache;
|
|
15
|
+
private inactivePoolSlug;
|
|
15
16
|
private earningRewardSubject;
|
|
16
17
|
private earningRewardHistorySubject;
|
|
17
18
|
private minAmountPercentSubject;
|
|
@@ -21,6 +22,7 @@ export default class EarningService implements StoppableServiceInterface, Persis
|
|
|
21
22
|
private dbService;
|
|
22
23
|
private eventService;
|
|
23
24
|
private useOnlineCacheOnly;
|
|
25
|
+
private inactivePoolReady;
|
|
24
26
|
constructor(state: KoniState);
|
|
25
27
|
disableOnlineCacheOnly(): void;
|
|
26
28
|
private initHandlers;
|
|
@@ -81,6 +83,7 @@ export default class EarningService implements StoppableServiceInterface, Persis
|
|
|
81
83
|
subscribeEarningRewardHistory(): BehaviorSubject<Record<string, EarningRewardHistoryItem>>;
|
|
82
84
|
getEarningRewardHistory(): Record<string, EarningRewardHistoryItem>;
|
|
83
85
|
earningsRewardHistoryInterval: NodeJS.Timer | undefined;
|
|
86
|
+
private unSubFetchEarningRewardHistory;
|
|
84
87
|
runSubscribeEarningRewardHistoryInterval(): void;
|
|
85
88
|
runUnsubscribeEarningRewardHistoryInterval(): void;
|
|
86
89
|
/**
|