@subwallet/extension-base 1.3.46-0 → 1.3.48-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 +7 -1
- package/background/KoniTypes.js +1 -0
- package/background/errors/TransactionError.js +4 -0
- package/cjs/background/KoniTypes.js +1 -0
- package/cjs/background/errors/TransactionError.js +4 -0
- package/cjs/core/logic-validation/transfer.js +7 -0
- package/cjs/koni/api/nft/config.js +1 -1
- package/cjs/koni/api/nft/ordinal_nft/index.js +3 -2
- package/cjs/koni/background/handlers/Extension.js +21 -1
- package/cjs/koni/background/handlers/State.js +3 -0
- package/cjs/packageInfo.js +1 -1
- 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 +7 -2
- package/cjs/services/chain-service/utils/index.js +3 -0
- package/cjs/services/chain-service/utils/patch.js +1 -1
- package/cjs/services/earning-service/constants/chains.js +4 -2
- package/cjs/services/earning-service/handlers/lending/interlay.js +2 -1
- package/cjs/services/earning-service/handlers/liquid-staking/acala.js +2 -1
- package/cjs/services/earning-service/handlers/liquid-staking/bifrost.js +2 -1
- package/cjs/services/earning-service/handlers/liquid-staking/parallel.js +2 -1
- package/cjs/services/earning-service/handlers/liquid-staking/stella-swap.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 +20 -1
- package/cjs/services/earning-service/handlers/native-staking/base.js +42 -30
- package/cjs/services/earning-service/handlers/native-staking/dtao.js +79 -21
- package/cjs/services/earning-service/handlers/native-staking/mythos.js +30 -1
- package/cjs/services/earning-service/handlers/native-staking/para-chain.js +17 -0
- package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +49 -6
- package/cjs/services/earning-service/handlers/native-staking/tao.js +98 -32
- package/cjs/services/earning-service/handlers/nomination-pool/index.js +5 -2
- package/cjs/services/earning-service/handlers/special.js +3 -1
- package/cjs/services/earning-service/service.js +52 -7
- package/cjs/services/history-service/index.js +12 -7
- package/cjs/services/subscan-service/index.js +35 -104
- package/cjs/services/transaction-service/helpers/index.js +2 -0
- package/cjs/services/transaction-service/index.js +15 -0
- 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/transaction/error.js +1 -0
- package/cjs/utils/account/transform.js +3 -2
- package/cjs/utils/gear/combine.js +4 -3
- package/cjs/utils/gear/vft.js +104 -135
- package/core/logic-validation/transfer.js +7 -0
- package/koni/api/nft/config.d.ts +1 -1
- package/koni/api/nft/config.js +1 -1
- package/koni/api/nft/ordinal_nft/index.js +3 -2
- package/koni/background/handlers/Extension.d.ts +1 -0
- package/koni/background/handlers/Extension.js +21 -1
- package/koni/background/handlers/State.js +4 -1
- package/package.json +20 -9
- package/packageInfo.js +1 -1
- package/services/balance-service/helpers/subscribe/substrate/index.js +8 -14
- package/services/buy-service/index.js +2 -0
- package/services/chain-service/index.js +7 -2
- package/services/chain-service/utils/index.js +3 -0
- 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/base.d.ts +5 -3
- package/services/earning-service/handlers/lending/interlay.d.ts +1 -1
- package/services/earning-service/handlers/lending/interlay.js +2 -1
- package/services/earning-service/handlers/liquid-staking/acala.d.ts +1 -1
- package/services/earning-service/handlers/liquid-staking/acala.js +2 -1
- package/services/earning-service/handlers/liquid-staking/bifrost.d.ts +1 -1
- package/services/earning-service/handlers/liquid-staking/bifrost.js +2 -1
- package/services/earning-service/handlers/liquid-staking/parallel.d.ts +1 -1
- package/services/earning-service/handlers/liquid-staking/parallel.js +2 -1
- package/services/earning-service/handlers/liquid-staking/stella-swap.d.ts +1 -1
- package/services/earning-service/handlers/liquid-staking/stella-swap.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 +2 -1
- package/services/earning-service/handlers/native-staking/astar.js +20 -1
- package/services/earning-service/handlers/native-staking/base.d.ts +4 -2
- package/services/earning-service/handlers/native-staking/base.js +42 -30
- package/services/earning-service/handlers/native-staking/dtao.d.ts +5 -3
- package/services/earning-service/handlers/native-staking/dtao.js +80 -22
- package/services/earning-service/handlers/native-staking/mythos.d.ts +2 -1
- package/services/earning-service/handlers/native-staking/mythos.js +30 -1
- 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 +6 -1
- package/services/earning-service/handlers/native-staking/relay-chain.js +50 -7
- package/services/earning-service/handlers/native-staking/tao.d.ts +23 -4
- package/services/earning-service/handlers/native-staking/tao.js +99 -33
- package/services/earning-service/handlers/nomination-pool/index.d.ts +3 -2
- package/services/earning-service/handlers/nomination-pool/index.js +5 -2
- package/services/earning-service/handlers/special.d.ts +2 -1
- package/services/earning-service/handlers/special.js +3 -1
- package/services/earning-service/service.d.ts +3 -1
- package/services/earning-service/service.js +52 -7
- package/services/history-service/index.js +12 -7
- package/services/subscan-service/index.d.ts +13 -27
- package/services/subscan-service/index.js +26 -95
- package/services/transaction-service/helpers/index.js +2 -0
- package/services/transaction-service/index.js +15 -0
- 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/buy.d.ts +1 -1
- package/types/transaction/error.d.ts +2 -1
- package/types/transaction/error.js +1 -0
- package/types/yield/actions/join/submit.d.ts +10 -1
- package/types/yield/info/chain/info.d.ts +2 -0
- package/utils/account/transform.js +3 -2
- 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
|
@@ -27,7 +27,8 @@ export default class AcalaLiquidStakingPoolHandler extends BaseLiquidStakingPool
|
|
|
27
27
|
fastUnstake: true,
|
|
28
28
|
cancelUnstake: false,
|
|
29
29
|
withdraw: true,
|
|
30
|
-
claimReward: false
|
|
30
|
+
claimReward: false,
|
|
31
|
+
changeValidator: false
|
|
31
32
|
};
|
|
32
33
|
constructor(state, chain) {
|
|
33
34
|
super(state, chain);
|
|
@@ -32,7 +32,7 @@ export default class BifrostLiquidStakingPoolHandler extends BaseLiquidStakingPo
|
|
|
32
32
|
protected readonly rewardAssets: string[];
|
|
33
33
|
protected readonly feeAssets: string[];
|
|
34
34
|
readonly minAmountPercent: number;
|
|
35
|
-
|
|
35
|
+
readonly availableMethod: YieldPoolMethodInfo;
|
|
36
36
|
protected readonly rateDecimals = 0;
|
|
37
37
|
constructor(state: KoniState, chain: string);
|
|
38
38
|
protected getDescription(): string;
|
|
@@ -26,7 +26,8 @@ export default class BifrostLiquidStakingPoolHandler extends BaseLiquidStakingPo
|
|
|
26
26
|
fastUnstake: true,
|
|
27
27
|
cancelUnstake: false,
|
|
28
28
|
withdraw: false,
|
|
29
|
-
claimReward: false
|
|
29
|
+
claimReward: false,
|
|
30
|
+
changeValidator: false
|
|
30
31
|
};
|
|
31
32
|
rateDecimals = 0;
|
|
32
33
|
constructor(state, chain) {
|
|
@@ -13,7 +13,7 @@ export default class ParallelLiquidStakingPoolHandler extends BaseLiquidStakingP
|
|
|
13
13
|
protected readonly feeAssets: string[];
|
|
14
14
|
readonly minAmountPercent = 0.96;
|
|
15
15
|
protected readonly rateDecimals = 18;
|
|
16
|
-
|
|
16
|
+
readonly availableMethod: YieldPoolMethodInfo;
|
|
17
17
|
constructor(state: KoniState, chain: string);
|
|
18
18
|
protected getDescription(): string;
|
|
19
19
|
getPoolStat(): Promise<LiquidYieldPoolInfo>;
|
|
@@ -22,7 +22,8 @@ export default class ParallelLiquidStakingPoolHandler extends BaseLiquidStakingP
|
|
|
22
22
|
fastUnstake: true,
|
|
23
23
|
cancelUnstake: false,
|
|
24
24
|
withdraw: false,
|
|
25
|
-
claimReward: false
|
|
25
|
+
claimReward: false,
|
|
26
|
+
changeValidator: false
|
|
26
27
|
};
|
|
27
28
|
constructor(state, chain) {
|
|
28
29
|
super(state, chain);
|
|
@@ -17,7 +17,7 @@ export default class StellaSwapLiquidStakingPoolHandler extends BaseLiquidStakin
|
|
|
17
17
|
protected readonly feeAssets: string[];
|
|
18
18
|
transactionChainType: ChainType;
|
|
19
19
|
protected readonly rateDecimals = 10;
|
|
20
|
-
|
|
20
|
+
readonly availableMethod: YieldPoolMethodInfo;
|
|
21
21
|
constructor(state: KoniState, chain: string);
|
|
22
22
|
protected getDescription(): string;
|
|
23
23
|
getPoolStat(): Promise<LiquidYieldPoolInfo>;
|
|
@@ -33,7 +33,8 @@ export default class StellaSwapLiquidStakingPoolHandler extends BaseLiquidStakin
|
|
|
33
33
|
fastUnstake: false,
|
|
34
34
|
cancelUnstake: false,
|
|
35
35
|
withdraw: true,
|
|
36
|
-
claimReward: false
|
|
36
|
+
claimReward: false,
|
|
37
|
+
changeValidator: false
|
|
37
38
|
};
|
|
38
39
|
constructor(state, chain) {
|
|
39
40
|
super(state, chain);
|
|
@@ -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;
|
|
@@ -5,10 +5,11 @@ import { BaseYieldPositionInfo, PalletDappsStakingAccountLedger, StakeCancelWith
|
|
|
5
5
|
import BaseParaNativeStakingPoolHandler from './base-para';
|
|
6
6
|
export declare function getAstarWithdrawable(yieldPosition: YieldPositionInfo): UnstakingInfo | undefined;
|
|
7
7
|
export default class AstarNativeStakingPoolHandler extends BaseParaNativeStakingPoolHandler {
|
|
8
|
-
|
|
8
|
+
readonly availableMethod: YieldPoolMethodInfo;
|
|
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]>;
|
|
@@ -39,7 +39,8 @@ export default class AstarNativeStakingPoolHandler extends BaseParaNativeStaking
|
|
|
39
39
|
fastUnstake: false,
|
|
40
40
|
cancelUnstake: false,
|
|
41
41
|
withdraw: true,
|
|
42
|
-
claimReward: true
|
|
42
|
+
claimReward: true,
|
|
43
|
+
changeValidator: false
|
|
43
44
|
};
|
|
44
45
|
|
|
45
46
|
/* Subscribe pool info */
|
|
@@ -286,6 +287,24 @@ export default class AstarNativeStakingPoolHandler extends BaseParaNativeStaking
|
|
|
286
287
|
unsub && unsub();
|
|
287
288
|
};
|
|
288
289
|
}
|
|
290
|
+
async checkAccountHaveStake(useAddresses) {
|
|
291
|
+
var _substrateApi$api$que2, _substrateApi$api$que3, _substrateApi$api$que4;
|
|
292
|
+
const result = [];
|
|
293
|
+
const substrateApi = await this.substrateApi.isReady;
|
|
294
|
+
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));
|
|
295
|
+
if (!ledgers) {
|
|
296
|
+
return [];
|
|
297
|
+
}
|
|
298
|
+
for (let i = 0; i < useAddresses.length; i++) {
|
|
299
|
+
const owner = useAddresses[i];
|
|
300
|
+
const _ledger = ledgers[i];
|
|
301
|
+
const ledger = _ledger.toPrimitive();
|
|
302
|
+
if (ledger && ledger.locked > 0) {
|
|
303
|
+
result.push(owner);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
return result;
|
|
307
|
+
}
|
|
289
308
|
|
|
290
309
|
/* Subscribe pool position */
|
|
291
310
|
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import { ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
|
|
2
2
|
import KoniState from '@subwallet/extension-base/koni/background/handlers/State';
|
|
3
|
-
import { EarningRewardHistoryItem, EarningRewardItem, HandleYieldStepData, OptimalYieldPath, OptimalYieldPathParams, SubmitJoinNativeStaking, SubmitYieldJoinData, TransactionData, YieldPoolMethodInfo, YieldPoolType, YieldPositionInfo, YieldStepBaseInfo, YieldTokenBaseInfo } from '@subwallet/extension-base/types';
|
|
3
|
+
import { EarningRewardHistoryItem, EarningRewardItem, HandleYieldStepData, OptimalYieldPath, OptimalYieldPathParams, SubmitChangeValidatorStaking, SubmitJoinNativeStaking, SubmitYieldJoinData, TransactionData, YieldPoolMethodInfo, YieldPoolType, YieldPositionInfo, YieldStepBaseInfo, YieldTokenBaseInfo } from '@subwallet/extension-base/types';
|
|
4
4
|
import BasePoolHandler from '../base';
|
|
5
5
|
export default abstract class BaseNativeStakingPoolHandler extends BasePoolHandler {
|
|
6
6
|
readonly type = YieldPoolType.NATIVE_STAKING;
|
|
7
7
|
protected readonly name: string;
|
|
8
8
|
protected readonly shortName: string;
|
|
9
9
|
slug: string;
|
|
10
|
-
|
|
10
|
+
availableMethod: YieldPoolMethodInfo;
|
|
11
11
|
static generateSlug(symbol: string, chain: string): string;
|
|
12
12
|
constructor(state: KoniState, chain: string);
|
|
13
13
|
protected getDescription(amount?: string): string;
|
|
14
14
|
getPoolReward(useAddresses: string[], callBack: (rs: EarningRewardItem) => void): Promise<VoidFunction>;
|
|
15
|
+
abstract checkAccountHaveStake(useAddresses: string[]): Promise<Array<string>>;
|
|
15
16
|
getPoolRewardHistory(useAddresses: string[], callBack: (rs: EarningRewardHistoryItem) => void): Promise<VoidFunction>;
|
|
16
17
|
get defaultSubmitStep(): YieldStepBaseInfo;
|
|
17
18
|
abstract createJoinExtrinsic(data: SubmitJoinNativeStaking, positionInfo?: YieldPositionInfo, bondDest?: string, netuid?: number): Promise<[TransactionData, YieldTokenBaseInfo]>;
|
|
@@ -19,4 +20,5 @@ export default abstract class BaseNativeStakingPoolHandler extends BasePoolHandl
|
|
|
19
20
|
handleYieldJoin(_data: SubmitYieldJoinData, path: OptimalYieldPath, currentStep: number): Promise<HandleYieldStepData>;
|
|
20
21
|
handleYieldRedeem(amount: string, address: string, selectedTarget?: string): Promise<[ExtrinsicType, TransactionData]>;
|
|
21
22
|
handleYieldClaimReward(address: string, bondReward?: boolean): Promise<TransactionData>;
|
|
23
|
+
handleChangeEarningValidator(_data: SubmitChangeValidatorStaking): Promise<TransactionData>;
|
|
22
24
|
}
|
|
@@ -14,7 +14,8 @@ export default class BaseNativeStakingPoolHandler extends BasePoolHandler {
|
|
|
14
14
|
fastUnstake: false,
|
|
15
15
|
cancelUnstake: true,
|
|
16
16
|
withdraw: true,
|
|
17
|
-
claimReward: false
|
|
17
|
+
claimReward: false,
|
|
18
|
+
changeValidator: false
|
|
18
19
|
};
|
|
19
20
|
static generateSlug(symbol, chain) {
|
|
20
21
|
return `${symbol}___native_staking___${chain}`;
|
|
@@ -42,40 +43,48 @@ export default class BaseNativeStakingPoolHandler extends BasePoolHandler {
|
|
|
42
43
|
async getPoolRewardHistory(useAddresses, callBack) {
|
|
43
44
|
let cancel = false;
|
|
44
45
|
const haveSubscanService = this.state.subscanService.checkSupportedSubscanChain(this.chain);
|
|
46
|
+
const requestGroupId = this.state.subscanService.getGroupId();
|
|
45
47
|
if (haveSubscanService) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if (items) {
|
|
54
|
-
for (const item of items) {
|
|
55
|
-
const now = new Date();
|
|
56
|
-
const isMillisecond = now.getTime().toString().length === item.block_timestamp.toString().length;
|
|
57
|
-
const timeStamp = isMillisecond ? item.block_timestamp : item.block_timestamp * 1000;
|
|
58
|
-
const data = {
|
|
59
|
-
slug: this.slug,
|
|
60
|
-
type: this.type,
|
|
61
|
-
chain: this.chain,
|
|
62
|
-
address: address,
|
|
63
|
-
group: this.group,
|
|
64
|
-
blockTimestamp: timeStamp,
|
|
65
|
-
amount: item.amount,
|
|
66
|
-
eventIndex: item.event_index
|
|
67
|
-
};
|
|
68
|
-
callBack(data);
|
|
69
|
-
}
|
|
48
|
+
this.checkAccountHaveStake(useAddresses).then(activeAddresses => {
|
|
49
|
+
for (const address of useAddresses) {
|
|
50
|
+
if (cancel) {
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
if (!activeAddresses.includes(address)) {
|
|
54
|
+
continue;
|
|
70
55
|
}
|
|
71
|
-
|
|
72
|
-
|
|
56
|
+
this.state.subscanService.getRewardHistoryList(requestGroupId, this.chain, address).then(rs => {
|
|
57
|
+
const items = rs === null || rs === void 0 ? void 0 : rs.list;
|
|
58
|
+
if (cancel) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
if (items) {
|
|
62
|
+
for (const item of items) {
|
|
63
|
+
const now = new Date();
|
|
64
|
+
const isMillisecond = now.getTime().toString().length === item.block_timestamp.toString().length;
|
|
65
|
+
const timeStamp = isMillisecond ? item.block_timestamp : item.block_timestamp * 1000;
|
|
66
|
+
const data = {
|
|
67
|
+
slug: this.slug,
|
|
68
|
+
type: this.type,
|
|
69
|
+
chain: this.chain,
|
|
70
|
+
address: address,
|
|
71
|
+
group: this.group,
|
|
72
|
+
blockTimestamp: timeStamp,
|
|
73
|
+
amount: item.amount,
|
|
74
|
+
eventIndex: item.event_index
|
|
75
|
+
};
|
|
76
|
+
callBack(data);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}).catch(console.error);
|
|
73
80
|
}
|
|
74
|
-
}
|
|
81
|
+
}).catch(console.error);
|
|
75
82
|
}
|
|
76
|
-
return () => {
|
|
83
|
+
return Promise.resolve(() => {
|
|
84
|
+
console.log('Cancel get pool reward history', requestGroupId);
|
|
77
85
|
cancel = false;
|
|
78
|
-
|
|
86
|
+
this.state.subscanService.cancelGroupRequest(requestGroupId);
|
|
87
|
+
});
|
|
79
88
|
}
|
|
80
89
|
|
|
81
90
|
/* Get pool reward */
|
|
@@ -156,6 +165,9 @@ export default class BaseNativeStakingPoolHandler extends BasePoolHandler {
|
|
|
156
165
|
async handleYieldClaimReward(address, bondReward) {
|
|
157
166
|
return Promise.reject(new TransactionError(BasicTxErrorType.UNSUPPORTED));
|
|
158
167
|
}
|
|
168
|
+
async handleChangeEarningValidator(_data) {
|
|
169
|
+
return Promise.reject(new TransactionError(BasicTxErrorType.UNSUPPORTED));
|
|
170
|
+
}
|
|
159
171
|
|
|
160
172
|
/* Other actions */
|
|
161
173
|
}
|
|
@@ -3,7 +3,7 @@ import { TransactionError } from '@subwallet/extension-base/background/errors/Tr
|
|
|
3
3
|
import { ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
|
|
4
4
|
import KoniState from '@subwallet/extension-base/koni/background/handlers/State';
|
|
5
5
|
import BaseParaStakingPoolHandler from '@subwallet/extension-base/services/earning-service/handlers/native-staking/base-para';
|
|
6
|
-
import { BaseYieldPositionInfo, OptimalYieldPath, RequestEarningSlippage, StakeCancelWithdrawalParams, SubmitJoinNativeStaking, TransactionData, UnstakingInfo, ValidatorInfo, YieldPoolInfo, YieldPoolMethodInfo, YieldPoolType, YieldPositionInfo, YieldTokenBaseInfo } from '@subwallet/extension-base/types';
|
|
6
|
+
import { BaseYieldPositionInfo, OptimalYieldPath, RequestEarningSlippage, StakeCancelWithdrawalParams, SubmitBittensorChangeValidatorStaking, SubmitJoinNativeStaking, TransactionData, UnstakingInfo, ValidatorInfo, YieldPoolInfo, YieldPoolMethodInfo, YieldPoolType, YieldPositionInfo, YieldTokenBaseInfo } from '@subwallet/extension-base/types';
|
|
7
7
|
import BigN from 'bignumber.js';
|
|
8
8
|
export interface SubnetData {
|
|
9
9
|
netuid: number;
|
|
@@ -40,7 +40,7 @@ export interface EarningSlippageResult {
|
|
|
40
40
|
slippage: number;
|
|
41
41
|
rate: number;
|
|
42
42
|
}
|
|
43
|
-
export declare const DEFAULT_DTAO_MINBOND = "
|
|
43
|
+
export declare const DEFAULT_DTAO_MINBOND = "21000000";
|
|
44
44
|
export default class SubnetTaoStakingPoolHandler extends BaseParaStakingPoolHandler {
|
|
45
45
|
handleYieldWithdraw(address: string, unstakingInfo: UnstakingInfo): Promise<TransactionData>;
|
|
46
46
|
handleYieldCancelUnstake(params: StakeCancelWithdrawalParams): Promise<TransactionData>;
|
|
@@ -61,12 +61,14 @@ 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
|
-
getPoolTargets(): Promise<ValidatorInfo[]>;
|
|
67
|
+
getPoolTargets(netuid: number): Promise<ValidatorInfo[]>;
|
|
67
68
|
createJoinExtrinsic(data: SubmitJoinNativeStaking, positionInfo?: YieldPositionInfo, bondDest?: string): Promise<[TransactionData, YieldTokenBaseInfo]>;
|
|
68
69
|
validateYieldJoin(data: SubmitJoinNativeStaking, path: OptimalYieldPath): Promise<TransactionError[]>;
|
|
69
70
|
handleYieldUnstake(amount: string, address: string, selectedTarget?: string, netuid?: number, slippage?: number): Promise<[ExtrinsicType, TransactionData]>;
|
|
70
71
|
validateYieldLeave(amount: string, address: string, fastLeave: boolean, selectedTarget?: string, slug?: string, poolInfo?: YieldPoolInfo): Promise<TransactionError[]>;
|
|
72
|
+
handleChangeEarningValidator(data: SubmitBittensorChangeValidatorStaking): Promise<TransactionData>;
|
|
71
73
|
}
|
|
72
74
|
export {};
|
|
@@ -7,15 +7,14 @@ import { BITTENSOR_REFRESH_STAKE_APY, BITTENSOR_REFRESH_STAKE_INFO } from '@subw
|
|
|
7
7
|
import { getEarningStatusByNominations } from '@subwallet/extension-base/koni/api/staking/bonding/utils';
|
|
8
8
|
import { _getAssetDecimals, _getAssetSymbol } from '@subwallet/extension-base/services/chain-service/utils';
|
|
9
9
|
import BaseParaStakingPoolHandler from '@subwallet/extension-base/services/earning-service/handlers/native-staking/base-para';
|
|
10
|
-
import { BasicTxErrorType, EarningStatus, YieldPoolType } from '@subwallet/extension-base/types';
|
|
10
|
+
import { BasicTxErrorType, EarningStatus, StakingTxErrorType, YieldPoolType } from '@subwallet/extension-base/types';
|
|
11
11
|
import { formatNumber, reformatAddress } from '@subwallet/extension-base/utils';
|
|
12
12
|
import BigN from 'bignumber.js';
|
|
13
13
|
import { t } from 'i18next';
|
|
14
14
|
import { BN, BN_ZERO } from '@polkadot/util';
|
|
15
|
-
import { calculateReward } from "../../utils/index.js";
|
|
16
15
|
import { BittensorCache } from "./tao.js";
|
|
17
16
|
const DEFAULT_BITTENSOR_SLIPPAGE = 0.005;
|
|
18
|
-
export const DEFAULT_DTAO_MINBOND = '
|
|
17
|
+
export const DEFAULT_DTAO_MINBOND = '21000000';
|
|
19
18
|
const getAlphaToTaoMapping = async substrateApi => {
|
|
20
19
|
const allSubnets = (await substrateApi.api.call.subnetInfoRuntimeApi.getAllDynamicInfo()).toJSON();
|
|
21
20
|
if (!allSubnets || allSubnets.length === 0) {
|
|
@@ -62,7 +61,8 @@ export default class SubnetTaoStakingPoolHandler extends BaseParaStakingPoolHand
|
|
|
62
61
|
fastUnstake: false,
|
|
63
62
|
cancelUnstake: false,
|
|
64
63
|
withdraw: false,
|
|
65
|
-
claimReward: false
|
|
64
|
+
claimReward: false,
|
|
65
|
+
changeValidator: true
|
|
66
66
|
};
|
|
67
67
|
constructor(state, chain) {
|
|
68
68
|
super(state, chain);
|
|
@@ -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 */
|
|
@@ -388,32 +393,37 @@ export default class SubnetTaoStakingPoolHandler extends BaseParaStakingPoolHand
|
|
|
388
393
|
isCrowded: false
|
|
389
394
|
}));
|
|
390
395
|
}
|
|
391
|
-
async getMainnetPoolTargets() {
|
|
396
|
+
async getMainnetPoolTargets(netuid) {
|
|
392
397
|
const _topValidator = await this.bittensorCache.get();
|
|
393
398
|
const topValidator = _topValidator;
|
|
394
399
|
const bnMinBond = new BigN(DEFAULT_DTAO_MINBOND);
|
|
395
400
|
const validatorList = topValidator.data;
|
|
396
|
-
const
|
|
397
|
-
const
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
const
|
|
403
|
-
|
|
401
|
+
const aprResponse = await this.bittensorCache.fetchApr(netuid);
|
|
402
|
+
const aprMap = {};
|
|
403
|
+
aprResponse.data.forEach(item => {
|
|
404
|
+
aprMap[item.hotkey.ss58] = item.thirty_day_apy;
|
|
405
|
+
});
|
|
406
|
+
const results = await Promise.all(validatorList.map(validator => {
|
|
407
|
+
const address = validator.hotkey.ss58;
|
|
408
|
+
// With bittensor we use total weight, root weight and alpha staked insted of total stake, own stake and other stake
|
|
409
|
+
const bnTotalWeightStake = new BigN(validator.global_weighted_stake);
|
|
410
|
+
const bnRootWeightStake = new BigN(validator.weighted_root_stake);
|
|
411
|
+
const bnAlphaStake = new BigN(validator.global_alpha_stake_as_tao);
|
|
412
|
+
const nominatorCount = validator.global_nominators;
|
|
413
|
+
const commission = validator.take;
|
|
404
414
|
const roundedCommission = (parseFloat(commission) * 100).toFixed(0);
|
|
405
|
-
const apr =
|
|
406
|
-
const
|
|
407
|
-
const name =
|
|
415
|
+
const apr = aprMap[address];
|
|
416
|
+
const expectedReturn = apr ? new BigN(apr).multipliedBy(100).toFixed(2) : '0';
|
|
417
|
+
const name = validator.name || address;
|
|
408
418
|
return {
|
|
409
419
|
address: address,
|
|
410
|
-
totalStake:
|
|
411
|
-
ownStake:
|
|
412
|
-
otherStake:
|
|
420
|
+
totalStake: bnTotalWeightStake.toString(),
|
|
421
|
+
ownStake: bnRootWeightStake.toString(),
|
|
422
|
+
otherStake: bnAlphaStake.toString(),
|
|
413
423
|
minBond: bnMinBond.toString(),
|
|
414
424
|
nominatorCount: nominatorCount,
|
|
415
425
|
commission: roundedCommission,
|
|
416
|
-
expectedReturn:
|
|
426
|
+
expectedReturn: expectedReturn,
|
|
417
427
|
blocked: false,
|
|
418
428
|
isVerified: false,
|
|
419
429
|
chain: this.chain,
|
|
@@ -423,10 +433,10 @@ export default class SubnetTaoStakingPoolHandler extends BaseParaStakingPoolHand
|
|
|
423
433
|
}));
|
|
424
434
|
return results;
|
|
425
435
|
}
|
|
426
|
-
async getPoolTargets() {
|
|
436
|
+
async getPoolTargets(netuid) {
|
|
427
437
|
await this.init();
|
|
428
438
|
if (this.chain === 'bittensor') {
|
|
429
|
-
return this.getMainnetPoolTargets();
|
|
439
|
+
return this.getMainnetPoolTargets(netuid);
|
|
430
440
|
} else {
|
|
431
441
|
return this.getDevnetPoolTargets();
|
|
432
442
|
}
|
|
@@ -442,6 +452,9 @@ export default class SubnetTaoStakingPoolHandler extends BaseParaStakingPoolHand
|
|
|
442
452
|
selectedValidators: targetValidators,
|
|
443
453
|
subnetData
|
|
444
454
|
} = data;
|
|
455
|
+
if (!subnetData) {
|
|
456
|
+
throw new Error(BasicTxErrorType.INVALID_PARAMS);
|
|
457
|
+
}
|
|
445
458
|
const {
|
|
446
459
|
netuid,
|
|
447
460
|
slippage
|
|
@@ -451,6 +464,8 @@ export default class SubnetTaoStakingPoolHandler extends BaseParaStakingPoolHand
|
|
|
451
464
|
const alphaToTaoPrice = new BigN(await getAlphaToTaoRate(this.substrateApi, netuid));
|
|
452
465
|
const limitPrice = alphaToTaoPrice.multipliedBy(10 ** _getAssetDecimals(this.nativeToken)).multipliedBy(1 + (slippage || DEFAULT_BITTENSOR_SLIPPAGE));
|
|
453
466
|
const BNlimitPrice = new BigN(limitPrice.integerValue(BigN.ROUND_CEIL).toFixed());
|
|
467
|
+
|
|
468
|
+
// Bittensor only supports changing 1 validator at a time, not multiple
|
|
454
469
|
const selectedValidatorInfo = targetValidators[0];
|
|
455
470
|
const hotkey = selectedValidatorInfo.address;
|
|
456
471
|
const extrinsic = chainApi.api.tx.subtensorModule.addStakeLimit(hotkey, netuid, binaryAmount.toFixed(), BNlimitPrice.toFixed(), false);
|
|
@@ -459,6 +474,8 @@ export default class SubnetTaoStakingPoolHandler extends BaseParaStakingPoolHand
|
|
|
459
474
|
amount: '0'
|
|
460
475
|
}];
|
|
461
476
|
}
|
|
477
|
+
|
|
478
|
+
// Validate for case stake more
|
|
462
479
|
async validateYieldJoin(data, path) {
|
|
463
480
|
const baseErrors = await super.validateYieldJoin(data, path);
|
|
464
481
|
if (baseErrors.length > 0) {
|
|
@@ -510,4 +527,45 @@ export default class SubnetTaoStakingPoolHandler extends BaseParaStakingPoolHand
|
|
|
510
527
|
}
|
|
511
528
|
|
|
512
529
|
/* Leave pool action */
|
|
530
|
+
|
|
531
|
+
/* Change validator */
|
|
532
|
+
async handleChangeEarningValidator(data) {
|
|
533
|
+
const chainApi = await this.substrateApi.isReady;
|
|
534
|
+
const {
|
|
535
|
+
amount,
|
|
536
|
+
maxAmount,
|
|
537
|
+
metadata,
|
|
538
|
+
originValidator,
|
|
539
|
+
selectedValidators: targetValidators,
|
|
540
|
+
subnetData
|
|
541
|
+
} = data;
|
|
542
|
+
if (!subnetData || !originValidator) {
|
|
543
|
+
return Promise.reject(new TransactionError(BasicTxErrorType.INVALID_PARAMS));
|
|
544
|
+
}
|
|
545
|
+
const {
|
|
546
|
+
netuid
|
|
547
|
+
} = subnetData;
|
|
548
|
+
const selectedValidatorInfo = targetValidators[0];
|
|
549
|
+
const destValidator = selectedValidatorInfo.address;
|
|
550
|
+
if (new BigN(amount).lte(0)) {
|
|
551
|
+
return Promise.reject(new TransactionError(BasicTxErrorType.INVALID_PARAMS, t('Amount must be greater than 0')));
|
|
552
|
+
}
|
|
553
|
+
if (originValidator === destValidator) {
|
|
554
|
+
return Promise.reject(new TransactionError(BasicTxErrorType.INVALID_PARAMS, 'From validator is the same with to validator'));
|
|
555
|
+
}
|
|
556
|
+
const alphaToTaoPrice = new BigN(await getAlphaToTaoRate(this.substrateApi, netuid || 0));
|
|
557
|
+
const minUnstake = new BigN(DEFAULT_DTAO_MINBOND).dividedBy(alphaToTaoPrice);
|
|
558
|
+
const formattedMinUnstake = minUnstake.dividedBy(1000000).integerValue(BigN.ROUND_CEIL).dividedBy(1000);
|
|
559
|
+
const bnMinUnstake = formattedMinUnstake.multipliedBy(10 ** _getAssetDecimals(this.nativeToken));
|
|
560
|
+
if (new BigN(maxAmount).lt(bnMinUnstake)) {
|
|
561
|
+
return Promise.reject(new TransactionError(BasicTxErrorType.INVALID_PARAMS, t(`Amount too low. You need to move at least ${formattedMinUnstake.toString()} ${(metadata === null || metadata === void 0 ? void 0 : metadata.subnetSymbol) || ''}`)));
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
// Avoid remaining amount too low -> can't do anything with that amount
|
|
565
|
+
if (!(maxAmount === amount) && new BigN(maxAmount).minus(new BigN(amount)).lt(bnMinUnstake)) {
|
|
566
|
+
return Promise.reject(new TransactionError(StakingTxErrorType.REMAINING_AMOUNT_TOO_LOW, t(`Your remaining stake on the initial validator will fall below minimum active stake and cannot be unstaked if you proceed with the chosen amount. Hit "Move all" to move all ${formatNumber(maxAmount, _getAssetDecimals(this.nativeToken))} ${(metadata === null || metadata === void 0 ? void 0 : metadata.subnetSymbol) || ''} to the new validator, or "Cancel" and lower the amount, then try again`)));
|
|
567
|
+
}
|
|
568
|
+
const extrinsic = chainApi.api.tx.subtensorModule.moveStake(originValidator, destValidator, netuid, netuid, amount);
|
|
569
|
+
return extrinsic;
|
|
570
|
+
}
|
|
513
571
|
}
|
|
@@ -11,8 +11,9 @@ interface PalletCollatorStakingUserStakeInfo {
|
|
|
11
11
|
maybeLastRewardSession: string;
|
|
12
12
|
}
|
|
13
13
|
export default class MythosNativeStakingPoolHandler extends BaseParaStakingPoolHandler {
|
|
14
|
-
|
|
14
|
+
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;
|
|
@@ -30,7 +30,8 @@ export default class MythosNativeStakingPoolHandler extends BaseParaStakingPoolH
|
|
|
30
30
|
fastUnstake: false,
|
|
31
31
|
cancelUnstake: false,
|
|
32
32
|
withdraw: true,
|
|
33
|
-
claimReward: true
|
|
33
|
+
claimReward: true,
|
|
34
|
+
changeValidator: false
|
|
34
35
|
};
|
|
35
36
|
|
|
36
37
|
/* Subscribe pool info */
|
|
@@ -119,6 +120,34 @@ export default class MythosNativeStakingPoolHandler extends BaseParaStakingPoolH
|
|
|
119
120
|
|
|
120
121
|
/* Subscribe pool position */
|
|
121
122
|
|
|
123
|
+
async checkAccountHaveStake(useAddresses) {
|
|
124
|
+
var _substrateApi$api$que, _substrateApi$api$que2, _substrateApi$api$que3;
|
|
125
|
+
const result = [];
|
|
126
|
+
const substrateApi = await this.substrateApi.isReady;
|
|
127
|
+
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));
|
|
128
|
+
const _unstakings = await Promise.all(useAddresses.map(stakerAddress => {
|
|
129
|
+
var _substrateApi$api$que4, _substrateApi$api$que5;
|
|
130
|
+
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);
|
|
131
|
+
}));
|
|
132
|
+
if (!ledgers || !_unstakings) {
|
|
133
|
+
return [];
|
|
134
|
+
}
|
|
135
|
+
for (let i = 0; i < useAddresses.length; i++) {
|
|
136
|
+
const owner = useAddresses[i];
|
|
137
|
+
const _userStake = ledgers[i];
|
|
138
|
+
const userStake = _userStake.toPrimitive();
|
|
139
|
+
const _unstaking = _unstakings[i];
|
|
140
|
+
const unstakings = _unstaking.toPrimitive();
|
|
141
|
+
|
|
142
|
+
// TODO: Need to improve, check if can only load stake info
|
|
143
|
+
if (userStake && userStake.stake !== '0') {
|
|
144
|
+
result.push(owner);
|
|
145
|
+
} else if (unstakings && unstakings.some(unstake => unstake.amount !== '0')) {
|
|
146
|
+
result.push(owner);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return result;
|
|
150
|
+
}
|
|
122
151
|
async subscribePoolPosition(useAddresses, resultCallback) {
|
|
123
152
|
let cancel = false;
|
|
124
153
|
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
|
|
|
@@ -2,16 +2,20 @@
|
|
|
2
2
|
import { _ChainInfo } from '@subwallet/chain-list/types';
|
|
3
3
|
import { TransactionError } from '@subwallet/extension-base/background/errors/TransactionError';
|
|
4
4
|
import { ExtrinsicType, NominationInfo, UnstakingInfo } from '@subwallet/extension-base/background/KoniTypes';
|
|
5
|
+
import KoniState from '@subwallet/extension-base/koni/background/handlers/State';
|
|
5
6
|
import { _SubstrateApi } from '@subwallet/extension-base/services/chain-service/types';
|
|
6
|
-
import { BaseYieldPositionInfo, OptimalYieldPath, PalletStakingNominations, PalletStakingStakingLedger, StakeCancelWithdrawalParams, SubmitJoinNativeStaking, SubmitYieldJoinData, TransactionData, ValidatorInfo, YieldPoolInfo, YieldPositionInfo, YieldTokenBaseInfo } from '@subwallet/extension-base/types';
|
|
7
|
+
import { BaseYieldPositionInfo, OptimalYieldPath, PalletStakingNominations, PalletStakingStakingLedger, StakeCancelWithdrawalParams, SubmitChangeValidatorStaking, SubmitJoinNativeStaking, SubmitYieldJoinData, TransactionData, ValidatorInfo, YieldPoolInfo, YieldPoolMethodInfo, YieldPositionInfo, YieldTokenBaseInfo } from '@subwallet/extension-base/types';
|
|
7
8
|
import { DeriveSessionProgress } from '@polkadot/api-derive/types';
|
|
8
9
|
import { BN } from '@polkadot/util';
|
|
9
10
|
import BaseNativeStakingPoolHandler from './base';
|
|
10
11
|
export default class RelayNativeStakingPoolHandler extends BaseNativeStakingPoolHandler {
|
|
12
|
+
availableMethod: YieldPoolMethodInfo;
|
|
13
|
+
constructor(state: KoniState, chain: string);
|
|
11
14
|
subscribePoolInfo(callback: (data: YieldPoolInfo) => void): Promise<VoidFunction>;
|
|
12
15
|
parseNominatorMetadata(chainInfo: _ChainInfo, address: string, substrateApi: _SubstrateApi, ledger: PalletStakingStakingLedger, currentEra: string, minStake: BN, _deriveSessionProgress: DeriveSessionProgress): Promise<Omit<YieldPositionInfo, keyof BaseYieldPositionInfo>>;
|
|
13
16
|
handleNominationsList(substrateApi: _SubstrateApi, chain: string, nominations: PalletStakingNominations, currentEra: string, address: string, maxNominatorRewardedPerValidator: number | undefined): Promise<NominationInfo[]>;
|
|
14
17
|
subscribePoolPosition(useAddresses: string[], resultCallback: (rs: YieldPositionInfo) => void): Promise<VoidFunction>;
|
|
18
|
+
checkAccountHaveStake(useAddresses: string[]): Promise<string[]>;
|
|
15
19
|
getPoolTargets(): Promise<ValidatorInfo[]>;
|
|
16
20
|
private getValidatorExpectedReturn;
|
|
17
21
|
private parseEraStakerData;
|
|
@@ -21,4 +25,5 @@ export default class RelayNativeStakingPoolHandler extends BaseNativeStakingPool
|
|
|
21
25
|
handleYieldUnstake(amount: string, address: string, selectedTarget?: string): Promise<[ExtrinsicType, TransactionData]>;
|
|
22
26
|
handleYieldCancelUnstake(params: StakeCancelWithdrawalParams): Promise<TransactionData>;
|
|
23
27
|
handleYieldWithdraw(address: string, unstakingInfo: UnstakingInfo): Promise<TransactionData>;
|
|
28
|
+
handleChangeEarningValidator(data: SubmitChangeValidatorStaking): Promise<TransactionData>;
|
|
24
29
|
}
|