@curvefi/api 2.2.1 → 2.3.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.
- package/lib/constants/abis/dusd/sCurveRewards.json +472 -1
- package/lib/constants/abis/factory-v2/MetaFraxUSD.json +1187 -0
- package/lib/constants/abis/factory-v2/MetaFraxUSDBalances.json +1200 -0
- package/lib/constants/abis/fraxusdc/metaZap.json +284 -0
- package/lib/constants/abis/fraxusdc/swap.json +868 -0
- package/lib/constants/abis/gauge_child.json +1039 -0
- package/lib/constants/abis/{gauge_rewards_only.json → minter_child.json} +159 -312
- package/lib/constants/abis/musd/sCurveRewards.json +482 -1
- package/lib/constants/abis/rsv/sCurveRewards.json +472 -1
- package/lib/constants/abis/sbtc/sCurveRewards.json +566 -1
- package/lib/constants/abis/susdv2/sCurveRewards.json +457 -1
- package/lib/constants/abis/tbtc/sCurveRewards.json +472 -1
- package/lib/constants/aliases.js +2 -2
- package/lib/constants/pools/avalanche.js +13 -20
- package/lib/constants/pools/ethereum.js +55 -32
- package/lib/constants/pools/polygon.js +19 -24
- package/lib/constants/utils.js +0 -9
- package/lib/curve.js +22 -20
- package/lib/factory/common.js +6 -0
- package/lib/factory/constants.js +8 -0
- package/lib/factory/factory-api.js +0 -7
- package/lib/interfaces.d.ts +0 -2
- package/lib/pools/PoolTemplate.d.ts +10 -1
- package/lib/pools/PoolTemplate.js +166 -98
- package/lib/utils.d.ts +1 -0
- package/lib/utils.js +9 -1
- package/package.json +1 -1
|
@@ -62,9 +62,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
62
62
|
exports.PoolTemplate = void 0;
|
|
63
63
|
var ethers_1 = require("ethers");
|
|
64
64
|
var bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
65
|
+
var memoizee_1 = __importDefault(require("memoizee"));
|
|
65
66
|
var external_api_1 = require("../external-api");
|
|
66
67
|
var utils_1 = require("../utils");
|
|
67
68
|
var curve_1 = require("../curve");
|
|
69
|
+
var ERC20_json_1 = __importDefault(require("../constants/abis/ERC20.json"));
|
|
68
70
|
var PoolTemplate = /** @class */ (function () {
|
|
69
71
|
function PoolTemplate(id) {
|
|
70
72
|
var _this = this;
|
|
@@ -190,36 +192,55 @@ var PoolTemplate = /** @class */ (function () {
|
|
|
190
192
|
});
|
|
191
193
|
}); };
|
|
192
194
|
this.statsTokenApy = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
193
|
-
var gaugeContract, lpTokenContract, gaugeControllerContract,
|
|
194
|
-
return __generator(this, function (
|
|
195
|
-
switch (
|
|
195
|
+
var totalLiquidityUSD, gaugeContract_1, crvContract, week, currentWeek, inflationRateBN, _a, _c, crvRate_1, apy, gaugeContract, lpTokenContract, gaugeControllerContract, _d, inflation, weight, workingSupply, totalSupply, rate, crvRate, baseApy, boostedApy;
|
|
196
|
+
return __generator(this, function (_e) {
|
|
197
|
+
switch (_e.label) {
|
|
196
198
|
case 0:
|
|
197
199
|
if (this.gauge === ethers_1.ethers.constants.AddressZero)
|
|
198
200
|
throw Error("".concat(this.name, " doesn't have gauge"));
|
|
199
|
-
if (curve_1.curve.chainId !== 1)
|
|
200
|
-
throw Error("No such method on network with id ".concat(curve_1.curve.chainId, ". Use getRewardsApy instead"));
|
|
201
|
-
gaugeContract = curve_1.curve.contracts[this.gauge].multicallContract;
|
|
202
|
-
lpTokenContract = curve_1.curve.contracts[this.lpToken].multicallContract;
|
|
203
|
-
gaugeControllerContract = curve_1.curve.contracts[curve_1.curve.constants.ALIASES.gauge_controller].multicallContract;
|
|
204
201
|
return [4 /*yield*/, this.statsTotalLiquidity()];
|
|
205
202
|
case 1:
|
|
206
|
-
totalLiquidityUSD =
|
|
203
|
+
totalLiquidityUSD = _e.sent();
|
|
207
204
|
if (Number(totalLiquidityUSD) === 0)
|
|
208
205
|
return [2 /*return*/, ["0", "0"]];
|
|
206
|
+
if (!(curve_1.curve.chainId !== 1)) return [3 /*break*/, 6];
|
|
207
|
+
gaugeContract_1 = curve_1.curve.contracts[this.gauge].contract;
|
|
208
|
+
crvContract = curve_1.curve.contracts[curve_1.curve.constants.ALIASES.crv].contract;
|
|
209
|
+
week = 7 * 86400;
|
|
210
|
+
currentWeek = Math.floor(Date.now() / 1000 / week);
|
|
211
|
+
_a = utils_1.toBN;
|
|
212
|
+
return [4 /*yield*/, gaugeContract_1.inflation_rate(currentWeek, curve_1.curve.constantOptions)];
|
|
213
|
+
case 2:
|
|
214
|
+
inflationRateBN = _a.apply(void 0, [_e.sent()]);
|
|
215
|
+
if (!inflationRateBN.eq(0)) return [3 /*break*/, 4];
|
|
216
|
+
_c = utils_1.toBN;
|
|
217
|
+
return [4 /*yield*/, crvContract.balanceOf(this.gauge, curve_1.curve.constantOptions)];
|
|
218
|
+
case 3:
|
|
219
|
+
inflationRateBN = _c.apply(void 0, [_e.sent()]).div(week);
|
|
220
|
+
_e.label = 4;
|
|
221
|
+
case 4: return [4 /*yield*/, (0, utils_1._getUsdRate)(curve_1.curve.constants.ALIASES.crv)];
|
|
222
|
+
case 5:
|
|
223
|
+
crvRate_1 = _e.sent();
|
|
224
|
+
apy = inflationRateBN.times(31536000).times(crvRate_1).div(Number(totalLiquidityUSD));
|
|
225
|
+
return [2 /*return*/, [apy.times(100).toFixed(4), apy.times(100).toFixed(4)]];
|
|
226
|
+
case 6:
|
|
227
|
+
gaugeContract = curve_1.curve.contracts[this.gauge].multicallContract;
|
|
228
|
+
lpTokenContract = curve_1.curve.contracts[this.lpToken].multicallContract;
|
|
229
|
+
gaugeControllerContract = curve_1.curve.contracts[curve_1.curve.constants.ALIASES.gauge_controller].multicallContract;
|
|
209
230
|
return [4 /*yield*/, curve_1.curve.multicallProvider.all([
|
|
210
231
|
gaugeContract.inflation_rate(),
|
|
211
232
|
gaugeControllerContract.gauge_relative_weight(this.gauge),
|
|
212
233
|
gaugeContract.working_supply(),
|
|
213
234
|
lpTokenContract.totalSupply(),
|
|
214
235
|
])];
|
|
215
|
-
case
|
|
216
|
-
|
|
236
|
+
case 7:
|
|
237
|
+
_d = (_e.sent()).map(function (value) { return (0, utils_1.toBN)(value); }), inflation = _d[0], weight = _d[1], workingSupply = _d[2], totalSupply = _d[3];
|
|
217
238
|
if (Number(workingSupply) === 0)
|
|
218
239
|
return [2 /*return*/, ["0", "0"]];
|
|
219
240
|
rate = inflation.times(weight).times(31536000).times(0.4).div(workingSupply).times(totalSupply).div(Number(totalLiquidityUSD));
|
|
220
241
|
return [4 /*yield*/, (0, utils_1._getUsdRate)(curve_1.curve.constants.ALIASES.crv)];
|
|
221
|
-
case
|
|
222
|
-
crvRate =
|
|
242
|
+
case 8:
|
|
243
|
+
crvRate = _e.sent();
|
|
223
244
|
baseApy = rate.times(crvRate);
|
|
224
245
|
boostedApy = baseApy.times(2.5);
|
|
225
246
|
return [2 /*return*/, [baseApy.times(100).toFixed(4), boostedApy.times(100).toFixed(4)]];
|
|
@@ -227,44 +248,44 @@ var PoolTemplate = /** @class */ (function () {
|
|
|
227
248
|
});
|
|
228
249
|
}); };
|
|
229
250
|
this.statsRewardsApy = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
230
|
-
var apy, _i,
|
|
231
|
-
var
|
|
232
|
-
return __generator(this, function (
|
|
233
|
-
switch (
|
|
251
|
+
var apy, rewardTokens, _i, rewardTokens_1, rewardToken, gaugeContract, totalLiquidityUSD, rewardRate, rewardData, periodFinish, inflation, baseApy, network, promises, _a, mainPoolsRewards, allTypesExtendedPoolData, rewards, _c, _d, extendedPoolData, _e, _f, pool;
|
|
252
|
+
var _g;
|
|
253
|
+
return __generator(this, function (_h) {
|
|
254
|
+
switch (_h.label) {
|
|
234
255
|
case 0:
|
|
235
256
|
if (![137, 43114].includes(curve_1.curve.chainId)) return [3 /*break*/, 8];
|
|
236
257
|
apy = [];
|
|
237
|
-
|
|
238
|
-
_k.label = 1;
|
|
258
|
+
return [4 /*yield*/, this.rewardTokens()];
|
|
239
259
|
case 1:
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
return [4 /*yield*/, this.statsTotalLiquidity()];
|
|
260
|
+
rewardTokens = _h.sent();
|
|
261
|
+
_i = 0, rewardTokens_1 = rewardTokens;
|
|
262
|
+
_h.label = 2;
|
|
244
263
|
case 2:
|
|
245
|
-
|
|
246
|
-
|
|
264
|
+
if (!(_i < rewardTokens_1.length)) return [3 /*break*/, 7];
|
|
265
|
+
rewardToken = rewardTokens_1[_i];
|
|
266
|
+
gaugeContract = curve_1.curve.contracts[this.gauge].contract;
|
|
267
|
+
return [4 /*yield*/, this.statsTotalLiquidity()];
|
|
247
268
|
case 3:
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
return [4 /*yield*/, rewardContract.reward_data(curve_1.curve.constants.ALIASES.crv, curve_1.curve.constantOptions)];
|
|
269
|
+
totalLiquidityUSD = _h.sent();
|
|
270
|
+
return [4 /*yield*/, (0, utils_1._getUsdRate)(rewardToken.token)];
|
|
251
271
|
case 4:
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
rewardTokenContract = curve_1.curve.contracts[rewardToken].contract;
|
|
255
|
-
return [4 /*yield*/, rewardTokenContract.symbol()];
|
|
272
|
+
rewardRate = _h.sent();
|
|
273
|
+
return [4 /*yield*/, gaugeContract.reward_data(rewardToken.token, curve_1.curve.constantOptions)];
|
|
256
274
|
case 5:
|
|
257
|
-
|
|
275
|
+
rewardData = _h.sent();
|
|
276
|
+
periodFinish = Number(ethers_1.ethers.utils.formatUnits(rewardData.period_finish, 0)) * 1000;
|
|
277
|
+
inflation = (0, utils_1.toBN)(rewardData.rate, rewardToken.decimals);
|
|
278
|
+
baseApy = periodFinish > Date.now() ? inflation.times(31536000).times(rewardRate).div(Number(totalLiquidityUSD)) : (0, utils_1.BN)(0);
|
|
258
279
|
apy.push({
|
|
259
280
|
gaugeAddress: this.gauge.toLowerCase(),
|
|
260
|
-
tokenAddress: rewardToken,
|
|
261
|
-
symbol: symbol,
|
|
281
|
+
tokenAddress: rewardToken.token,
|
|
282
|
+
symbol: rewardToken.symbol,
|
|
262
283
|
apy: Number(baseApy.times(100).toFixed(4)),
|
|
263
284
|
});
|
|
264
|
-
|
|
285
|
+
_h.label = 6;
|
|
265
286
|
case 6:
|
|
266
287
|
_i++;
|
|
267
|
-
return [3 /*break*/,
|
|
288
|
+
return [3 /*break*/, 2];
|
|
268
289
|
case 7: return [2 /*return*/, apy];
|
|
269
290
|
case 8:
|
|
270
291
|
network = curve_1.curve.constants.NETWORK_NAME;
|
|
@@ -277,21 +298,87 @@ var PoolTemplate = /** @class */ (function () {
|
|
|
277
298
|
];
|
|
278
299
|
return [4 /*yield*/, Promise.all(promises)];
|
|
279
300
|
case 9:
|
|
280
|
-
|
|
301
|
+
_a = _h.sent(), mainPoolsRewards = _a[0], allTypesExtendedPoolData = _a.slice(1);
|
|
281
302
|
rewards = mainPoolsRewards;
|
|
282
|
-
for (
|
|
283
|
-
extendedPoolData =
|
|
284
|
-
for (
|
|
285
|
-
pool =
|
|
303
|
+
for (_c = 0, _d = allTypesExtendedPoolData; _c < _d.length; _c++) {
|
|
304
|
+
extendedPoolData = _d[_c];
|
|
305
|
+
for (_e = 0, _f = extendedPoolData.poolData; _e < _f.length; _e++) {
|
|
306
|
+
pool = _f[_e];
|
|
286
307
|
if (pool.gaugeAddress && pool.gaugeRewards) {
|
|
287
308
|
rewards[pool.gaugeAddress.toLowerCase()] = pool.gaugeRewards;
|
|
288
309
|
}
|
|
289
310
|
}
|
|
290
311
|
}
|
|
291
|
-
return [2 /*return*/, (
|
|
312
|
+
return [2 /*return*/, (_g = rewards[this.gauge.toLowerCase()]) !== null && _g !== void 0 ? _g : []];
|
|
292
313
|
}
|
|
293
314
|
});
|
|
294
315
|
}); };
|
|
316
|
+
this.rewardTokens = (0, memoizee_1.default)(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
317
|
+
var gaugeContract, gaugeMulticallContract, rewardCount, _a, _c, _d, tokenCalls, i, tokens, tokenInfoCalls, _i, tokens_1, token, tokenMulticallContract, tokenInfo_1, i, rewardContract, method, token, tokenMulticallContract, _e, symbol, decimals;
|
|
318
|
+
return __generator(this, function (_f) {
|
|
319
|
+
switch (_f.label) {
|
|
320
|
+
case 0:
|
|
321
|
+
if (this.gauge === ethers_1.ethers.constants.AddressZero)
|
|
322
|
+
return [2 /*return*/, []];
|
|
323
|
+
gaugeContract = curve_1.curve.contracts[this.gauge].contract;
|
|
324
|
+
gaugeMulticallContract = curve_1.curve.contracts[this.gauge].multicallContract;
|
|
325
|
+
if (!("reward_tokens(uint256)" in gaugeContract)) return [3 /*break*/, 5];
|
|
326
|
+
rewardCount = 8;
|
|
327
|
+
if (!("reward_count()" in gaugeContract)) return [3 /*break*/, 2];
|
|
328
|
+
_a = Number;
|
|
329
|
+
_d = (_c = ethers_1.ethers.utils).formatUnits;
|
|
330
|
+
return [4 /*yield*/, gaugeContract.reward_count(curve_1.curve.constantOptions)];
|
|
331
|
+
case 1:
|
|
332
|
+
rewardCount = _a.apply(void 0, [_d.apply(_c, [_f.sent(), 0])]);
|
|
333
|
+
_f.label = 2;
|
|
334
|
+
case 2:
|
|
335
|
+
tokenCalls = [];
|
|
336
|
+
for (i = 0; i < rewardCount; i++) {
|
|
337
|
+
tokenCalls.push(gaugeMulticallContract.reward_tokens(i));
|
|
338
|
+
}
|
|
339
|
+
return [4 /*yield*/, curve_1.curve.multicallProvider.all(tokenCalls)];
|
|
340
|
+
case 3:
|
|
341
|
+
tokens = (_f.sent())
|
|
342
|
+
.filter(function (addr) { return addr !== ethers_1.ethers.constants.AddressZero; })
|
|
343
|
+
.map(function (addr) { return addr.toLowerCase(); });
|
|
344
|
+
tokenInfoCalls = [];
|
|
345
|
+
for (_i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {
|
|
346
|
+
token = tokens_1[_i];
|
|
347
|
+
(0, utils_1._setContracts)(token, ERC20_json_1.default);
|
|
348
|
+
tokenMulticallContract = curve_1.curve.contracts[token].multicallContract;
|
|
349
|
+
tokenInfoCalls.push(tokenMulticallContract.symbol(), tokenMulticallContract.decimals());
|
|
350
|
+
}
|
|
351
|
+
return [4 /*yield*/, curve_1.curve.multicallProvider.all(tokenInfoCalls)];
|
|
352
|
+
case 4:
|
|
353
|
+
tokenInfo_1 = _f.sent();
|
|
354
|
+
for (i = 0; i < tokens.length; i++) {
|
|
355
|
+
curve_1.curve.constants.DECIMALS[tokens[i]] = tokenInfo_1[(i * 2) + 1];
|
|
356
|
+
}
|
|
357
|
+
return [2 /*return*/, tokens.map(function (token, i) { return ({ token: token, symbol: tokenInfo_1[i * 2], decimals: tokenInfo_1[(i * 2) + 1] }); })];
|
|
358
|
+
case 5:
|
|
359
|
+
if (!('claimable_reward(address)' in gaugeContract)) return [3 /*break*/, 8];
|
|
360
|
+
rewardContract = curve_1.curve.contracts[this.sRewardContract].contract;
|
|
361
|
+
method = "snx()" in rewardContract ? "snx" : "rewardsToken" // susd, tbtc : dusd, musd, rsv, sbtc
|
|
362
|
+
;
|
|
363
|
+
return [4 /*yield*/, rewardContract[method](curve_1.curve.constantOptions)];
|
|
364
|
+
case 6:
|
|
365
|
+
token = (_f.sent()).toLowerCase();
|
|
366
|
+
(0, utils_1._setContracts)(token, ERC20_json_1.default);
|
|
367
|
+
tokenMulticallContract = curve_1.curve.contracts[token].multicallContract;
|
|
368
|
+
return [4 /*yield*/, curve_1.curve.multicallProvider.all([
|
|
369
|
+
tokenMulticallContract.symbol(),
|
|
370
|
+
tokenMulticallContract.decimals(),
|
|
371
|
+
])];
|
|
372
|
+
case 7:
|
|
373
|
+
_e = _f.sent(), symbol = _e[0], decimals = _e[1];
|
|
374
|
+
return [2 /*return*/, [{ token: token, symbol: symbol, decimals: decimals }]];
|
|
375
|
+
case 8: return [2 /*return*/, []]; // gauge
|
|
376
|
+
}
|
|
377
|
+
});
|
|
378
|
+
}); }, {
|
|
379
|
+
promise: true,
|
|
380
|
+
maxAge: 30 * 60 * 1000, // 30m
|
|
381
|
+
});
|
|
295
382
|
// ---------------- ... ----------------
|
|
296
383
|
this.gaugeMaxBoostedDeposit = function () {
|
|
297
384
|
var addresses = [];
|
|
@@ -654,7 +741,6 @@ var PoolTemplate = /** @class */ (function () {
|
|
|
654
741
|
this.underlyingDecimals = poolData.underlying_decimals;
|
|
655
742
|
this.wrappedDecimals = poolData.wrapped_decimals;
|
|
656
743
|
this.useLending = poolData.use_lending || poolData.underlying_coin_addresses.map(function () { return false; });
|
|
657
|
-
this.rewardTokens = poolData.reward_tokens || [];
|
|
658
744
|
this.estimateGas = {
|
|
659
745
|
depositApprove: this.depositApproveEstimateGas.bind(this),
|
|
660
746
|
deposit: this.depositEstimateGas.bind(this),
|
|
@@ -1092,8 +1178,6 @@ var PoolTemplate = /** @class */ (function () {
|
|
|
1092
1178
|
if (this.gauge === ethers_1.ethers.constants.AddressZero) {
|
|
1093
1179
|
throw Error("claimableCrv method doesn't exist for pool ".concat(this.name, " (id: ").concat(this.name, "). There is no gauge"));
|
|
1094
1180
|
}
|
|
1095
|
-
if (curve_1.curve.chainId !== 1)
|
|
1096
|
-
throw Error("No such method on network with id ".concat(curve_1.curve.chainId, ". Use claimableRewards instead"));
|
|
1097
1181
|
address = address || curve_1.curve.signerAddress;
|
|
1098
1182
|
if (!address)
|
|
1099
1183
|
throw Error("Need to connect wallet or pass address into args");
|
|
@@ -1112,8 +1196,6 @@ var PoolTemplate = /** @class */ (function () {
|
|
|
1112
1196
|
if (this.gauge === ethers_1.ethers.constants.AddressZero) {
|
|
1113
1197
|
throw Error("claimCrv method doesn't exist for pool ".concat(this.name, " (id: ").concat(this.name, "). There is no gauge"));
|
|
1114
1198
|
}
|
|
1115
|
-
if (curve_1.curve.chainId !== 1)
|
|
1116
|
-
throw Error("No such method on network with id ".concat(curve_1.curve.chainId, ". Use claimRewards instead"));
|
|
1117
1199
|
return [4 /*yield*/, curve_1.curve.contracts[curve_1.curve.constants.ALIASES.minter].contract.estimateGas.mint(this.gauge, curve_1.curve.constantOptions)];
|
|
1118
1200
|
case 1: return [2 /*return*/, (_a.sent()).toNumber()];
|
|
1119
1201
|
}
|
|
@@ -1122,32 +1204,30 @@ var PoolTemplate = /** @class */ (function () {
|
|
|
1122
1204
|
};
|
|
1123
1205
|
PoolTemplate.prototype.claimCrv = function () {
|
|
1124
1206
|
return __awaiter(this, void 0, void 0, function () {
|
|
1125
|
-
var gasLimit;
|
|
1207
|
+
var contract, gasLimit;
|
|
1126
1208
|
return __generator(this, function (_a) {
|
|
1127
1209
|
switch (_a.label) {
|
|
1128
1210
|
case 0:
|
|
1129
1211
|
if (this.gauge === ethers_1.ethers.constants.AddressZero) {
|
|
1130
1212
|
throw Error("claimCrv method doesn't exist for pool ".concat(this.name, " (id: ").concat(this.name, "). There is no gauge"));
|
|
1131
1213
|
}
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
return [4 /*yield*/, curve_1.curve.contracts[curve_1.curve.constants.ALIASES.minter].contract.estimateGas.mint(this.gauge, curve_1.curve.constantOptions)];
|
|
1214
|
+
contract = curve_1.curve.contracts[curve_1.curve.constants.ALIASES.minter].contract;
|
|
1215
|
+
return [4 /*yield*/, contract.estimateGas.mint(this.gauge, curve_1.curve.constantOptions)];
|
|
1135
1216
|
case 1:
|
|
1136
1217
|
gasLimit = (_a.sent()).mul(130).div(100);
|
|
1137
|
-
return [4 /*yield*/,
|
|
1218
|
+
return [4 /*yield*/, contract.mint(this.gauge, __assign(__assign({}, curve_1.curve.options), { gasLimit: gasLimit }))];
|
|
1138
1219
|
case 2: return [2 /*return*/, (_a.sent()).hash];
|
|
1139
1220
|
}
|
|
1140
1221
|
});
|
|
1141
1222
|
});
|
|
1142
1223
|
};
|
|
1143
1224
|
// TODO 1. Fix aave and saave error
|
|
1144
|
-
// TODO 2. Figure out Synthetix cumulative results
|
|
1145
1225
|
PoolTemplate.prototype.claimableRewards = function (address) {
|
|
1146
1226
|
if (address === void 0) { address = ""; }
|
|
1147
1227
|
return __awaiter(this, void 0, void 0, function () {
|
|
1148
|
-
var gaugeContract, rewards, _i,
|
|
1149
|
-
return __generator(this, function (
|
|
1150
|
-
switch (
|
|
1228
|
+
var gaugeContract, rewardTokens, rewards, _i, rewardTokens_2, rewardToken, amount, _a, _c, rewardToken, _totalAmount, _claimedAmount;
|
|
1229
|
+
return __generator(this, function (_d) {
|
|
1230
|
+
switch (_d.label) {
|
|
1151
1231
|
case 0:
|
|
1152
1232
|
if (this.gauge === ethers_1.ethers.constants.AddressZero) {
|
|
1153
1233
|
throw Error("claimableRewards method doesn't exist for pool ".concat(this.name, " (id: ").concat(this.name, "). There is no gauge"));
|
|
@@ -1156,58 +1236,46 @@ var PoolTemplate = /** @class */ (function () {
|
|
|
1156
1236
|
if (!address)
|
|
1157
1237
|
throw Error("Need to connect wallet or pass address into args");
|
|
1158
1238
|
gaugeContract = curve_1.curve.contracts[this.gauge].contract;
|
|
1159
|
-
|
|
1160
|
-
if (!('claimable_reward(address,address)' in gaugeContract)) return [3 /*break*/, 7];
|
|
1161
|
-
_i = 0, _a = this.rewardTokens;
|
|
1162
|
-
_e.label = 1;
|
|
1239
|
+
return [4 /*yield*/, this.rewardTokens()];
|
|
1163
1240
|
case 1:
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1241
|
+
rewardTokens = _d.sent();
|
|
1242
|
+
rewards = [];
|
|
1243
|
+
if (!('claimable_reward(address,address)' in gaugeContract)) return [3 /*break*/, 6];
|
|
1244
|
+
_i = 0, rewardTokens_2 = rewardTokens;
|
|
1245
|
+
_d.label = 2;
|
|
1168
1246
|
case 2:
|
|
1169
|
-
|
|
1170
|
-
|
|
1247
|
+
if (!(_i < rewardTokens_2.length)) return [3 /*break*/, 5];
|
|
1248
|
+
rewardToken = rewardTokens_2[_i];
|
|
1249
|
+
_c = (_a = ethers_1.ethers.utils).formatUnits;
|
|
1250
|
+
return [4 /*yield*/, gaugeContract.claimable_reward(address, rewardToken, curve_1.curve.constantOptions)];
|
|
1171
1251
|
case 3:
|
|
1172
|
-
|
|
1173
|
-
method = curve_1.curve.chainId === 1 ? "claimable_reward" : "claimable_reward_write";
|
|
1174
|
-
_d = (_c = ethers_1.ethers.utils).formatUnits;
|
|
1175
|
-
return [4 /*yield*/, gaugeContract[method](address, rewardToken, curve_1.curve.constantOptions)];
|
|
1176
|
-
case 4:
|
|
1177
|
-
amount = _d.apply(_c, [_e.sent(), decimals]);
|
|
1252
|
+
amount = _c.apply(_a, [_d.sent(), rewardToken.decimals]);
|
|
1178
1253
|
rewards.push({
|
|
1179
|
-
token: rewardToken,
|
|
1180
|
-
symbol: symbol,
|
|
1254
|
+
token: rewardToken.token,
|
|
1255
|
+
symbol: rewardToken.symbol,
|
|
1181
1256
|
amount: amount,
|
|
1182
1257
|
});
|
|
1183
|
-
|
|
1184
|
-
case
|
|
1258
|
+
_d.label = 4;
|
|
1259
|
+
case 4:
|
|
1185
1260
|
_i++;
|
|
1186
|
-
return [3 /*break*/,
|
|
1187
|
-
case
|
|
1188
|
-
case
|
|
1189
|
-
if (!('claimable_reward(address)' in gaugeContract &&
|
|
1190
|
-
rewardToken =
|
|
1191
|
-
rewardTokenContract = curve_1.curve.contracts[rewardToken].contract;
|
|
1192
|
-
return [4 /*yield*/, rewardTokenContract.symbol()];
|
|
1193
|
-
case 8:
|
|
1194
|
-
symbol = _e.sent();
|
|
1195
|
-
return [4 /*yield*/, rewardTokenContract.decimals()];
|
|
1196
|
-
case 9:
|
|
1197
|
-
decimals = _e.sent();
|
|
1261
|
+
return [3 /*break*/, 2];
|
|
1262
|
+
case 5: return [3 /*break*/, 9];
|
|
1263
|
+
case 6:
|
|
1264
|
+
if (!('claimable_reward(address)' in gaugeContract && rewardTokens.length > 0)) return [3 /*break*/, 9];
|
|
1265
|
+
rewardToken = rewardTokens[0];
|
|
1198
1266
|
return [4 /*yield*/, gaugeContract.claimable_reward(address, curve_1.curve.constantOptions)];
|
|
1199
|
-
case
|
|
1200
|
-
_totalAmount =
|
|
1267
|
+
case 7:
|
|
1268
|
+
_totalAmount = _d.sent();
|
|
1201
1269
|
return [4 /*yield*/, gaugeContract.claimed_rewards_for(address, curve_1.curve.constantOptions)];
|
|
1202
|
-
case
|
|
1203
|
-
_claimedAmount =
|
|
1270
|
+
case 8:
|
|
1271
|
+
_claimedAmount = _d.sent();
|
|
1204
1272
|
rewards.push({
|
|
1205
|
-
token: rewardToken,
|
|
1206
|
-
symbol: symbol,
|
|
1207
|
-
amount: ethers_1.ethers.utils.formatUnits(_totalAmount.sub(_claimedAmount), decimals),
|
|
1273
|
+
token: rewardToken.token,
|
|
1274
|
+
symbol: rewardToken.symbol,
|
|
1275
|
+
amount: ethers_1.ethers.utils.formatUnits(_totalAmount.sub(_claimedAmount), rewardToken.decimals),
|
|
1208
1276
|
});
|
|
1209
|
-
|
|
1210
|
-
case
|
|
1277
|
+
_d.label = 9;
|
|
1278
|
+
case 9: return [2 /*return*/, rewards];
|
|
1211
1279
|
}
|
|
1212
1280
|
});
|
|
1213
1281
|
});
|
package/lib/utils.d.ts
CHANGED
|
@@ -29,3 +29,4 @@ export declare const _getUsdPricesFromApi: () => Promise<IDict<number>>;
|
|
|
29
29
|
export declare const _getUsdRate: (assetId: string) => Promise<number>;
|
|
30
30
|
export declare const getUsdRate: (coin: string) => Promise<number>;
|
|
31
31
|
export declare const getTVL: (chainId?: number) => Promise<number>;
|
|
32
|
+
export declare const _setContracts: (address: string, abi: any) => void;
|
package/lib/utils.js
CHANGED
|
@@ -59,12 +59,13 @@ 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.getTVL = exports.getUsdRate = exports._getUsdRate = 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.getEthIndex = exports.isEth = exports.parseUnits = exports.formatNumber = exports.checkNumber = exports._cutZeros = exports.fromBN = exports.toStringFromBN = exports.toBN = exports.BN = exports.MAX_ALLOWANCE = exports.ETH_ADDRESS = void 0;
|
|
62
|
+
exports._setContracts = exports.getTVL = exports.getUsdRate = exports._getUsdRate = 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.getEthIndex = exports.isEth = exports.parseUnits = exports.formatNumber = exports.checkNumber = exports._cutZeros = exports.fromBN = exports.toStringFromBN = exports.toBN = exports.BN = 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 bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
66
66
|
var curve_1 = require("./curve");
|
|
67
67
|
var external_api_1 = require("./external-api");
|
|
68
|
+
var ethcall_1 = require("ethcall");
|
|
68
69
|
exports.ETH_ADDRESS = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
|
|
69
70
|
exports.MAX_ALLOWANCE = ethers_1.ethers.BigNumber.from(2).pow(ethers_1.ethers.BigNumber.from(256)).sub(ethers_1.ethers.BigNumber.from(1));
|
|
70
71
|
// bignumber.js
|
|
@@ -537,3 +538,10 @@ var getTVL = function (chainId) {
|
|
|
537
538
|
});
|
|
538
539
|
};
|
|
539
540
|
exports.getTVL = getTVL;
|
|
541
|
+
var _setContracts = function (address, abi) {
|
|
542
|
+
curve_1.curve.contracts[address] = {
|
|
543
|
+
contract: new ethers_1.Contract(address, abi, curve_1.curve.signer || curve_1.curve.provider),
|
|
544
|
+
multicallContract: new ethcall_1.Contract(address, abi),
|
|
545
|
+
};
|
|
546
|
+
};
|
|
547
|
+
exports._setContracts = _setContracts;
|