@curvefi/api 2.30.1 → 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 (100) hide show
  1. package/lib/boosting.js +137 -402
  2. package/lib/constants/abis/avaxcrypto/swap.json +1195 -0
  3. package/lib/constants/abis/avaxcrypto/zap.json +250 -0
  4. package/lib/constants/aliases.d.ts +11 -11
  5. package/lib/constants/aliases.js +12 -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 +12 -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 +51 -22
  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 +247 -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 +23 -28
  38. package/lib/constants/pools/xdai.d.ts +2 -4
  39. package/lib/constants/pools/xdai.js +25 -30
  40. package/lib/constants/utils.js +20 -29
  41. package/lib/curve.d.ts +9 -7
  42. package/lib/curve.js +397 -615
  43. package/lib/external-api.d.ts +1 -1
  44. package/lib/external-api.js +47 -140
  45. package/lib/factory/common.js +6 -10
  46. package/lib/factory/constants-crypto.js +48 -54
  47. package/lib/factory/constants.js +274 -280
  48. package/lib/factory/deploy.d.ts +8 -8
  49. package/lib/factory/deploy.js +177 -347
  50. package/lib/factory/factory-api.js +195 -278
  51. package/lib/factory/factory-crypto.js +170 -323
  52. package/lib/factory/factory.js +195 -350
  53. package/lib/index.d.ts +24 -25
  54. package/lib/index.js +87 -143
  55. package/lib/interfaces.d.ts +6 -5
  56. package/lib/interfaces.js +1 -2
  57. package/lib/pools/PoolTemplate.d.ts +1 -0
  58. package/lib/pools/PoolTemplate.js +1516 -2928
  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 -102
  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 +145 -405
  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 -2
  70. package/lib/pools/mixins/poolBalancesMixin.js +25 -131
  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 -2
  76. package/lib/pools/mixins/withdrawExpectedMixins.js +26 -154
  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 +124 -378
  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 +125 -378
  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 +79 -109
  95. package/lib/pools/utils.js +298 -500
  96. package/lib/router.d.ts +2 -2
  97. package/lib/router.js +406 -650
  98. package/lib/utils.d.ts +9 -9
  99. package/lib/utils.js +377 -731
  100. package/package.json +8 -8
@@ -1,361 +1,208 @@
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];
8
- }
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 };
47
- }
48
- };
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];
54
- }
1
+ import { curve } from "../curve.js";
2
+ import ERC20ABI from "../constants/abis/ERC20.json" assert { type: 'json' };
3
+ import cryptoFactorySwapABI from "../constants/abis/factory-crypto/factory-crypto-pool-2.json" assert { type: 'json' };
4
+ import factoryGaugeABI from "../constants/abis/gauge_factory.json" assert { type: 'json' };
5
+ import gaugeChildABI from "../constants/abis/gauge_child.json" assert { type: 'json' };
6
+ import { setFactoryZapContracts } from "./common.js";
7
+ import { CRYPTO_FACTORY_CONSTANTS } from "./constants-crypto.js";
8
+ const deepFlatten = (arr) => [].concat(...arr.map((v) => (Array.isArray(v) ? deepFlatten(v) : v)));
9
+ async function getRecentlyCreatedCryptoPoolId(swapAddress) {
10
+ const factoryContract = this.contracts[this.constants.ALIASES.crypto_factory].contract;
11
+ const poolCount = Number(curve.formatUnits(await factoryContract.pool_count(this.constantOptions), 0));
12
+ for (let i = 1; i <= poolCount; i++) {
13
+ const address = await factoryContract.pool_list(poolCount - i);
14
+ if (address.toLowerCase() === swapAddress.toLowerCase())
15
+ return `factory-crypto-${poolCount - i}`;
55
16
  }
56
- return to.concat(ar || Array.prototype.slice.call(from));
57
- };
58
- var __importDefault = (this && this.__importDefault) || function (mod) {
59
- return (mod && mod.__esModule) ? mod : { "default": mod };
60
- };
61
- Object.defineProperty(exports, "__esModule", { value: true });
62
- exports.getCryptoFactoryPoolData = void 0;
63
- var ethers_1 = require("ethers");
64
- var ERC20_json_1 = __importDefault(require("../constants/abis/ERC20.json"));
65
- var factory_crypto_pool_2_json_1 = __importDefault(require("../constants/abis/factory-crypto/factory-crypto-pool-2.json"));
66
- var gauge_factory_json_1 = __importDefault(require("../constants/abis/gauge_factory.json"));
67
- var gauge_child_json_1 = __importDefault(require("../constants/abis/gauge_child.json"));
68
- var common_1 = require("./common");
69
- var constants_crypto_1 = require("./constants-crypto");
70
- var deepFlatten = function (arr) { return [].concat.apply([], arr.map(function (v) { return (Array.isArray(v) ? deepFlatten(v) : v); })); };
71
- function getRecentlyCreatedCryptoPoolId(swapAddress) {
72
- return __awaiter(this, void 0, void 0, function () {
73
- var factoryContract, poolCount, _a, _b, _c, i, address;
74
- return __generator(this, function (_e) {
75
- switch (_e.label) {
76
- case 0:
77
- factoryContract = this.contracts[this.constants.ALIASES.crypto_factory].contract;
78
- _a = Number;
79
- _c = (_b = ethers_1.ethers.utils).formatUnits;
80
- return [4 /*yield*/, factoryContract.pool_count(this.constantOptions)];
81
- case 1:
82
- poolCount = _a.apply(void 0, [_c.apply(_b, [_e.sent(), 0])]);
83
- i = 1;
84
- _e.label = 2;
85
- case 2:
86
- if (!(i <= poolCount)) return [3 /*break*/, 5];
87
- return [4 /*yield*/, factoryContract.pool_list(poolCount - i)];
88
- case 3:
89
- address = _e.sent();
90
- if (address.toLowerCase() === swapAddress.toLowerCase())
91
- return [2 /*return*/, "factory-crypto-".concat(poolCount - i)];
92
- _e.label = 4;
93
- case 4:
94
- i++;
95
- return [3 /*break*/, 2];
96
- case 5: throw Error("Unknown pool");
97
- }
98
- });
99
- });
17
+ throw Error("Unknown pool");
100
18
  }
