@curvefi/api 2.31.0 → 2.31.1

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.
Files changed (97) hide show
  1. package/lib/boosting.js +137 -402
  2. package/lib/constants/aliases.d.ts +11 -11
  3. package/lib/constants/aliases.js +12 -15
  4. package/lib/constants/coins/arbitrum.js +6 -9
  5. package/lib/constants/coins/aurora.js +6 -9
  6. package/lib/constants/coins/avalanche.js +7 -10
  7. package/lib/constants/coins/celo.js +6 -9
  8. package/lib/constants/coins/ethereum.js +10 -13
  9. package/lib/constants/coins/fantom.js +8 -11
  10. package/lib/constants/coins/kava.js +6 -9
  11. package/lib/constants/coins/moonbeam.js +6 -9
  12. package/lib/constants/coins/optimism.js +6 -9
  13. package/lib/constants/coins/polygon.js +7 -10
  14. package/lib/constants/coins/xdai.js +6 -9
  15. package/lib/constants/pools/arbitrum.d.ts +2 -4
  16. package/lib/constants/pools/arbitrum.js +22 -28
  17. package/lib/constants/pools/aurora.d.ts +2 -4
  18. package/lib/constants/pools/aurora.js +6 -12
  19. package/lib/constants/pools/avalanche.d.ts +2 -4
  20. package/lib/constants/pools/avalanche.js +21 -27
  21. package/lib/constants/pools/celo.d.ts +2 -4
  22. package/lib/constants/pools/celo.js +2 -5
  23. package/lib/constants/pools/ethereum.js +247 -253
  24. package/lib/constants/pools/fantom.d.ts +2 -4
  25. package/lib/constants/pools/fantom.js +28 -34
  26. package/lib/constants/pools/index.d.ts +11 -11
  27. package/lib/constants/pools/index.js +12 -25
  28. package/lib/constants/pools/kava.d.ts +2 -4
  29. package/lib/constants/pools/kava.js +2 -5
  30. package/lib/constants/pools/moonbeam.d.ts +2 -4
  31. package/lib/constants/pools/moonbeam.js +6 -12
  32. package/lib/constants/pools/optimism.d.ts +2 -4
  33. package/lib/constants/pools/optimism.js +9 -15
  34. package/lib/constants/pools/polygon.d.ts +2 -4
  35. package/lib/constants/pools/polygon.js +22 -28
  36. package/lib/constants/pools/xdai.d.ts +2 -4
  37. package/lib/constants/pools/xdai.js +24 -30
  38. package/lib/constants/utils.js +20 -29
  39. package/lib/curve.d.ts +9 -7
  40. package/lib/curve.js +397 -615
  41. package/lib/external-api.d.ts +1 -1
  42. package/lib/external-api.js +47 -140
  43. package/lib/factory/common.js +6 -10
  44. package/lib/factory/constants-crypto.js +48 -54
  45. package/lib/factory/constants.js +274 -280
  46. package/lib/factory/deploy.d.ts +8 -8
  47. package/lib/factory/deploy.js +177 -347
  48. package/lib/factory/factory-api.js +195 -278
  49. package/lib/factory/factory-crypto.js +170 -323
  50. package/lib/factory/factory.js +195 -350
  51. package/lib/index.d.ts +24 -25
  52. package/lib/index.js +87 -143
  53. package/lib/interfaces.d.ts +5 -5
  54. package/lib/interfaces.js +1 -2
  55. package/lib/pools/PoolTemplate.js +1516 -2929
  56. package/lib/pools/index.d.ts +2 -2
  57. package/lib/pools/index.js +3 -7
  58. package/lib/pools/mixins/common.d.ts +3 -4
  59. package/lib/pools/mixins/common.js +23 -112
  60. package/lib/pools/mixins/depositBalancedAmountsMixins.d.ts +1 -1
  61. package/lib/pools/mixins/depositBalancedAmountsMixins.js +50 -139
  62. package/lib/pools/mixins/depositMixins.d.ts +1 -1
  63. package/lib/pools/mixins/depositMixins.js +144 -417
  64. package/lib/pools/mixins/depositWrappedMixins.d.ts +1 -1
  65. package/lib/pools/mixins/depositWrappedMixins.js +72 -227
  66. package/lib/pools/mixins/poolBalancesMixin.d.ts +1 -1
  67. package/lib/pools/mixins/poolBalancesMixin.js +25 -105
  68. package/lib/pools/mixins/swapMixins.d.ts +1 -1
  69. package/lib/pools/mixins/swapMixins.js +127 -353
  70. package/lib/pools/mixins/swapWrappedMixins.d.ts +1 -1
  71. package/lib/pools/mixins/swapWrappedMixins.js +90 -276
  72. package/lib/pools/mixins/withdrawExpectedMixins.d.ts +1 -1
  73. package/lib/pools/mixins/withdrawExpectedMixins.js +26 -110
  74. package/lib/pools/mixins/withdrawImbalanceMixins.d.ts +1 -1
  75. package/lib/pools/mixins/withdrawImbalanceMixins.js +99 -321
  76. package/lib/pools/mixins/withdrawImbalanceWrappedMixins.d.ts +1 -1
  77. package/lib/pools/mixins/withdrawImbalanceWrappedMixins.js +53 -192
  78. package/lib/pools/mixins/withdrawMixins.d.ts +1 -1
  79. package/lib/pools/mixins/withdrawMixins.js +123 -390
  80. package/lib/pools/mixins/withdrawOneCoinExpectedMixins.d.ts +1 -1
  81. package/lib/pools/mixins/withdrawOneCoinExpectedMixins.js +17 -92
  82. package/lib/pools/mixins/withdrawOneCoinMixins.d.ts +1 -1
  83. package/lib/pools/mixins/withdrawOneCoinMixins.js +124 -390
  84. package/lib/pools/mixins/withdrawOneCoinWrappedExpectedMixins.d.ts +1 -1
  85. package/lib/pools/mixins/withdrawOneCoinWrappedExpectedMixins.js +9 -66
  86. package/lib/pools/mixins/withdrawOneCoinWrappedMixins.d.ts +1 -1
  87. package/lib/pools/mixins/withdrawOneCoinWrappedMixins.js +55 -190
  88. package/lib/pools/mixins/withdrawWrappedMixins.d.ts +1 -1
  89. package/lib/pools/mixins/withdrawWrappedMixins.js +52 -191
  90. package/lib/pools/poolConstructor.d.ts +1 -1
  91. package/lib/pools/poolConstructor.js +77 -101
  92. package/lib/pools/utils.js +298 -500
  93. package/lib/router.d.ts +2 -2
  94. package/lib/router.js +390 -653
  95. package/lib/utils.d.ts +9 -9
  96. package/lib/utils.js +377 -731
  97. package/package.json +8 -8
