@gearbox-protocol/sdk 3.0.0-next.168 → 3.0.0-next.169

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.
@@ -55,9 +55,6 @@ export type CurveAPYResult = PartialRecord<CurveAPYTokens, CurveAPY>;
55
55
  export declare function getCurveAPY(network: NetworkType): Promise<{
56
56
  curveAPY: CurveAPYResult;
57
57
  gearAPY: CurveAPY;
58
- } | {
59
- curveAPY?: undefined;
60
- gearAPY?: undefined;
61
58
  }>;
62
59
  export declare function getCurveGearPool(): Promise<CurvePoolData | undefined>;
63
60
  export {};
@@ -24,54 +24,48 @@ const getFactoryTriCryptoURL = (n) => `https://api.curve.fi/api/getPools/${CURVE
24
24
  const getFactoryCrvUsdURL = (n) => `https://api.curve.fi/api/getPools/${CURVE_CHAINS[n]}/factory-crvusd`;
25
25
  const getFactoryStableNgURL = (n) => `https://api.curve.fi/api/getPools/${CURVE_CHAINS[n]}/factory-stable-ng`;
26
26
  async function getCurveAPY(network) {
27
- try {
28
- const currentTokens = sdk_gov_1.tokenDataByNetwork[network];
29
- const { mainnetVolumes, mainnetFactoryPools, volumes, pools } = await getCurvePools(network);
30
- const volumeByAddress = Object.fromEntries(volumes.data.data.pools.map(v => [v.address.toLowerCase(), v]));
31
- const poolDataByAddress = Object.fromEntries(pools
32
- .map(poolCategory => {
33
- const { poolData = [] } = poolCategory?.data?.data || {};
34
- return poolData.map((p) => [
35
- p.lpTokenAddress.toLowerCase(),
36
- p,
37
- ]);
38
- })
39
- .flat(1));
40
- const curveAPY = sdk_gov_1.TypedObjectUtils.entries(sdk_gov_1.curveTokens).reduce((acc, [curveSymbol]) => {
41
- const address = (currentTokens?.[curveSymbol] || "").toLowerCase();
42
- const pool = poolDataByAddress[address];
43
- const volume = volumeByAddress[(pool?.address || "").toLowerCase()];
44
- const baseAPY = volume?.latestDailyApyPcent || 0;
45
- const maxCrv = Math.max(...(pool?.gaugeCrvApy || []), 0);
46
- const extraRewards = (pool?.gaugeRewards || []).map(({ apy = 0, symbol }) => [
47
- symbol.toLowerCase(),
48
- curveAPYToBn(apy),
49
- ]);
50
- acc[curveSymbol] = {
51
- base: curveAPYToBn(baseAPY),
52
- crv: curveAPYToBn(maxCrv),
53
- gauge: extraRewards,
54
- };
55
- return acc;
56
- }, {});
57
- const poolFactoryByAddress = Object.fromEntries((mainnetFactoryPools?.data?.data?.poolData || []).map((p) => [p.lpTokenAddress.toLowerCase(), p]));
58
- const mainnetVolumeByAddress = Object.fromEntries(mainnetVolumes.data.data.pools.map(v => [v.address.toLowerCase(), v]));
59
- const gearPool = poolFactoryByAddress[GEAR_POOL];
60
- const gearVolume = mainnetVolumeByAddress[(gearPool?.address || "").toLowerCase()];
61
- const gearAPY = {
62
- base: curveAPYToBn(gearVolume?.latestDailyApyPcent || 0),
63
- crv: curveAPYToBn(Math.max(...(gearPool?.gaugeCrvApy || []), 0)),
64
- gauge: (gearPool?.gaugeRewards || []).map(({ apy = 0, symbol }) => [
65
- symbol.toLowerCase(),
66
- curveAPYToBn(apy),
67
- ]),
27
+ const currentTokens = sdk_gov_1.tokenDataByNetwork[network];
28
+ const { mainnetVolumes, mainnetFactoryPools, volumes, pools } = await getCurvePools(network);
29
+ const volumeByAddress = Object.fromEntries(volumes.data.data.pools.map(v => [v.address.toLowerCase(), v]));
30
+ const poolDataByAddress = Object.fromEntries(pools
31
+ .map(poolCategory => {
32
+ const { poolData = [] } = poolCategory?.data?.data || {};
33
+ return poolData.map((p) => [
34
+ p.lpTokenAddress.toLowerCase(),
35
+ p,
36
+ ]);
37
+ })
38
+ .flat(1));
39
+ const curveAPY = sdk_gov_1.TypedObjectUtils.entries(sdk_gov_1.curveTokens).reduce((acc, [curveSymbol]) => {
40
+ const address = (currentTokens?.[curveSymbol] || "").toLowerCase();
41
+ const pool = poolDataByAddress[address];
42
+ const volume = volumeByAddress[(pool?.address || "").toLowerCase()];
43
+ const baseAPY = volume?.latestDailyApyPcent || 0;
44
+ const maxCrv = Math.max(...(pool?.gaugeCrvApy || []), 0);
45
+ const extraRewards = (pool?.gaugeRewards || []).map(({ apy = 0, symbol }) => [
46
+ symbol.toLowerCase(),
47
+ curveAPYToBn(apy),
48
+ ]);
49
+ acc[curveSymbol] = {
50
+ base: curveAPYToBn(baseAPY),
51
+ crv: curveAPYToBn(maxCrv),
52
+ gauge: extraRewards,
68
53
  };
69
- return { curveAPY, gearAPY };
70
- }
71
- catch (e) {
72
- console.error(e);
73
- return {};
74
- }
54
+ return acc;
55
+ }, {});
56
+ const poolFactoryByAddress = Object.fromEntries((mainnetFactoryPools?.data?.data?.poolData || []).map((p) => [p.lpTokenAddress.toLowerCase(), p]));
57
+ const mainnetVolumeByAddress = Object.fromEntries(mainnetVolumes.data.data.pools.map(v => [v.address.toLowerCase(), v]));
58
+ const gearPool = poolFactoryByAddress[GEAR_POOL];
59
+ const gearVolume = mainnetVolumeByAddress[(gearPool?.address || "").toLowerCase()];
60
+ const gearAPY = {
61
+ base: curveAPYToBn(gearVolume?.latestDailyApyPcent || 0),
62
+ crv: curveAPYToBn(Math.max(...(gearPool?.gaugeCrvApy || []), 0)),
63
+ gauge: (gearPool?.gaugeRewards || []).map(({ apy = 0, symbol }) => [
64
+ symbol.toLowerCase(),
65
+ curveAPYToBn(apy),
66
+ ]),
67
+ };
68
+ return { curveAPY, gearAPY };
75
69
  }
76
70
  exports.getCurveAPY = getCurveAPY;
77
71
  async function getCurvePools(network) {
@@ -8,26 +8,20 @@ const sdk_gov_1 = require("@gearbox-protocol/sdk-gov");
8
8
  const axios_1 = __importDefault(require("axios"));
9
9
  const LAMA_URL = "https://charts-server.fly.dev/api/defillama?ids=";
10
10
  async function getDefiLamaAPY(networkType) {
11
- try {
12
- const currentNormal = NORMAL_TO_LAMA[networkType];
13
- const idList = Object.values(currentNormal);
14
- if (idList.length === 0)
15
- return {};
16
- const res = await axios_1.default.get(`${LAMA_URL}${idList.join(",")}`);
17
- const itemsRecord = res.data.data.reduce((acc, item) => {
18
- acc[item.pool] = item;
19
- return acc;
20
- }, {});
21
- const allAPY = sdk_gov_1.TypedObjectUtils.fromEntries(sdk_gov_1.TypedObjectUtils.entries(currentNormal).map(([symbol, pool]) => {
22
- const { apy = 0 } = itemsRecord[pool] || {};
23
- return [symbol, Math.round(apy * Number(sdk_gov_1.PERCENTAGE_FACTOR))];
24
- }));
25
- return allAPY;
26
- }
27
- catch (e) {
28
- console.error(e);
11
+ const currentNormal = NORMAL_TO_LAMA[networkType];
12
+ const idList = Object.values(currentNormal);
13
+ if (idList.length === 0)
29
14
  return {};
30
- }
15
+ const res = await axios_1.default.get(`${LAMA_URL}${idList.join(",")}`);
16
+ const itemsRecord = res.data.data.reduce((acc, item) => {
17
+ acc[item.pool] = item;
18
+ return acc;
19
+ }, {});
20
+ const allAPY = sdk_gov_1.TypedObjectUtils.fromEntries(sdk_gov_1.TypedObjectUtils.entries(currentNormal).map(([symbol, pool]) => {
21
+ const { apy = 0 } = itemsRecord[pool] || {};
22
+ return [symbol, Math.round(apy * Number(sdk_gov_1.PERCENTAGE_FACTOR))];
23
+ }));
24
+ return allAPY;
31
25
  }
32
26
  exports.getDefiLamaAPY = getDefiLamaAPY;
33
27
  const NORMAL_TO_LAMA = {
@@ -8,18 +8,12 @@ const sdk_gov_1 = require("@gearbox-protocol/sdk-gov");
8
8
  const axios_1 = __importDefault(require("axios"));
9
9
  const LIDO_URL = "https://eth-api.lido.fi/v1/protocol/steth/apr/sma";
10
10
  async function getLidoAPY() {
11
- try {
12
- const res = await axios_1.default.get(LIDO_URL);
13
- const { smaApr = 0 } = res?.data?.data || {};
14
- const r = Math.round(smaApr * Number(sdk_gov_1.PERCENTAGE_FACTOR));
15
- return {
16
- STETH: r,
17
- wstETH: r,
18
- };
19
- }
20
- catch (e) {
21
- console.error(e);
22
- return {};
23
- }
11
+ const res = await axios_1.default.get(LIDO_URL);
12
+ const { smaApr = 0 } = res?.data?.data || {};
13
+ const r = Math.round(smaApr * Number(sdk_gov_1.PERCENTAGE_FACTOR));
14
+ return {
15
+ STETH: r,
16
+ wstETH: r,
17
+ };
24
18
  }
25
19
  exports.getLidoAPY = getLidoAPY;
@@ -101,12 +101,15 @@ class GearboxRewardsApi {
101
101
  if (!airdropDistributorAddress)
102
102
  return { rewards: [], totalAvailable: 0n };
103
103
  const distributor = types_1.IAirdropDistributor__factory.connect(airdropDistributorAddress, provider);
104
- const [claimed, merkleData] = await Promise.all([
104
+ const [claimedResp, merkleDataResp] = await Promise.all([
105
105
  this.getClaimed({ distributor, account }),
106
106
  this.getMerkle(provider, airdropDistributorAddress, network, account),
107
107
  ]);
108
- const amountOnContract = this.getAmountOnContract({ account, merkleData });
109
- const diff = amountOnContract - claimed;
108
+ const amountOnContract = this.getAmountOnContract({
109
+ account,
110
+ merkleData: merkleDataResp,
111
+ });
112
+ const diff = amountOnContract - claimedResp;
110
113
  const availableToClaimV2 = math_1.BigIntMath.max(0n, diff);
111
114
  const rewards = [
112
115
  {
@@ -207,14 +210,8 @@ class GearboxRewardsApi {
207
210
  const root = await distributor.merkleRoot();
208
211
  const path = `${network}_${root.slice(2)}/${account.slice(2, 4)}`;
209
212
  const url = `https://am.gearbox.finance/${path.toLowerCase()}.json`;
210
- try {
211
- const result = await axios_1.default.get(url);
212
- return result.data;
213
- }
214
- catch (error) {
215
- console.error("core/gearboxRewards/lmRewards/getMerkle", error);
216
- return undefined;
217
- }
213
+ const result = await axios_1.default.get(url);
214
+ return result.data;
218
215
  }
219
216
  static async getClaimed({ distributor, account, }) {
220
217
  const claimedRewardsResponse = await distributor.queryFilter(distributor.filters.Claimed(account, undefined, false));
@@ -22,9 +22,7 @@ interface PoolPointsInfo {
22
22
  name: string;
23
23
  }
24
24
  export declare class GearboxRewardsExtraApy {
25
- static getTotalTokensOnProtocol({ currentTokenData, chainId, tokensList, network, }: GetTotalTokensOnProtocolProps): Promise<{
26
- [k: string]: Asset;
27
- }>;
25
+ static getTotalTokensOnProtocol({ currentTokenData, chainId, tokensList, network, }: GetTotalTokensOnProtocolProps): Promise<[SupportedToken, PromiseSettledResult<Asset>][]>;
28
26
  private static getTokenTotal;
29
27
  static getPointsByPool({ totalTokenBalances, pools, tokensList, currentTokenData, network, }: GetPointsByPoolProps): {
30
28
  [k: string]: Asset[];
@@ -56,25 +56,22 @@ const REWARD_PERIOD = 30 * 24 * 60 * 60;
56
56
  class GearboxRewardsExtraApy {
57
57
  static async getTotalTokensOnProtocol({ currentTokenData, chainId, tokensList, network, }) {
58
58
  const currTokens = TOKENS[network];
59
- const res = await Promise.all(currTokens.map(s => this.getTokenTotal(currentTokenData[s], chainId, tokensList)));
60
- return Object.fromEntries(res.filter(r => r).map(r => [r.token, r]));
59
+ const res = await Promise.allSettled(currTokens.map(s => this.getTokenTotal(currentTokenData[s], chainId, tokensList)));
60
+ return res.map((r, i) => [
61
+ currTokens[i],
62
+ r,
63
+ ]);
61
64
  }
62
65
  static async getTokenTotal(token, chainId, tokensList) {
63
- try {
64
- const url = endpoint_1.ChartsApi.getUrl("getBalanceAt", chainId, {
65
- params: {
66
- asset: token,
67
- },
68
- });
69
- const result = await axios_1.default.get(url);
70
- const balance = result.data.result.reduce((sum, r) => r.effective_balance + sum, 0);
71
- const { decimals = 18 } = tokensList[token] || {};
72
- return { token, balance: (0, formatter_1.toBN)(String(balance), decimals) };
73
- }
74
- catch (error) {
75
- console.error("core/apy/extraAPYApi/getTokenTotal", error);
76
- return undefined;
77
- }
66
+ const url = endpoint_1.ChartsApi.getUrl("getBalanceAt", chainId, {
67
+ params: {
68
+ asset: token,
69
+ },
70
+ });
71
+ const result = await axios_1.default.get(url);
72
+ const balance = result.data.result.reduce((sum, r) => r.effective_balance + sum, 0);
73
+ const { decimals = 18 } = tokensList[token] || {};
74
+ return { token, balance: (0, formatter_1.toBN)(String(balance), decimals) };
78
75
  }
79
76
  static getPointsByPool({ totalTokenBalances, pools, tokensList, currentTokenData, network, }) {
80
77
  const r = Object.fromEntries(pools.map(p => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gearbox-protocol/sdk",
3
- "version": "3.0.0-next.168",
3
+ "version": "3.0.0-next.169",
4
4
  "description": "Gearbox SDK",
5
5
  "main": "./lib/index.js",
6
6
  "types": "./lib/index.d.ts",