Skip to content

Commit f85f160

Browse files
committed
fix: update pool rewards loading
1 parent 4759734 commit f85f160

File tree

1 file changed

+84
-51
lines changed
  • src/sdk/sdk-legacy/gearboxRewards

1 file changed

+84
-51
lines changed

src/sdk/sdk-legacy/gearboxRewards/api.ts

Lines changed: 84 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,12 @@ export interface FarmInfo {
8989
symbol: SupportedToken;
9090
}
9191

92-
type PoolsWithExtraRewardsList = Record<NetworkType, Array<SupportedToken>>;
92+
type PoolsWithExtraRewardsList = Record<NetworkType, Array<Address>>;
9393

9494
const DEFAULT_POOLS_WITH_EXTRA_REWARDS: PoolsWithExtraRewardsList = {
95-
Mainnet: ["dtBTCV3"],
95+
Mainnet: [
96+
"0x7354EC6E852108411e681D13E11185c3a2567981", // dtBTCV3
97+
],
9698
Arbitrum: [],
9799
Optimism: [],
98100
Base: [],
@@ -102,7 +104,6 @@ type ReportHandler = (e: unknown, description?: string) => void;
102104

103105
export interface GetLmRewardsInfoProps {
104106
pools: Record<Address, PoolData_Legacy>;
105-
currentTokenData: Record<SupportedToken, Address>;
106107
tokensList: Record<Address, TokenData>;
107108
provider: PublicClient;
108109

@@ -143,7 +144,6 @@ export interface ClaimLmRewardsV3Props {
143144
export class GearboxRewardsApi {
144145
static async getLmRewardsInfo({
145146
pools,
146-
currentTokenData,
147147
provider,
148148
multicallAddress,
149149
tokensList,
@@ -152,7 +152,7 @@ export class GearboxRewardsApi {
152152
network,
153153
reportError,
154154
}: GetLmRewardsInfoProps) {
155-
const poolByStakedToken = Object.values(pools).reduce<
155+
const poolByStakedDiesel = Object.values(pools).reduce<
156156
Record<Address, Address>
157157
>((acc, p) => {
158158
p.stakedDieselToken.forEach(t => {
@@ -165,36 +165,48 @@ export class GearboxRewardsApi {
165165
return acc;
166166
}, {});
167167

168-
const poolTokens = TypedObjectUtils.keys(poolByStakedToken);
168+
const poolByDiesel = Object.values(pools).reduce<Record<Address, Address>>(
169+
(acc, p) => {
170+
acc[p.dieselToken] = p.address;
171+
172+
return acc;
173+
},
174+
{},
175+
);
176+
177+
const poolByItsToken = { ...poolByStakedDiesel, ...poolByDiesel };
178+
179+
const poolStakedTokens = TypedObjectUtils.keys(poolByStakedDiesel);
180+
const allPoolTokens = TypedObjectUtils.keys(poolByItsToken);
169181

170-
const chain = chains[network];
182+
const chainId = chains[network].id;
171183
const poolTokensWithExtraReward = (
172184
poolsWithExtraRewards[network] || []
173-
).filter(symbol => {
174-
const addr = currentTokenData[symbol];
185+
).filter(p => {
186+
const token = tokensList[p.toLowerCase() as Address];
175187

176-
if (!addr) {
177-
console.error(`Pool staked token not found ${symbol}`);
188+
if (!token) {
189+
console.error(`Pool token not found ${p}`);
178190
return false;
179191
}
180192
return true;
181193
});
182194

183-
const farmInfoCalls = poolTokens.map(address => ({
195+
const farmInfoCalls = poolStakedTokens.map(address => ({
184196
address,
185197
abi: iFarmingPoolAbi,
186198
functionName: "farmInfo",
187199
args: [],
188200
}));
189201

190-
const farmSupplyCalls = poolTokens.map(address => ({
202+
const farmSupplyCalls = allPoolTokens.map(address => ({
191203
address,
192204
abi: iFarmingPoolAbi,
193205
functionName: "totalSupply",
194206
args: [],
195207
}));
196208

197-
const rewardTokenCalls = poolTokens.map(address => ({
209+
const rewardTokenCalls = poolStakedTokens.map(address => ({
198210
address,
199211
abi: POOL_REWARDS_ABI,
200212
functionName: "rewardsToken",
@@ -219,14 +231,12 @@ export class GearboxRewardsApi {
219231
],
220232
}),
221233

222-
...poolTokensWithExtraReward.map(symbol => {
223-
const addr = currentTokenData[symbol];
224-
234+
...poolTokensWithExtraReward.map(t => {
225235
return axios.get<MerkleXYZRewardsCampaignsResponse>(
226236
MerkleXYZApi.getRewardsCampaignsUrl({
227237
params: {
228-
chainId: chain.id,
229-
mainParameter: getAddress(addr),
238+
chainId,
239+
mainParameter: getAddress(t),
230240
},
231241
}),
232242
);
@@ -256,14 +266,38 @@ export class GearboxRewardsApi {
256266
rewardTokenCallsEnd,
257267
) as Array<Address>;
258268

269+
const infoByPool = poolStakedTokens.reduce<Record<Address, FarmInfoOutput>>(
270+
(acc, p, index) => {
271+
const info = farmInfo[index];
272+
273+
if (info) acc[p] = info;
274+
275+
return acc;
276+
},
277+
{},
278+
);
279+
280+
const rewardTokenPool = poolStakedTokens.reduce<Record<Address, Address>>(
281+
(acc, p, index) => {
282+
const token = rewardTokens[index];
283+
284+
if (token) {
285+
acc[p] = token.toLowerCase() as Address;
286+
}
287+
288+
return acc;
289+
},
290+
{},
291+
);
292+
259293
const extraRewards = extra.reduce<Record<string, Array<FarmInfo>>>(
260294
(acc, r, index) => {
261-
const stakedSymbol = poolTokensWithExtraReward[index];
295+
const p = poolTokensWithExtraReward[index].toLowerCase() as Address;
262296

263297
const safeResp = this.extractFulfilled(
264298
r,
265299
reportError,
266-
`merkleCampaign: ${stakedSymbol}`,
300+
`merkleCampaign: ${p}`,
267301
);
268302

269303
const l = safeResp?.data.reduce<Array<FarmInfo>>((infos, d) => {
@@ -282,7 +316,7 @@ export class GearboxRewardsApi {
282316

283317
if (rewardTokenData && reward > 0) {
284318
infos.push({
285-
pool: poolByStakedToken[currentTokenData[stakedSymbol]],
319+
pool: poolByItsToken[p],
286320
duration: toBigInt(d.endTimestamp - d.startTimestamp),
287321
finished,
288322
reward,
@@ -296,49 +330,48 @@ export class GearboxRewardsApi {
296330
}, []);
297331

298332
if (l) {
299-
acc[currentTokenData[stakedSymbol]] = l;
333+
acc[p] = l;
300334
}
301335

302336
return acc;
303337
},
304338
{},
305339
);
306340

307-
const rewardPoolsInfo = poolTokens.reduce<{
341+
const stakedTokenRewards = allPoolTokens.reduce<{
308342
base: Record<string, FarmInfo>;
309343
extra: Record<string, Array<FarmInfo>>;
310344
all: Record<string, Array<FarmInfo>>;
311345
}>(
312-
(acc, address, i) => {
313-
const currentInfo = farmInfo[i];
314-
const poolBaseRewardTokenLc = (
315-
rewardTokens[i] || ""
316-
).toLowerCase() as Address;
317-
const tokenData = tokensList[poolBaseRewardTokenLc];
318-
319-
if (tokenData) {
320-
const baseReward: FarmInfo = {
321-
pool: poolByStakedToken[address],
322-
duration: BigInt(currentInfo.duration),
323-
finished: BigInt(currentInfo.finished),
324-
reward: currentInfo.reward,
325-
balance: currentInfo.balance,
326-
symbol: tokenData.symbol,
327-
};
328-
329-
const extra = extraRewards[address] || [];
330-
331-
acc.base[address] = baseReward;
332-
acc.extra[address] = extra;
333-
acc.all[address] = [baseReward, ...extra];
334-
}
346+
(acc, pool) => {
347+
const info = infoByPool[pool];
348+
const token = rewardTokenPool[pool];
349+
const tokenData = tokensList[token];
350+
351+
const baseReward: FarmInfo | undefined =
352+
info && tokenData
353+
? {
354+
pool: poolByItsToken[pool],
355+
duration: BigInt(info.duration),
356+
finished: BigInt(info.finished),
357+
reward: info.reward,
358+
balance: info.balance,
359+
symbol: tokenData.symbol,
360+
}
361+
: undefined;
362+
363+
const extra = extraRewards[pool] || [];
364+
365+
if (baseReward) acc.base[pool] = baseReward;
366+
acc.extra[pool] = extra;
367+
acc.all[pool] = [...(baseReward ? [baseReward] : []), ...extra];
335368

336369
return acc;
337370
},
338371
{ base: {}, extra: {}, all: {} },
339372
);
340373

341-
const rewardPoolsSupply = poolTokens.reduce<Record<string, bigint>>(
374+
const rewardPoolsSupply = allPoolTokens.reduce<Record<string, bigint>>(
342375
(acc, address, i) => {
343376
acc[address] = farmSupply[i] || 0n;
344377

@@ -348,9 +381,9 @@ export class GearboxRewardsApi {
348381
);
349382

350383
return {
351-
rewardPoolsInfo: rewardPoolsInfo.all,
352-
baseRewardPoolsInfo: rewardPoolsInfo.base,
353-
extraRewardPoolsInfo: rewardPoolsInfo.extra,
384+
rewardPoolsInfo: stakedTokenRewards.all,
385+
baseRewardPoolsInfo: stakedTokenRewards.base,
386+
extraRewardPoolsInfo: stakedTokenRewards.extra,
354387
rewardPoolsSupply,
355388
};
356389
}

0 commit comments

Comments
 (0)