@curvefi/api 2.31.0 → 2.32.0

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 (100) hide show
  1. package/lib/boosting.js +137 -402
  2. package/lib/constants/abis/stable_calc.json +151 -0
  3. package/lib/constants/abis/wbeth/swap.json +1086 -0
  4. package/lib/constants/aliases.d.ts +11 -11
  5. package/lib/constants/aliases.js +23 -15
  6. package/lib/constants/coins/arbitrum.js +6 -9
  7. package/lib/constants/coins/aurora.js +6 -9
  8. package/lib/constants/coins/avalanche.js +7 -10
  9. package/lib/constants/coins/celo.js +6 -9
  10. package/lib/constants/coins/ethereum.js +10 -13
  11. package/lib/constants/coins/fantom.js +8 -11
  12. package/lib/constants/coins/kava.js +6 -9
  13. package/lib/constants/coins/moonbeam.js +6 -9
  14. package/lib/constants/coins/optimism.js +6 -9
  15. package/lib/constants/coins/polygon.js +7 -10
  16. package/lib/constants/coins/xdai.js +6 -9
  17. package/lib/constants/pools/arbitrum.d.ts +2 -4
  18. package/lib/constants/pools/arbitrum.js +22 -28
  19. package/lib/constants/pools/aurora.d.ts +2 -4
  20. package/lib/constants/pools/aurora.js +6 -12
  21. package/lib/constants/pools/avalanche.d.ts +2 -4
  22. package/lib/constants/pools/avalanche.js +21 -27
  23. package/lib/constants/pools/celo.d.ts +2 -4
  24. package/lib/constants/pools/celo.js +2 -5
  25. package/lib/constants/pools/ethereum.js +272 -253
  26. package/lib/constants/pools/fantom.d.ts +2 -4
  27. package/lib/constants/pools/fantom.js +28 -34
  28. package/lib/constants/pools/index.d.ts +11 -11
  29. package/lib/constants/pools/index.js +12 -25
  30. package/lib/constants/pools/kava.d.ts +2 -4
  31. package/lib/constants/pools/kava.js +2 -5
  32. package/lib/constants/pools/moonbeam.d.ts +2 -4
  33. package/lib/constants/pools/moonbeam.js +6 -12
  34. package/lib/constants/pools/optimism.d.ts +2 -4
  35. package/lib/constants/pools/optimism.js +9 -15
  36. package/lib/constants/pools/polygon.d.ts +2 -4
  37. package/lib/constants/pools/polygon.js +22 -28
  38. package/lib/constants/pools/xdai.d.ts +2 -4
  39. package/lib/constants/pools/xdai.js +24 -30
  40. package/lib/constants/utils.d.ts +1 -1
  41. package/lib/constants/utils.js +20 -29
  42. package/lib/curve.d.ts +9 -7
  43. package/lib/curve.js +399 -615
  44. package/lib/external-api.d.ts +1 -1
  45. package/lib/external-api.js +47 -140
  46. package/lib/factory/common.js +6 -10
  47. package/lib/factory/constants-crypto.js +48 -54
  48. package/lib/factory/constants.js +274 -280
  49. package/lib/factory/deploy.d.ts +8 -8
  50. package/lib/factory/deploy.js +177 -347
  51. package/lib/factory/factory-api.js +195 -278
  52. package/lib/factory/factory-crypto.js +170 -323
  53. package/lib/factory/factory.js +195 -350
  54. package/lib/index.d.ts +24 -25
  55. package/lib/index.js +87 -143
  56. package/lib/interfaces.d.ts +6 -11
  57. package/lib/interfaces.js +1 -2
  58. package/lib/pools/PoolTemplate.js +1478 -2931
  59. package/lib/pools/index.d.ts +2 -2
  60. package/lib/pools/index.js +3 -7
  61. package/lib/pools/mixins/common.d.ts +3 -4
  62. package/lib/pools/mixins/common.js +23 -112
  63. package/lib/pools/mixins/depositBalancedAmountsMixins.d.ts +1 -1
  64. package/lib/pools/mixins/depositBalancedAmountsMixins.js +50 -139
  65. package/lib/pools/mixins/depositMixins.d.ts +1 -1
  66. package/lib/pools/mixins/depositMixins.js +144 -417
  67. package/lib/pools/mixins/depositWrappedMixins.d.ts +1 -1
  68. package/lib/pools/mixins/depositWrappedMixins.js +72 -227
  69. package/lib/pools/mixins/poolBalancesMixin.d.ts +1 -1
  70. package/lib/pools/mixins/poolBalancesMixin.js +25 -105
  71. package/lib/pools/mixins/swapMixins.d.ts +1 -1
  72. package/lib/pools/mixins/swapMixins.js +127 -353
  73. package/lib/pools/mixins/swapWrappedMixins.d.ts +1 -1
  74. package/lib/pools/mixins/swapWrappedMixins.js +90 -276
  75. package/lib/pools/mixins/withdrawExpectedMixins.d.ts +1 -1
  76. package/lib/pools/mixins/withdrawExpectedMixins.js +26 -110
  77. package/lib/pools/mixins/withdrawImbalanceMixins.d.ts +1 -1
  78. package/lib/pools/mixins/withdrawImbalanceMixins.js +99 -321
  79. package/lib/pools/mixins/withdrawImbalanceWrappedMixins.d.ts +1 -1
  80. package/lib/pools/mixins/withdrawImbalanceWrappedMixins.js +53 -192
  81. package/lib/pools/mixins/withdrawMixins.d.ts +1 -1
  82. package/lib/pools/mixins/withdrawMixins.js +123 -390
  83. package/lib/pools/mixins/withdrawOneCoinExpectedMixins.d.ts +1 -1
  84. package/lib/pools/mixins/withdrawOneCoinExpectedMixins.js +17 -92
  85. package/lib/pools/mixins/withdrawOneCoinMixins.d.ts +1 -1
  86. package/lib/pools/mixins/withdrawOneCoinMixins.js +124 -390
  87. package/lib/pools/mixins/withdrawOneCoinWrappedExpectedMixins.d.ts +1 -1
  88. package/lib/pools/mixins/withdrawOneCoinWrappedExpectedMixins.js +9 -66
  89. package/lib/pools/mixins/withdrawOneCoinWrappedMixins.d.ts +1 -1
  90. package/lib/pools/mixins/withdrawOneCoinWrappedMixins.js +55 -190
  91. package/lib/pools/mixins/withdrawWrappedMixins.d.ts +1 -1
  92. package/lib/pools/mixins/withdrawWrappedMixins.js +52 -191
  93. package/lib/pools/poolConstructor.d.ts +1 -1
  94. package/lib/pools/poolConstructor.js +77 -101
  95. package/lib/pools/utils.js +299 -500
  96. package/lib/router.d.ts +2 -2
  97. package/lib/router.js +221 -689
  98. package/lib/utils.d.ts +9 -9
  99. package/lib/utils.js +377 -731
  100. package/package.json +9 -8