101
- function getCryptoFactoryIdsAndSwapAddresses(fromIdx) {
102
- if (fromIdx === void 0) { fromIdx = 0; }
103
- return __awaiter(this, void 0, void 0, function () {
104
- var factoryContract, factoryMulticallContract, poolCount, _a, _b, _c, calls, i, factories, swapAddresses;
105
- return __generator(this, function (_e) {
106
- switch (_e.label) {
107
- case 0:
108
- factoryContract = this.contracts[this.constants.ALIASES.crypto_factory].contract;
109
- factoryMulticallContract = this.contracts[this.constants.ALIASES.crypto_factory].multicallContract;
110
- _a = Number;
111
- _c = (_b = ethers_1.ethers.utils).formatUnits;
112
- return [4 /*yield*/, factoryContract.pool_count(this.constantOptions)];
113
- case 1:
114
- poolCount = _a.apply(void 0, [_c.apply(_b, [_e.sent(), 0])]);
115
- calls = [];
116
- for (i = fromIdx; i < poolCount; i++) {
117
- calls.push(factoryMulticallContract.pool_list(i));
118
- }
119
- if (calls.length === 0)
120
- return [2 /*return*/, [[], []]];
121
- return [4 /*yield*/, this.multicallProvider.all(calls)];
122
- case 2:
123
- factories = (_e.sent()).map(function (addr, i) { return ({ id: "factory-crypto-".concat(fromIdx + i), address: addr.toLowerCase() }); });
124
- swapAddresses = Object.values(this.constants.POOLS_DATA).map(function (pool) { return pool.swap_address.toLowerCase(); });
125
- factories = factories.filter(function (f) { return !swapAddresses.includes(f.address); });
126
- return [2 /*return*/, [factories.map(function (f) { return f.id; }), factories.map(function (f) { return f.address; })]];
127
- }
128
- });
129
- });
19
+ async function getCryptoFactoryIdsAndSwapAddresses(fromIdx = 0) {
20
+ const factoryContract = this.contracts[this.constants.ALIASES.crypto_factory].contract;
21
+ const factoryMulticallContract = this.contracts[this.constants.ALIASES.crypto_factory].multicallContract;
22
+ const poolCount = Number(curve.formatUnits(await factoryContract.pool_count(this.constantOptions), 0));
23
+ const calls = [];
24
+ for (let i = fromIdx; i < poolCount; i++) {
25
+ calls.push(factoryMulticallContract.pool_list(i));
26
+ }
27
+ if (calls.length === 0)
28
+ return [[], []];
29
+ let factories = (await this.multicallProvider.all(calls)).map((addr, i) => ({ id: `factory-crypto-${fromIdx + i}`, address: addr.toLowerCase() }));
30
+ const swapAddresses = Object.values(this.constants.POOLS_DATA).map((pool) => pool.swap_address.toLowerCase());
31
+ factories = factories.filter((f) => !swapAddresses.includes(f.address));
32
+ return [factories.map((f) => f.id), factories.map((f) => f.address)];
130
33
  }
131
34
  function _handleCoinAddresses(coinAddresses) {
132
- var _this = this;
133
- return coinAddresses.map(function (addresses) { return addresses.map(function (addr) { return _this.chainId === 137 && addr === "0x0000000000000000000000000000000000001010" ? _this.constants.NATIVE_TOKEN.wrappedAddress : addr.toLowerCase(); }); });
35
+ return coinAddresses.map((addresses) => addresses.map((addr) => this.chainId === 137 && addr === "0x0000000000000000000000000000000000001010" ? this.constants.NATIVE_TOKEN.wrappedAddress : addr.toLowerCase()));
134
36
  }
135
- function getPoolsData(factorySwapAddresses) {
136
- return __awaiter(this, void 0, void 0, function () {
137
- var factoryMulticallContract, calls, _i, factorySwapAddresses_1, addr, res, tokenAddresses, gaugeAddresses, coinAddresses;
138
- return __generator(this, function (_a) {
139
- switch (_a.label) {
140
- case 0:
141
- factoryMulticallContract = this.contracts[this.constants.ALIASES.crypto_factory].multicallContract;
142
- calls = [];
143
- for (_i = 0, factorySwapAddresses_1 = factorySwapAddresses; _i < factorySwapAddresses_1.length; _i++) {
144
- addr = factorySwapAddresses_1[_i];
145
- calls.push(factoryMulticallContract.get_token(addr));
146
- calls.push(factoryMulticallContract.get_gauge(addr));
147
- calls.push(factoryMulticallContract.get_coins(addr));
148
- }
149
- return [4 /*yield*/, this.multicallProvider.all(calls)];
150
- case 1:
151
- res = _a.sent();
152
- tokenAddresses = res.filter(function (a, i) { return i % 3 == 0; }).map(function (a) { return a.toLowerCase(); });
153
- gaugeAddresses = res.filter(function (a, i) { return i % 3 == 1; }).map(function (a) { return a.toLowerCase(); });
154
- coinAddresses = _handleCoinAddresses.call(this, res.filter(function (a, i) { return i % 3 == 2; }));
155
- return [2 /*return*/, [tokenAddresses, gaugeAddresses, coinAddresses]];
156
- }
157
- });
158
- });
37
+ async function getPoolsData(factorySwapAddresses) {
38
+ const factoryMulticallContract = this.contracts[this.constants.ALIASES.crypto_factory].multicallContract;
39
+ const calls = [];
40
+ for (const addr of factorySwapAddresses) {
41
+ calls.push(factoryMulticallContract.get_token(addr));
42
+ calls.push(factoryMulticallContract.get_gauge(addr));
43
+ calls.push(factoryMulticallContract.get_coins(addr));
44
+ }
45
+ const res = await this.multicallProvider.all(calls);
46
+ const tokenAddresses = res.filter((a, i) => i % 3 == 0).map((a) => a.toLowerCase());
47
+ const gaugeAddresses = res.filter((a, i) => i % 3 == 1).map((a) => a.toLowerCase());
48
+ const coinAddresses = _handleCoinAddresses.call(this, res.filter((a, i) => i % 3 == 2));
49
+ return [tokenAddresses, gaugeAddresses, coinAddresses];
159
50
  }
160
51
  function setCryptoFactorySwapContracts(factorySwapAddresses) {
161
- var _this = this;
162
- factorySwapAddresses.forEach(function (addr) {
163
- _this.setContract(addr, factory_crypto_pool_2_json_1.default);
52
+ factorySwapAddresses.forEach((addr) => {
53
+ this.setContract(addr, cryptoFactorySwapABI);
164
54
  });
165
55
  }
166
56
  function setCryptoFactoryTokenContracts(factoryTokenAddresses) {
167
- var _this = this;
168
- factoryTokenAddresses.forEach(function (addr) {
169
- _this.setContract(addr, ERC20_json_1.default);
57
+ factoryTokenAddresses.forEach((addr) => {
58
+ this.setContract(addr, ERC20ABI);
170
59
  });
171
60
  }
172
61
  function setCryptoFactoryGaugeContracts(factoryGaugeAddresses) {
173
- var _this = this;
174
- factoryGaugeAddresses.filter(function (addr) { return addr !== ethers_1.ethers.constants.AddressZero; }).forEach(function (addr, i) {
175
- _this.setContract(addr, _this.chainId === 1 ? gauge_factory_json_1.default : gauge_child_json_1.default);
62
+ factoryGaugeAddresses.filter((addr) => addr !== curve.constants.ZERO_ADDRESS).forEach((addr, i) => {
63
+ this.setContract(addr, this.chainId === 1 ? factoryGaugeABI : gaugeChildABI);
176
64
  });
177
65
  }
178
66
  function setCryptoFactoryCoinsContracts(coinAddresses) {
179
- var flattenedCoinAddresses = Array.from(new Set(deepFlatten(coinAddresses)));
180
- for (var _i = 0, flattenedCoinAddresses_1 = flattenedCoinAddresses; _i < flattenedCoinAddresses_1.length; _i++) {
181
- var addr = flattenedCoinAddresses_1[_i];
67
+ const flattenedCoinAddresses = Array.from(new Set(deepFlatten(coinAddresses)));
68
+ for (const addr of flattenedCoinAddresses) {
182
69
  if (addr in this.contracts)
183
70
  continue;
184
- this.setContract(addr, ERC20_json_1.default);
71
+ this.setContract(addr, ERC20ABI);
185
72
  }
186
73
  }
187
74
  function getCryptoFactoryUnderlyingCoinAddresses(coinAddresses) {
188
- var _this = this;
189
- return coinAddresses.map(function (coins) { return coins.map(function (c) { return c === _this.constants.NATIVE_TOKEN.wrappedAddress ? _this.constants.NATIVE_TOKEN.address : c; }); });
75
+ return coinAddresses.map((coins) => coins.map((c) => c === this.constants.NATIVE_TOKEN.wrappedAddress ? this.constants.NATIVE_TOKEN.address : c));
190
76
  }
191
77
  function getExistingCoinAddressNameDict() {
192
- var dict = {};
193
- var _loop_1 = function (poolData) {
194
- poolData.wrapped_coin_addresses.forEach(function (addr, i) {
78
+ const dict = {};
79
+ for (const poolData of Object.values(this.constants.POOLS_DATA)) {
80
+ poolData.wrapped_coin_addresses.forEach((addr, i) => {
195
81
  if (!(addr.toLowerCase() in dict)) {
196
82
  dict[addr.toLowerCase()] = poolData.wrapped_coins[i];
197
83
  }
198
84
  });
199
- poolData.underlying_coin_addresses.forEach(function (addr, i) {
85
+ poolData.underlying_coin_addresses.forEach((addr, i) => {
200
86
  if (!(addr.toLowerCase() in dict)) {
201
87
  dict[addr.toLowerCase()] = poolData.underlying_coins[i];
202
88
  }
203
89
  });
204
- };
205
- for (var _i = 0, _a = Object.values(this.constants.POOLS_DATA); _i < _a.length; _i++) {
206
- var poolData = _a[_i];
207
- _loop_1(poolData);
208
90
  }
209
91
  dict[this.constants.NATIVE_TOKEN.address] = this.constants.NATIVE_TOKEN.symbol;
210
92
  return dict;
211
93
  }
212
- function getCoinsData(tokenAddresses, coinAddresses, existingCoinAddrNameDict, existingCoinAddrDecimalsDict) {
213
- return __awaiter(this, void 0, void 0, function () {
214
- var flattenedCoinAddresses, newCoinAddresses, coinAddrNamesDict, coinAddrDecimalsDict, _i, flattenedCoinAddresses_2, addr, calls, _a, tokenAddresses_1, addr, _b, newCoinAddresses_1, addr, res, res1, tokenSymbols, tokenNames, res2, symbols, decimals;
215
- return __generator(this, function (_c) {
216
- switch (_c.label) {
217
- case 0:
218
- flattenedCoinAddresses = Array.from(new Set(deepFlatten(coinAddresses)));
219
- newCoinAddresses = [];
220
- coinAddrNamesDict = {};
221
- coinAddrDecimalsDict = {};
222
- for (_i = 0, flattenedCoinAddresses_2 = flattenedCoinAddresses; _i < flattenedCoinAddresses_2.length; _i++) {
223
- addr = flattenedCoinAddresses_2[_i];
224
- if (addr in existingCoinAddrNameDict) {
225
- coinAddrNamesDict[addr] = existingCoinAddrNameDict[addr];
226
- coinAddrDecimalsDict[addr] = existingCoinAddrDecimalsDict[addr];
227
- }
228
- else if (addr === "0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2") {
229
- coinAddrNamesDict[addr] = "MKR";
230
- }
231
- else {
232
- newCoinAddresses.push(addr);
233
- }
234
- }
235
- calls = [];
236
- for (_a = 0, tokenAddresses_1 = tokenAddresses; _a < tokenAddresses_1.length; _a++) {
237
- addr = tokenAddresses_1[_a];
238
- calls.push(this.contracts[addr].multicallContract.symbol());
239
- calls.push(this.contracts[addr].multicallContract.name());
240
- }
241
- for (_b = 0, newCoinAddresses_1 = newCoinAddresses; _b < newCoinAddresses_1.length; _b++) {
242
- addr = newCoinAddresses_1[_b];
243
- calls.push(this.contracts[addr].multicallContract.symbol());
244
- calls.push(this.contracts[addr].multicallContract.decimals());
245
- }
246
- return [4 /*yield*/, this.multicallProvider.all(calls)];
247
- case 1:
248
- res = _c.sent();
249
- res1 = res.slice(0, tokenAddresses.length * 2);
250
- tokenSymbols = res1.filter(function (a, i) { return i % 2 == 0; });
251
- tokenNames = res1.filter(function (a, i) { return i % 2 == 1; });
252
- res2 = res.slice(tokenAddresses.length * 2);
253
- symbols = res2.filter(function (a, i) { return i % 2 == 0; });
254
- decimals = res2.filter(function (a, i) { return i % 2 == 1; }).map(function (_d) { return Number(ethers_1.ethers.utils.formatUnits(_d, 0)); });
255
- newCoinAddresses.forEach(function (addr, i) {
256
- coinAddrNamesDict[addr] = symbols[i];
257
- coinAddrDecimalsDict[addr] = decimals[i];
258
- });
259
- coinAddrNamesDict[this.constants.NATIVE_TOKEN.address] = this.constants.NATIVE_TOKEN.symbol;
260
- return [2 /*return*/, [tokenSymbols, tokenNames, coinAddrNamesDict, coinAddrDecimalsDict]];
261
- }
262
- });
94
+ async function getCoinsData(tokenAddresses, coinAddresses, existingCoinAddrNameDict, existingCoinAddrDecimalsDict) {
95
+ const flattenedCoinAddresses = Array.from(new Set(deepFlatten(coinAddresses)));
96
+ const newCoinAddresses = [];
97
+ const coinAddrNamesDict = {};
98
+ const coinAddrDecimalsDict = {};
99
+ for (const addr of flattenedCoinAddresses) {
100
+ if (addr in existingCoinAddrNameDict) {
101
+ coinAddrNamesDict[addr] = existingCoinAddrNameDict[addr];
102
+ coinAddrDecimalsDict[addr] = existingCoinAddrDecimalsDict[addr];
103
+ }
104
+ else if (addr === "0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2") {
105
+ coinAddrNamesDict[addr] = "MKR";
106
+ }
107
+ else {
108
+ newCoinAddresses.push(addr);
109
+ }
110
+ }
111
+ const calls = [];
112
+ for (const addr of tokenAddresses) {
113
+ calls.push(this.contracts[addr].multicallContract.symbol());
114
+ calls.push(this.contracts[addr].multicallContract.name());
115
+ }
116
+ for (const addr of newCoinAddresses) {
117
+ calls.push(this.contracts[addr].multicallContract.symbol());
118
+ calls.push(this.contracts[addr].multicallContract.decimals());
119
+ }
120
+ const res = await this.multicallProvider.all(calls);
121
+ const res1 = res.slice(0, tokenAddresses.length * 2);
122
+ const tokenSymbols = res1.filter((a, i) => i % 2 == 0);
123
+ const tokenNames = res1.filter((a, i) => i % 2 == 1);
124
+ const res2 = res.slice(tokenAddresses.length * 2);
125
+ const symbols = res2.filter((a, i) => i % 2 == 0);
126
+ const decimals = res2.filter((a, i) => i % 2 == 1).map((_d) => Number(curve.formatUnits(_d, 0)));
127
+ newCoinAddresses.forEach((addr, i) => {
128
+ coinAddrNamesDict[addr] = symbols[i];
129
+ coinAddrDecimalsDict[addr] = decimals[i];
263
130
  });
131
+ coinAddrNamesDict[this.constants.NATIVE_TOKEN.address] = this.constants.NATIVE_TOKEN.symbol;
132
+ return [tokenSymbols, tokenNames, coinAddrNamesDict, coinAddrDecimalsDict];
264
133
  }
265
- function getCryptoFactoryPoolData(fromIdx, swapAddress) {
266
- if (fromIdx === void 0) { fromIdx = 0; }
267
- return __awaiter(this, void 0, void 0, function () {
268
- var _a, poolIds, swapAddresses, _b, _c, tokenAddresses, gaugeAddresses, coinAddresses, underlyingCoinAddresses, existingCoinAddressNameDict, _e, poolSymbols, poolNames, coinAddressNameDict, coinAddressDecimalsDict, CRYPTO_FACTORY_POOLS_DATA, i, lpTokenBasePoolIdDict, basePoolIdZapDict, basePoolId, allPoolsData, basePoolCoinNames, basePoolCoinAddresses, basePoolDecimals, basePoolZap;
269
- return __generator(this, function (_f) {
270
- switch (_f.label) {
271
- case 0:
272
- if (!swapAddress) return [3 /*break*/, 2];
273
- return [4 /*yield*/, getRecentlyCreatedCryptoPoolId.call(this, swapAddress)];
274
- case 1:
275
- _b = [[_f.sent()], [swapAddress.toLowerCase()]];
276
- return [3 /*break*/, 4];
277
- case 2: return [4 /*yield*/, getCryptoFactoryIdsAndSwapAddresses.call(this, fromIdx)];
278
- case 3:
279
- _b = _f.sent();
280
- _f.label = 4;
281
- case 4:
282
- _a = _b, poolIds = _a[0], swapAddresses = _a[1];
283
- if (poolIds.length === 0)
284
- return [2 /*return*/, {}];
285
- return [4 /*yield*/, getPoolsData.call(this, swapAddresses)];
286
- case 5:
287
- _c = _f.sent(), tokenAddresses = _c[0], gaugeAddresses = _c[1], coinAddresses = _c[2];
288
- setCryptoFactorySwapContracts.call(this, swapAddresses);
289
- setCryptoFactoryTokenContracts.call(this, tokenAddresses);
290
- setCryptoFactoryGaugeContracts.call(this, gaugeAddresses);
291
- setCryptoFactoryCoinsContracts.call(this, coinAddresses);
292
- common_1.setFactoryZapContracts.call(this, true);
293
- underlyingCoinAddresses = getCryptoFactoryUnderlyingCoinAddresses.call(this, coinAddresses);
294
- existingCoinAddressNameDict = getExistingCoinAddressNameDict.call(this);
295
- return [4 /*yield*/, getCoinsData.call(this, tokenAddresses, coinAddresses, existingCoinAddressNameDict, this.constants.DECIMALS)];
296
- case 6:
297
- _e = _f.sent(), poolSymbols = _e[0], poolNames = _e[1], coinAddressNameDict = _e[2], coinAddressDecimalsDict = _e[3];
298
- CRYPTO_FACTORY_POOLS_DATA = {};
299
- for (i = 0; i < poolIds.length; i++) {
300
- lpTokenBasePoolIdDict = constants_crypto_1.CRYPTO_FACTORY_CONSTANTS[this.chainId].lpTokenBasePoolIdDict;
301
- basePoolIdZapDict = constants_crypto_1.CRYPTO_FACTORY_CONSTANTS[this.chainId].basePoolIdZapDict;
302
- basePoolId = lpTokenBasePoolIdDict[coinAddresses[i][1].toLowerCase()];
303
- if (basePoolId) { // isMeta
304
- allPoolsData = __assign(__assign({}, this.constants.POOLS_DATA), CRYPTO_FACTORY_POOLS_DATA);
305
- basePoolCoinNames = __spreadArray([], allPoolsData[basePoolId].underlying_coins, true);
306
- basePoolCoinAddresses = __spreadArray([], allPoolsData[basePoolId].underlying_coin_addresses, true);
307
- basePoolDecimals = __spreadArray([], allPoolsData[basePoolId].underlying_decimals, true);
308
- basePoolZap = basePoolIdZapDict[basePoolId];
309
- CRYPTO_FACTORY_POOLS_DATA[poolIds[i]] = {
310
- name: poolNames[i].split(": ")[1].trim(),
311
- full_name: poolNames[i],
312
- symbol: poolSymbols[i],
313
- reference_asset: "CRYPTO",
314
- swap_address: swapAddresses[i],
315
- token_address: tokenAddresses[i],
316
- gauge_address: gaugeAddresses[i],
317
- deposit_address: basePoolZap.address,
318
- is_meta: true,
319
- is_crypto: true,
320
- is_factory: true,
321
- base_pool: basePoolId,
322
- underlying_coins: __spreadArray([coinAddressNameDict[underlyingCoinAddresses[i][0]]], basePoolCoinNames, true),
323
- wrapped_coins: coinAddresses[i].map(function (addr) { return coinAddressNameDict[addr]; }),
324
- underlying_coin_addresses: __spreadArray([underlyingCoinAddresses[i][0]], basePoolCoinAddresses, true),
325
- wrapped_coin_addresses: coinAddresses[i],
326
- underlying_decimals: __spreadArray([coinAddressDecimalsDict[underlyingCoinAddresses[i][0]]], basePoolDecimals, true),
327
- wrapped_decimals: coinAddresses[i].map(function (addr) { return coinAddressDecimalsDict[addr]; }),
328
- swap_abi: factory_crypto_pool_2_json_1.default,
329
- gauge_abi: this.chainId === 1 ? gauge_factory_json_1.default : gauge_child_json_1.default,
330
- deposit_abi: basePoolZap.ABI,
331
- };
332
- }
333
- else {
334
- CRYPTO_FACTORY_POOLS_DATA[poolIds[i]] = {
335
- name: poolNames[i].split(": ")[1].trim(),
336
- full_name: poolNames[i],
337
- symbol: poolSymbols[i],
338
- reference_asset: "CRYPTO",
339
- swap_address: swapAddresses[i],
340
- token_address: tokenAddresses[i],
341
- gauge_address: gaugeAddresses[i],
342
- is_crypto: true,
343
- is_plain: underlyingCoinAddresses[i].toString() === coinAddresses[i].toString(),
344
- is_factory: true,
345
- underlying_coins: underlyingCoinAddresses[i].map(function (addr) { return coinAddressNameDict[addr]; }),
346
- wrapped_coins: coinAddresses[i].map(function (addr) { return coinAddressNameDict[addr]; }),
347
- underlying_coin_addresses: underlyingCoinAddresses[i],
348
- wrapped_coin_addresses: coinAddresses[i],
349
- underlying_decimals: underlyingCoinAddresses[i].map(function (addr) { return coinAddressDecimalsDict[addr]; }),
350
- wrapped_decimals: coinAddresses[i].map(function (addr) { return coinAddressDecimalsDict[addr]; }),
351
- swap_abi: factory_crypto_pool_2_json_1.default,
352
- gauge_abi: this.chainId === 1 ? gauge_factory_json_1.default : gauge_child_json_1.default,
353
- };
354
- }
355
- }
356
- return [2 /*return*/, CRYPTO_FACTORY_POOLS_DATA];
357
- }
358
- });
359
- });
134
+ export async function getCryptoFactoryPoolData(fromIdx = 0, swapAddress) {
135
+ const [poolIds, swapAddresses] = swapAddress ?
136
+ [[await getRecentlyCreatedCryptoPoolId.call(this, swapAddress)], [swapAddress.toLowerCase()]]
137
+ : await getCryptoFactoryIdsAndSwapAddresses.call(this, fromIdx);
138
+ if (poolIds.length === 0)
139
+ return {};
140
+ const [tokenAddresses, gaugeAddresses, coinAddresses] = await getPoolsData.call(this, swapAddresses);
141
+ setCryptoFactorySwapContracts.call(this, swapAddresses);
142
+ setCryptoFactoryTokenContracts.call(this, tokenAddresses);
143
+ setCryptoFactoryGaugeContracts.call(this, gaugeAddresses);
144
+ setCryptoFactoryCoinsContracts.call(this, coinAddresses);
145
+ setFactoryZapContracts.call(this, true);
146
+ const underlyingCoinAddresses = getCryptoFactoryUnderlyingCoinAddresses.call(this, coinAddresses);
147
+ const existingCoinAddressNameDict = getExistingCoinAddressNameDict.call(this);
148
+ const [poolSymbols, poolNames, coinAddressNameDict, coinAddressDecimalsDict] = await getCoinsData.call(this, tokenAddresses, coinAddresses, existingCoinAddressNameDict, this.constants.DECIMALS);
149
+ const CRYPTO_FACTORY_POOLS_DATA = {};
150
+ for (let i = 0; i < poolIds.length; i++) {
151
+ const lpTokenBasePoolIdDict = CRYPTO_FACTORY_CONSTANTS[this.chainId].lpTokenBasePoolIdDict;
152
+ const basePoolIdZapDict = CRYPTO_FACTORY_CONSTANTS[this.chainId].basePoolIdZapDict;
153
+ const basePoolId = lpTokenBasePoolIdDict[coinAddresses[i][1].toLowerCase()];
154
+ if (basePoolId) { // isMeta
155
+ const allPoolsData = { ...this.constants.POOLS_DATA, ...CRYPTO_FACTORY_POOLS_DATA };
156
+ const basePoolCoinNames = [...allPoolsData[basePoolId].underlying_coins];
157
+ const basePoolCoinAddresses = [...allPoolsData[basePoolId].underlying_coin_addresses];
158
+ const basePoolDecimals = [...allPoolsData[basePoolId].underlying_decimals];
159
+ const basePoolZap = basePoolIdZapDict[basePoolId];
160
+ CRYPTO_FACTORY_POOLS_DATA[poolIds[i]] = {
161
+ name: poolNames[i].split(": ")[1].trim(),
162
+ full_name: poolNames[i],
163
+ symbol: poolSymbols[i],
164
+ reference_asset: "CRYPTO",
165
+ swap_address: swapAddresses[i],
166
+ token_address: tokenAddresses[i],
167
+ gauge_address: gaugeAddresses[i],
168
+ deposit_address: basePoolZap.address,
169
+ is_meta: true,
170
+ is_crypto: true,
171
+ is_factory: true,
172
+ base_pool: basePoolId,
173
+ underlying_coins: [coinAddressNameDict[underlyingCoinAddresses[i][0]], ...basePoolCoinNames],
174
+ wrapped_coins: coinAddresses[i].map((addr) => coinAddressNameDict[addr]),
175
+ underlying_coin_addresses: [underlyingCoinAddresses[i][0], ...basePoolCoinAddresses],
176
+ wrapped_coin_addresses: coinAddresses[i],
177
+ underlying_decimals: [coinAddressDecimalsDict[underlyingCoinAddresses[i][0]], ...basePoolDecimals],
178
+ wrapped_decimals: coinAddresses[i].map((addr) => coinAddressDecimalsDict[addr]),
179
+ swap_abi: cryptoFactorySwapABI,
180
+ gauge_abi: this.chainId === 1 ? factoryGaugeABI : gaugeChildABI,
181
+ deposit_abi: basePoolZap.ABI,
182
+ };
183
+ }
184
+ else {
185
+ CRYPTO_FACTORY_POOLS_DATA[poolIds[i]] = {
186
+ name: poolNames[i].split(": ")[1].trim(),
187
+ full_name: poolNames[i],
188
+ symbol: poolSymbols[i],
189
+ reference_asset: "CRYPTO",
190
+ swap_address: swapAddresses[i],
191
+ token_address: tokenAddresses[i],
192
+ gauge_address: gaugeAddresses[i],
193
+ is_crypto: true,
194
+ is_plain: underlyingCoinAddresses[i].toString() === coinAddresses[i].toString(),
195
+ is_factory: true,
196
+ underlying_coins: underlyingCoinAddresses[i].map((addr) => coinAddressNameDict[addr]),
197
+ wrapped_coins: coinAddresses[i].map((addr) => coinAddressNameDict[addr]),
198
+ underlying_coin_addresses: underlyingCoinAddresses[i],
199
+ wrapped_coin_addresses: coinAddresses[i],
200
+ underlying_decimals: underlyingCoinAddresses[i].map((addr) => coinAddressDecimalsDict[addr]),
201
+ wrapped_decimals: coinAddresses[i].map((addr) => coinAddressDecimalsDict[addr]),
202
+ swap_abi: cryptoFactorySwapABI,
203
+ gauge_abi: this.chainId === 1 ? factoryGaugeABI : gaugeChildABI,
204
+ };
205
+ }
206
+ }
207
+ return CRYPTO_FACTORY_POOLS_DATA;
360
208
  }
361
- exports.getCryptoFactoryPoolData = getCryptoFactoryPoolData;