@curvefi/api 2.24.2 → 2.24.4
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.
- package/lib/constants/abis/3pool/meta_zap_crypto.json +16 -0
- package/lib/constants/abis/fraxusdc/meta_zap_crypto.json +16 -0
- package/lib/external-api.d.ts +1 -2
- package/lib/external-api.js +1 -17
- package/lib/interfaces.d.ts +10 -4
- package/lib/pools/PoolTemplate.d.ts +3 -3
- package/lib/pools/PoolTemplate.js +136 -135
- package/lib/utils.d.ts +2 -1
- package/lib/utils.js +37 -2
- package/package.json +1 -1
|
@@ -125,6 +125,10 @@
|
|
|
125
125
|
{
|
|
126
126
|
"name": "_min_dy",
|
|
127
127
|
"type": "uint256"
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"name": "_use_eth",
|
|
131
|
+
"type": "bool"
|
|
128
132
|
}
|
|
129
133
|
],
|
|
130
134
|
"outputs": [
|
|
@@ -179,6 +183,10 @@
|
|
|
179
183
|
{
|
|
180
184
|
"name": "_min_mint_amount",
|
|
181
185
|
"type": "uint256"
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
"name": "_use_eth",
|
|
189
|
+
"type": "bool"
|
|
182
190
|
}
|
|
183
191
|
],
|
|
184
192
|
"outputs": [
|
|
@@ -225,6 +233,10 @@
|
|
|
225
233
|
{
|
|
226
234
|
"name": "_min_amounts",
|
|
227
235
|
"type": "uint256[4]"
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
"name": "_use_eth",
|
|
239
|
+
"type": "bool"
|
|
228
240
|
}
|
|
229
241
|
],
|
|
230
242
|
"outputs": [
|
|
@@ -254,6 +266,10 @@
|
|
|
254
266
|
{
|
|
255
267
|
"name": "_min_amount",
|
|
256
268
|
"type": "uint256"
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
"name": "_use_eth",
|
|
272
|
+
"type": "bool"
|
|
257
273
|
}
|
|
258
274
|
],
|
|
259
275
|
"outputs": [
|
|
@@ -117,6 +117,10 @@
|
|
|
117
117
|
{
|
|
118
118
|
"name": "_min_dy",
|
|
119
119
|
"type": "uint256"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"name": "_use_eth",
|
|
123
|
+
"type": "bool"
|
|
120
124
|
}
|
|
121
125
|
],
|
|
122
126
|
"outputs": [
|
|
@@ -171,6 +175,10 @@
|
|
|
171
175
|
{
|
|
172
176
|
"name": "_min_mint_amount",
|
|
173
177
|
"type": "uint256"
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"name": "_use_eth",
|
|
181
|
+
"type": "bool"
|
|
174
182
|
}
|
|
175
183
|
],
|
|
176
184
|
"outputs": [
|
|
@@ -217,6 +225,10 @@
|
|
|
217
225
|
{
|
|
218
226
|
"name": "_min_amounts",
|
|
219
227
|
"type": "uint256[3]"
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
"name": "_use_eth",
|
|
231
|
+
"type": "bool"
|
|
220
232
|
}
|
|
221
233
|
],
|
|
222
234
|
"outputs": [
|
|
@@ -246,6 +258,10 @@
|
|
|
246
258
|
{
|
|
247
259
|
"name": "_min_amount",
|
|
248
260
|
"type": "uint256"
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
"name": "_use_eth",
|
|
264
|
+
"type": "bool"
|
|
249
265
|
}
|
|
250
266
|
],
|
|
251
267
|
"outputs": [
|
package/lib/external-api.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { IExtendedPoolDataFromApi, ISubgraphPoolData,
|
|
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;
|
package/lib/external-api.js
CHANGED
|
@@ -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.
|
|
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;
|
package/lib/interfaces.d.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
|
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
|
|
293
|
-
|
|
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 () {
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
];
|
|
401
|
-
|
|
402
|
-
|
|
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 () {
|
|
714
|
-
|
|
715
|
-
return
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
.
|
|
740
|
-
.
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
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
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
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,
|
|
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
|
-
|
|
2804
|
+
dailyProfitBN = annualProfitBN.div(365);
|
|
2804
2805
|
return [2 /*return*/, {
|
|
2805
|
-
day:
|
|
2806
|
+
day: dailyProfitBN.toString(),
|
|
2806
2807
|
week: weeklyProfitBN.toString(),
|
|
2807
2808
|
month: monthlyProfitBN.toString(),
|
|
2808
2809
|
year: annualProfitBN.toString(),
|
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
|
-
|
|
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;
|