@@ -1,523 +1,321 @@
1
- "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
1
+ import { getPool } from "./poolConstructor.js";
2
+ import { curve } from "../curve.js";
3
+ import { _getRewardsFromApi, _getUsdRate, _setContracts, toBN } from "../utils.js";
4
+ import { _getPoolsFromApi } from "../external-api.js";
5
+ import ERC20Abi from "../constants/abis/ERC20.json" assert { type: 'json' };
6
+ // _userLpBalance: { address: { poolId: { _lpBalance: 0, time: 0 } } }
7
+ const _userLpBalanceCache = {};
8
+ const _isUserLpBalanceCacheExpired = (address, poolId) => (_userLpBalanceCache[address]?.[poolId]?.time || 0) + 600000 < Date.now();
9
+ const _getUserLpBalances = async (pools, address, useCache) => {
10
+ const poolsToFetch = useCache ? pools.filter((poolId) => _isUserLpBalanceCacheExpired(address, poolId)) : pools;
11
+ if (poolsToFetch.length > 0) {
12
+ const calls = [];
13
+ for (const poolId of poolsToFetch) {
14
+ const pool = getPool(poolId);
15
+ calls.push(curve.contracts[pool.lpToken].multicallContract.balanceOf(address));
16
+ if (pool.gauge !== curve.constants.ZERO_ADDRESS)
17
+ calls.push(curve.contracts[pool.gauge].multicallContract.balanceOf(address));
8
18
  }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
- return new (P || (P = Promise))(function (resolve, reject) {
16
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
- step((generator = generator.apply(thisArg, _arguments || [])).next());
20
- });
21
- };
22
- var __generator = (this && this.__generator) || function (thisArg, body) {
23
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
- function verb(n) { return function (v) { return step([n, v]); }; }
26
- function step(op) {
27
- if (f) throw new TypeError("Generator is already executing.");
28
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
- if (y = 0, t) op = [op[0] & 2, t.value];
31
- switch (op[0]) {
32
- case 0: case 1: t = op; break;
33
- case 4: _.label++; return { value: op[1], done: false };
34
- case 5: _.label++; y = op[1]; op = [0]; continue;
35
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
- default:
37
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
- if (t[2]) _.ops.pop();
42
- _.trys.pop(); continue;
43
- }
44
- op = body.call(thisArg, _);
45
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
19
+ const _rawBalances = await curve.multicallProvider.all(calls);
20
+ for (const poolId of poolsToFetch) {
21
+ const pool = getPool(poolId);
22
+ let _balance = _rawBalances.shift();
23
+ if (pool.gauge !== curve.constants.ZERO_ADDRESS)
24
+ _balance = _balance + _rawBalances.shift();
25
+ if (!_userLpBalanceCache[address])
26
+ _userLpBalanceCache[address] = {};
27
+ _userLpBalanceCache[address][poolId] = { '_lpBalance': _balance, 'time': Date.now() };
28
+ }
29
+ }
30
+ const _lpBalances = [];
31
+ for (const poolId of pools) {
32
+ _lpBalances.push(_userLpBalanceCache[address]?.[poolId]._lpBalance);
47
33
  }
34
+ return _lpBalances;
48
35
  };
49
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
50
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
51
- if (ar || !(i in from)) {
52
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
53
- ar[i] = from[i];
36
+ export const getUserPoolListByLiquidity = async (address = curve.signerAddress) => {
37
+ const pools = [...curve.getPoolList(), ...curve.getFactoryPoolList(), ...curve.getCryptoFactoryPoolList()];
38
+ const _lpBalances = await _getUserLpBalances(pools, address, false);
39
+ const userPoolList = [];
40
+ for (let i = 0; i < pools.length; i++) {
41
+ if (_lpBalances[i] > 0) {
42
+ userPoolList.push(pools[i]);
54
43
  }
55
44
  }
56
- return to.concat(ar || Array.prototype.slice.call(from));
45
+ return userPoolList;
57
46
  };
58
- var __importDefault = (this && this.__importDefault) || function (mod) {
59
- return (mod && mod.__esModule) ? mod : { "default": mod };
47
+ export const getUserLiquidityUSD = async (pools, address = curve.signerAddress) => {
48
+ const _lpBalances = await _getUserLpBalances(pools, address, true);
49
+ const userLiquidityUSD = [];
50
+ for (let i = 0; i < pools.length; i++) {
51
+ const pool = getPool(pools[i]);
52
+ const price = await _getUsdRate(pool.lpToken);
53
+ userLiquidityUSD.push(toBN(_lpBalances[i]).times(price).toFixed(8));
54
+ }
55
+ return userLiquidityUSD;
60
56
  };
61
- Object.defineProperty(exports, "__esModule", { value: true });
62
- exports._getAmplificationCoefficientsFromApi = exports.getUserPoolList = exports.getUserClaimable = exports.getUserPoolListByClaimable = exports.getUserLiquidityUSD = exports.getUserPoolListByLiquidity = void 0;
63
- var ethers_1 = require("ethers");
64
- var poolConstructor_1 = require("./poolConstructor");
65
- var curve_1 = require("../curve");
66
- var utils_1 = require("../utils");
67
- var external_api_1 = require("../external-api");
68
- var ERC20_json_1 = __importDefault(require("../constants/abis/ERC20.json"));
69
- // _userLpBalance: { address: { poolId: { _lpBalance: 0, time: 0 } } }
70
- var _userLpBalanceCache = {};
71
- var _isUserLpBalanceCacheExpired = function (address, poolId) { var _a, _b; return (((_b = (_a = _userLpBalanceCache[address]) === null || _a === void 0 ? void 0 : _a[poolId]) === null || _b === void 0 ? void 0 : _b.time) || 0) + 600000 < Date.now(); };
72
- var _getUserLpBalances = function (pools, address, useCache) { return __awaiter(void 0, void 0, void 0, function () {
73
- var poolsToFetch, calls, _i, poolsToFetch_1, poolId, pool, _rawBalances, _a, poolsToFetch_2, poolId, pool, _balance, _lpBalances, _b, pools_1, poolId;
74
- var _c;
75
- return __generator(this, function (_d) {
76
- switch (_d.label) {
77
- case 0:
78
- poolsToFetch = useCache ? pools.filter(function (poolId) { return _isUserLpBalanceCacheExpired(address, poolId); }) : pools;
79
- if (!(poolsToFetch.length > 0)) return [3 /*break*/, 2];
80
- calls = [];
81
- for (_i = 0, poolsToFetch_1 = poolsToFetch; _i < poolsToFetch_1.length; _i++) {
82
- poolId = poolsToFetch_1[_i];
83
- pool = (0, poolConstructor_1.getPool)(poolId);
84
- calls.push(curve_1.curve.contracts[pool.lpToken].multicallContract.balanceOf(address));
85
- if (pool.gauge !== ethers_1.ethers.constants.AddressZero)
86
- calls.push(curve_1.curve.contracts[pool.gauge].multicallContract.balanceOf(address));
87
- }
88
- return [4 /*yield*/, curve_1.curve.multicallProvider.all(calls)];
89
- case 1:
90
- _rawBalances = _d.sent();
91
- for (_a = 0, poolsToFetch_2 = poolsToFetch; _a < poolsToFetch_2.length; _a++) {
92
- poolId = poolsToFetch_2[_a];
93
- pool = (0, poolConstructor_1.getPool)(poolId);
94
- _balance = _rawBalances.shift();
95
- if (pool.gauge !== ethers_1.ethers.constants.AddressZero)
96
- _balance = _balance.add(_rawBalances.shift());
97
- if (!_userLpBalanceCache[address])
98
- _userLpBalanceCache[address] = {};
99
- _userLpBalanceCache[address][poolId] = { '_lpBalance': _balance, 'time': Date.now() };
100
- }
101
- _d.label = 2;
102
- case 2:
103
- _lpBalances = [];
104
- for (_b = 0, pools_1 = pools; _b < pools_1.length; _b++) {
105
- poolId = pools_1[_b];
106
- _lpBalances.push((_c = _userLpBalanceCache[address]) === null || _c === void 0 ? void 0 : _c[poolId]._lpBalance);
107
- }
108
- return [2 /*return*/, _lpBalances];
57
+ // _userClaimable: { address: { poolId: { rewards: [ { token: '0x111...', 'symbol': 'TST', '', 'amount': 0 } ], time: 0 } }
58
+ const _userClaimableCache = {};
59
+ const _isUserClaimableCacheExpired = (address, poolId) => (_userClaimableCache[address]?.[poolId]?.time || 0) + 600000 < Date.now();
60
+ const _getUserClaimable = async (pools, address, useCache) => {
61
+ const poolsToFetch = useCache ? pools.filter((poolId) => _isUserClaimableCacheExpired(address, poolId)) : pools;
62
+ if (poolsToFetch.length > 0) {
63
+ // --- 1. CRV ---
64
+ const hasCrvReward = [];
65
+ for (const poolId of poolsToFetch) {
66
+ const pool = getPool(poolId);
67
+ if (curve.chainId === 2222 || pool.gauge === curve.constants.ZERO_ADDRESS) { // TODO remove this for Kava
68
+ hasCrvReward.push(false);
69
+ continue;
70
+ }
71
+ const gaugeContract = curve.contracts[pool.gauge].contract;
72
+ hasCrvReward.push('inflation_rate()' in gaugeContract || 'inflation_rate(uint256)' in gaugeContract);
109
73
  }
110
- });
111
- }); };
112
- var getUserPoolListByLiquidity = function (address) {
113
- if (address === void 0) { address = curve_1.curve.signerAddress; }
114
- return __awaiter(void 0, void 0, void 0, function () {
115
- var pools, _lpBalances, userPoolList, i;
116
- return __generator(this, function (_a) {
117
- switch (_a.label) {
118
- case 0:
119
- pools = __spreadArray(__spreadArray(__spreadArray([], curve_1.curve.getPoolList(), true), curve_1.curve.getFactoryPoolList(), true), curve_1.curve.getCryptoFactoryPoolList(), true);
120
- return [4 /*yield*/, _getUserLpBalances(pools, address, false)];
121
- case 1:
122
- _lpBalances = _a.sent();
123
- userPoolList = [];
124
- for (i = 0; i < pools.length; i++) {
125
- if (_lpBalances[i].gt(0)) {
126
- userPoolList.push(pools[i]);
127
- }
128
- }
129
- return [2 /*return*/, userPoolList];
74
+ // --- 2. The number of reward tokens ---
75
+ const rewardCount = [];
76
+ for (const poolId of poolsToFetch) {
77
+ const pool = getPool(poolId);
78
+ if (pool.gauge === curve.constants.ZERO_ADDRESS) {
79
+ rewardCount.push(0);
80
+ continue;
130
81
  }
131
- });
132
- });
133
- };
134
- exports.getUserPoolListByLiquidity = getUserPoolListByLiquidity;
135
- var getUserLiquidityUSD = function (pools, address) {
136
- if (address === void 0) { address = curve_1.curve.signerAddress; }
137
- return __awaiter(void 0, void 0, void 0, function () {
138
- var _lpBalances, userLiquidityUSD, i, pool, price;
139
- return __generator(this, function (_a) {
140
- switch (_a.label) {
141
- case 0: return [4 /*yield*/, _getUserLpBalances(pools, address, true)];
142
- case 1:
143
- _lpBalances = _a.sent();
144
- userLiquidityUSD = [];
145
- i = 0;
146
- _a.label = 2;
147
- case 2:
148
- if (!(i < pools.length)) return [3 /*break*/, 5];
149
- pool = (0, poolConstructor_1.getPool)(pools[i]);
150
- return [4 /*yield*/, (0, utils_1._getUsdRate)(pool.lpToken)];
151
- case 3:
152
- price = _a.sent();
153
- userLiquidityUSD.push((0, utils_1.toBN)(_lpBalances[i]).times(price).toFixed(8));
154
- _a.label = 4;
155
- case 4:
156
- i++;
157
- return [3 /*break*/, 2];
158
- case 5: return [2 /*return*/, userLiquidityUSD];
82
+ const gaugeContract = curve.contracts[pool.gauge].contract;
83
+ if ("reward_tokens(uint256)" in gaugeContract) { // gauge_v2, gauge_v3, gauge_v4, gauge_v5, gauge_factory, gauge_rewards_only, gauge_child
84
+ rewardCount.push(8);
159
85
  }
160
- });
161
- });
162
- };
163
- exports.getUserLiquidityUSD = getUserLiquidityUSD;
164
- // _userClaimable: { address: { poolId: { rewards: [ { token: '0x111...', 'symbol': 'TST', '', 'amount': 0 } ], time: 0 } }
165
- var _userClaimableCache = {};
166
- var _isUserClaimableCacheExpired = function (address, poolId) { var _a, _b; return (((_b = (_a = _userClaimableCache[address]) === null || _a === void 0 ? void 0 : _a[poolId]) === null || _b === void 0 ? void 0 : _b.time) || 0) + 600000 < Date.now(); };
167
- var _getUserClaimable = function (pools, address, useCache) { return __awaiter(void 0, void 0, void 0, function () {
168
- var poolsToFetch, hasCrvReward, _i, poolsToFetch_3, poolId, pool, gaugeContract, rewardCount, _a, poolsToFetch_4, poolId, pool, gaugeContract, rewardTokenCalls, i, pool, count, gaugeContract, rewardContract, rewardMulticallContract, method, rawRewardTokens, rewardTokens, i, j, rewardAddress, rewardInfoCalls, i, poolId, pool, gaugeContract, gaugeMulticallContract, _b, _c, token, tokenMulticallContract, rawRewardInfo, i, poolId, pool, gaugeContract, token, symbol, decimals, _amount, amount, _d, _e, token, symbol, decimals, _amount, _claimedAmount, amount, _claimable, _f, pools_2, poolId;
169
- var _g;
170
- return __generator(this, function (_h) {
171
- switch (_h.label) {
172
- case 0:
173
- poolsToFetch = useCache ? pools.filter(function (poolId) { return _isUserClaimableCacheExpired(address, poolId); }) : pools;
174
- if (!(poolsToFetch.length > 0)) return [3 /*break*/, 3];
175
- hasCrvReward = [];
176
- for (_i = 0, poolsToFetch_3 = poolsToFetch; _i < poolsToFetch_3.length; _i++) {
177
- poolId = poolsToFetch_3[_i];
178
- pool = (0, poolConstructor_1.getPool)(poolId);
179
- if (curve_1.curve.chainId === 2222 || pool.gauge === ethers_1.ethers.constants.AddressZero) { // TODO remove this for Kava
180
- hasCrvReward.push(false);
181
- continue;
182
- }
183
- gaugeContract = curve_1.curve.contracts[pool.gauge].contract;
184
- hasCrvReward.push('inflation_rate()' in gaugeContract || 'inflation_rate(uint256)' in gaugeContract);
185
- }
186
- rewardCount = [];
187
- for (_a = 0, poolsToFetch_4 = poolsToFetch; _a < poolsToFetch_4.length; _a++) {
188
- poolId = poolsToFetch_4[_a];
189
- pool = (0, poolConstructor_1.getPool)(poolId);
190
- if (pool.gauge === ethers_1.ethers.constants.AddressZero) {
191
- rewardCount.push(0);
192
- continue;
193
- }
194
- gaugeContract = curve_1.curve.contracts[pool.gauge].contract;
195
- if ("reward_tokens(uint256)" in gaugeContract) { // gauge_v2, gauge_v3, gauge_v4, gauge_v5, gauge_factory, gauge_rewards_only, gauge_child
196
- rewardCount.push(8);
197
- }
198
- else if ('claimable_reward(address)' in gaugeContract) { // gauge_synthetix
199
- rewardCount.push(-1);
200
- }
201
- else { // gauge
202
- rewardCount.push(0);
203
- }
204
- }
205
- rewardTokenCalls = [];
206
- for (i = 0; i < poolsToFetch.length; i++) {
207
- pool = (0, poolConstructor_1.getPool)(poolsToFetch[i]);
208
- if (rewardCount[i] !== -1) { // no_gauge, gauge, gauge_v2, gauge_v3, gauge_v4, gauge_v5, gauge_factory, gauge_rewards_only, gauge_child
209
- for (count = 0; count < rewardCount[i]; count++) {
210
- gaugeContract = curve_1.curve.contracts[pool.gauge].multicallContract;
211
- rewardTokenCalls.push(gaugeContract.reward_tokens(count));
212
- }
213
- }
214
- else { // gauge_synthetix
215
- rewardCount[i] = 1;
216
- rewardContract = curve_1.curve.contracts[pool.sRewardContract].contract;
217
- rewardMulticallContract = curve_1.curve.contracts[pool.sRewardContract].multicallContract;
218
- method = "snx()" in rewardContract ? "snx" : "rewardsToken" // susd, tbtc : dusd, musd, rsv, sbtc
219
- ;
220
- rewardTokenCalls.push(rewardMulticallContract[method]());
221
- }
222
- }
223
- return [4 /*yield*/, curve_1.curve.multicallProvider.all(rewardTokenCalls)];
224
- case 1:
225
- rawRewardTokens = (_h.sent()).map(function (t) { return t.toLowerCase(); });
226
- rewardTokens = {};
227
- for (i = 0; i < poolsToFetch.length; i++) {
228
- rewardTokens[poolsToFetch[i]] = [];
229
- for (j = 0; j < rewardCount[i]; j++) {
230
- rewardAddress = rawRewardTokens.shift();
231
- if (rewardAddress === ethers_1.ethers.constants.AddressZero)
232
- continue;
233
- // REYIELD shitcoin which breaks things, because symbol() throws an error
234
- if (rewardAddress === "0xf228ec3476318aCB4E719D2b290bb2ef8B34DFfA".toLowerCase())
235
- continue;
236
- rewardTokens[poolsToFetch[i]].push(rewardAddress);
237
- }
238
- }
239
- rewardInfoCalls = [];
240
- for (i = 0; i < poolsToFetch.length; i++) {
241
- poolId = poolsToFetch[i];
242
- pool = (0, poolConstructor_1.getPool)(poolId);
243
- if (pool.gauge === ethers_1.ethers.constants.AddressZero)
244
- continue;
245
- gaugeContract = curve_1.curve.contracts[pool.gauge].contract;
246
- gaugeMulticallContract = curve_1.curve.contracts[pool.gauge].multicallContract;
247
- if (hasCrvReward[i]) {
248
- rewardInfoCalls.push(gaugeMulticallContract.claimable_tokens(address));
249
- }
250
- for (_b = 0, _c = rewardTokens[poolId]; _b < _c.length; _b++) {
251
- token = _c[_b];
252
- (0, utils_1._setContracts)(token, ERC20_json_1.default);
253
- tokenMulticallContract = curve_1.curve.contracts[token].multicallContract;
254
- rewardInfoCalls.push(tokenMulticallContract.symbol(), tokenMulticallContract.decimals());
255
- if ('claimable_reward(address,address)' in gaugeContract) {
256
- rewardInfoCalls.push(gaugeMulticallContract.claimable_reward(address, token));
257
- }
258
- else if ('claimable_reward(address)' in gaugeContract) { // Synthetix Gauge
259
- rewardInfoCalls.push(gaugeMulticallContract.claimable_reward(address), gaugeMulticallContract.claimed_rewards_for(address));
260
- }
261
- }
86
+ else if ('claimable_reward(address)' in gaugeContract) { // gauge_synthetix
87
+ rewardCount.push(-1);
88
+ }
89
+ else { // gauge
90
+ rewardCount.push(0);
91
+ }
92
+ }
93
+ // --- 3. Reward tokens ---
94
+ const rewardTokenCalls = [];
95
+ for (let i = 0; i < poolsToFetch.length; i++) {
96
+ const pool = getPool(poolsToFetch[i]);
97
+ if (rewardCount[i] !== -1) { // no_gauge, gauge, gauge_v2, gauge_v3, gauge_v4, gauge_v5, gauge_factory, gauge_rewards_only, gauge_child
98
+ for (let count = 0; count < rewardCount[i]; count++) {
99
+ const gaugeContract = curve.contracts[pool.gauge].multicallContract;
100
+ rewardTokenCalls.push(gaugeContract.reward_tokens(count));
262
101
  }
263
- return [4 /*yield*/, curve_1.curve.multicallProvider.all(rewardInfoCalls)];
264
- case 2:
265
- rawRewardInfo = _h.sent();
266
- for (i = 0; i < poolsToFetch.length; i++) {
267
- poolId = poolsToFetch[i];
268
- pool = (0, poolConstructor_1.getPool)(poolId);
269
- if (!_userClaimableCache[address])
270
- _userClaimableCache[address] = {};
271
- _userClaimableCache[address][poolId] = { rewards: [], time: Date.now() };
272
- if (pool.gauge === ethers_1.ethers.constants.AddressZero)
273
- continue;
274
- gaugeContract = curve_1.curve.contracts[pool.gauge].contract;
275
- if (hasCrvReward[i]) {
276
- token = curve_1.curve.constants.ALIASES.crv;
277
- symbol = 'CRV';
278
- decimals = 18;
279
- _amount = rawRewardInfo.shift();
280
- amount = ethers_1.ethers.utils.formatUnits(_amount, decimals);
281
- if (Number(amount) > 0)
282
- _userClaimableCache[address][poolId].rewards.push({ token: token, symbol: symbol, amount: amount });
283
- }
284
- for (_d = 0, _e = rewardTokens[poolId]; _d < _e.length; _d++) {
285
- token = _e[_d];
286
- symbol = rawRewardInfo.shift();
287
- decimals = rawRewardInfo.shift();
288
- _amount = rawRewardInfo.shift();
289
- if ('claimable_reward(address)' in gaugeContract) {
290
- _claimedAmount = rawRewardInfo.shift();
291
- _amount = _amount.sub(_claimedAmount);
292
- }
293
- amount = ethers_1.ethers.utils.formatUnits(_amount, decimals);
294
- if (Number(amount) > 0)
295
- _userClaimableCache[address][poolId].rewards.push({ token: token, symbol: symbol, amount: amount });
296
- }
102
+ }
103
+ else { // gauge_synthetix
104
+ rewardCount[i] = 1;
105
+ const rewardContract = curve.contracts[pool.sRewardContract].contract;
106
+ const rewardMulticallContract = curve.contracts[pool.sRewardContract].multicallContract;
107
+ const method = "snx()" in rewardContract ? "snx" : "rewardsToken"; // susd, tbtc : dusd, musd, rsv, sbtc
108
+ rewardTokenCalls.push(rewardMulticallContract[method]());
109
+ }
110
+ }
111
+ const rawRewardTokens = (await curve.multicallProvider.all(rewardTokenCalls)).map((t) => t.toLowerCase());
112
+ const rewardTokens = {};
113
+ for (let i = 0; i < poolsToFetch.length; i++) {
114
+ rewardTokens[poolsToFetch[i]] = [];
115
+ for (let j = 0; j < rewardCount[i]; j++) {
116
+ const rewardAddress = rawRewardTokens.shift();
117
+ if (rewardAddress === curve.constants.ZERO_ADDRESS)
118
+ continue;
119
+ // REYIELD shitcoin which breaks things, because symbol() throws an error
120
+ if (rewardAddress === "0xf228ec3476318aCB4E719D2b290bb2ef8B34DFfA".toLowerCase())
121
+ continue;
122
+ rewardTokens[poolsToFetch[i]].push(rewardAddress);
123
+ }
124
+ }
125
+ // --- 4. Reward info ---
126
+ const rewardInfoCalls = [];
127
+ for (let i = 0; i < poolsToFetch.length; i++) {
128
+ const poolId = poolsToFetch[i];
129
+ const pool = getPool(poolId);
130
+ if (pool.gauge === curve.constants.ZERO_ADDRESS)
131
+ continue;
132
+ const gaugeContract = curve.contracts[pool.gauge].contract;
133
+ const gaugeMulticallContract = curve.contracts[pool.gauge].multicallContract;
134
+ if (hasCrvReward[i]) {
135
+ rewardInfoCalls.push(gaugeMulticallContract.claimable_tokens(address));
136
+ }
137
+ for (const token of rewardTokens[poolId]) {
138
+ _setContracts(token, ERC20Abi);
139
+ const tokenMulticallContract = curve.contracts[token].multicallContract;
140
+ rewardInfoCalls.push(tokenMulticallContract.symbol(), tokenMulticallContract.decimals());
141
+ if ('claimable_reward(address,address)' in gaugeContract) {
142
+ rewardInfoCalls.push(gaugeMulticallContract.claimable_reward(address, token));
297
143
  }
298
- _h.label = 3;
299
- case 3:
300
- _claimable = [];
301
- for (_f = 0, pools_2 = pools; _f < pools_2.length; _f++) {
302
- poolId = pools_2[_f];
303
- _claimable.push((_g = _userClaimableCache[address]) === null || _g === void 0 ? void 0 : _g[poolId].rewards);
144
+ else if ('claimable_reward(address)' in gaugeContract) { // Synthetix Gauge
145
+ rewardInfoCalls.push(gaugeMulticallContract.claimable_reward(address), gaugeMulticallContract.claimed_rewards_for(address));
304
146
  }
305
- return [2 /*return*/, _claimable];
147
+ }
306
148
  }
307
- });
308
- }); };
309
- var _getUserClaimableUseApi = function (pools, address, useCache) { return __awaiter(void 0, void 0, void 0, function () {
310
- var poolsToFetch, hasCrvReward, _i, poolsToFetch_5, poolId, pool, gaugeContract, rewardTokens, i, pool, rewards, rewardInfoCalls, i, poolId, pool, gaugeContract, gaugeMulticallContract, _a, _b, r, rawRewardInfo, i, poolId, pool, gaugeContract, token, symbol, decimals, _amount, amount, _c, _d, r, _amount, _claimedAmount, amount, _claimable, _e, pools_3, poolId;
311
- var _f, _g;
312
- return __generator(this, function (_h) {
313
- switch (_h.label) {
314
- case 0:
315
- poolsToFetch = useCache ? pools.filter(function (poolId) { return _isUserClaimableCacheExpired(address, poolId); }) : pools;
316
- if (!(poolsToFetch.length > 0)) return [3 /*break*/, 6];
317
- hasCrvReward = [];
318
- for (_i = 0, poolsToFetch_5 = poolsToFetch; _i < poolsToFetch_5.length; _i++) {
319
- poolId = poolsToFetch_5[_i];
320
- pool = (0, poolConstructor_1.getPool)(poolId);
321
- if (curve_1.curve.chainId === 2222 || pool.gauge === ethers_1.ethers.constants.AddressZero) { // TODO remove this for Kava
322
- hasCrvReward.push(false);
323
- continue;
324
- }
325
- gaugeContract = curve_1.curve.contracts[pool.gauge].contract;
326
- hasCrvReward.push('inflation_rate()' in gaugeContract || 'inflation_rate(uint256)' in gaugeContract);
327
- }
328
- rewardTokens = {};
329
- i = 0;
330
- _h.label = 1;
331
- case 1:
332
- if (!(i < poolsToFetch.length)) return [3 /*break*/, 4];
333
- pool = (0, poolConstructor_1.getPool)(poolsToFetch[i]);
334
- return [4 /*yield*/, (0, utils_1._getRewardsFromApi)()];
335
- case 2:
336
- rewards = _h.sent();
337
- rewardTokens[poolsToFetch[i]] = ((_f = rewards[pool.gauge]) !== null && _f !== void 0 ? _f : []).map(function (r) { return ({ token: r.tokenAddress, symbol: r.symbol, decimals: r.decimals }); });
338
- _h.label = 3;
339
- case 3:
340
- i++;
341
- return [3 /*break*/, 1];
342
- case 4:
343
- rewardInfoCalls = [];
344
- for (i = 0; i < poolsToFetch.length; i++) {
345
- poolId = poolsToFetch[i];
346
- pool = (0, poolConstructor_1.getPool)(poolId);
347
- if (pool.gauge === ethers_1.ethers.constants.AddressZero)
348
- continue;
349
- gaugeContract = curve_1.curve.contracts[pool.gauge].contract;
350
- gaugeMulticallContract = curve_1.curve.contracts[pool.gauge].multicallContract;
351
- if (hasCrvReward[i]) {
352
- rewardInfoCalls.push(gaugeMulticallContract.claimable_tokens(address));
353
- }
354
- for (_a = 0, _b = rewardTokens[poolId]; _a < _b.length; _a++) {
355
- r = _b[_a];
356
- (0, utils_1._setContracts)(r.token, ERC20_json_1.default);
357
- if ('claimable_reward(address,address)' in gaugeContract) {
358
- rewardInfoCalls.push(gaugeMulticallContract.claimable_reward(address, r.token));
359
- }
360
- else if ('claimable_reward(address)' in gaugeContract) { // Synthetix Gauge
361
- rewardInfoCalls.push(gaugeMulticallContract.claimable_reward(address), gaugeMulticallContract.claimed_rewards_for(address));
362
- }
363
- }
149
+ const rawRewardInfo = await curve.multicallProvider.all(rewardInfoCalls);
150
+ for (let i = 0; i < poolsToFetch.length; i++) {
151
+ const poolId = poolsToFetch[i];
152
+ const pool = getPool(poolId);
153
+ if (!_userClaimableCache[address])
154
+ _userClaimableCache[address] = {};
155
+ _userClaimableCache[address][poolId] = { rewards: [], time: Date.now() };
156
+ if (pool.gauge === curve.constants.ZERO_ADDRESS)
157
+ continue;
158
+ const gaugeContract = curve.contracts[pool.gauge].contract;
159
+ if (hasCrvReward[i]) {
160
+ const token = curve.constants.ALIASES.crv;
161
+ const symbol = 'CRV';
162
+ const decimals = 18;
163
+ const _amount = rawRewardInfo.shift();
164
+ const amount = curve.formatUnits(_amount, decimals);
165
+ if (Number(amount) > 0)
166
+ _userClaimableCache[address][poolId].rewards.push({ token, symbol, amount });
167
+ }
168
+ for (const token of rewardTokens[poolId]) {
169
+ const symbol = rawRewardInfo.shift();
170
+ const decimals = rawRewardInfo.shift();
171
+ let _amount = rawRewardInfo.shift();
172
+ if ('claimable_reward(address)' in gaugeContract) {
173
+ const _claimedAmount = rawRewardInfo.shift();
174
+ _amount = _amount - _claimedAmount;
364
175
  }
365
- return [4 /*yield*/, curve_1.curve.multicallProvider.all(rewardInfoCalls)];
366
- case 5:
367
- rawRewardInfo = _h.sent();
368
- for (i = 0; i < poolsToFetch.length; i++) {
369
- poolId = poolsToFetch[i];
370
- pool = (0, poolConstructor_1.getPool)(poolId);
371
- if (!_userClaimableCache[address])
372
- _userClaimableCache[address] = {};
373
- _userClaimableCache[address][poolId] = { rewards: [], time: Date.now() };
374
- if (pool.gauge === ethers_1.ethers.constants.AddressZero)
375
- continue;
376
- gaugeContract = curve_1.curve.contracts[pool.gauge].contract;
377
- if (hasCrvReward[i]) {
378
- token = curve_1.curve.constants.ALIASES.crv;
379
- symbol = 'CRV';
380
- decimals = 18;
381
- _amount = rawRewardInfo.shift();
382
- amount = ethers_1.ethers.utils.formatUnits(_amount, decimals);
383
- if (Number(amount) > 0)
384
- _userClaimableCache[address][poolId].rewards.push({ token: token, symbol: symbol, amount: amount });
385
- }
386
- for (_c = 0, _d = rewardTokens[poolId]; _c < _d.length; _c++) {
387
- r = _d[_c];
388
- _amount = rawRewardInfo.shift();
389
- if ('claimable_reward(address)' in gaugeContract) {
390
- _claimedAmount = rawRewardInfo.shift();
391
- _amount = _amount.sub(_claimedAmount);
392
- }
393
- amount = ethers_1.ethers.utils.formatUnits(_amount, r.decimals);
394
- if (Number(amount) > 0)
395
- _userClaimableCache[address][poolId].rewards.push({ token: r.token, symbol: r.symbol, amount: amount });
396
- }
176
+ const amount = curve.formatUnits(_amount, decimals);
177
+ if (Number(amount) > 0)
178
+ _userClaimableCache[address][poolId].rewards.push({ token, symbol, amount });
179
+ }
180
+ }
181
+ }
182
+ const _claimable = [];
183
+ for (const poolId of pools) {
184
+ _claimable.push(_userClaimableCache[address]?.[poolId].rewards);
185
+ }
186
+ return _claimable;
187
+ };
188
+ const _getUserClaimableUseApi = async (pools, address, useCache) => {
189
+ const poolsToFetch = useCache ? pools.filter((poolId) => _isUserClaimableCacheExpired(address, poolId)) : pools;
190
+ if (poolsToFetch.length > 0) {
191
+ // --- 1. CRV ---
192
+ const hasCrvReward = [];
193
+ for (const poolId of poolsToFetch) {
194
+ const pool = getPool(poolId);
195
+ if (curve.chainId === 2222 || pool.gauge === curve.constants.ZERO_ADDRESS) { // TODO remove this for Kava
196
+ hasCrvReward.push(false);
197
+ continue;
198
+ }
199
+ const gaugeContract = curve.contracts[pool.gauge].contract;
200
+ hasCrvReward.push('inflation_rate()' in gaugeContract || 'inflation_rate(uint256)' in gaugeContract);
201
+ }
202
+ // --- 2. Reward tokens ---
203
+ const rewardTokens = {};
204
+ for (let i = 0; i < poolsToFetch.length; i++) {
205
+ const pool = getPool(poolsToFetch[i]);
206
+ const rewards = await _getRewardsFromApi();
207
+ rewardTokens[poolsToFetch[i]] = (rewards[pool.gauge] ?? []).map((r) => ({ token: r.tokenAddress, symbol: r.symbol, decimals: r.decimals }));
208
+ }
209
+ // --- 3. Reward info ---
210
+ const rewardInfoCalls = [];
211
+ for (let i = 0; i < poolsToFetch.length; i++) {
212
+ const poolId = poolsToFetch[i];
213
+ const pool = getPool(poolId);
214
+ if (pool.gauge === curve.constants.ZERO_ADDRESS)
215
+ continue;
216
+ const gaugeContract = curve.contracts[pool.gauge].contract;
217
+ const gaugeMulticallContract = curve.contracts[pool.gauge].multicallContract;
218
+ if (hasCrvReward[i]) {
219
+ rewardInfoCalls.push(gaugeMulticallContract.claimable_tokens(address));
220
+ }
221
+ for (const r of rewardTokens[poolId]) {
222
+ _setContracts(r.token, ERC20Abi);
223
+ if ('claimable_reward(address,address)' in gaugeContract) {
224
+ rewardInfoCalls.push(gaugeMulticallContract.claimable_reward(address, r.token));
397
225
  }
398
- _h.label = 6;
399
- case 6:
400
- _claimable = [];
401
- for (_e = 0, pools_3 = pools; _e < pools_3.length; _e++) {
402
- poolId = pools_3[_e];
403
- _claimable.push((_g = _userClaimableCache[address]) === null || _g === void 0 ? void 0 : _g[poolId].rewards);
226
+ else if ('claimable_reward(address)' in gaugeContract) { // Synthetix Gauge
227
+ rewardInfoCalls.push(gaugeMulticallContract.claimable_reward(address), gaugeMulticallContract.claimed_rewards_for(address));
404
228
  }
405
- return [2 /*return*/, _claimable];
229
+ }
406
230
  }
407
- });
408
- }); };
409
- var getUserPoolListByClaimable = function (address) {
410
- if (address === void 0) { address = curve_1.curve.signerAddress; }
411
- return __awaiter(void 0, void 0, void 0, function () {
412
- var pools, _claimable, userPoolList, i;
413
- return __generator(this, function (_a) {
414
- switch (_a.label) {
415
- case 0:
416
- pools = __spreadArray(__spreadArray(__spreadArray([], curve_1.curve.getPoolList(), true), curve_1.curve.getFactoryPoolList(), true), curve_1.curve.getCryptoFactoryPoolList(), true);
417
- return [4 /*yield*/, _getUserClaimable(pools, address, false)];
418
- case 1:
419
- _claimable = _a.sent();
420
- userPoolList = [];
421
- for (i = 0; i < pools.length; i++) {
422
- if (_claimable[i].length > 0) {
423
- userPoolList.push(pools[i]);
424
- }
425
- }
426
- return [2 /*return*/, userPoolList];
231
+ const rawRewardInfo = await curve.multicallProvider.all(rewardInfoCalls);
232
+ for (let i = 0; i < poolsToFetch.length; i++) {
233
+ const poolId = poolsToFetch[i];
234
+ const pool = getPool(poolId);
235
+ if (!_userClaimableCache[address])
236
+ _userClaimableCache[address] = {};
237
+ _userClaimableCache[address][poolId] = { rewards: [], time: Date.now() };
238
+ if (pool.gauge === curve.constants.ZERO_ADDRESS)
239
+ continue;
240
+ const gaugeContract = curve.contracts[pool.gauge].contract;
241
+ if (hasCrvReward[i]) {
242
+ const token = curve.constants.ALIASES.crv;
243
+ const symbol = 'CRV';
244
+ const decimals = 18;
245
+ const _amount = rawRewardInfo.shift();
246
+ const amount = curve.formatUnits(_amount, decimals);
247
+ if (Number(amount) > 0)
248
+ _userClaimableCache[address][poolId].rewards.push({ token, symbol, amount });
427
249
  }
428
- });
429
- });
430
- };
431
- exports.getUserPoolListByClaimable = getUserPoolListByClaimable;
432
- var getUserClaimable = function (pools, address) {
433
- if (address === void 0) { address = curve_1.curve.signerAddress; }
434
- return __awaiter(void 0, void 0, void 0, function () {
435
- var _claimable, claimableWithPrice, i, _i, _a, c, price;
436
- return __generator(this, function (_b) {
437
- switch (_b.label) {
438
- case 0: return [4 /*yield*/, _getUserClaimable(pools, address, true)];
439
- case 1:
440
- _claimable = _b.sent();
441
- claimableWithPrice = [];
442
- i = 0;
443
- _b.label = 2;
444
- case 2:
445
- if (!(i < pools.length)) return [3 /*break*/, 7];
446
- claimableWithPrice.push([]);
447
- _i = 0, _a = _claimable[i];
448
- _b.label = 3;
449
- case 3:
450
- if (!(_i < _a.length)) return [3 /*break*/, 6];
451
- c = _a[_i];
452
- return [4 /*yield*/, (0, utils_1._getUsdRate)(c.token)];
453
- case 4:
454
- price = _b.sent();
455
- claimableWithPrice[claimableWithPrice.length - 1].push(__assign(__assign({}, c), { price: price }));
456
- _b.label = 5;
457
- case 5:
458
- _i++;
459
- return [3 /*break*/, 3];
460
- case 6:
461
- i++;
462
- return [3 /*break*/, 2];
463
- case 7: return [2 /*return*/, claimableWithPrice];
250
+ for (const r of rewardTokens[poolId]) {
251
+ let _amount = rawRewardInfo.shift();
252
+ if ('claimable_reward(address)' in gaugeContract) {
253
+ const _claimedAmount = rawRewardInfo.shift();
254
+ _amount = _amount - _claimedAmount;
255
+ }
256
+ const amount = curve.formatUnits(_amount, r.decimals);
257
+ if (Number(amount) > 0)
258
+ _userClaimableCache[address][poolId].rewards.push({ token: r.token, symbol: r.symbol, amount });
464
259
  }
465
- });
466
- });
260
+ }
261
+ }
262
+ const _claimable = [];
263
+ for (const poolId of pools) {
264
+ _claimable.push(_userClaimableCache[address]?.[poolId].rewards);
265
+ }
266
+ return _claimable;
467
267
  };
468
- exports.getUserClaimable = getUserClaimable;
469
- var getUserPoolList = function (address, useApi) {
470
- if (address === void 0) { address = curve_1.curve.signerAddress; }
471
- if (useApi === void 0) { useApi = true; }
472
- return __awaiter(void 0, void 0, void 0, function () {
473
- var pools, _a, _lpBalances, _claimable, userPoolList, i;
474
- return __generator(this, function (_b) {
475
- switch (_b.label) {
476
- case 0:
477
- pools = __spreadArray(__spreadArray(__spreadArray([], curve_1.curve.getPoolList(), true), curve_1.curve.getFactoryPoolList(), true), curve_1.curve.getCryptoFactoryPoolList(), true);
478
- return [4 /*yield*/, Promise.all([
479
- _getUserLpBalances(pools, address, false),
480
- useApi ? _getUserClaimableUseApi(pools, address, false) : _getUserClaimable(pools, address, false),
481
- ])];
482
- case 1:
483
- _a = _b.sent(), _lpBalances = _a[0], _claimable = _a[1];
484
- userPoolList = [];
485
- for (i = 0; i < pools.length; i++) {
486
- if (_lpBalances[i].gt(0) || _claimable[i].length > 0) {
487
- userPoolList.push(pools[i]);
488
- }
489
- }
490
- return [2 /*return*/, userPoolList];
491
- }
492
- });
493
- });
268
+ export const getUserPoolListByClaimable = async (address = curve.signerAddress) => {
269
+ const pools = [...curve.getPoolList(), ...curve.getFactoryPoolList(), ...curve.getCryptoFactoryPoolList()];
270
+ const _claimable = await _getUserClaimable(pools, address, false);
271
+ const userPoolList = [];
272
+ for (let i = 0; i < pools.length; i++) {
273
+ if (_claimable[i].length > 0) {
274
+ userPoolList.push(pools[i]);
275
+ }
276
+ }
277
+ return userPoolList;
494
278
  };
495
- exports.getUserPoolList = getUserPoolList;
496
- var _getAmplificationCoefficientsFromApi = function () { return __awaiter(void 0, void 0, void 0, function () {
497
- var network, promises, allTypesExtendedPoolData, amplificationCoefficientDict, _i, allTypesExtendedPoolData_1, extendedPoolData, _a, _b, pool;
498
- return __generator(this, function (_c) {
499
- switch (_c.label) {
500
- case 0:
501
- network = curve_1.curve.constants.NETWORK_NAME;
502
- promises = [
503
- (0, external_api_1._getPoolsFromApi)(network, "main"),
504
- (0, external_api_1._getPoolsFromApi)(network, "crypto"),
505
- (0, external_api_1._getPoolsFromApi)(network, "factory"),
506
- (0, external_api_1._getPoolsFromApi)(network, "factory-crypto"),
507
- ];
508
- return [4 /*yield*/, Promise.all(promises)];
509
- case 1:
510
- allTypesExtendedPoolData = _c.sent();
511
- amplificationCoefficientDict = {};
512
- for (_i = 0, allTypesExtendedPoolData_1 = allTypesExtendedPoolData; _i < allTypesExtendedPoolData_1.length; _i++) {
513
- extendedPoolData = allTypesExtendedPoolData_1[_i];
514
- for (_a = 0, _b = extendedPoolData.poolData; _a < _b.length; _a++) {
515
- pool = _b[_a];
516
- amplificationCoefficientDict[pool.address] = Number(pool.amplificationCoefficient);
517
- }
518
- }
519
- return [2 /*return*/, amplificationCoefficientDict];
279
+ export const getUserClaimable = async (pools, address = curve.signerAddress) => {
280
+ const _claimable = await _getUserClaimable(pools, address, true);
281
+ const claimableWithPrice = [];
282
+ for (let i = 0; i < pools.length; i++) {
283
+ claimableWithPrice.push([]);
284
+ for (const c of _claimable[i]) {
285
+ const price = await _getUsdRate(c.token);
286
+ claimableWithPrice[claimableWithPrice.length - 1].push({ ...c, price });
287
+ }
288
+ }
289
+ return claimableWithPrice;
290
+ };
291
+ export const getUserPoolList = async (address = curve.signerAddress, useApi = true) => {
292
+ const pools = [...curve.getPoolList(), ...curve.getFactoryPoolList(), ...curve.getCryptoFactoryPoolList()];
293
+ const [_lpBalances, _claimable] = await Promise.all([
294
+ _getUserLpBalances(pools, address, false),
295
+ useApi ? _getUserClaimableUseApi(pools, address, false) : _getUserClaimable(pools, address, false),
296
+ ]);
297
+ const userPoolList = [];
298
+ for (let i = 0; i < pools.length; i++) {
299
+ if (_lpBalances[i] > 0 || _claimable[i].length > 0) {
300
+ userPoolList.push(pools[i]);
520
301
  }
521
- });
522
- }); };
523
- exports._getAmplificationCoefficientsFromApi = _getAmplificationCoefficientsFromApi;
302
+ }
303
+ return userPoolList;
304
+ };
305
+ export const _getAmplificationCoefficientsFromApi = async () => {
306
+ const network = curve.constants.NETWORK_NAME;
307
+ const promises = [
308
+ _getPoolsFromApi(network, "main"),
309
+ _getPoolsFromApi(network, "crypto"),
310
+ _getPoolsFromApi(network, "factory"),
311
+ _getPoolsFromApi(network, "factory-crypto"),
312
+ ];
313
+ const allTypesExtendedPoolData = await Promise.all(promises);
314
+ const amplificationCoefficientDict = {};
315
+ for (const extendedPoolData of allTypesExtendedPoolData) {
316
+ for (const pool of extendedPoolData.poolData) {
317
+ amplificationCoefficientDict[pool.address] = Number(pool.amplificationCoefficient);
318
+ }
319
+ }
320
+ return amplificationCoefficientDict;
321
+ };