@curvefi/api 2.33.0 → 2.34.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.
@@ -10,7 +10,7 @@ export var ALIASES_ETHEREUM = lowerCaseValues({
10
10
  "deposit_and_stake": "0x271fbE8aB7f1fB262f81C77Ea5303F03DA9d3d6A",
11
11
  "stable_calc": "0x5552b631e2aD801fAa129Aacf4B701071cC9D1f7",
12
12
  "factory": '0xb9fc157394af804a3578134a6585c0dc9cc990d4',
13
- "crvusd_factory": '0x0145FD99F1dd6e2491e44FCA608C481c9C5B97a9',
13
+ "crvusd_factory": '0xA504742ceFE2F9027328B49c7cffeC3d79b5ab1c',
14
14
  "crypto_factory": '0xF18056Bbd320E96A48e3Fbf8bC061322531aac99',
15
15
  "registry_exchange": "",
16
16
  });
@@ -25,7 +25,7 @@ export var ALIASES_POLYGON = lowerCaseValues({
25
25
  "deposit_and_stake": "0xB7De33440B7171159a9718CBE748086cecDd9685",
26
26
  "stable_calc": "0x5552b631e2aD801fAa129Aacf4B701071cC9D1f7",
27
27
  "factory": '0x722272d36ef0da72ff51c5a65db7b870e2e8d4ee',
28
- "crvusd_factory": '0x0145FD99F1dd6e2491e44FCA608C481c9C5B97a9',
28
+ "crvusd_factory": '0xA504742ceFE2F9027328B49c7cffeC3d79b5ab1c',
29
29
  "crypto_factory": "0xE5De15A9C9bBedb4F5EC13B131E61245f2983A69",
30
30
  "registry_exchange": "",
31
31
  });
@@ -40,7 +40,7 @@ export var ALIASES_FANTOM = lowerCaseValues({
40
40
  "deposit_and_stake": "0xB7De33440B7171159a9718CBE748086cecDd9685",
41
41
  "stable_calc": "0x5552b631e2aD801fAa129Aacf4B701071cC9D1f7",
42
42
  "factory": "0x686d67265703d1f124c45e33d47d794c566889ba",
43
- "crvusd_factory": '0x0145FD99F1dd6e2491e44FCA608C481c9C5B97a9',
43
+ "crvusd_factory": '0xA504742ceFE2F9027328B49c7cffeC3d79b5ab1c',
44
44
  "crypto_factory": "0xE5De15A9C9bBedb4F5EC13B131E61245f2983A69",
45
45
  "registry_exchange": "",
46
46
  });
@@ -55,7 +55,7 @@ export var ALIASES_AVALANCHE = lowerCaseValues({
55
55
  "deposit_and_stake": "0xB7De33440B7171159a9718CBE748086cecDd9685",
56
56
  "stable_calc": "0x5552b631e2aD801fAa129Aacf4B701071cC9D1f7",
57
57
  "factory": '0xb17b674D9c5CB2e441F8e196a2f048A81355d031',
58
- "crvusd_factory": '0x0145FD99F1dd6e2491e44FCA608C481c9C5B97a9',
58
+ "crvusd_factory": '0xA504742ceFE2F9027328B49c7cffeC3d79b5ab1c',
59
59
  "crypto_factory": '0xF18056Bbd320E96A48e3Fbf8bC061322531aac99',
60
60
  "registry_exchange": "",
61
61
  });
@@ -70,7 +70,7 @@ export var ALIASES_ARBITRUM = lowerCaseValues({
70
70
  "deposit_and_stake": "0xB7De33440B7171159a9718CBE748086cecDd9685",
71
71
  "stable_calc": "0x5552b631e2aD801fAa129Aacf4B701071cC9D1f7",
72
72
  "factory": '0xb17b674D9c5CB2e441F8e196a2f048A81355d031',
73
- "crvusd_factory": '0x0145FD99F1dd6e2491e44FCA608C481c9C5B97a9',
73
+ "crvusd_factory": '0xA504742ceFE2F9027328B49c7cffeC3d79b5ab1c',
74
74
  "crypto_factory": '0xF18056Bbd320E96A48e3Fbf8bC061322531aac99',
75
75
  "registry_exchange": "",
76
76
  });
@@ -85,7 +85,7 @@ export var ALIASES_OPTIMISM = lowerCaseValues({
85
85
  "deposit_and_stake": "0xB7De33440B7171159a9718CBE748086cecDd9685",
86
86
  "stable_calc": "0x5552b631e2aD801fAa129Aacf4B701071cC9D1f7",
87
87
  "factory": '0x2db0E83599a91b508Ac268a6197b8B14F5e72840',
88
- "crvusd_factory": '0x0145FD99F1dd6e2491e44FCA608C481c9C5B97a9',
88
+ "crvusd_factory": '0xA504742ceFE2F9027328B49c7cffeC3d79b5ab1c',
89
89
  "crypto_factory": '0xF18056Bbd320E96A48e3Fbf8bC061322531aac99',
90
90
  "registry_exchange": "",
91
91
  });
@@ -100,7 +100,7 @@ export var ALIASES_XDAI = lowerCaseValues({
100
100
  "deposit_and_stake": "0xB7De33440B7171159a9718CBE748086cecDd9685",
101
101
  "stable_calc": "0x5552b631e2aD801fAa129Aacf4B701071cC9D1f7",
102
102
  "factory": '0xD19Baeadc667Cf2015e395f2B08668Ef120f41F5',
103
- "crvusd_factory": '0x0145FD99F1dd6e2491e44FCA608C481c9C5B97a9',
103
+ "crvusd_factory": '0xA504742ceFE2F9027328B49c7cffeC3d79b5ab1c',
104
104
  "crypto_factory": '0xF18056Bbd320E96A48e3Fbf8bC061322531aac99',
105
105
  "registry_exchange": "",
106
106
  });