@@ -1,523 +1,322 @@
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] ?? [])
208
+ .map((r) => ({ token: r.tokenAddress, symbol: r.symbol, decimals: Number(r.decimals) }));
209
+ }
210
+ // --- 3. Reward info ---
211
+ const rewardInfoCalls = [];
212
+ for (let i = 0; i < poolsToFetch.length; i++) {
213
+ const poolId = poolsToFetch[i];
214
+ const pool = getPool(poolId);
215
+ if (pool.gauge === curve.constants.ZERO_ADDRESS)
216
+ continue;
217
+ const gaugeContract = curve.contracts[pool.gauge].contract;
218
+ const gaugeMulticallContract = curve.contracts[pool.gauge].multicallContract;
219
+ if (hasCrvReward[i]) {
220
+ rewardInfoCalls.push(gaugeMulticallContract.claimable_tokens(address));
221
+ }
222
+ for (const r of rewardTokens[poolId]) {
223
+ _setContracts(r.token, ERC20Abi);
224
+ if ('claimable_reward(address,address)' in gaugeContract) {
225
+ rewardInfoCalls.push(gaugeMulticallContract.claimable_reward(address, r.token));
397
226
  }
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);
227
+ else if ('claimable_reward(address)' in gaugeContract) { // Synthetix Gauge
228
+ rewardInfoCalls.push(gaugeMulticallContract.claimable_reward(address), gaugeMulticallContract.claimed_rewards_for(address));
404
229
  }
405
- return [2 /*return*/, _claimable];
230
+ }
406
231
  }
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];
232
+ const rawRewardInfo = await curve.multicallProvider.all(rewardInfoCalls);
233
+ for (let i = 0; i < poolsToFetch.length; i++) {
234
+ const poolId = poolsToFetch[i];
235
+ const pool = getPool(poolId);
236
+ if (!_userClaimableCache[address])
237
+ _userClaimableCache[address] = {};
238
+ _userClaimableCache[address][poolId] = { rewards: [], time: Date.now() };
239
+ if (pool.gauge === curve.constants.ZERO_ADDRESS)
240
+ continue;
241
+ const gaugeContract = curve.contracts[pool.gauge].contract;
242
+ if (hasCrvReward[i]) {
243
+ const token = curve.constants.ALIASES.crv;
244
+ const symbol = 'CRV';
245
+ const decimals = 18;
246
+ const _amount = rawRewardInfo.shift();
247
+ const amount = curve.formatUnits(_amount, decimals);
248
+ if (Number(amount) > 0)
249
+ _userClaimableCache[address][poolId].rewards.push({ token, symbol, amount });
427
250
  }
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];
251
+ for (const r of rewardTokens[poolId]) {
252
+ let _amount = rawRewardInfo.shift();
253
+ if ('claimable_reward(address)' in gaugeContract) {
254
+ const _claimedAmount = rawRewardInfo.shift();
255
+ _amount = _amount - _claimedAmount;
256
+ }
257
+ const amount = curve.formatUnits(_amount, r.decimals);
258
+ if (Number(amount) > 0)
259
+ _userClaimableCache[address][poolId].rewards.push({ token: r.token, symbol: r.symbol, amount });
464
260
  }
