11import {
22 CHAINS ,
33 NetworkType ,
4- PartialRecord ,
54 PERCENTAGE_FACTOR ,
6- SupportedToken ,
7- TypedObjectUtils ,
85} from "@gearbox-protocol/sdk-gov" ;
96import axios from "axios" ;
107import { Address } from "viem" ;
118
12- import { poolByNetwork } from "../contracts/contractsRegister" ;
139import { Asset } from "../core/assets" ;
1410import { GearboxBackendApi } from "../core/endpoint" ;
1511import { PoolData } from "../core/pool" ;
1612import { TokenData } from "../tokens/tokenData" ;
1713import { toBN } from "../utils/formatter" ;
1814import { BigIntMath } from "../utils/math" ;
1915
16+ export interface PoolPointsInfo {
17+ pool : Address ;
18+ token : Address ;
19+ symbol : string ;
20+
21+ amount : bigint ;
22+ duration : string ;
23+ name : string ;
24+ estimation : "absolute" | "relative" ;
25+ }
26+
2027export interface GetPointsByPoolProps {
28+ poolRewards : Record < Address , Record < Address , PoolPointsInfo > > ;
29+
2130 totalTokenBalances : Record < Address , Asset > ;
2231 pools : Array < PoolData > ;
23- currentTokenData : Record < SupportedToken , Address > ;
2432 tokensList : Record < Address , TokenData > ;
25- network : NetworkType ;
2633}
2734
2835interface WalletResult {
@@ -35,101 +42,26 @@ interface GetBalanceAtResponse {
3542}
3643
3744export interface GetTotalTokensOnProtocolProps {
38- currentTokenData : Record < SupportedToken , Address > ;
45+ tokensToCheck : Array < Address > ;
46+
3947 tokensList : Record < Address , TokenData > ;
4048 network : NetworkType ;
41-
42- extraTokens ?: Array < SupportedToken > ;
43- }
44-
45- interface PoolPointsInfo {
46- amount : bigint ;
47- symbol : SupportedToken ;
48- duration : string ;
49- name : string ;
50- estimation : "absolute" | "relative" ;
5149}
5250
53- const POOL_POINTS : Record <
54- NetworkType ,
55- Record < Address , PartialRecord < SupportedToken , PoolPointsInfo > >
56- > = {
57- Mainnet : {
58- [ poolByNetwork . Mainnet . WETH_V3_TRADE ] : {
59- rsETH : {
60- amount : 7500n * 10000n ,
61- symbol : "rsETH" ,
62- duration : "hour" ,
63- name : "Kelp Mile" ,
64- estimation : "relative" ,
65- } ,
66- } ,
67- [ poolByNetwork . Mainnet . WBTC_V3_TRADE ] : {
68- LBTC : {
69- amount : 2000n * 10000n ,
70- symbol : "LBTC" ,
71- duration : "day" ,
72- name : "Lombard LUX" ,
73- estimation : "absolute" ,
74- } ,
75- pumpBTC : {
76- amount : 172_800n * 10000n ,
77- symbol : "pumpBTC" ,
78- duration : "day" ,
79- name : "Pump BTC" ,
80- estimation : "absolute" ,
81- } ,
82- } ,
83- } ,
84- Arbitrum : { } ,
85- Optimism : { } ,
86- Base : { } ,
87- } ;
88-
89- const TOKENS = TypedObjectUtils . entries ( POOL_POINTS ) . reduce <
90- Record < NetworkType , Array < SupportedToken > >
91- > ( ( acc , [ network , pools ] ) => {
92- const r = Object . values ( pools ) . reduce < Array < SupportedToken > > (
93- ( acc , tokens ) => {
94- const l = Object . keys ( tokens ) as Array < SupportedToken > ;
95- acc . push ( ...l ) ;
96- return acc ;
97- } ,
98- [ ] ,
99- ) ;
100-
101- acc [ network ] = r ;
102-
103- return acc ;
104- } , { } as Record < NetworkType , Array < SupportedToken > > ) ;
105-
106- const CA_REWARDS : Record < NetworkType , Array < SupportedToken > > = {
107- Mainnet : [ ] ,
108- Arbitrum : [ ] ,
109- Optimism : [ "ezETH" ] ,
110- Base : [ ] ,
111- } ;
112-
11351export class GearboxRewardsExtraApy {
11452 static async getTotalTokensOnProtocol ( {
115- currentTokenData,
53+ tokensToCheck,
54+
11655 tokensList,
11756 network,
118-
119- extraTokens = [ ] ,
12057 } : GetTotalTokensOnProtocolProps ) {
121- const poolTokens = TOKENS [ network ] ;
122- const caTokens = CA_REWARDS [ network ] ;
123-
124- const list = [ ...new Set ( [ ...poolTokens , ...caTokens , ...extraTokens ] ) ] ;
58+ const list = [ ...new Set ( tokensToCheck ) ] ;
12559
12660 const res = await Promise . allSettled (
127- list . map ( s =>
128- this . getTokenTotal ( currentTokenData [ s ] , network , tokensList ) ,
129- ) ,
61+ list . map ( t => this . getTokenTotal ( t , network , tokensList ) ) ,
13062 ) ;
13163
132- return res . map ( ( r , i ) : [ SupportedToken , PromiseSettledResult < Asset > ] => [
64+ return res . map ( ( r , i ) : [ Address , PromiseSettledResult < Asset > ] => [
13365 list [ i ] ,
13466 r ,
13567 ] ) ;
@@ -159,21 +91,19 @@ export class GearboxRewardsExtraApy {
15991 }
16092
16193 static getPointsByPool ( {
94+ poolRewards,
95+
16296 totalTokenBalances,
16397 pools,
16498 tokensList,
165- currentTokenData,
166- network,
16799 } : GetPointsByPoolProps ) {
168100 const r = pools . reduce < Record < Address , Array < Asset > > > ( ( acc , p ) => {
169- const poolPointsInfo = Object . values (
170- POOL_POINTS [ network ] ?. [ p . address ] || [ ] ,
171- ) ;
101+ const pointsInfo = Object . values ( poolRewards [ p . address ] || { } ) ;
172102
173- const poolPointsList = poolPointsInfo . reduce < Array < Asset > > (
103+ const poolPointsList = pointsInfo . reduce < Array < Asset > > (
174104 ( acc , pointsInfo ) => {
175- const tokenBalance =
176- totalTokenBalances [ currentTokenData [ pointsInfo . symbol ] || "" ] ;
105+ const { address : tokenAddress } = tokensList [ pointsInfo . token ] ;
106+ const tokenBalance = totalTokenBalances [ tokenAddress || "" ] ;
177107
178108 const points = this . getPoolTokenPoints (
179109 tokenBalance ,
@@ -227,11 +157,11 @@ export class GearboxRewardsExtraApy {
227157 }
228158
229159 static getPoolPointsTip (
230- network : NetworkType ,
160+ poolRewards : Record < Address , Record < Address , PoolPointsInfo > > ,
231161 pool : Address ,
232- token : SupportedToken ,
162+ token : Address ,
233163 ) {
234- const p = POOL_POINTS [ network ] ?. [ pool ] ?. [ token ] ;
164+ const p = poolRewards [ pool ] ?. [ token ] ;
235165 return p ;
236166 }
237167}
0 commit comments