@@ -115,7 +115,7 @@ export var ALIASES_MOONBEAM = lowerCaseValues({
115
115
  "deposit_and_stake": "0xB7De33440B7171159a9718CBE748086cecDd9685",
116
116
  "stable_calc": "0x5552b631e2aD801fAa129Aacf4B701071cC9D1f7",
117
117
  "factory": '0x4244eB811D6e0Ef302326675207A95113dB4E1F8',
118
- "crvusd_factory": '0x0145FD99F1dd6e2491e44FCA608C481c9C5B97a9',
118
+ "crvusd_factory": '0xA504742ceFE2F9027328B49c7cffeC3d79b5ab1c',
119
119
  "crypto_factory": '0xF18056Bbd320E96A48e3Fbf8bC061322531aac99',
120
120
  "registry_exchange": "",
121
121
  });
@@ -130,7 +130,7 @@ export var ALIASES_AURORA = lowerCaseValues({
130
130
  "deposit_and_stake": "0xB7De33440B7171159a9718CBE748086cecDd9685",
131
131
  "stable_calc": "0x5552b631e2aD801fAa129Aacf4B701071cC9D1f7",
132
132
  "factory": '0xb9fc157394af804a3578134a6585c0dc9cc990d4',
133
- "crvusd_factory": '0x0145FD99F1dd6e2491e44FCA608C481c9C5B97a9',
133
+ "crvusd_factory": '0xA504742ceFE2F9027328B49c7cffeC3d79b5ab1c',
134
134
  "crypto_factory": '0xF18056Bbd320E96A48e3Fbf8bC061322531aac99',
135
135
  "registry_exchange": "",
136
136
  });
@@ -145,7 +145,7 @@ export var ALIASES_KAVA = lowerCaseValues({
145
145
  "deposit_and_stake": "0xB7De33440B7171159a9718CBE748086cecDd9685",
146
146
  "stable_calc": "0x5552b631e2aD801fAa129Aacf4B701071cC9D1f7",
147
147
  "factory": '0x40bc62805471eF53DdD5C5cF99ed3d9e5aa81b48',
148
- "crvusd_factory": '0x0145FD99F1dd6e2491e44FCA608C481c9C5B97a9',
148
+ "crvusd_factory": '0xA504742ceFE2F9027328B49c7cffeC3d79b5ab1c',
149
149
  "crypto_factory": '0xF18056Bbd320E96A48e3Fbf8bC061322531aac99',
150
150
  "registry_exchange": "",
151
151
  });
@@ -160,7 +160,7 @@ export var ALIASES_CELO = lowerCaseValues({
160
160
  "deposit_and_stake": "0xB7De33440B7171159a9718CBE748086cecDd9685",
161
161
  "stable_calc": "0x5552b631e2aD801fAa129Aacf4B701071cC9D1f7",
162
162
  "factory": '0x5277A0226d10392295E8D383E9724D6E416d6e6C',
163
- "crvusd_factory": '0x0145FD99F1dd6e2491e44FCA608C481c9C5B97a9',
163
+ "crvusd_factory": '0xA504742ceFE2F9027328B49c7cffeC3d79b5ab1c',
164
164
  "crypto_factory": '0xF18056Bbd320E96A48e3Fbf8bC061322531aac99',
165
165
  "registry_exchange": "",
166
166
  });
