@curvefi/api 2.24.3 → 2.24.5

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.
@@ -1,8 +1,7 @@
1
- import { IExtendedPoolDataFromApi, ISubgraphPoolData, IReward, IDict, INetworkName } from "./interfaces";
1
+ import { IExtendedPoolDataFromApi, ISubgraphPoolData, IDict, INetworkName } from "./interfaces";
2
2
  import memoize from "memoizee";
3
3
  export declare const _getPoolsFromApi: ((network: INetworkName, poolType: "main" | "crypto" | "factory" | "factory-crypto") => Promise<IExtendedPoolDataFromApi>) & memoize.Memoized<(network: INetworkName, poolType: "main" | "crypto" | "factory" | "factory-crypto") => Promise<IExtendedPoolDataFromApi>>;
4
4
  export declare const _getSubgraphData: ((network: INetworkName) => Promise<ISubgraphPoolData[]>) & memoize.Memoized<(network: INetworkName) => Promise<ISubgraphPoolData[]>>;
5
- export declare const _getMainPoolsGaugeRewards: (() => Promise<IDict<IReward[]>>) & memoize.Memoized<() => Promise<IDict<IReward[]>>>;
6
5
  export declare const _getLegacyAPYsAndVolumes: ((network: string) => Promise<IDict<{
7
6
  apy: {
8
7
  day: number;
@@ -39,7 +39,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
39
39
  return (mod && mod.__esModule) ? mod : { "default": mod };
40
40
  };
41
41
  Object.defineProperty(exports, "__esModule", { value: true });
42
- exports._getAllGauges = exports._getFactoryAPYsAndVolumes = exports._getLegacyAPYsAndVolumes = exports._getMainPoolsGaugeRewards = exports._getSubgraphData = exports._getPoolsFromApi = void 0;
42
+ exports._getAllGauges = exports._getFactoryAPYsAndVolumes = exports._getLegacyAPYsAndVolumes = exports._getSubgraphData = exports._getPoolsFromApi = void 0;
43
43
  var axios_1 = __importDefault(require("axios"));
44
44
  var memoizee_1 = __importDefault(require("memoizee"));
45
45
  var curve_1 = require("./curve");
@@ -77,22 +77,6 @@ exports._getSubgraphData = (0, memoizee_1.default)(function (network) { return _
77
77
  promise: true,
78
78
  maxAge: 5 * 60 * 1000, // 5m
79
79
  });
80
- exports._getMainPoolsGaugeRewards = (0, memoizee_1.default)(function () { return __awaiter(void 0, void 0, void 0, function () {
81
- var url, response;
82
- return __generator(this, function (_a) {
83
- switch (_a.label) {
84
- case 0:
85
- url = "https://api.curve.fi/api/getMainPoolsGaugeRewards";
86
- return [4 /*yield*/, axios_1.default.get(url, { validateStatus: function () { return true; } })];
87
- case 1:
88
- response = _a.sent();
89
- return [2 /*return*/, response.data.data.mainPoolsGaugeRewards];
90
- }
91
- });
92
- }); }, {
93
- promise: true,
94
- maxAge: 5 * 60 * 1000, // 5m
95
- });
96
80
  // Moonbeam and Aurora only
97
81
  exports._getLegacyAPYsAndVolumes = (0, memoizee_1.default)(function (network) { return __awaiter(void 0, void 0, void 0, function () {
98
82
  var url, data, result;
@@ -87,10 +87,16 @@ export interface ICoinFromPoolDataApi {
87
87
  export interface IReward {
88
88
  gaugeAddress: string;
89
89
  tokenAddress: string;
90
- tokenPrice?: number;
91
- name?: string;
92
90
  symbol: string;
93
- decimals?: number;
91
+ apy: number;
92
+ }
93
+ export interface IRewardFromApi {
94
+ gaugeAddress: string;
95
+ tokenAddress: string;
96
+ tokenPrice: number;
97
+ name: string;
98
+ symbol: string;
99
+ decimals: number;
94
100
  apy: number;
95
101
  }
96
102
  export interface IPoolDataFromApi {
@@ -104,7 +110,7 @@ export interface IPoolDataFromApi {
104
110
  implementation: string;
105
111
  implementationAddress: string;
106
112
  coins: ICoinFromPoolDataApi[];
107
- gaugeRewards?: IReward[];
113
+ gaugeRewards: IRewardFromApi[];
108
114
  usdTotal: number;
109
115
  totalSupply: number;
110
116
  amplificationCoefficient: string;
@@ -79,7 +79,7 @@ export declare class PoolTemplate {
79
79
  week: string;
80
80
  }>;
81
81
  tokenApy: (useApi?: boolean) => Promise<[baseApy: number, boostedApy: number]>;
82
- rewardsApy: () => Promise<IReward[]>;
82
+ rewardsApy: (useApi?: boolean) => Promise<IReward[]>;
83
83
  };
84
84
  wallet: {
85
85
  balances: (...addresses: string[] | string[][]) => Promise<IDict<IDict<string>> | IDict<string>>;
@@ -134,11 +134,11 @@ export declare class PoolTemplate {
134
134
  boost: (address?: string) => Promise<string>;
135
135
  currentCrvApy: (address?: string) => Promise<number>;
136
136
  maxBoostedStake: (...addresses: string[]) => Promise<IDict<string> | string>;
137
- rewardTokens: (() => Promise<{
137
+ rewardTokens: ((useApi?: any) => Promise<{
138
138
  token: string;
139
139
  symbol: string;
140
140
  decimals: number;
141
- }[]>) & memoize.Memoized<() => Promise<{
141
+ }[]>) & memoize.Memoized<(useApi?: any) => Promise<{
142
142
  token: string;
143
143
  symbol: string;
144
144
  decimals: number;
@@ -282,15 +282,16 @@ var PoolTemplate = /** @class */ (function () {
282
282
  this.statsTokenApy = function (useApi) {
283
283
  if (useApi === void 0) { useApi = true; }
284
284
  return __awaiter(_this, void 0, void 0, function () {
285
- var crvAPYs, poolCrvApy, totalLiquidityUSD, inflationRateBN, workingSupplyBN, totalSupplyBN, gaugeContract, lpTokenContract, crvContract, currentWeek, _c, gaugeContract, lpTokenContract, gaugeControllerContract, weightBN, rateBN, crvPrice, baseApyBN, boostedApyBN;
285
+ var dontUseApi, crvAPYs, poolCrvApy, totalLiquidityUSD, inflationRateBN, workingSupplyBN, totalSupplyBN, gaugeContract, lpTokenContract, crvContract, currentWeek, _c, gaugeContract, lpTokenContract, gaugeControllerContract, weightBN, rateBN, crvPrice, baseApyBN, boostedApyBN;
286
286
  var _d, _e;
287
287
  var _f;
288
288
  return __generator(this, function (_g) {
289
289
  switch (_g.label) {
290
290
  case 0:
291
291
  if (this.rewardsOnly())
292
- throw Error("".concat(this.name, " has Rewards-Only Gauge. Use getRewardsApy instead"));
293
- if (!(useApi && curve_1.curve.chainId === 1)) return [3 /*break*/, 2];
292
+ throw Error("".concat(this.name, " has Rewards-Only Gauge. Use stats.rewardsApy instead"));
293
+ dontUseApi = (curve_1.curve.chainId === 250 && this.id === 'factory-v2-42') || (curve_1.curve.chainId === 42161 && this.id === 'ren');
294
+ if (!(useApi && !dontUseApi)) return [3 /*break*/, 2];
294
295
  return [4 /*yield*/, (0, utils_1._getCrvApyFromApi)()];
295
296
  case 1:
296
297
  crvAPYs = _g.sent();
@@ -336,6 +337,8 @@ var PoolTemplate = /** @class */ (function () {
336
337
  inflationRateBN = inflationRateBN.times(weightBN);
337
338
  _g.label = 9;
338
339
  case 9:
340
+ if (inflationRateBN.eq(0))
341
+ return [2 /*return*/, [0, 0]];
339
342
  rateBN = inflationRateBN.times(31536000).times(0.4).div(workingSupplyBN).times(totalSupplyBN).div(Number(totalLiquidityUSD));
340
343
  return [4 /*yield*/, (0, utils_1._getUsdRate)(curve_1.curve.constants.ALIASES.crv)];
341
344
  case 10:
@@ -347,74 +350,61 @@ var PoolTemplate = /** @class */ (function () {
347
350
  });
348
351
  });
349
352
  };
350
- this.statsRewardsApy = function () { return __awaiter(_this, void 0, void 0, function () {
351
- var apy, rewardTokens, _i, rewardTokens_1, rewardToken, contract, totalLiquidityUSD, rewardRate, rewardData, periodFinish, inflation, baseApy, network, promises, _c, mainPoolsRewards, allTypesExtendedPoolData, rewards, _d, _e, extendedPoolData, _f, _g, pool;
352
- var _h;
353
- return __generator(this, function (_j) {
354
- switch (_j.label) {
355
- case 0:
356
- if (this.gauge === ethers_1.ethers.constants.AddressZero)
357
- return [2 /*return*/, []];
358
- if (!(curve_1.curve.chainId !== 1)) return [3 /*break*/, 8];
359
- apy = [];
360
- return [4 /*yield*/, this.rewardTokens()];
361
- case 1:
362
- rewardTokens = _j.sent();
363
- _i = 0, rewardTokens_1 = rewardTokens;
364
- _j.label = 2;
365
- case 2:
366
- if (!(_i < rewardTokens_1.length)) return [3 /*break*/, 7];
367
- rewardToken = rewardTokens_1[_i];
368
- contract = curve_1.curve.contracts[this.sRewardContract || this.gauge].contract;
369
- return [4 /*yield*/, this.statsTotalLiquidity()];
370
- case 3:
371
- totalLiquidityUSD = _j.sent();
372
- return [4 /*yield*/, (0, utils_1._getUsdRate)(rewardToken.token)];
373
- case 4:
374
- rewardRate = _j.sent();
375
- return [4 /*yield*/, contract.reward_data(rewardToken.token, curve_1.curve.constantOptions)];
376
- case 5:
377
- rewardData = _j.sent();
378
- periodFinish = Number(ethers_1.ethers.utils.formatUnits(rewardData.period_finish, 0)) * 1000;
379
- inflation = (0, utils_1.toBN)(rewardData.rate, rewardToken.decimals);
380
- baseApy = periodFinish > Date.now() ? inflation.times(31536000).times(rewardRate).div(Number(totalLiquidityUSD)) : (0, utils_1.BN)(0);
381
- apy.push({
382
- gaugeAddress: this.gauge.toLowerCase(),
383
- tokenAddress: rewardToken.token,
384
- symbol: rewardToken.symbol,
385
- apy: Number(baseApy.times(100).toFixed(4)),
386
- });
387
- _j.label = 6;
388
- case 6:
389
- _i++;
390
- return [3 /*break*/, 2];
391
- case 7: return [2 /*return*/, apy];
392
- case 8:
393
- network = curve_1.curve.constants.NETWORK_NAME;
394
- promises = [
395
- (0, external_api_1._getMainPoolsGaugeRewards)(),
396
- (0, external_api_1._getPoolsFromApi)(network, "main"),
397
- (0, external_api_1._getPoolsFromApi)(network, "crypto"),
398
- (0, external_api_1._getPoolsFromApi)(network, "factory"),
399
- (0, external_api_1._getPoolsFromApi)(network, "factory-crypto"),
400
- ];
401
- return [4 /*yield*/, Promise.all(promises)];
402
- case 9:
403
- _c = _j.sent(), mainPoolsRewards = _c[0], allTypesExtendedPoolData = _c.slice(1);
404
- rewards = mainPoolsRewards;
405
- for (_d = 0, _e = allTypesExtendedPoolData; _d < _e.length; _d++) {
406
- extendedPoolData = _e[_d];
407
- for (_f = 0, _g = extendedPoolData.poolData; _f < _g.length; _f++) {
408
- pool = _g[_f];
409
- if (pool.gaugeAddress && pool.gaugeRewards) {
410
- rewards[pool.gaugeAddress.toLowerCase()] = pool.gaugeRewards;
411
- }
412
- }
413
- }
414
- return [2 /*return*/, (_h = rewards[this.gauge.toLowerCase()]) !== null && _h !== void 0 ? _h : []];
415
- }
353
+ this.statsRewardsApy = function (useApi) {
354
+ if (useApi === void 0) { useApi = true; }
355
+ return __awaiter(_this, void 0, void 0, function () {
356
+ var dontUseApi, rewards, apy, rewardTokens, _i, rewardTokens_1, rewardToken, contract, totalLiquidityUSD, rewardRate, rewardData, periodFinish, inflation, baseApy;
357
+ return __generator(this, function (_c) {
358
+ switch (_c.label) {
359
+ case 0:
360
+ if (this.gauge === ethers_1.ethers.constants.AddressZero)
361
+ return [2 /*return*/, []];
362
+ dontUseApi = (curve_1.curve.chainId === 10 && this.id === 'factory-v2-0') || (curve_1.curve.chainId === 1284 && this.id === 'factory-v2-14') || (curve_1.curve.chainId === 2222 && this.id === 'factory-v2-0');
363
+ if (!(curve_1.curve.chainId === 1 || (useApi && !dontUseApi))) return [3 /*break*/, 2];
364
+ return [4 /*yield*/, (0, utils_1._getRewardsFromApi)()];
365
+ case 1:
366
+ rewards = _c.sent();
367
+ if (!rewards[this.gauge])
368
+ return [2 /*return*/, []];
369
+ return [2 /*return*/, rewards[this.gauge].map(function (r) { return ({ gaugeAddress: r.gaugeAddress, tokenAddress: r.tokenAddress, symbol: r.symbol, apy: r.apy }); })];
370
+ case 2:
371
+ apy = [];
372
+ return [4 /*yield*/, this.rewardTokens(false)];
373
+ case 3:
374
+ rewardTokens = _c.sent();
375
+ _i = 0, rewardTokens_1 = rewardTokens;
376
+ _c.label = 4;
377
+ case 4:
378
+ if (!(_i < rewardTokens_1.length)) return [3 /*break*/, 9];
379
+ rewardToken = rewardTokens_1[_i];
380
+ contract = curve_1.curve.contracts[this.sRewardContract || this.gauge].contract;
381
+ return [4 /*yield*/, this.statsTotalLiquidity()];
382
+ case 5:
383
+ totalLiquidityUSD = _c.sent();
384
+ return [4 /*yield*/, (0, utils_1._getUsdRate)(rewardToken.token)];
385
+ case 6:
386
+ rewardRate = _c.sent();
387
+ return [4 /*yield*/, contract.reward_data(rewardToken.token, curve_1.curve.constantOptions)];
388
+ case 7:
389
+ rewardData = _c.sent();
390
+ periodFinish = Number(ethers_1.ethers.utils.formatUnits(rewardData.period_finish, 0)) * 1000;
391
+ inflation = (0, utils_1.toBN)(rewardData.rate, rewardToken.decimals);
392
+ baseApy = periodFinish > Date.now() ? inflation.times(31536000).times(rewardRate).div(Number(totalLiquidityUSD)) : (0, utils_1.BN)(0);
393
+ apy.push({
394
+ gaugeAddress: this.gauge,
395
+ tokenAddress: rewardToken.token,
396
+ symbol: rewardToken.symbol,
397
+ apy: baseApy.times(100).toNumber(),
398
+ });
399
+ _c.label = 8;
400
+ case 8:
401
+ _i++;
402
+ return [3 /*break*/, 4];
403
+ case 9: return [2 /*return*/, apy];
404
+ }
405
+ });
416
406
  });
417
- }); };
407
+ };
418
408
  this._calcLpTokenAmount = (0, memoizee_1.default)(function (_amounts, isDeposit, useUnderlying) {
419
409
  if (isDeposit === void 0) { isDeposit = true; }
420
410
  if (useUnderlying === void 0) { useUnderlying = true; }
@@ -710,71 +700,82 @@ var PoolTemplate = /** @class */ (function () {
710
700
  });
711
701
  };
712
702
  // ---------------- REWARDS PROFIT, CLAIM ----------------
713
- this.rewardTokens = (0, memoizee_1.default)(function () { return __awaiter(_this, void 0, void 0, function () {
714
- var gaugeContract, gaugeMulticallContract, rewardCount, _c, _d, _e, tokenCalls, i, tokens, tokenInfoCalls, _i, tokens_1, token, tokenMulticallContract, tokenInfo_1, i, rewardContract, method, token, tokenMulticallContract, res, symbol, decimals;
715
- return __generator(this, function (_f) {
716
- switch (_f.label) {
717
- case 0:
718
- if (this.gauge === ethers_1.ethers.constants.AddressZero)
719
- return [2 /*return*/, []];
720
- gaugeContract = curve_1.curve.contracts[this.gauge].contract;
721
- gaugeMulticallContract = curve_1.curve.contracts[this.gauge].multicallContract;
722
- if (!("reward_tokens(uint256)" in gaugeContract)) return [3 /*break*/, 5];
723
- rewardCount = 8;
724
- if (!("reward_count()" in gaugeContract)) return [3 /*break*/, 2];
725
- _c = Number;
726
- _e = (_d = ethers_1.ethers.utils).formatUnits;
727
- return [4 /*yield*/, gaugeContract.reward_count(curve_1.curve.constantOptions)];
728
- case 1:
729
- rewardCount = _c.apply(void 0, [_e.apply(_d, [_f.sent(), 0])]);
730
- _f.label = 2;
731
- case 2:
732
- tokenCalls = [];
733
- for (i = 0; i < rewardCount; i++) {
734
- tokenCalls.push(gaugeMulticallContract.reward_tokens(i));
735
- }
736
- return [4 /*yield*/, curve_1.curve.multicallProvider.all(tokenCalls)];
737
- case 3:
738
- tokens = (_f.sent())
739
- .filter(function (addr) { return addr !== ethers_1.ethers.constants.AddressZero; })
740
- .map(function (addr) { return addr.toLowerCase(); });
741
- tokenInfoCalls = [];
742
- for (_i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {
743
- token = tokens_1[_i];
703
+ this.rewardTokens = (0, memoizee_1.default)(function (useApi) {
704
+ if (useApi === void 0) { useApi = true; }
705
+ return __awaiter(_this, void 0, void 0, function () {
706
+ var rewards, gaugeContract, gaugeMulticallContract, rewardCount, _c, _d, _e, tokenCalls, i, tokens, tokenInfoCalls, _i, tokens_1, token, tokenMulticallContract, tokenInfo_1, i, rewardContract, method, token, tokenMulticallContract, res, symbol, decimals;
707
+ return __generator(this, function (_f) {
708
+ switch (_f.label) {
709
+ case 0:
710
+ if (this.gauge === ethers_1.ethers.constants.AddressZero)
711
+ return [2 /*return*/, []];
712
+ if (!useApi) return [3 /*break*/, 2];
713
+ return [4 /*yield*/, (0, utils_1._getRewardsFromApi)()];
714
+ case 1:
715
+ rewards = _f.sent();
716
+ if (!rewards[this.gauge])
717
+ return [2 /*return*/, []];
718
+ return [2 /*return*/, rewards[this.gauge].map(function (r) { return ({ token: r.tokenAddress, symbol: r.symbol, decimals: r.decimals }); })];
719
+ case 2:
720
+ gaugeContract = curve_1.curve.contracts[this.gauge].contract;
721
+ gaugeMulticallContract = curve_1.curve.contracts[this.gauge].multicallContract;
722
+ if (!("reward_tokens(uint256)" in gaugeContract)) return [3 /*break*/, 7];
723
+ rewardCount = 8;
724
+ if (!("reward_count()" in gaugeContract)) return [3 /*break*/, 4];
725
+ _c = Number;
726
+ _e = (_d = ethers_1.ethers.utils).formatUnits;
727
+ return [4 /*yield*/, gaugeContract.reward_count(curve_1.curve.constantOptions)];
728
+ case 3:
729
+ rewardCount = _c.apply(void 0, [_e.apply(_d, [_f.sent(), 0])]);
730
+ _f.label = 4;
731
+ case 4:
732
+ tokenCalls = [];
733
+ for (i = 0; i < rewardCount; i++) {
734
+ tokenCalls.push(gaugeMulticallContract.reward_tokens(i));
735
+ }
736
+ return [4 /*yield*/, curve_1.curve.multicallProvider.all(tokenCalls)];
737
+ case 5:
738
+ tokens = (_f.sent())
739
+ .filter(function (addr) { return addr !== ethers_1.ethers.constants.AddressZero; })
740
+ .map(function (addr) { return addr.toLowerCase(); });
741
+ tokenInfoCalls = [];
742
+ for (_i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {
743
+ token = tokens_1[_i];
744
+ (0, utils_1._setContracts)(token, ERC20_json_1.default);
745
+ tokenMulticallContract = curve_1.curve.contracts[token].multicallContract;
746
+ tokenInfoCalls.push(tokenMulticallContract.symbol(), tokenMulticallContract.decimals());
747
+ }
748
+ return [4 /*yield*/, curve_1.curve.multicallProvider.all(tokenInfoCalls)];
749
+ case 6:
750
+ tokenInfo_1 = _f.sent();
751
+ for (i = 0; i < tokens.length; i++) {
752
+ curve_1.curve.constants.DECIMALS[tokens[i]] = tokenInfo_1[(i * 2) + 1];
753
+ }
754
+ return [2 /*return*/, tokens.map(function (token, i) { return ({ token: token, symbol: tokenInfo_1[i * 2], decimals: tokenInfo_1[(i * 2) + 1] }); })];
755
+ case 7:
756
+ if (!('claimable_reward(address)' in gaugeContract)) return [3 /*break*/, 10];
757
+ rewardContract = curve_1.curve.contracts[this.sRewardContract].contract;
758
+ method = "snx()" in rewardContract ? "snx" : "rewardsToken" // susd, tbtc : dusd, musd, rsv, sbtc
759
+ ;
760
+ return [4 /*yield*/, rewardContract[method](curve_1.curve.constantOptions)];
761
+ case 8:
762
+ token = (_f.sent()).toLowerCase();
744
763
  (0, utils_1._setContracts)(token, ERC20_json_1.default);
745
764
  tokenMulticallContract = curve_1.curve.contracts[token].multicallContract;
746
- tokenInfoCalls.push(tokenMulticallContract.symbol(), tokenMulticallContract.decimals());
747
- }
748
- return [4 /*yield*/, curve_1.curve.multicallProvider.all(tokenInfoCalls)];
749
- case 4:
750
- tokenInfo_1 = _f.sent();
751
- for (i = 0; i < tokens.length; i++) {
752
- curve_1.curve.constants.DECIMALS[tokens[i]] = tokenInfo_1[(i * 2) + 1];
753
- }
754
- return [2 /*return*/, tokens.map(function (token, i) { return ({ token: token, symbol: tokenInfo_1[i * 2], decimals: tokenInfo_1[(i * 2) + 1] }); })];
755
- case 5:
756
- if (!('claimable_reward(address)' in gaugeContract)) return [3 /*break*/, 8];
757
- rewardContract = curve_1.curve.contracts[this.sRewardContract].contract;
758
- method = "snx()" in rewardContract ? "snx" : "rewardsToken" // susd, tbtc : dusd, musd, rsv, sbtc
759
- ;
760
- return [4 /*yield*/, rewardContract[method](curve_1.curve.constantOptions)];
761
- case 6:
762
- token = (_f.sent()).toLowerCase();
763
- (0, utils_1._setContracts)(token, ERC20_json_1.default);
764
- tokenMulticallContract = curve_1.curve.contracts[token].multicallContract;
765
- return [4 /*yield*/, curve_1.curve.multicallProvider.all([
766
- tokenMulticallContract.symbol(),
767
- tokenMulticallContract.decimals(),
768
- ])];
769
- case 7:
770
- res = _f.sent();
771
- symbol = res[0];
772
- decimals = res[1];
773
- return [2 /*return*/, [{ token: token, symbol: symbol, decimals: decimals }]];
774
- case 8: return [2 /*return*/, []]; // gauge
775
- }
765
+ return [4 /*yield*/, curve_1.curve.multicallProvider.all([
766
+ tokenMulticallContract.symbol(),
767
+ tokenMulticallContract.decimals(),
768
+ ])];
769
+ case 9:
770
+ res = _f.sent();
771
+ symbol = res[0];
772
+ decimals = res[1];
773
+ return [2 /*return*/, [{ token: token, symbol: symbol, decimals: decimals }]];
774
+ case 10: return [2 /*return*/, []]; // gauge
775
+ }
776
+ });
776
777
  });
777
- }); }, {
778
+ }, {
778
779
  promise: true,
779
780
  maxAge: 30 * 60 * 1000, // 30m
780
781
  });
@@ -2784,7 +2785,7 @@ var PoolTemplate = /** @class */ (function () {
2784
2785
  PoolTemplate.prototype.baseProfit = function (address) {
2785
2786
  if (address === void 0) { address = ""; }
2786
2787
  return __awaiter(this, void 0, void 0, function () {
2787
- var apyData, apyBN, totalLiquidityBN, _c, annualProfitBN, monthlyProfitBN, weeklyProfitBN, daylyProfitBN;
2788
+ var apyData, apyBN, totalLiquidityBN, _c, annualProfitBN, monthlyProfitBN, weeklyProfitBN, dailyProfitBN;
2788
2789
  return __generator(this, function (_d) {
2789
2790
  switch (_d.label) {
2790
2791
  case 0: return [4 /*yield*/, this.statsBaseApy()];
@@ -2800,9 +2801,9 @@ var PoolTemplate = /** @class */ (function () {
2800
2801
  annualProfitBN = apyBN.times(totalLiquidityBN);
2801
2802
  monthlyProfitBN = annualProfitBN.div(12);
2802
2803
  weeklyProfitBN = annualProfitBN.div(52);
2803
- daylyProfitBN = annualProfitBN.div(365);
2804
+ dailyProfitBN = annualProfitBN.div(365);
2804
2805
  return [2 /*return*/, {
2805
- day: daylyProfitBN.toString(),
2806
+ day: dailyProfitBN.toString(),
2806
2807
  week: weeklyProfitBN.toString(),
2807
2808
  month: monthlyProfitBN.toString(),
2808
2809
  year: annualProfitBN.toString(),
package/lib/router.js CHANGED
@@ -876,7 +876,7 @@ var swap = function (inputCoin, outputCoin, amount, slippage) {
876
876
  };
877
877
  exports.swap = swap;
878
878
  var getSwappedAmount = function (tx, outputCoin) { return __awaiter(void 0, void 0, void 0, function () {
879
- var outputCoinAddress, outputCoinDecimals, txInfo, res;
879
+ var outputCoinAddress, outputCoinDecimals, txInfo, res, i;
880
880
  return __generator(this, function (_a) {
881
881
  switch (_a.label) {
882
882
  case 0:
@@ -885,7 +885,15 @@ var getSwappedAmount = function (tx, outputCoin) { return __awaiter(void 0, void
885
885
  return [4 /*yield*/, tx.wait()];
886
886
  case 1:
887
887
  txInfo = _a.sent();
888
- res = ethers_1.ethers.utils.defaultAbiCoder.decode(['address[9]', 'uint256[3][4]', 'address[4]', 'uint256', 'uint256'], ethers_1.ethers.utils.hexDataSlice(txInfo.logs[txInfo.logs.length - 1].data, 0));
888
+ for (i = 1; i <= txInfo.logs.length; i++) {
889
+ try {
890
+ res = ethers_1.ethers.utils.defaultAbiCoder.decode(['address[9]', 'uint256[3][4]', 'address[4]', 'uint256', 'uint256'], ethers_1.ethers.utils.hexDataSlice(txInfo.logs[txInfo.logs.length - i].data, 0));
891
+ break;
892
+ }
893
+ catch (err) { }
894
+ }
895
+ if (res === undefined)
896
+ return [2 /*return*/, '0'];
889
897
  return [2 /*return*/, ethers_1.ethers.utils.formatUnits(res[res.length - 1], outputCoinDecimals)];
890
898
  }
891
899
  });
package/lib/utils.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { ethers } from 'ethers';
2
2
  import BigNumber from 'bignumber.js';
3
- import { IDict } from './interfaces';
3
+ import { IDict, IRewardFromApi } from './interfaces';
4
4
  export declare const ETH_ADDRESS = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
5
5
  export declare const MAX_ALLOWANCE: ethers.BigNumber;
6
6
  export declare const _cutZeros: (strn: string) => string;
@@ -28,6 +28,7 @@ export declare const ensureAllowance: (coins: string[], amounts: (number | strin
28
28
  export declare const getPoolNameBySwapAddress: (swapAddress: string) => string;
29
29
  export declare const _getUsdPricesFromApi: () => Promise<IDict<number>>;
30
30
  export declare const _getCrvApyFromApi: () => Promise<IDict<[number, number]>>;
31
+ export declare const _getRewardsFromApi: () => Promise<IDict<IRewardFromApi[]>>;
31
32
  export declare const _getUsdRate: (assetId: string) => Promise<number>;
32
33
  export declare const getUsdRate: (coin: string) => Promise<number>;
33
34
  export declare const getTVL: (chainId?: number) => Promise<number>;
package/lib/utils.js CHANGED
@@ -59,7 +59,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
59
59
  return (mod && mod.__esModule) ? mod : { "default": mod };
60
60
  };
61
61
  Object.defineProperty(exports, "__esModule", { value: true });
62
- exports.getCoinNamesAndSymbols = exports._get_price_impact = exports._get_small_x = exports._setContracts = exports.getTVL = exports.getUsdRate = exports._getUsdRate = exports._getCrvApyFromApi = exports._getUsdPricesFromApi = exports.getPoolNameBySwapAddress = exports.ensureAllowance = exports.ensureAllowanceEstimateGas = exports._ensureAllowance = exports.hasAllowance = exports.getAllowance = exports._getAllowance = exports.getBalances = exports._prepareAddresses = exports._getBalances = exports._getCoinDecimals = exports._getCoinAddresses = exports._getCoinAddressesNoCheck = exports.getEthIndex = exports.isEth = exports.fromBN = exports.toStringFromBN = exports.toBN = exports.BN = exports.parseUnits = exports.formatNumber = exports.checkNumber = exports._cutZeros = exports.MAX_ALLOWANCE = exports.ETH_ADDRESS = void 0;
62
+ exports.getCoinNamesAndSymbols = exports._get_price_impact = exports._get_small_x = exports._setContracts = exports.getTVL = exports.getUsdRate = exports._getUsdRate = exports._getRewardsFromApi = exports._getCrvApyFromApi = exports._getUsdPricesFromApi = exports.getPoolNameBySwapAddress = exports.ensureAllowance = exports.ensureAllowanceEstimateGas = exports._ensureAllowance = exports.hasAllowance = exports.getAllowance = exports._getAllowance = exports.getBalances = exports._prepareAddresses = exports._getBalances = exports._getCoinDecimals = exports._getCoinAddresses = exports._getCoinAddressesNoCheck = exports.getEthIndex = exports.isEth = exports.fromBN = exports.toStringFromBN = exports.toBN = exports.BN = exports.parseUnits = exports.formatNumber = exports.checkNumber = exports._cutZeros = exports.MAX_ALLOWANCE = exports.ETH_ADDRESS = void 0;
63
63
  var axios_1 = __importDefault(require("axios"));
64
64
  var ethers_1 = require("ethers");
65
65
  var ethcall_1 = require("ethcall");
@@ -471,7 +471,12 @@ var _getCrvApyFromApi = function () { return __awaiter(void 0, void 0, void 0, f
471
471
  for (_a = 0, _b = extendedPoolData.poolData; _a < _b.length; _a++) {
472
472
  pool = _b[_a];
473
473
  if (pool.gaugeAddress) {
474
- apyDict[pool.gaugeAddress] = [(_c = pool.gaugeCrvApy[0]) !== null && _c !== void 0 ? _c : 0, (_d = pool.gaugeCrvApy[1]) !== null && _d !== void 0 ? _d : 0];
474
+ if (!pool.gaugeCrvApy) {
475
+ apyDict[pool.gaugeAddress.toLowerCase()] = [0, 0];
476
+ }
477
+ else {
478
+ apyDict[pool.gaugeAddress.toLowerCase()] = [(_c = pool.gaugeCrvApy[0]) !== null && _c !== void 0 ? _c : 0, (_d = pool.gaugeCrvApy[1]) !== null && _d !== void 0 ? _d : 0];
479
+ }
475
480
  }
476
481
  }
477
482
  }
@@ -480,6 +485,36 @@ var _getCrvApyFromApi = function () { return __awaiter(void 0, void 0, void 0, f
480
485
  });
481
486
  }); };
482
487
  exports._getCrvApyFromApi = _getCrvApyFromApi;
488
+ var _getRewardsFromApi = function () { return __awaiter(void 0, void 0, void 0, function () {
489
+ var network, promises, allTypesExtendedPoolData, rewardsDict, _i, allTypesExtendedPoolData_3, extendedPoolData, _a, _b, pool;
490
+ return __generator(this, function (_c) {
491
+ switch (_c.label) {
492
+ case 0:
493
+ network = curve_1.curve.constants.NETWORK_NAME;
494
+ promises = [
495
+ (0, external_api_1._getPoolsFromApi)(network, "main"),
496
+ (0, external_api_1._getPoolsFromApi)(network, "crypto"),
497
+ (0, external_api_1._getPoolsFromApi)(network, "factory"),
498
+ (0, external_api_1._getPoolsFromApi)(network, "factory-crypto"),
499
+ ];
500
+ return [4 /*yield*/, Promise.all(promises)];
501
+ case 1:
502
+ allTypesExtendedPoolData = _c.sent();
503
+ rewardsDict = {};
504
+ for (_i = 0, allTypesExtendedPoolData_3 = allTypesExtendedPoolData; _i < allTypesExtendedPoolData_3.length; _i++) {
505
+ extendedPoolData = allTypesExtendedPoolData_3[_i];
506
+ for (_a = 0, _b = extendedPoolData.poolData; _a < _b.length; _a++) {
507
+ pool = _b[_a];
508
+ if (pool.gaugeAddress) {
509
+ rewardsDict[pool.gaugeAddress.toLowerCase()] = pool.gaugeRewards;
510
+ }
511
+ }
512
+ }
513
+ return [2 /*return*/, rewardsDict];
514
+ }
515
+ });
516
+ }); };
517
+ exports._getRewardsFromApi = _getRewardsFromApi;
483
518
  var _usdRatesCache = {};
484
519
  var _getUsdRate = function (assetId) { return __awaiter(void 0, void 0, void 0, function () {
485
520
  var pricesFromApi, chainName, nativeTokenName, url, response;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@curvefi/api",
3
- "version": "2.24.3",
3
+ "version": "2.24.5",
4
4
  "description": "JavaScript library for curve.fi",
5
5
  "main": "lib/index.js",
6
6
  "author": "Macket",