Skip to content

Commit b1a90c6

Browse files
authored
Merge pull request #323 from Gearbox-protocol/pool-rewards
feat: pool rewards
2 parents 520fce5 + 2629031 commit b1a90c6

File tree

2 files changed

+33
-99
lines changed

2 files changed

+33
-99
lines changed

src/core/endpoint.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,10 @@ export class GearboxBackendApi {
107107
URLApi.getRelativeUrl("https://apy-server.fly.dev/api/rewards/gear-apy", {
108108
params: { chain_id: chainId },
109109
});
110+
static apyServerAllPoolRewards = (chainId: number) =>
111+
URLApi.getRelativeUrl("https://apy-server.fly.dev/api/rewards/pools/all", {
112+
params: { chain_id: chainId },
113+
});
110114
}
111115

112116
interface Options {

src/gearboxRewards/extraAPY.ts

Lines changed: 29 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,35 @@
11
import {
22
CHAINS,
33
NetworkType,
4-
PartialRecord,
54
PERCENTAGE_FACTOR,
6-
SupportedToken,
7-
TypedObjectUtils,
85
} from "@gearbox-protocol/sdk-gov";
96
import axios from "axios";
107
import { Address } from "viem";
118

12-
import { poolByNetwork } from "../contracts/contractsRegister";
139
import { Asset } from "../core/assets";
1410
import { GearboxBackendApi } from "../core/endpoint";
1511
import { PoolData } from "../core/pool";
1612
import { TokenData } from "../tokens/tokenData";
1713
import { toBN } from "../utils/formatter";
1814
import { 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+
2027
export 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

2835
interface WalletResult {
@@ -35,101 +42,26 @@ interface GetBalanceAtResponse {
3542
}
3643

3744
export 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-
11351
export 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

Comments
 (0)