@@ -2,7 +2,7 @@ import { lowerCaseValues } from "../utils.js";
2
2
  export var COINS_ETHEREUM = lowerCaseValues({
3
3
  crv: "0xD533a949740bb3306d119CC777fa900bA034cd52",
4
4
  // --- USD ---
5
- 'crvusd': "0xEf1385D2b5dc6D14d5fecB86D53CdBefeCA20fcC",
5
+ 'crvusd': "0xf71040d20Cc3FFBb28c1abcEF46134C7936624e0",
6
6
  '3crv': "0x6c3F90f043a72FA612cbac8115EE7e52BDe6E490",
7
7
  ycdai: "0x99d1Fa417f94dcD62BfE781a1213c092a47041Bc",
8
8
  ycusdc: "0x9777d7E2b60bB01759D0E2f8be2095df444cb07E",
@@ -53,6 +53,7 @@ export var COINS_ETHEREUM = lowerCaseValues({
53
53
  reth: "0x9559aaa82d9649c7a7b220e7c461d2e74c9a3593",
54
54
  weth: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
55
55
  frxeth: "0x5E8422345238F34275888049021821E8E08CAa1f",
56
+ sfrxeth: "0xac3E018457B222d93114458476f3E3416Abbe38F",
56
57
  // --- BTC ---
57
58
  sbtccrv: "0x075b1bb99792c9E1041bA13afEf80C91a1e70fB3",
58
59
  hbtc: "0x0316EB71485b0Ab14103307bf65a021042c6d380",
@@ -1,2 +1,3 @@
1
1
  import { IDict, IPoolData } from "../../interfaces";
2
2
  export declare const POOLS_DATA_ETHEREUM: IDict<IPoolData>;
3
+ export declare const LLAMMAS_DATA_ETHEREUM: IDict<IPoolData>;
@@ -87,6 +87,7 @@ import fraxusdcSwapABI from '../abis/fraxusdc/swap.json' assert { type: 'json' }
87
87
  import frxethSwapABI from '../abis/frxeth/swap.json' assert { type: 'json' };
88
88
  import sbtc2SwapABI from '../abis/sbtc2/swap.json' assert { type: 'json' };
89
89
  import wbethSwapABI from '../abis/wbeth/swap.json' assert { type: 'json' };
90
+ import LlammaABI from '../abis/llamma.json' assert { type: 'json' };
90
91
  export var POOLS_DATA_ETHEREUM = lowerCasePoolDataAddresses({
91
92
  compound: {
92
93
  name: "compound",
@@ -1643,3 +1644,31 @@ export var POOLS_DATA_ETHEREUM = lowerCasePoolDataAddresses({
1643
1644
  gauge_abi: gaugeV5ABI,
1644
1645
  },
1645
1646
  });
1647
+ export var LLAMMAS_DATA_ETHEREUM = lowerCasePoolDataAddresses({
1648
+ 'sfrxeth-llamma': {
1649
+ name: "sfrxeth",
1650
+ full_name: "sfrxeth",
1651
+ symbol: "sfrxeth",
1652
+ reference_asset: 'CRYPTO',
1653
+ swap_address: '0x77fCFB78151c676f390a6236A78b5d3152e43384',
1654
+ token_address: '0x0000000000000000000000000000000000000000',
1655
+ gauge_address: '0x0000000000000000000000000000000000000000',
1656
+ is_crypto: true,
1657
+ is_plain: true,
1658
+ is_llamma: true,
1659
+ underlying_coins: ['crvUSD', 'sfrxETH'],
1660
+ wrapped_coins: ['crvUSD', 'sfrxETH'],
1661
+ underlying_coin_addresses: [
1662
+ '0xf71040d20Cc3FFBb28c1abcEF46134C7936624e0',
1663
+ '0xac3E018457B222d93114458476f3E3416Abbe38F',
1664
+ ],
1665
+ wrapped_coin_addresses: [
1666
+ '0xf71040d20Cc3FFBb28c1abcEF46134C7936624e0',
1667
+ '0xac3E018457B222d93114458476f3E3416Abbe38F',
1668
+ ],
1669
+ underlying_decimals: [18, 18],
1670
+ wrapped_decimals: [18, 18],
1671
+ swap_abi: LlammaABI,
1672
+ gauge_abi: gaugeV5ABI,
1673
+ },
1674
+ });
@@ -1,4 +1,5 @@
1
1
  import { POOLS_DATA_ETHEREUM } from "./ethereum.js";
2
+ import { LLAMMAS_DATA_ETHEREUM } from "./ethereum.js";
2
3
  import { POOLS_DATA_POLYGON } from "./polygon.js";
3
4
  import { POOLS_DATA_FANTOM } from "./fantom.js";
4
5
  import { POOLS_DATA_AVALANCHE } from "./avalanche.js";
@@ -9,4 +10,4 @@ import { POOLS_DATA_MOONBEAM } from "./moonbeam.js";
9
10
  import { POOLS_DATA_AURORA } from "./aurora.js";
10
11
  import { POOLS_DATA_KAVA } from "./kava.js";
11
12
  import { POOLS_DATA_CELO } from "./celo.js";
12
- export { POOLS_DATA_ETHEREUM, POOLS_DATA_POLYGON, POOLS_DATA_FANTOM, POOLS_DATA_AVALANCHE, POOLS_DATA_ARBITRUM, POOLS_DATA_OPTIMISM, POOLS_DATA_XDAI, POOLS_DATA_MOONBEAM, POOLS_DATA_AURORA, POOLS_DATA_KAVA, POOLS_DATA_CELO, };
13
+ export { POOLS_DATA_ETHEREUM, LLAMMAS_DATA_ETHEREUM, POOLS_DATA_POLYGON, POOLS_DATA_FANTOM, POOLS_DATA_AVALANCHE, POOLS_DATA_ARBITRUM, POOLS_DATA_OPTIMISM, POOLS_DATA_XDAI, POOLS_DATA_MOONBEAM, POOLS_DATA_AURORA, POOLS_DATA_KAVA, POOLS_DATA_CELO, };
@@ -1,4 +1,5 @@
1
1
  import { POOLS_DATA_ETHEREUM } from "./ethereum.js";
2
+ import { LLAMMAS_DATA_ETHEREUM } from "./ethereum.js";
2
3
  import { POOLS_DATA_POLYGON } from "./polygon.js";
3
4
  import { POOLS_DATA_FANTOM } from "./fantom.js";
4
5
  import { POOLS_DATA_AVALANCHE } from "./avalanche.js";
@@ -9,4 +10,4 @@ import { POOLS_DATA_MOONBEAM } from "./moonbeam.js";
9
10
  import { POOLS_DATA_AURORA } from "./aurora.js";
10
11
  import { POOLS_DATA_KAVA } from "./kava.js";
11
12
  import { POOLS_DATA_CELO } from "./celo.js";
12
- export { POOLS_DATA_ETHEREUM, POOLS_DATA_POLYGON, POOLS_DATA_FANTOM, POOLS_DATA_AVALANCHE, POOLS_DATA_ARBITRUM, POOLS_DATA_OPTIMISM, POOLS_DATA_XDAI, POOLS_DATA_MOONBEAM, POOLS_DATA_AURORA, POOLS_DATA_KAVA, POOLS_DATA_CELO, };
13
+ export { POOLS_DATA_ETHEREUM, LLAMMAS_DATA_ETHEREUM, POOLS_DATA_POLYGON, POOLS_DATA_FANTOM, POOLS_DATA_AVALANCHE, POOLS_DATA_ARBITRUM, POOLS_DATA_OPTIMISM, POOLS_DATA_XDAI, POOLS_DATA_MOONBEAM, POOLS_DATA_AURORA, POOLS_DATA_KAVA, POOLS_DATA_CELO, };
package/lib/curve.d.ts CHANGED
@@ -49,6 +49,7 @@ declare class Curve implements ICurve {
49
49
  POOLS_DATA: IDict<IPoolData>;
50
50
  FACTORY_POOLS_DATA: IDict<IPoolData>;
51
51
  CRYPTO_FACTORY_POOLS_DATA: IDict<IPoolData>;
52
+ LLAMMAS_DATA: IDict<IPoolData>;
52
53
  COINS: IDict<string>;
53
54
  DECIMALS: IDict<number>;
54
55
  GAUGES: string[];
package/lib/curve.js CHANGED
@@ -76,7 +76,7 @@ import registryExchangeABI from './constants/abis/registry_exchange.json' assert
76
76
  import streamerABI from './constants/abis/streamer.json' assert { type: 'json' };
77
77
  import factoryABI from './constants/abis/factory.json' assert { type: 'json' };
78
78
  import cryptoFactoryABI from './constants/abis/factory-crypto.json' assert { type: 'json' };
79
- import { POOLS_DATA_ETHEREUM, POOLS_DATA_POLYGON, POOLS_DATA_FANTOM, POOLS_DATA_AVALANCHE, POOLS_DATA_ARBITRUM, POOLS_DATA_OPTIMISM, POOLS_DATA_XDAI, POOLS_DATA_MOONBEAM, POOLS_DATA_AURORA, POOLS_DATA_KAVA, POOLS_DATA_CELO, } from './constants/pools/index.js';
79
+ import { POOLS_DATA_ETHEREUM, LLAMMAS_DATA_ETHEREUM, POOLS_DATA_POLYGON, POOLS_DATA_FANTOM, POOLS_DATA_AVALANCHE, POOLS_DATA_ARBITRUM, POOLS_DATA_OPTIMISM, POOLS_DATA_XDAI, POOLS_DATA_MOONBEAM, POOLS_DATA_AURORA, POOLS_DATA_KAVA, POOLS_DATA_CELO, } from './constants/pools/index.js';
80
80
  import { ALIASES_ETHEREUM, ALIASES_OPTIMISM, ALIASES_POLYGON, ALIASES_FANTOM, ALIASES_AVALANCHE, ALIASES_ARBITRUM, ALIASES_XDAI, ALIASES_MOONBEAM, ALIASES_AURORA, ALIASES_KAVA, ALIASES_CELO, } from "./constants/aliases.js";
81
81
  import { COINS_ETHEREUM, cTokensEthereum, yTokensEthereum, ycTokensEthereum, aTokensEthereum } from "./constants/coins/ethereum.js";
82
82
  import { COINS_OPTIMISM, cTokensOptimism, yTokensOptimism, ycTokensOptimism, aTokensOptimism } from "./constants/coins/optimism.js";
@@ -185,6 +185,7 @@ export var NETWORK_CONSTANTS = {
185
185
  NAME: 'ethereum',
186
186
  ALIASES: ALIASES_ETHEREUM,
187
187
  POOLS_DATA: POOLS_DATA_ETHEREUM,
188
+ LLAMMAS_DATA: LLAMMAS_DATA_ETHEREUM,
188
189
  COINS: COINS_ETHEREUM,
189
190
  cTokens: cTokensEthereum,
190
191
  yTokens: yTokensEthereum,
@@ -304,38 +305,41 @@ var Curve = /** @class */ (function () {
304
305
  case 0:
305
306
  if (this.chainId === 1313161554)
306
307
  return [2 /*return*/];
307
- if (!useApi) return [3 /*break*/, 3];
308
+ if (!useApi) return [3 /*break*/, 4];
308
309
  _a = this.constants;
309
310
  _b = lowerCasePoolDataAddresses;
310
311
  return [4 /*yield*/, getFactoryPoolsDataFromApi.call(this, false)];
311
312
  case 1:
312
313
  _a.FACTORY_POOLS_DATA = _b.apply(void 0, [_h.sent()]);
314
+ if (!(this.chainId === 1)) return [3 /*break*/, 3];
313
315
  _c = lowerCasePoolDataAddresses;
314
316
  return [4 /*yield*/, getFactoryPoolData.call(this, 0, undefined, this.constants.ALIASES.crvusd_factory)];
315
317
  case 2:
316
318
  poolData = _c.apply(void 0, [_h.sent()]);
317
319
  this.constants.FACTORY_POOLS_DATA = __assign(__assign({}, this.constants.FACTORY_POOLS_DATA), poolData);
318
- return [3 /*break*/, 6];
319
- case 3:
320
+ _h.label = 3;
321
+ case 3: return [3 /*break*/, 7];
322
+ case 4:
320
323
  _d = this.constants;
321
324
  _e = lowerCasePoolDataAddresses;
322
325
  return [4 /*yield*/, getFactoryPoolData.call(this)];
323
- case 4:
326
+ case 5:
324
327
  _d.FACTORY_POOLS_DATA = _e.apply(void 0, [_h.sent()]);
328
+ if (!(this.chainId === 1)) return [3 /*break*/, 7];
325
329
  _f = lowerCasePoolDataAddresses;
326
330
  return [4 /*yield*/, getFactoryPoolData.call(this, 0, undefined, this.constants.ALIASES.crvusd_factory)];
327
- case 5:
331
+ case 6:
328
332
  poolData = _f.apply(void 0, [_h.sent()]);
329
333
  this.constants.FACTORY_POOLS_DATA = __assign(__assign({}, this.constants.FACTORY_POOLS_DATA), poolData);
330
- _h.label = 6;
331
- case 6:
334
+ _h.label = 7;
335
+ case 7:
332
336
  _g = this.constants;
333
337
  return [4 /*yield*/, this._filterHiddenPools(this.constants.FACTORY_POOLS_DATA)];
334
- case 7:
338
+ case 8:
335
339
  _g.FACTORY_POOLS_DATA = _h.sent();
336
340
  this._updateDecimalsAndGauges(this.constants.FACTORY_POOLS_DATA);
337
341
  return [4 /*yield*/, _killGauges(this.constants.FACTORY_POOLS_DATA)];
338
- case 8:
342
+ case 9:
339
343
  _h.sent();
340
344
  return [2 /*return*/];
341
345
  }
@@ -473,6 +477,7 @@ var Curve = /** @class */ (function () {
473
477
  POOLS_DATA: {},
474
478
  FACTORY_POOLS_DATA: {},
475
479
  CRYPTO_FACTORY_POOLS_DATA: {},
480
+ LLAMMAS_DATA: {},
476
481
  COINS: {},
477
482
  DECIMALS: {},
478
483
  GAUGES: [],
@@ -507,6 +512,7 @@ var Curve = /** @class */ (function () {
507
512
  POOLS_DATA: {},
508
513
  FACTORY_POOLS_DATA: {},
509
514
  CRYPTO_FACTORY_POOLS_DATA: {},
515
+ LLAMMAS_DATA: {},
510
516
  COINS: {},
511
517
  DECIMALS: {},
512
518
  GAUGES: [],
@@ -572,10 +578,12 @@ var Curve = /** @class */ (function () {
572
578
  this.constants.NETWORK_NAME = NETWORK_CONSTANTS[this.chainId].NAME;
573
579
  this.constants.ALIASES = NETWORK_CONSTANTS[this.chainId].ALIASES;
574
580
  this.constants.POOLS_DATA = NETWORK_CONSTANTS[this.chainId].POOLS_DATA;
581
+ if (this.chainId === 1)
582
+ this.constants.LLAMMAS_DATA = NETWORK_CONSTANTS[this.chainId].LLAMMAS_DATA;
575
583
  for (poolId in this.constants.POOLS_DATA)
576
584
  this.constants.POOLS_DATA[poolId].in_api = true;
577
585
  this.constants.COINS = NETWORK_CONSTANTS[this.chainId].COINS;
578
- this.constants.DECIMALS = extractDecimals(this.constants.POOLS_DATA);
586
+ this.constants.DECIMALS = extractDecimals(__assign(__assign({}, this.constants.POOLS_DATA), this.constants.LLAMMAS_DATA));
579
587
  this.constants.DECIMALS[this.constants.NATIVE_TOKEN.address] = 18;
580
588
  this.constants.DECIMALS[this.constants.NATIVE_TOKEN.wrappedAddress] = 18;
581
589
  this.constants.GAUGES = extractGauges(this.constants.POOLS_DATA);
@@ -612,7 +620,7 @@ var Curve = /** @class */ (function () {
612
620
  return [4 /*yield*/, this.updateFeeData()];
613
621
  case 18:
614
622
  _p.sent();
615
- for (_i = 0, _f = Object.values(this.constants.POOLS_DATA); _i < _f.length; _i++) {
623
+ for (_i = 0, _f = Object.values(__assign(__assign({}, this.constants.POOLS_DATA), this.constants.LLAMMAS_DATA)); _i < _f.length; _i++) {
616
624
  pool = _f[_i];
617
625
  this.setContract(pool.swap_address, pool.swap_abi);
618
626
  if (pool.token_address !== pool.swap_address) {
@@ -52,7 +52,7 @@ export var implementationABIDictEthereum = lowerCaseKeys({
52
52
  "0x4A4d7868390EF5CaC51cDA262888f34bD3025C3F": Plain2OptimizedABI,
53
53
  "0xc629a01eC23AB04E1050500A3717A2a5c0701497": Plain2BasicABI,
54
54
  "0x94b4DFd9Ba5865Cc931195c99A2db42F3fc5d45B": Plain2ETHABI,
55
- "0xb9f861B7755Ff09cFD65CfE262D19823607b1f24": Plain2BasicABI,
55
+ "0xAee70429bdfbf599a979f50d5Fde5EB0d317E0f7": Plain2BasicABI,
56
56
  "0x9B52F13DF69D79Ec5aAB6D1aCe3157d29B409cC3": Plain3BasicABI,
57
57
  "0x50b085f2e5958C4A87baf93A8AB79F6bec068494": Plain3BalancesABI,
58
58
  "0x8c1aB78601c259E1B43F19816923609dC7d7de9B": Plain3ETHABI,
@@ -24,6 +24,7 @@ export interface IPoolData {
24
24
  is_crypto?: boolean;
25
25
  is_fake?: boolean;
26
26
  is_factory?: boolean;
27
+ is_llamma?: boolean;
27
28
  base_pool?: string;
28
29
  meta_coin_idx?: number;
29
30
  underlying_coins: string[];
@@ -19,6 +19,7 @@ export declare class PoolTemplate {
19
19
  isFake: boolean;
20
20
  isFactory: boolean;
21
21
  isMetaFactory: boolean;
22
+ isLlamma: boolean;
22
23
  basePool: string;
23
24
  metaCoinIdx: number;
24
25
  underlyingCoins: string[];
@@ -157,20 +157,39 @@ var PoolTemplate = /** @class */ (function () {
157
157
  this.statsTotalLiquidity = function (useApi) {
158
158
  if (useApi === void 0) { useApi = true; }
159
159
  return __awaiter(_this, void 0, void 0, function () {
160
- var network, poolType, poolsData, totalLiquidity_1, balances, promises, _i, _c, addr, prices, totalLiquidity;
160
+ var stablecoinContract, collateralContract, ammContract, _c, _balance_x, _fee_x, _balance_y, _fee_y, collateralRate, stablecoinTvlBN, collateralTvlBN, network, poolType, poolsData, totalLiquidity_1, balances, promises, _i, _d, addr, prices, totalLiquidity;
161
161
  var _this = this;
162
- return __generator(this, function (_d) {
163
- switch (_d.label) {
162
+ return __generator(this, function (_e) {
163
+ switch (_e.label) {
164
164
  case 0:
165
- if (!useApi) return [3 /*break*/, 2];
165
+ if (!this.isLlamma) return [3 /*break*/, 3];
166
+ stablecoinContract = curve.contracts[this.underlyingCoinAddresses[0]].multicallContract;
167
+ collateralContract = curve.contracts[this.underlyingCoinAddresses[1]].multicallContract;
168
+ ammContract = curve.contracts[this.address].multicallContract;
169
+ return [4 /*yield*/, curve.multicallProvider.all([
170
+ stablecoinContract.balanceOf(this.address),
171
+ ammContract.admin_fees_x(),
172
+ collateralContract.balanceOf(this.address),
173
+ ammContract.admin_fees_y(),
174
+ ])];
175
+ case 1:
176
+ _c = _e.sent(), _balance_x = _c[0], _fee_x = _c[1], _balance_y = _c[2], _fee_y = _c[3];
177
+ return [4 /*yield*/, _getUsdRate(this.underlyingCoinAddresses[1])];
178
+ case 2:
179
+ collateralRate = _e.sent();
180
+ stablecoinTvlBN = toBN(_balance_x).minus(toBN(_fee_x));
181
+ collateralTvlBN = toBN(_balance_y).minus(toBN(_fee_y)).times(collateralRate);
182
+ return [2 /*return*/, stablecoinTvlBN.plus(collateralTvlBN).toString()];
183
+ case 3:
184
+ if (!useApi) return [3 /*break*/, 5];
166
185
  network = curve.constants.NETWORK_NAME;
167
186
  poolType = !this.isFactory && !this.isCrypto ? "main" :
168
187
  !this.isFactory ? "crypto" :
169
188
  !(this.isCrypto && this.isFactory) ? "factory" :
170
189
  "factory-crypto";
171
190
  return [4 /*yield*/, _getPoolsFromApi(network, poolType)];
172
- case 1:
173
- poolsData = (_d.sent()).poolData;
191
+ case 4:
192
+ poolsData = (_e.sent()).poolData;
174
193
  try {
175
194
  totalLiquidity_1 = poolsData.filter(function (data) { return data.address.toLowerCase() === _this.address.toLowerCase(); })[0].usdTotal;
176
195
  return [2 /*return*/, String(totalLiquidity_1)];
@@ -178,18 +197,18 @@ var PoolTemplate = /** @class */ (function () {
178
197
  catch (err) {
179
198
  console.log(this.id, err.message);
180
199
  }
181
- _d.label = 2;
182
- case 2: return [4 /*yield*/, this.statsUnderlyingBalances()];
183
- case 3:
184
- balances = _d.sent();
200
+ _e.label = 5;
201
+ case 5: return [4 /*yield*/, this.statsUnderlyingBalances()];
202
+ case 6:
203
+ balances = _e.sent();
185
204
  promises = [];
186
- for (_i = 0, _c = this.underlyingCoinAddresses; _i < _c.length; _i++) {
187
- addr = _c[_i];
205
+ for (_i = 0, _d = this.underlyingCoinAddresses; _i < _d.length; _i++) {
206
+ addr = _d[_i];
188
207
  promises.push(_getUsdRate(addr));
189
208
  }
190
209
  return [4 /*yield*/, Promise.all(promises)];
191
- case 4:
192
- prices = _d.sent();
210
+ case 7:
211
+ prices = _e.sent();
193
212
  totalLiquidity = balances.reduce(function (liquidity, b, i) { return liquidity + (Number(b) * prices[i]); }, 0);
194
213
  return [2 /*return*/, totalLiquidity.toFixed(8)];
195
214
  }
@@ -1060,7 +1079,7 @@ var PoolTemplate = /** @class */ (function () {
1060
1079
  }
1061
1080
  });
1062
1081
  }); };
1063
- var poolData = __assign(__assign(__assign({}, curve.constants.POOLS_DATA), curve.constants.FACTORY_POOLS_DATA), curve.constants.CRYPTO_FACTORY_POOLS_DATA)[id];
1082
+ var poolData = __assign(__assign(__assign(__assign({}, curve.constants.POOLS_DATA), curve.constants.FACTORY_POOLS_DATA), curve.constants.CRYPTO_FACTORY_POOLS_DATA), curve.constants.LLAMMAS_DATA)[id];
1064
1083
  this.id = id;
1065
1084
  this.name = poolData.name;
1066
1085
  this.fullName = poolData.full_name;
@@ -1079,6 +1098,7 @@ var PoolTemplate = /** @class */ (function () {
1079
1098
  this.isFake = poolData.is_fake || false;
1080
1099
  this.isFactory = poolData.is_factory || false;
1081
1100
  this.isMetaFactory = (this.isMeta && this.isFactory) || this.zap === '0xa79828df1850e8a3a3064576f380d90aecdd3359';
1101
+ this.isLlamma = poolData.is_llamma || false;
1082
1102
  this.basePool = poolData.base_pool || '';
1083
1103
  this.metaCoinIdx = this.isMeta ? (_c = poolData.meta_coin_idx) !== null && _c !== void 0 ? _c : poolData.wrapped_coins.length - 1 : -1;
1084
1104
  this.underlyingCoins = poolData.underlying_coins;
@@ -1183,13 +1203,13 @@ var PoolTemplate = /** @class */ (function () {
1183
1203
  N_coins = useUnderlying ? this.underlyingCoins.length : this.wrappedCoins.length;
1184
1204
  contract = curve.contracts[calcContractAddress].contract;
1185
1205
  if (!(this.isMetaFactory && useUnderlying)) return [3 /*break*/, 4];
1186
- if (!contract["calc_token_amount(address,uint256[".concat(N_coins, "],bool)")]) return [3 /*break*/, 2];
1206
+ if (!("calc_token_amount(address,uint256[".concat(N_coins, "],bool)") in contract)) return [3 /*break*/, 2];
1187
1207
  return [4 /*yield*/, contract.calc_token_amount(this.address, _amounts, isDeposit, curve.constantOptions)];
1188
1208
  case 1: return [2 /*return*/, _c.sent()];
1189
1209
  case 2: return [4 /*yield*/, contract.calc_token_amount(this.address, _amounts, curve.constantOptions)];
1190
1210
  case 3: return [2 /*return*/, _c.sent()];
1191
1211
  case 4:
1192
- if (!contract["calc_token_amount(uint256[".concat(N_coins, "],bool)")]) return [3 /*break*/, 6];
1212
+ if (!("calc_token_amount(uint256[".concat(N_coins, "],bool)") in contract)) return [3 /*break*/, 6];
1193
1213
  return [4 /*yield*/, contract.calc_token_amount(_amounts, isDeposit, curve.constantOptions)];
1194
1214
  case 5: return [2 /*return*/, _c.sent()];
1195
1215
  case 6: return [4 /*yield*/, contract.calc_token_amount(_amounts, curve.constantOptions)];
package/lib/router.js CHANGED
@@ -115,6 +115,17 @@ var filterRoutes = function (routes, inputCoinAddress, sortFn) {
115
115
  };
116
116
  var sortByTvl = function (a, b) { return b.minTvl - a.minTvl || b.totalTvl - a.totalTvl || a.route.length - b.route.length; };
117
117
  var sortByLength = function (a, b) { return a.route.length - b.route.length || b.minTvl - a.minTvl || b.totalTvl - a.totalTvl; };
118
+ var _getTVL = memoize(function (poolId) { return __awaiter(void 0, void 0, void 0, function () { var _a; return __generator(this, function (_b) {
119
+ switch (_b.label) {
120
+ case 0:
121
+ _a = Number;
122
+ return [4 /*yield*/, (getPool(poolId)).stats.totalLiquidity()];
123
+ case 1: return [2 /*return*/, _a.apply(void 0, [_b.sent()])];
124
+ }
125
+ }); }); }, {
126
+ promise: true,
127
+ maxAge: 5 * 60 * 1000, // 5m
128
+ });
118
129
  // Inspired by Dijkstra's algorithm
119
130
  var _findAllRoutes = function (inputCoinAddress, outputCoinAddress) { return __awaiter(void 0, void 0, void 0, function () {
120
131
  var ALL_POOLS, amplificationCoefficientDict, curCoins, nextCoins, routesByTvl, routesByLength, step, _loop_1, _i, curCoins_1, inCoin, routes;
@@ -125,7 +136,7 @@ var _findAllRoutes = function (inputCoinAddress, outputCoinAddress) { return __a
125
136
  case 0:
126
137
  inputCoinAddress = inputCoinAddress.toLowerCase();
127
138
  outputCoinAddress = outputCoinAddress.toLowerCase();
128
- ALL_POOLS = Object.entries(__assign(__assign(__assign({}, curve.constants.POOLS_DATA), curve.constants.FACTORY_POOLS_DATA), curve.constants.CRYPTO_FACTORY_POOLS_DATA));
139
+ ALL_POOLS = Object.entries(__assign(__assign(__assign(__assign({}, curve.constants.POOLS_DATA), curve.constants.FACTORY_POOLS_DATA), curve.constants.CRYPTO_FACTORY_POOLS_DATA), curve.constants.LLAMMAS_DATA));
129
140
  return [4 /*yield*/, _getAmplificationCoefficientsFromApi()];
130
141
  case 1:
131
142
  amplificationCoefficientDict = _s.sent();
@@ -157,9 +168,9 @@ var _findAllRoutes = function (inputCoinAddress, outputCoinAddress) { return __a
157
168
  nextCoins.add(outCoin_1);
158
169
  }
159
170
  _loop_2 = function (poolId, poolData) {
160
- var wrapped_coin_addresses, underlying_coin_addresses, base_pool, meta_coin_addresses, token_address, is_aave_like_lending, tvlMultiplier, inCoinIndexes, tvl, _w, _x, poolAddress, coin_addresses, _loop_3, j, inCoinIndex, swapType_1, newRoutesByTvl, newRoutesByLength, _loop_4, j, _loop_5, j;
161
- return __generator(this, function (_y) {
162
- switch (_y.label) {
171
+ var wrapped_coin_addresses, underlying_coin_addresses, base_pool, meta_coin_addresses, token_address, is_aave_like_lending, tvlMultiplier, inCoinIndexes, tvl, _w, poolAddress, coin_addresses, _loop_3, j, inCoinIndex, swapType_1, newRoutesByTvl, newRoutesByLength, _loop_4, j, _loop_5, j;
172
+ return __generator(this, function (_x) {
173
+ switch (_x.label) {
163
174
  case 0:
164
175
  wrapped_coin_addresses = poolData.wrapped_coin_addresses.map(function (a) { return a.toLowerCase(); });
165
176
  underlying_coin_addresses = poolData.underlying_coin_addresses.map(function (a) { return a.toLowerCase(); });
@@ -179,12 +190,10 @@ var _findAllRoutes = function (inputCoinAddress, outputCoinAddress) { return __a
179
190
  if (!poolId.startsWith('factory-crvusd-')) return [3 /*break*/, 1];
180
191
  _w = 500000 * 100;
181
192
  return [3 /*break*/, 3];
182
- case 1:
183
- _x = Number;
184
- return [4 /*yield*/, (getPool(poolId)).stats.totalLiquidity()];
193
+ case 1: return [4 /*yield*/, _getTVL(poolId)];
185
194
  case 2:
186
- _w = _x.apply(void 0, [_y.sent()]) * tvlMultiplier;
187
- _y.label = 3;
195
+ _w = (_x.sent()) * tvlMultiplier;
196
+ _x.label = 3;
188
197
  case 3:
189
198
  tvl = _w;
190
199
  // Skip empty pools
@@ -216,7 +225,7 @@ var _findAllRoutes = function (inputCoinAddress, outputCoinAddress) { return __a
216
225
  }
217
226
  }
218
227
  inCoinIndex = (is_aave_like_lending || poolData.is_fake) ? inCoinIndexes.underlying_coin : inCoinIndexes.wrapped_coin;
219
- if (coin_addresses.length < 6 && inCoinIndex >= 0) {
228
+ if (coin_addresses.length < 6 && inCoinIndex >= 0 && !poolData.is_llamma) {
220
229
  // Looking for outputCoinAddress only on the final step
221
230
  if (!(step === 3 && token_address !== outputCoinAddress)) {
222
231
  swapType_1 = is_aave_like_lending ? 9
@@ -263,58 +272,43 @@ var _findAllRoutes = function (inputCoinAddress, outputCoinAddress) { return __a
263
272
  // Only for underlying swaps
264
273
  poolAddress = (poolData.is_crypto && poolData.is_meta) || ((base_pool === null || base_pool === void 0 ? void 0 : base_pool.is_lending) && poolData.is_factory) ?
265
274
  poolData.deposit_address : poolData.swap_address;
266
- if (!(!poolData.is_plain && inCoinIndexes.underlying_coin >= 0)) return [3 /*break*/, 7];
267
- _loop_5 = function (j) {
268
- var outputCoinIdx, tvl_1, _z, hasEth, swapType, newRoutesByTvl, newRoutesByLength;
269
- return __generator(this, function (_0) {
270
- switch (_0.label) {
271
- case 0:
272
- if (j === inCoinIndexes.underlying_coin)
273
- return [2 /*return*/, "continue"];
274
- // Don't swap metacoins since they can be swapped directly in base pool
275
- if (inCoinIndexes.meta_coin >= 0 && meta_coin_addresses.includes(underlying_coin_addresses[j]))
276
- return [2 /*return*/, "continue"];
277
- // Looking for outputCoinAddress only on the final step
278
- if (step === 3 && underlying_coin_addresses[j] !== outputCoinAddress)
279
- return [2 /*return*/, "continue"];
280
- outputCoinIdx = underlying_coin_addresses.indexOf(outputCoinAddress);
281
- if (outputCoinIdx >= 0 && j !== outputCoinIdx)
282
- return [2 /*return*/, "continue"];
283
- _z = Number;
284
- return [4 /*yield*/, (getPool(poolId)).stats.totalLiquidity()];
285
- case 1:
286
- tvl_1 = _z.apply(void 0, [_0.sent()]);
287
- if (tvl_1 === 0)
288
- return [2 /*return*/, "continue"];
289
- hasEth = (inCoin === curve.constants.NATIVE_TOKEN.address || underlying_coin_addresses[j] === curve.constants.NATIVE_TOKEN.address);
290
- swapType = (poolData.is_crypto && poolData.is_meta && poolData.is_factory) ? 6
291
- : ((base_pool === null || base_pool === void 0 ? void 0 : base_pool.is_lending) && poolData.is_factory) ? 5
292
- : hasEth && poolId !== 'avaxcrypto' ? 3
293
- : poolData.is_crypto ? 4
294
- : 2;
295
- newRoutesByTvl = routesByTvl[inCoin].map(function (route) { return getNewRoute(route, poolId, poolAddress, inCoin, underlying_coin_addresses[j], inCoinIndexes.underlying_coin, j, swapType, (swapType === 5 || swapType === 6) ? poolData.swap_address : curve.constants.ZERO_ADDRESS, tvl_1); });
296
- newRoutesByLength = routesByLength[inCoin].map(function (route) { return getNewRoute(route, poolId, poolAddress, inCoin, underlying_coin_addresses[j], inCoinIndexes.underlying_coin, j, swapType, (swapType === 5 || swapType === 6) ? poolData.swap_address : curve.constants.ZERO_ADDRESS, tvl_1); });
297
- routesByTvl[underlying_coin_addresses[j]] = __spreadArray(__spreadArray([], ((_o = routesByTvl[underlying_coin_addresses[j]]) !== null && _o !== void 0 ? _o : []), true), newRoutesByTvl, true);
298
- routesByTvl[underlying_coin_addresses[j]] = filterRoutes(routesByTvl[underlying_coin_addresses[j]], inputCoinAddress, sortByTvl);
299
- routesByLength[underlying_coin_addresses[j]] = __spreadArray(__spreadArray([], ((_p = routesByLength[underlying_coin_addresses[j]]) !== null && _p !== void 0 ? _p : []), true), newRoutesByLength, true);
300
- routesByLength[underlying_coin_addresses[j]] = filterRoutes(routesByLength[underlying_coin_addresses[j]], inputCoinAddress, sortByLength);
301
- nextCoins.add(underlying_coin_addresses[j]);
302
- return [2 /*return*/];
303
- }
304
- });
305
- };
306
- j = 0;
307
- _y.label = 4;
308
- case 4:
309
- if (!(j < underlying_coin_addresses.length)) return [3 /*break*/, 7];
310
- return [5 /*yield**/, _loop_5(j)];
311
- case 5:
312
- _y.sent();
313
- _y.label = 6;
314
- case 6:
315
- j++;
316
- return [3 /*break*/, 4];
317
- case 7: return [2 /*return*/];
275
+ // Underlying swaps
276
+ if (!poolData.is_plain && inCoinIndexes.underlying_coin >= 0) {
277
+ _loop_5 = function (j) {
278
+ if (j === inCoinIndexes.underlying_coin)
279
+ return "continue";
280
+ // Don't swap metacoins since they can be swapped directly in base pool
281
+ if (inCoinIndexes.meta_coin >= 0 && meta_coin_addresses.includes(underlying_coin_addresses[j]))
282
+ return "continue";
283
+ // Looking for outputCoinAddress only on the final step
284
+ if (step === 3 && underlying_coin_addresses[j] !== outputCoinAddress)
285
+ return "continue";
286
+ // Exclude such cases as cvxeth -> tricrypto2 -> tusd -> susd or cvxeth -> tricrypto2 -> susd -> susd
287
+ var outputCoinIdx = underlying_coin_addresses.indexOf(outputCoinAddress);
288
+ if (outputCoinIdx >= 0 && j !== outputCoinIdx)
289
+ return "continue";
290
+ // Skip empty pools
291
+ if (tvl === 0)
292
+ return "continue";
293
+ var hasEth = (inCoin === curve.constants.NATIVE_TOKEN.address || underlying_coin_addresses[j] === curve.constants.NATIVE_TOKEN.address);
294
+ var swapType = (poolData.is_crypto && poolData.is_meta && poolData.is_factory) ? 6
295
+ : ((base_pool === null || base_pool === void 0 ? void 0 : base_pool.is_lending) && poolData.is_factory) ? 5
296
+ : hasEth && poolId !== 'avaxcrypto' ? 3
297
+ : poolData.is_crypto ? 4
298
+ : 2;
299
+ var newRoutesByTvl = routesByTvl[inCoin].map(function (route) { return getNewRoute(route, poolId, poolAddress, inCoin, underlying_coin_addresses[j], inCoinIndexes.underlying_coin, j, swapType, (swapType === 5 || swapType === 6) ? poolData.swap_address : curve.constants.ZERO_ADDRESS, tvl); });
300
+ var newRoutesByLength = routesByLength[inCoin].map(function (route) { return getNewRoute(route, poolId, poolAddress, inCoin, underlying_coin_addresses[j], inCoinIndexes.underlying_coin, j, swapType, (swapType === 5 || swapType === 6) ? poolData.swap_address : curve.constants.ZERO_ADDRESS, tvl); });
301
+ routesByTvl[underlying_coin_addresses[j]] = __spreadArray(__spreadArray([], ((_o = routesByTvl[underlying_coin_addresses[j]]) !== null && _o !== void 0 ? _o : []), true), newRoutesByTvl, true);
302
+ routesByTvl[underlying_coin_addresses[j]] = filterRoutes(routesByTvl[underlying_coin_addresses[j]], inputCoinAddress, sortByTvl);
303
+ routesByLength[underlying_coin_addresses[j]] = __spreadArray(__spreadArray([], ((_p = routesByLength[underlying_coin_addresses[j]]) !== null && _p !== void 0 ? _p : []), true), newRoutesByLength, true);
304
+ routesByLength[underlying_coin_addresses[j]] = filterRoutes(routesByLength[underlying_coin_addresses[j]], inputCoinAddress, sortByLength);
305
+ nextCoins.add(underlying_coin_addresses[j]);
306
+ };
307
+ for (j = 0; j < underlying_coin_addresses.length; j++) {
308
+ _loop_5(j);
309
+ }
310
+ }
311
+ return [2 /*return*/];
318
312
  }
319
313
  });
320
314
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@curvefi/api",
3
- "version": "2.33.0",
3
+ "version": "2.34.0",
4
4
  "description": "JavaScript library for curve.fi",
5
5
  "main": "lib/index.js",
6
6
  "author": "Macket",