@@ -6,18 +6,17 @@ import { ChainType, ExtrinsicType } from '@subwallet/extension-base/background/K
6
6
import { CRON_REFRESH_CHAIN_STAKING_METADATA , CRON_REFRESH_EARNING_REWARD_HISTORY_INTERVAL , CRON_REFRESH_STAKING_REWARD_FAST_INTERVAL } from '@subwallet/extension-base/constants' ;
7
7
import KoniState from '@subwallet/extension-base/koni/background/handlers/State' ;
8
8
import { PersistDataServiceInterface , ServiceStatus , StoppableServiceInterface } from '@subwallet/extension-base/services/base/types' ;
9
- import { _isChainEnabled , _isChainEvmCompatible } from '@subwallet/extension-base/services/chain-service/utils' ;
9
+ import { _isChainEnabled , _isChainEvmCompatible , _getChainSubstrateTokenSymbol } from '@subwallet/extension-base/services/chain-service/utils' ;
10
10
import { _STAKING_CHAIN_GROUP } from '@subwallet/extension-base/services/earning-service/constants' ;
11
11
import BaseLiquidStakingPoolHandler from '@subwallet/extension-base/services/earning-service/handlers/liquid-staking/base' ;
12
12
import MythosNativeStakingPoolHandler from '@subwallet/extension-base/services/earning-service/handlers/native-staking/mythos' ;
13
13
import { EventService } from '@subwallet/extension-base/services/event-service' ;
14
14
import DatabaseService from '@subwallet/extension-base/services/storage-service/DatabaseService' ;
15
15
import { SWTransactionBase } from '@subwallet/extension-base/services/transaction-service/types' ;
16
16
import { BasicTxErrorType , EarningRewardHistoryItem , EarningRewardItem , EarningRewardJson , HandleYieldStepData , HandleYieldStepParams , OptimalYieldPath , OptimalYieldPathParams , RequestEarlyValidateYield , RequestEarningSlippage , RequestStakeCancelWithdrawal , RequestStakeClaimReward , RequestYieldLeave , RequestYieldWithdrawal , ResponseEarlyValidateYield , TransactionData , ValidateYieldProcessParams , YieldPoolInfo , YieldPoolTarget , YieldPoolType , YieldPositionInfo } from '@subwallet/extension-base/types' ;
17
- import { addLazy , createPromiseHandler , getAddressesByChainType , PromiseHandler , removeLazy } from '@subwallet/extension-base/utils' ;
17
+ import { addLazy , createPromiseHandler , fetchStaticData , getAddressesByChainType , PromiseHandler , removeLazy } from '@subwallet/extension-base/utils' ;
18
18
import { fetchStaticCache } from '@subwallet/extension-base/utils/fetchStaticCache' ;
19
19
import { BehaviorSubject } from 'rxjs' ;
20
-
21
20
import { EarningSlippageResult } from './handlers/native-staking/dtao' ;
22
21
import { AcalaLiquidStakingPoolHandler , AmplitudeNativeStakingPoolHandler , AstarNativeStakingPoolHandler , BasePoolHandler , BifrostLiquidStakingPoolHandler , BifrostMantaLiquidStakingPoolHandler , InterlayLendingPoolHandler , NominationPoolHandler , ParallelLiquidStakingPoolHandler , ParaNativeStakingPoolHandler , RelayNativeStakingPoolHandler , StellaSwapLiquidStakingPoolHandler , SubnetTaoStakingPoolHandler , TaoNativeStakingPoolHandler } from './handlers' ;
23
22
@@ -27,10 +26,15 @@ const fetchPoolsData = async () => {
27
26
return fetchData . data ;
28
27
} ;
29
28
29
+ const fetchAhMapChain = async ( ) => {
30
+ return await fetchStaticData < Record < string , string > > ( 'asset-hub-staking-map' ) ;
31
+ } ;
32
+
30
33
export default class EarningService implements StoppableServiceInterface , PersistDataServiceInterface {
31
34
protected readonly state : KoniState ;
32
35
protected handlers : Record < string , BasePoolHandler > = { } ;
33
36
private handlerCache : Map < string , BasePoolHandler | undefined > = new Map ( ) ;
37
+ private inactivePoolSlug : Set < string > = new Set < string > ( ) ;
34
38
35
39
private earningRewardSubject : BehaviorSubject < EarningRewardJson > = new BehaviorSubject < EarningRewardJson > ( { ready : false , data : { } } ) ;
36
40
private earningRewardHistorySubject : BehaviorSubject < Record < string , EarningRewardHistoryItem > > = new BehaviorSubject < Record < string , EarningRewardHistoryItem > > ( { } ) ;
@@ -44,6 +48,7 @@ export default class EarningService implements StoppableServiceInterface, Persis
44
48
private dbService : DatabaseService ;
45
49
private eventService : EventService ;
46
50
private useOnlineCacheOnly = true ;
51
+ private inactivePoolReady : PromiseHandler < void > = createPromiseHandler ( ) ;
47
52
48
53
constructor ( state : KoniState ) {
49
54
this . state = state ;
@@ -66,12 +71,25 @@ export default class EarningService implements StoppableServiceInterface, Persis
66
71
}
67
72
68
73
const minAmountPercent : Record < string , number > = { } ;
74
+ const ahMapChain = await fetchAhMapChain ( ) ;
69
75
70
76
for ( const chain of chains ) {
71
77
const handlers : BasePoolHandler [ ] = [ ] ;
78
+ const chainInfo = this . state . getChainInfo ( chain ) ;
79
+ const symbol = _getChainSubstrateTokenSymbol ( chainInfo ) ;
72
80
73
81
if ( _STAKING_CHAIN_GROUP . relay . includes ( chain ) ) {
74
- handlers . push ( new RelayNativeStakingPoolHandler ( this . state , chain ) ) ;
82
+ const ahChain = ahMapChain [ chain ] ;
83
+
84
+ if ( ahChain ) {
85
+ handlers . push ( new RelayNativeStakingPoolHandler ( this . state , ahChain ) ) ;
86
+
87
+ const relaySlug = RelayNativeStakingPoolHandler . generateSlug ( symbol , chain ) ;
88
+
89
+ this . inactivePoolSlug . add ( relaySlug ) ;
90
+ } else {
91
+ handlers . push ( new RelayNativeStakingPoolHandler ( this . state , chain ) ) ;
92
+ }
75
93
}
76
94
77
95
if ( _STAKING_CHAIN_GROUP . para . includes ( chain ) ) {
@@ -98,7 +116,17 @@ export default class EarningService implements StoppableServiceInterface, Persis
98
116
}
99
117
100
118
if ( _STAKING_CHAIN_GROUP . nominationPool . includes ( chain ) ) {
101
- handlers . push ( new NominationPoolHandler ( this . state , chain ) ) ;
119
+ const ahChain = ahMapChain [ chain ] ;
120
+
121
+ if ( ahChain ) {
122
+ handlers . push ( new NominationPoolHandler ( this . state , ahChain ) ) ;
123
+
124
+ const relaySlug = NominationPoolHandler . generateSlug ( symbol , chain ) ;
125
+
126
+ this . inactivePoolSlug . add ( relaySlug ) ;
127
+ } else {
128
+ handlers . push ( new NominationPoolHandler ( this . state , chain ) ) ;
129
+ }
102
130
}
103
131
104
132
if ( _STAKING_CHAIN_GROUP . liquidStaking . includes ( chain ) ) {
@@ -140,6 +168,7 @@ export default class EarningService implements StoppableServiceInterface, Persis
140
168
minAmountPercent . default = BaseLiquidStakingPoolHandler . defaultMinAmountPercent ;
141
169
142
170
this . minAmountPercentSubject . next ( minAmountPercent ) ;
171
+ this . inactivePoolReady . resolve ( ) ;
143
172
144
173
// Emit earning ready
145
174
this . eventService . emit ( 'earning.ready' , true ) ;
@@ -162,7 +191,7 @@ export default class EarningService implements StoppableServiceInterface, Persis
162
191
next : ( data ) => {
163
192
const activeMap = this . state . getActiveChainInfoMap ( ) ;
164
193
const activePositions = Object . values ( data ) . filter ( ( item ) => {
165
- return ! ! activeMap [ item . chain ] ;
194
+ return ! ! activeMap [ item . chain ] && ! this . inactivePoolSlug . has ( item . slug ) ;
166
195
} ) ;
167
196
168
197
this . yieldPositionListSubject . next ( Object . values ( activePositions ) ) ;
@@ -401,7 +430,9 @@ export default class EarningService implements StoppableServiceInterface, Persis
401
430
const existedYieldPoolInfo = await this . dbService . getYieldPools ( ) ;
402
431
403
432
existedYieldPoolInfo . forEach ( ( info ) => {
404
- yieldPoolInfo [ info . slug ] = info ;
433
+ if ( ! this . inactivePoolSlug . has ( info . slug ) ) {
434
+ yieldPoolInfo [ info . slug ] = info ;
435
+ }
405
436
} ) ;
406
437
407
438
this . yieldPoolInfoSubject . next ( yieldPoolInfo ) ;
@@ -447,6 +478,12 @@ export default class EarningService implements StoppableServiceInterface, Persis
447
478
private async fetchingPoolsInfoOnline ( ) {
448
479
const onlineData = await fetchPoolsData ( ) ;
449
480
481
+ await this . inactivePoolReady . promise ;
482
+
483
+ for ( const inactiveSlug of this . inactivePoolSlug ) {
484
+ delete onlineData [ inactiveSlug ] ;
485
+ }
486
+
450
487
Object . values ( onlineData ) . forEach ( ( item ) => {
451
488
this . updateYieldPoolInfo ( item ) ;
452
489
} ) ;
@@ -566,7 +603,9 @@ export default class EarningService implements StoppableServiceInterface, Persis
566
603
const yieldPositionInfo = this . yieldPositionSubject . getValue ( ) ;
567
604
568
605
existedYieldPosition . forEach ( ( item ) => {
569
- yieldPositionInfo [ this . _getYieldPositionKey ( item . slug , item . address ) ] = item ;
606
+ if ( ! this . inactivePoolSlug . has ( item . slug ) ) {
607
+ yieldPositionInfo [ this . _getYieldPositionKey ( item . slug , item . address ) ] = item ;
608
+ }
570
609
} ) ;
571
610
572
611
this . yieldPositionSubject . next ( yieldPositionInfo ) ;
0 commit comments