465
- });
466
- });
261
+ }
262
+ }
263
+ const _claimable = [];
264
+ for (const poolId of pools) {
265
+ _claimable.push(_userClaimableCache[address]?.[poolId].rewards);
266
+ }
267
+ return _claimable;
467
268
  };
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
- });
269
+ export const getUserPoolListByClaimable = async (address = curve.signerAddress) => {
270
+ const pools = [...curve.getPoolList(), ...curve.getFactoryPoolList(), ...curve.getCryptoFactoryPoolList()];
271
+ const _claimable = await _getUserClaimable(pools, address, false);
272
+ const userPoolList = [];
273
+ for (let i = 0; i < pools.length; i++) {
274
+ if (_claimable[i].length > 0) {
275
+ userPoolList.push(pools[i]);
276
+ }
277
+ }
278
+ return userPoolList;
494
279
  };
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];
280
+ export const getUserClaimable = async (pools, address = curve.signerAddress) => {
281
+ const _claimable = await _getUserClaimable(pools, address, true);
282
+ const claimableWithPrice = [];
283
+ for (let i = 0; i < pools.length; i++) {
284
+ claimableWithPrice.push([]);
285
+ for (const c of _claimable[i]) {
286
+ const price = await _getUsdRate(c.token);
287
+ claimableWithPrice[claimableWithPrice.length - 1].push({ ...c, price });
288
+ }
289
+ }
290
+ return claimableWithPrice;
291
+ };
292
+ export const getUserPoolList = async (address = curve.signerAddress, useApi = true) => {
293
+ const pools = [...curve.getPoolList(), ...curve.getFactoryPoolList(), ...curve.getCryptoFactoryPoolList()];
294
+ const [_lpBalances, _claimable] = await Promise.all([
295
+ _getUserLpBalances(pools, address, false),
296
+ useApi ? _getUserClaimableUseApi(pools, address, false) : _getUserClaimable(pools, address, false),
297
+ ]);
298
+ const userPoolList = [];
299
+ for (let i = 0; i < pools.length; i++) {
300
+ if (_lpBalances[i] > 0 || _claimable[i].length > 0) {
301
+ userPoolList.push(pools[i]);
520
302
  }
521
- });
522
- }); };
523
- exports._getAmplificationCoefficientsFromApi = _getAmplificationCoefficientsFromApi;
303
+ }
304
+ return userPoolList;
305
+ };
306
+ export const _getAmplificationCoefficientsFromApi = async () => {
307
+ const network = curve.constants.NETWORK_NAME;
308
+ const promises = [
309
+ _getPoolsFromApi(network, "main"),
310
+ _getPoolsFromApi(network, "crypto"),
311
+ _getPoolsFromApi(network, "factory"),
312
+ _getPoolsFromApi(network, "factory-crypto"),
313
+ ];
314
+ const allTypesExtendedPoolData = await Promise.all(promises);
315
+ const amplificationCoefficientDict = {};
316
+ for (const extendedPoolData of allTypesExtendedPoolData) {
317
+ for (const pool of extendedPoolData.poolData) {
318
+ amplificationCoefficientDict[pool.address] = Number(pool.amplificationCoefficient);
319
+ }
320
+ }
321
+ return amplificationCoefficientDict;
322
+ };