@curvefi/api 1.24.5 → 1.25.2

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.
@@ -90,6 +90,8 @@ exports.USD_COINS_ETHEREUM = {
90
90
  busd: "0x4Fabb145d64652a948d72533023f6E7A623C7C53",
91
91
  alusd: "0xbc6da0fe9ad5f3b0d58160288917aa56653660e9",
92
92
  mim: "0x99d8a9c45b2eca8864373a26d1459e3dff1e17f3",
93
+ rai: "0x03ab458634910aad20ef5f1c8ee96f1d6ac54919",
94
+ wormholeust: "0xa693B19d2931d498c5B318dF961919BB4aee87a5",
93
95
  '3crv': "0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490",
94
96
  crv: "0xD533a949740bb3306d119CC777fa900bA034cd52",
95
97
  cvx: "0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b", // CVX
@@ -165,6 +167,8 @@ exports.DECIMALS_ETHEREUM = {
165
167
  "0x68749665ff8d2d112fa859aa293f07a622782f38": 6,
166
168
  "0x090185f2135308bad17527004364ebcc2d37e5f6": 18,
167
169
  "0xCdF7028ceAB81fA0C6971208e83fa7872994beE5": 18,
170
+ "0xa693B19d2931d498c5B318dF961919BB4aee87a5": 6,
171
+ "0x03ab458634910aad20ef5f1c8ee96f1d6ac54919": 18,
168
172
  // --- REWARD TOKENS ---
169
173
  "0xa3BeD4E1c75D00fa6f4E5E6922DB7261B5E9AcD2": 18,
170
174
  "0x8762db106B2c2A0bccB3A80d1Ed41273552616E8": 18,
package/lib/curve.js CHANGED
@@ -119,6 +119,7 @@ var Curve = /** @class */ (function () {
119
119
  return __generator(this, function (_o) {
120
120
  switch (_o.label) {
121
121
  case 0:
122
+ this.contracts = {};
122
123
  // JsonRpc provider
123
124
  if (providerType.toLowerCase() === 'JsonRpc'.toLowerCase()) {
124
125
  providerSettings = providerSettings;
@@ -1,3 +1,4 @@
1
- import { IExtendedPoolDataFromApi } from "./interfaces";
1
+ import { IExtendedPoolDataFromApi, IReward, DictInterface } from "./interfaces";
2
2
  import memoize from "memoizee";
3
3
  export declare const _getPoolsFromApi: ((network: "ethereum" | "polygon", poolType: "main" | "crypto" | "factory" | "factory-crypto") => Promise<IExtendedPoolDataFromApi>) & memoize.Memoized<(network: "ethereum" | "polygon", poolType: "main" | "crypto" | "factory" | "factory-crypto") => Promise<IExtendedPoolDataFromApi>>;
4
+ export declare const _getMainPoolsGaugeRewards: (() => Promise<DictInterface<IReward[]>>) & memoize.Memoized<() => Promise<DictInterface<IReward[]>>>;
@@ -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._getPoolsFromApi = void 0;
42
+ exports._getMainPoolsGaugeRewards = exports._getPoolsFromApi = void 0;
43
43
  var axios_1 = __importDefault(require("axios"));
44
44
  var memoizee_1 = __importDefault(require("memoizee"));
45
45
  exports._getPoolsFromApi = (0, memoizee_1.default)(function (network, poolType) { return __awaiter(void 0, void 0, void 0, function () {
@@ -59,3 +59,19 @@ exports._getPoolsFromApi = (0, memoizee_1.default)(function (network, poolType)
59
59
  promise: true,
60
60
  maxAge: 5 * 60 * 1000, // 5m
61
61
  });
62
+ exports._getMainPoolsGaugeRewards = (0, memoizee_1.default)(function () { return __awaiter(void 0, void 0, void 0, function () {
63
+ var url, response;
64
+ return __generator(this, function (_a) {
65
+ switch (_a.label) {
66
+ case 0:
67
+ url = "https://api.curve.fi/api/getMainPoolsGaugeRewards";
68
+ return [4 /*yield*/, axios_1.default.get(url, { validateStatus: function () { return true; } })];
69
+ case 1:
70
+ response = _a.sent();
71
+ return [2 /*return*/, response.data.data.mainPoolsGaugeRewards];
72
+ }
73
+ });
74
+ }); }, {
75
+ promise: true,
76
+ maxAge: 5 * 60 * 1000, // 5m
77
+ });
@@ -122,6 +122,23 @@ function setFactoryCoinsContracts(rawPoolList) {
122
122
  }
123
123
  }
124
124
  }
125
+ function setFactoryRewardCoinsContracts(rawPoolList) {
126
+ var _a;
127
+ for (var _i = 0, rawPoolList_2 = rawPoolList; _i < rawPoolList_2.length; _i++) {
128
+ var pool = rawPoolList_2[_i];
129
+ for (var _b = 0, _c = (_a = pool.gaugeRewards) !== null && _a !== void 0 ? _a : []; _b < _c.length; _b++) {
130
+ var rewardCoin = _c[_b];
131
+ var addr = rewardCoin.tokenAddress.toLowerCase();
132
+ if (addr in this.contracts)
133
+ continue;
134
+ this.contracts[addr] = {
135
+ contract: new ethers_1.Contract(addr, ERC20_json_1.default, this.signer || this.provider),
136
+ multicallContract: new ethcall_1.Contract(addr, ERC20_json_1.default),
137
+ };
138
+ this.constants.DECIMALS_LOWER_CASE[addr] = Number(rewardCoin.decimals);
139
+ }
140
+ }
141
+ }
125
142
  function setFactoryZapContracts() {
126
143
  if (this.chainId === 137) {
127
144
  var metaUsdZapAddress = "0x5ab5C56B9db92Ba45a0B46a207286cD83C15C939".toLowerCase();
@@ -164,10 +181,12 @@ function getFactoryPoolsDataFromApi(isCrypto) {
164
181
  setCryptoFactoryTokenContracts.call(this, rawPoolList);
165
182
  setFactoryGaugeContracts.call(this, rawPoolList);
166
183
  setFactoryCoinsContracts.call(this, rawPoolList);
184
+ setFactoryRewardCoinsContracts.call(this, rawPoolList);
167
185
  if (!isCrypto)
168
186
  setFactoryZapContracts.call(this);
169
187
  FACTORY_POOLS_DATA = {};
170
188
  rawPoolList.forEach(function (pool) {
189
+ var _a, _b, _c;
171
190
  var coinAddresses = pool.coins.map(function (c) { return c.address.toLowerCase(); });
172
191
  var coinNames = pool.coins.map(function (c) { return c.symbol; });
173
192
  var coinDecimals = pool.coins.map(function (c) { return Number(c.decimals); });
@@ -193,6 +212,7 @@ function getFactoryPoolsDataFromApi(isCrypto) {
193
212
  gauge_address: pool.gaugeAddress ? pool.gaugeAddress.toLowerCase() : ethers_1.ethers.constants.AddressZero,
194
213
  underlying_coin_addresses: underlyingCoinAddresses,
195
214
  coin_addresses: coinAddresses,
215
+ reward_tokens: ((_a = pool.gaugeRewards) !== null && _a !== void 0 ? _a : []).map(function (r) { return r.tokenAddress; }),
196
216
  swap_abi: factory_crypto_pool_2_json_1.default,
197
217
  gauge_abi: gauge_factory_json_1.default,
198
218
  is_factory: true,
@@ -229,6 +249,7 @@ function getFactoryPoolsDataFromApi(isCrypto) {
229
249
  coins: coinNames,
230
250
  underlying_coin_addresses: coinAddresses,
231
251
  coin_addresses: coinAddresses,
252
+ reward_tokens: ((_b = pool.gaugeRewards) !== null && _b !== void 0 ? _b : []).map(function (r) { return r.tokenAddress; }),
232
253
  swap_abi: implementationABIDict[pool.implementationAddress],
233
254
  gauge_abi: gauge_factory_json_1.default,
234
255
  is_factory: true,
@@ -260,6 +281,7 @@ function getFactoryPoolsDataFromApi(isCrypto) {
260
281
  coins: coinNames,
261
282
  underlying_coin_addresses: coinAddresses,
262
283
  coin_addresses: coinAddresses,
284
+ reward_tokens: ((_c = pool.gaugeRewards) !== null && _c !== void 0 ? _c : []).map(function (r) { return r.tokenAddress; }),
263
285
  swap_abi: implementationABIDict[pool.implementationAddress],
264
286
  gauge_abi: gauge_factory_json_1.default,
265
287
  is_factory: true,
@@ -94,6 +94,15 @@ export interface ICoinFromPoolDataApi {
94
94
  decimals: string;
95
95
  usdPrice: number | string;
96
96
  }
97
+ export interface IReward {
98
+ gaugeAddress: string;
99
+ tokenAddress: string;
100
+ tokenPrice?: number;
101
+ name?: string;
102
+ symbol: string;
103
+ decimals?: number;
104
+ apy: number;
105
+ }
97
106
  export interface IPoolDataFromApi {
98
107
  id: string;
99
108
  name: string;
@@ -105,6 +114,7 @@ export interface IPoolDataFromApi {
105
114
  implementation: string;
106
115
  implementationAddress: string;
107
116
  coins: ICoinFromPoolDataApi[];
117
+ gaugeRewards?: IReward[];
108
118
  usdTotal: number;
109
119
  }
110
120
  export interface IExtendedPoolDataFromApi {
@@ -112,11 +122,6 @@ export interface IExtendedPoolDataFromApi {
112
122
  tvl?: number;
113
123
  tvlAll: number;
114
124
  }
115
- export interface RewardsApyInterface {
116
- token: string;
117
- symbol: string;
118
- apy: string;
119
- }
120
125
  export interface IPoolStats {
121
126
  volume: number;
122
127
  apy: {
package/lib/pools.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { ethers } from "ethers";
2
2
  import BigNumber from 'bignumber.js';
3
- import { DictInterface, IRouteStep, RewardsApyInterface } from './interfaces';
3
+ import { DictInterface, IRouteStep, IReward } from './interfaces';
4
4
  export declare class Pool {
5
5
  id: string;
6
6
  name: string;
@@ -73,7 +73,7 @@ export declare class Pool {
73
73
  total: string;
74
74
  }>;
75
75
  getTokenApy: () => Promise<[baseApy: string, boostedApy: string]>;
76
- getRewardsApy: () => Promise<RewardsApyInterface[]>;
76
+ getRewardsApy: () => Promise<IReward[]>;
77
77
  };
78
78
  constructor(id: string);
79
79
  calcLpTokenAmount: (amounts: string[], isDeposit?: boolean) => Promise<string>;
package/lib/pools.js CHANGED
@@ -365,58 +365,68 @@ var Pool = /** @class */ (function () {
365
365
  });
366
366
  }); };
367
367
  this.getRewardsApy = function () { return __awaiter(_this, void 0, void 0, function () {
368
- var apy_1, _i, _a, rewardToken, rewardContract, totalLiquidityUSD, crvRate, inflation, _c, baseApy, rewardTokenContract, symbol, mainPoolsGaugeRewards, mainPoolsGaugeRewardsLowerCase, apyData, apy, _d, apyData_1, data;
369
- return __generator(this, function (_e) {
370
- switch (_e.label) {
368
+ var apy, _i, _a, rewardToken, rewardContract, totalLiquidityUSD, crvRate, inflation, _c, baseApy, rewardTokenContract, symbol, network, promises, _d, mainPoolsRewards, allTypesExtendedPoolData, rewards, _e, _f, extendedPoolData, _h, _j, pool;
369
+ var _k;
370
+ return __generator(this, function (_l) {
371
+ switch (_l.label) {
371
372
  case 0:
372
373
  if (!(curve_1.curve.chainId === 137)) return [3 /*break*/, 8];
373
- apy_1 = [];
374
+ apy = [];
374
375
  _i = 0, _a = this.rewardTokens;
375
- _e.label = 1;
376
+ _l.label = 1;
376
377
  case 1:
377
378
  if (!(_i < _a.length)) return [3 /*break*/, 7];
378
379
  rewardToken = _a[_i];
379
380
  rewardContract = curve_1.curve.contracts[this.rewardContract].contract;
380
381
  return [4 /*yield*/, this.getTotalLiquidity()];
381
382
  case 2:
382
- totalLiquidityUSD = _e.sent();
383
+ totalLiquidityUSD = _l.sent();
383
384
  return [4 /*yield*/, (0, utils_1._getUsdRate)(rewardToken)];
384
385
  case 3:
385
- crvRate = _e.sent();
386
+ crvRate = _l.sent();
386
387
  _c = utils_1.toBN;
387
388
  return [4 /*yield*/, rewardContract.reward_data(curve_1.ALIASES.crv, curve_1.curve.constantOptions)];
388
389
  case 4:
389
- inflation = _c.apply(void 0, [(_e.sent()).rate]);
390
+ inflation = _c.apply(void 0, [(_l.sent()).rate]);
390
391
  baseApy = inflation.times(31536000).times(crvRate).div(Number(totalLiquidityUSD));
391
392
  rewardTokenContract = curve_1.curve.contracts[rewardToken].contract;
392
393
  return [4 /*yield*/, rewardTokenContract.symbol()];
393
394
  case 5:
394
- symbol = _e.sent();
395
- apy_1.push({
396
- token: rewardToken,
395
+ symbol = _l.sent();
396
+ apy.push({
397
+ gaugeAddress: this.gauge.toLowerCase(),
398
+ tokenAddress: rewardToken,
397
399
  symbol: symbol,
398
- apy: baseApy.times(100).toFixed(4),
400
+ apy: Number(baseApy.times(100).toFixed(4)),
399
401
  });
400
- _e.label = 6;
402
+ _l.label = 6;
401
403
  case 6:
402
404
  _i++;
403
405
  return [3 /*break*/, 1];
404
- case 7: return [2 /*return*/, apy_1];
405
- case 8: return [4 /*yield*/, axios_1.default.get("https://api.curve.fi/api/getMainPoolsGaugeRewards")];
406
+ case 7: return [2 /*return*/, apy];
407
+ case 8:
408
+ network = curve_1.curve.chainId === 137 ? "polygon" : "ethereum";
409
+ promises = [
410
+ (0, external_api_1._getMainPoolsGaugeRewards)(),
411
+ (0, external_api_1._getPoolsFromApi)(network, "main"),
412
+ (0, external_api_1._getPoolsFromApi)(network, "crypto"),
413
+ (0, external_api_1._getPoolsFromApi)(network, "factory"),
414
+ (0, external_api_1._getPoolsFromApi)(network, "factory-crypto"),
415
+ ];
416
+ return [4 /*yield*/, Promise.all(promises)];
406
417
  case 9:
407
- mainPoolsGaugeRewards = (_e.sent()).data.data.mainPoolsGaugeRewards;
408
- mainPoolsGaugeRewardsLowerCase = Object.fromEntries(Object.entries(mainPoolsGaugeRewards).map(function (entry) { return [entry[0].toLowerCase(), entry[1]]; }));
409
- apyData = mainPoolsGaugeRewardsLowerCase[this.gauge.toLowerCase()] || [];
410
- apy = [];
411
- for (_d = 0, apyData_1 = apyData; _d < apyData_1.length; _d++) {
412
- data = apyData_1[_d];
413
- apy.push({
414
- token: data.tokenAddress,
415
- symbol: data.symbol,
416
- apy: String(data.apy),
417
- });
418
+ _d = _l.sent(), mainPoolsRewards = _d[0], allTypesExtendedPoolData = _d.slice(1);
419
+ rewards = mainPoolsRewards;
420
+ for (_e = 0, _f = allTypesExtendedPoolData; _e < _f.length; _e++) {
421
+ extendedPoolData = _f[_e];
422
+ for (_h = 0, _j = extendedPoolData.poolData; _h < _j.length; _h++) {
423
+ pool = _j[_h];
424
+ if (pool.gaugeAddress && pool.gaugeRewards) {
425
+ rewards[pool.gaugeAddress.toLowerCase()] = pool.gaugeRewards;
426
+ }
427
+ }
418
428
  }
419
- return [2 /*return*/, apy];
429
+ return [2 /*return*/, (_k = rewards[this.gauge.toLowerCase()]) !== null && _k !== void 0 ? _k : []];
420
430
  }
421
431
  });
422
432
  }); };
@@ -2842,7 +2852,7 @@ var Pool = /** @class */ (function () {
2842
2852
  switch (_a.label) {
2843
2853
  case 0:
2844
2854
  contract = curve_1.curve.contracts[this.swap].contract;
2845
- if (!(["eurtusd", "xautusd", "crveth", "cvxeth", "spelleth", "teth"].includes(this.id) || this.isCryptoFactory)) return [3 /*break*/, 2];
2855
+ if (!(["eurtusd", "eursusd", "xautusd", "crveth", "cvxeth", "spelleth", "teth"].includes(this.id) || this.isCryptoFactory)) return [3 /*break*/, 2];
2846
2856
  return [4 /*yield*/, contract.calc_token_amount(_amounts, curve_1.curve.constantOptions)];
2847
2857
  case 1: return [2 /*return*/, _a.sent()];
2848
2858
  case 2: return [4 /*yield*/, contract.calc_token_amount(_amounts, isDeposit, curve_1.curve.constantOptions)];
@@ -2863,7 +2873,7 @@ var Pool = /** @class */ (function () {
2863
2873
  return [4 /*yield*/, contract.calc_token_amount(this.swap, _amounts, isDeposit, curve_1.curve.constantOptions)];
2864
2874
  case 1: return [2 /*return*/, _a.sent()];
2865
2875
  case 2:
2866
- if (!["eurtusd", "xautusd"].includes(this.id)) return [3 /*break*/, 4];
2876
+ if (!["eurtusd", "eursusd", "xautusd"].includes(this.id)) return [3 /*break*/, 4];
2867
2877
  return [4 /*yield*/, contract.calc_token_amount(_amounts, curve_1.curve.constantOptions)];
2868
2878
  case 3: return [2 /*return*/, _a.sent()];
2869
2879
  case 4: return [4 /*yield*/, contract.calc_token_amount(_amounts, isDeposit, curve_1.curve.constantOptions)];
package/lib/utils.js CHANGED
@@ -376,9 +376,10 @@ var getPoolNameBySwapAddress = function (swapAddress) {
376
376
  };
377
377
  exports.getPoolNameBySwapAddress = getPoolNameBySwapAddress;
378
378
  var _getUsdPricesFromApi = function () { return __awaiter(void 0, void 0, void 0, function () {
379
- var network, promises, allTypesExtendedPoolData, priceDict, _i, allTypesExtendedPoolData_1, extendedPoolData, _a, _b, pool, _c, _d, coin;
380
- return __generator(this, function (_e) {
381
- switch (_e.label) {
379
+ var network, promises, allTypesExtendedPoolData, priceDict, _i, allTypesExtendedPoolData_1, extendedPoolData, _a, _b, pool, _c, _d, coin, _e, _f, coin;
380
+ var _g;
381
+ return __generator(this, function (_h) {
382
+ switch (_h.label) {
382
383
  case 0:
383
384
  network = curve_1.curve.chainId === 137 ? "polygon" : "ethereum";
384
385
  promises = [
@@ -389,7 +390,7 @@ var _getUsdPricesFromApi = function () { return __awaiter(void 0, void 0, void 0
389
390
  ];
390
391
  return [4 /*yield*/, Promise.all(promises)];
391
392
  case 1:
392
- allTypesExtendedPoolData = _e.sent();
393
+ allTypesExtendedPoolData = _h.sent();
393
394
  priceDict = {};
394
395
  for (_i = 0, allTypesExtendedPoolData_1 = allTypesExtendedPoolData; _i < allTypesExtendedPoolData_1.length; _i++) {
395
396
  extendedPoolData = allTypesExtendedPoolData_1[_i];
@@ -400,6 +401,11 @@ var _getUsdPricesFromApi = function () { return __awaiter(void 0, void 0, void 0
400
401
  if (typeof coin.usdPrice === "number")
401
402
  priceDict[coin.address.toLowerCase()] = coin.usdPrice;
402
403
  }
404
+ for (_e = 0, _f = (_g = pool.gaugeRewards) !== null && _g !== void 0 ? _g : []; _e < _f.length; _e++) {
405
+ coin = _f[_e];
406
+ if (typeof coin.tokenPrice === "number")
407
+ priceDict[coin.tokenAddress.toLowerCase()] = coin.tokenPrice;
408
+ }
403
409
  }
404
410
  }
405
411
  return [2 /*return*/, priceDict];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@curvefi/api",
3
- "version": "1.24.5",
3
+ "version": "1.25.2",
4
4
  "description": "JavaScript library for curve.fi",
5
5
  "main": "lib/index.js",
6
6
  "author": "Macket",