@curvefi/api 2.13.0 → 2.13.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.
package/lib/index.d.ts CHANGED
@@ -75,7 +75,7 @@ declare const curve: {
75
75
  output: string;
76
76
  }>;
77
77
  expected: (inputCoin: string, outputCoin: string, amount: string | number) => Promise<string>;
78
- priceImpact: (inputCoin: string, outputCoin: string, amount: string | number) => Promise<string>;
78
+ priceImpact: (inputCoin: string, outputCoin: string, amount: string | number) => Promise<number>;
79
79
  isApproved: (inputCoin: string, amount: string | number) => Promise<boolean>;
80
80
  approve: (inputCoin: string, amount: string | number) => Promise<string[]>;
81
81
  swap: (inputCoin: string, outputCoin: string, amount: string | number, slippage?: number) => Promise<string>;
@@ -219,7 +219,7 @@ export declare class PoolTemplate {
219
219
  }>;
220
220
  private _swapExpected;
221
221
  swapExpected(inputCoin: string | number, outputCoin: string | number, amount: number | string): Promise<string>;
222
- swapPriceImpact(inputCoin: string | number, outputCoin: string | number, amount: number | string): Promise<string>;
222
+ swapPriceImpact(inputCoin: string | number, outputCoin: string | number, amount: number | string): Promise<number>;
223
223
  private _swapContractAddress;
224
224
  swapIsApproved(inputCoin: string | number, amount: number | string): Promise<boolean>;
225
225
  private swapApproveEstimateGas;
@@ -228,7 +228,7 @@ export declare class PoolTemplate {
228
228
  swap(inputCoin: string | number, outputCoin: string | number, amount: number | string, slippage?: number): Promise<string>;
229
229
  private _swapWrappedExpected;
230
230
  swapWrappedExpected(inputCoin: string | number, outputCoin: string | number, amount: number | string): Promise<string>;
231
- swapWrappedPriceImpact(inputCoin: string | number, outputCoin: string | number, amount: number | string): Promise<string>;
231
+ swapWrappedPriceImpact(inputCoin: string | number, outputCoin: string | number, amount: number | string): Promise<number>;
232
232
  swapWrappedIsApproved(inputCoin: string | number, amount: number | string): Promise<boolean>;
233
233
  private swapWrappedApproveEstimateGas;
234
234
  swapWrappedApprove(inputCoin: string | number, amount: number | string): Promise<string[]>;
@@ -61,7 +61,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
61
61
  Object.defineProperty(exports, "__esModule", { value: true });
62
62
  exports.PoolTemplate = void 0;
63
63
  var ethers_1 = require("ethers");
64
- var bignumber_js_1 = __importDefault(require("bignumber.js"));
65
64
  var memoizee_1 = __importDefault(require("memoizee"));
66
65
  var external_api_1 = require("../external-api");
67
66
  var utils_1 = require("../utils");
@@ -2624,7 +2623,7 @@ var PoolTemplate = /** @class */ (function () {
2624
2623
  };
2625
2624
  PoolTemplate.prototype.swapPriceImpact = function (inputCoin, outputCoin, amount) {
2626
2625
  return __awaiter(this, void 0, void 0, function () {
2627
- var i, j, _c, inputCoinDecimals, outputCoinDecimals, _amount, _output, target, amountIntBN, outputIntBN, k, smallAmountIntBN, _smallAmount, _smallOutput, amountBN, outputBN, smallAmountBN, smallOutputBN, rateBN, smallRateBN, slippageBN;
2626
+ var i, j, _c, inputCoinDecimals, outputCoinDecimals, _amount, _output, smallAmountIntBN, amountIntBN, _smallAmount, _smallOutput, priceImpactBN;
2628
2627
  return __generator(this, function (_d) {
2629
2628
  switch (_d.label) {
2630
2629
  case 0:
@@ -2635,25 +2634,16 @@ var PoolTemplate = /** @class */ (function () {
2635
2634
  return [4 /*yield*/, this._swapExpected(i, j, _amount)];
2636
2635
  case 1:
2637
2636
  _output = _d.sent();
2638
- target = (0, utils_1.BN)(Math.pow(10, 15));
2639
- amountIntBN = (0, utils_1.BN)(amount).times(Math.pow(10, inputCoinDecimals));
2640
- outputIntBN = (0, utils_1.toBN)(_output, 0);
2641
- k = bignumber_js_1.default.min(bignumber_js_1.default.max(target.div(amountIntBN), target.div(outputIntBN)), 0.2);
2642
- smallAmountIntBN = bignumber_js_1.default.min(amountIntBN.times(k), (0, utils_1.BN)(Math.pow(10, inputCoinDecimals)));
2643
- if (smallAmountIntBN.toFixed(0) === '0')
2644
- return [2 /*return*/, '0'];
2637
+ smallAmountIntBN = (0, utils_1._get_small_x)(_amount, _output, inputCoinDecimals, outputCoinDecimals);
2638
+ amountIntBN = (0, utils_1.toBN)(_amount, 0);
2639
+ if (smallAmountIntBN.gte(amountIntBN))
2640
+ return [2 /*return*/, 0];
2645
2641
  _smallAmount = (0, utils_1.fromBN)(smallAmountIntBN.div(Math.pow(10, inputCoinDecimals)), inputCoinDecimals);
2646
2642
  return [4 /*yield*/, this._swapExpected(i, j, _smallAmount)];
2647
2643
  case 2:
2648
2644
  _smallOutput = _d.sent();
2649
- amountBN = (0, utils_1.BN)(amount);
2650
- outputBN = (0, utils_1.toBN)(_output, outputCoinDecimals);
2651
- smallAmountBN = (0, utils_1.toBN)(_smallAmount, inputCoinDecimals);
2652
- smallOutputBN = (0, utils_1.toBN)(_smallOutput, outputCoinDecimals);
2653
- rateBN = outputBN.div(amountBN);
2654
- smallRateBN = smallOutputBN.div(smallAmountBN);
2655
- slippageBN = (0, utils_1.BN)(1).minus(rateBN.div(smallRateBN)).times(100);
2656
- return [2 /*return*/, (0, utils_1._cutZeros)(slippageBN.toFixed(6)).replace('-', '')];
2645
+ priceImpactBN = (0, utils_1._get_price_impact)(_amount, _output, _smallAmount, _smallOutput, inputCoinDecimals, outputCoinDecimals);
2646
+ return [2 /*return*/, Number((0, utils_1._cutZeros)(priceImpactBN.toFixed(4)).replace('-', ''))];
2657
2647
  }
2658
2648
  });
2659
2649
  });
@@ -2741,7 +2731,7 @@ var PoolTemplate = /** @class */ (function () {
2741
2731
  };
2742
2732
  PoolTemplate.prototype.swapWrappedPriceImpact = function (inputCoin, outputCoin, amount) {
2743
2733
  return __awaiter(this, void 0, void 0, function () {
2744
- var i, j, _c, inputCoinDecimals, outputCoinDecimals, _amount, _output, target, amountIntBN, outputIntBN, k, smallAmountIntBN, _smallAmount, _smallOutput, amountBN, outputBN, smallAmountBN, smallOutputBN, rateBN, smallRateBN, slippageBN;
2734
+ var i, j, _c, inputCoinDecimals, outputCoinDecimals, _amount, _output, smallAmountIntBN, amountIntBN, _smallAmount, _smallOutput, priceImpactBN;
2745
2735
  return __generator(this, function (_d) {
2746
2736
  switch (_d.label) {
2747
2737
  case 0:
@@ -2755,25 +2745,16 @@ var PoolTemplate = /** @class */ (function () {
2755
2745
  return [4 /*yield*/, this._swapWrappedExpected(i, j, _amount)];
2756
2746
  case 1:
2757
2747
  _output = _d.sent();
2758
- target = (0, utils_1.BN)(Math.pow(10, 15));
2759
- amountIntBN = (0, utils_1.BN)(amount).times(Math.pow(10, inputCoinDecimals));
2760
- outputIntBN = (0, utils_1.toBN)(_output, 0);
2761
- k = bignumber_js_1.default.min(bignumber_js_1.default.max(target.div(amountIntBN), target.div(outputIntBN)), 0.2);
2762
- smallAmountIntBN = bignumber_js_1.default.min(amountIntBN.times(k), (0, utils_1.BN)(Math.pow(10, inputCoinDecimals)));
2763
- if (smallAmountIntBN.toFixed(0) === '0')
2764
- return [2 /*return*/, '0'];
2748
+ smallAmountIntBN = (0, utils_1._get_small_x)(_amount, _output, inputCoinDecimals, outputCoinDecimals);
2749
+ amountIntBN = (0, utils_1.toBN)(_amount, 0);
2750
+ if (smallAmountIntBN.gte(amountIntBN))
2751
+ return [2 /*return*/, 0];
2765
2752
  _smallAmount = (0, utils_1.fromBN)(smallAmountIntBN.div(Math.pow(10, inputCoinDecimals)), inputCoinDecimals);
2766
2753
  return [4 /*yield*/, this._swapWrappedExpected(i, j, _smallAmount)];
2767
2754
  case 2:
2768
2755
  _smallOutput = _d.sent();
2769
- amountBN = (0, utils_1.BN)(amount);
2770
- outputBN = (0, utils_1.toBN)(_output, outputCoinDecimals);
2771
- smallAmountBN = (0, utils_1.toBN)(_smallAmount, inputCoinDecimals);
2772
- smallOutputBN = (0, utils_1.toBN)(_smallOutput, outputCoinDecimals);
2773
- rateBN = outputBN.div(amountBN);
2774
- smallRateBN = smallOutputBN.div(smallAmountBN);
2775
- slippageBN = (0, utils_1.BN)(1).minus(rateBN.div(smallRateBN)).times(100);
2776
- return [2 /*return*/, (0, utils_1._cutZeros)(slippageBN.toFixed(6)).replace('-', '')];
2756
+ priceImpactBN = (0, utils_1._get_price_impact)(_amount, _output, _smallAmount, _smallOutput, inputCoinDecimals, outputCoinDecimals);
2757
+ return [2 /*return*/, Number((0, utils_1._cutZeros)(priceImpactBN.toFixed(4)).replace('-', ''))];
2777
2758
  }
2778
2759
  });
2779
2760
  });
package/lib/router.d.ts CHANGED
@@ -7,7 +7,7 @@ export declare const getBestRouteAndOutput: (inputCoin: string, outputCoin: stri
7
7
  output: string;
8
8
  }>;
9
9
  export declare const swapExpected: (inputCoin: string, outputCoin: string, amount: number | string) => Promise<string>;
10
- export declare const swapPriceImpact: (inputCoin: string, outputCoin: string, amount: number | string) => Promise<string>;
10
+ export declare const swapPriceImpact: (inputCoin: string, outputCoin: string, amount: number | string) => Promise<number>;
11
11
  export declare const swapIsApproved: (inputCoin: string, amount: number | string) => Promise<boolean>;
12
12
  export declare const swapApproveEstimateGas: (inputCoin: string, amount: number | string) => Promise<number>;
13
13
  export declare const swapApprove: (inputCoin: string, amount: number | string) => Promise<string[]>;
package/lib/router.js CHANGED
@@ -62,7 +62,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
62
62
  exports.swap = exports.swapEstimateGas = exports.swapApprove = exports.swapApproveEstimateGas = exports.swapIsApproved = exports.swapPriceImpact = exports.swapExpected = exports.getBestRouteAndOutput = exports._findAllRoutes = exports._findAllRoutesTvl = exports._findAllRoutesTheShorterTheBetter = void 0;
63
63
  var axios_1 = __importDefault(require("axios"));
64
64
  var memoizee_1 = __importDefault(require("memoizee"));
65
- var bignumber_js_1 = __importDefault(require("bignumber.js"));
66
65
  var ethers_1 = require("ethers");
67
66
  var curve_1 = require("./curve");
68
67
  var utils_1 = require("./utils");
@@ -839,7 +838,7 @@ var swapExpected = function (inputCoin, outputCoin, amount) { return __awaiter(v
839
838
  }); };
840
839
  exports.swapExpected = swapExpected;
841
840
  var swapPriceImpact = function (inputCoin, outputCoin, amount) { return __awaiter(void 0, void 0, void 0, function () {
842
- var _a, inputCoinAddress, outputCoinAddress, _b, inputCoinDecimals, outputCoinDecimals, route, target, amountIntBN, outputIntBN, k, smallAmountIntBN, contract, _smallAmount, _c, _route, _swapParams, _factorySwapAddresses, _smallOutput, amountBN, outputBN, smallAmountBN, smallOutputBN, rateBN, smallRateBN, slippageBN;
841
+ var _a, inputCoinAddress, outputCoinAddress, _b, inputCoinDecimals, outputCoinDecimals, route, _amount, _output, smallAmountIntBN, amountIntBN, contract, _smallAmount, _c, _route, _swapParams, _factorySwapAddresses, _smallOutput, priceImpactBN;
843
842
  return __generator(this, function (_d) {
844
843
  switch (_d.label) {
845
844
  case 0:
@@ -848,27 +847,20 @@ var swapPriceImpact = function (inputCoin, outputCoin, amount) { return __awaite
848
847
  return [4 /*yield*/, _getBestRouteAndOutput(inputCoinAddress, outputCoinAddress, amount)];
849
848
  case 1:
850
849
  route = _d.sent();
851
- target = (0, utils_1.BN)(Math.pow(10, 15));
852
- amountIntBN = (0, utils_1.BN)(amount).times(Math.pow(10, inputCoinDecimals));
853
- outputIntBN = (0, utils_1.toBN)(route._output, 0);
854
- k = bignumber_js_1.default.min(bignumber_js_1.default.max(target.div(amountIntBN), target.div(outputIntBN)), 0.2);
855
- smallAmountIntBN = bignumber_js_1.default.min(amountIntBN.times(k), (0, utils_1.BN)(Math.pow(10, inputCoinDecimals)));
856
- if (smallAmountIntBN.toFixed(0) === '0')
857
- return [2 /*return*/, '0'];
850
+ _amount = (0, utils_1.parseUnits)(amount, inputCoinDecimals);
851
+ _output = route._output;
852
+ smallAmountIntBN = (0, utils_1._get_small_x)(_amount, _output, inputCoinDecimals, outputCoinDecimals);
853
+ amountIntBN = (0, utils_1.toBN)(_amount, 0);
854
+ if (smallAmountIntBN.gte(amountIntBN))
855
+ return [2 /*return*/, 0];
858
856
  contract = curve_1.curve.contracts[curve_1.curve.constants.ALIASES.registry_exchange].contract;
859
857
  _smallAmount = (0, utils_1.fromBN)(smallAmountIntBN.div(Math.pow(10, inputCoinDecimals)), inputCoinDecimals);
860
858
  _c = _getExchangeMultipleArgs(inputCoinAddress, route), _route = _c._route, _swapParams = _c._swapParams, _factorySwapAddresses = _c._factorySwapAddresses;
861
859
  return [4 /*yield*/, contract.get_exchange_multiple_amount(_route, _swapParams, _smallAmount, _factorySwapAddresses, curve_1.curve.constantOptions)];
862
860
  case 2:
863
861
  _smallOutput = _d.sent();
864
- amountBN = (0, utils_1.BN)(amount);
865
- outputBN = (0, utils_1.toBN)(route._output, outputCoinDecimals);
866
- smallAmountBN = (0, utils_1.toBN)(_smallAmount, inputCoinDecimals);
867
- smallOutputBN = (0, utils_1.toBN)(_smallOutput, outputCoinDecimals);
868
- rateBN = outputBN.div(amountBN);
869
- smallRateBN = smallOutputBN.div(smallAmountBN);
870
- slippageBN = (0, utils_1.BN)(1).minus(rateBN.div(smallRateBN)).times(100);
871
- return [2 /*return*/, (0, utils_1._cutZeros)(slippageBN.toFixed(6)).replace('-', '')];
862
+ priceImpactBN = (0, utils_1._get_price_impact)(_amount, _output, _smallAmount, _smallOutput, inputCoinDecimals, outputCoinDecimals);
863
+ return [2 /*return*/, Number((0, utils_1._cutZeros)(priceImpactBN.toFixed(4)).replace('-', ''))];
872
864
  }
873
865
  });
874
866
  }); };
package/lib/utils.d.ts CHANGED
@@ -31,3 +31,5 @@ export declare const _getUsdRate: (assetId: string) => Promise<number>;
31
31
  export declare const getUsdRate: (coin: string) => Promise<number>;
32
32
  export declare const getTVL: (chainId?: number) => Promise<number>;
33
33
  export declare const _setContracts: (address: string, abi: any) => void;
34
+ export declare const _get_small_x: (_x: ethers.BigNumber, _y: ethers.BigNumber, x_decimals: number, y_decimals: number) => BigNumber;
35
+ export declare const _get_price_impact: (_x: ethers.BigNumber, _y: ethers.BigNumber, _small_x: ethers.BigNumber, _small_y: ethers.BigNumber, x_decimals: number, y_decimals: number) => BigNumber;
package/lib/utils.js CHANGED
@@ -59,7 +59,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
59
59
  return (mod && mod.__esModule) ? mod : { "default": mod };
60
60
  };
61
61
  Object.defineProperty(exports, "__esModule", { value: true });
62
- exports._setContracts = exports.getTVL = exports.getUsdRate = exports._getUsdRate = exports._getUsdPricesFromApi = exports.getPoolNameBySwapAddress = exports.ensureAllowance = exports.ensureAllowanceEstimateGas = exports._ensureAllowance = exports.hasAllowance = exports.getAllowance = exports._getAllowance = exports.getBalances = exports._prepareAddresses = exports._getBalances = exports._getCoinDecimals = exports._getCoinAddresses = exports._getCoinAddressesNoCheck = exports.getEthIndex = exports.isEth = exports.parseUnits = exports.formatNumber = exports.checkNumber = exports._cutZeros = exports.fromBN = exports.toStringFromBN = exports.toBN = exports.BN = exports.MAX_ALLOWANCE = exports.ETH_ADDRESS = void 0;
62
+ exports._get_price_impact = exports._get_small_x = exports._setContracts = exports.getTVL = exports.getUsdRate = exports._getUsdRate = exports._getUsdPricesFromApi = exports.getPoolNameBySwapAddress = exports.ensureAllowance = exports.ensureAllowanceEstimateGas = exports._ensureAllowance = exports.hasAllowance = exports.getAllowance = exports._getAllowance = exports.getBalances = exports._prepareAddresses = exports._getBalances = exports._getCoinDecimals = exports._getCoinAddresses = exports._getCoinAddressesNoCheck = exports.getEthIndex = exports.isEth = exports.parseUnits = exports.formatNumber = exports.checkNumber = exports._cutZeros = exports.fromBN = exports.toStringFromBN = exports.toBN = exports.BN = exports.MAX_ALLOWANCE = exports.ETH_ADDRESS = void 0;
63
63
  var axios_1 = __importDefault(require("axios"));
64
64
  var ethers_1 = require("ethers");
65
65
  var bignumber_js_1 = __importDefault(require("bignumber.js"));
@@ -578,3 +578,25 @@ var _setContracts = function (address, abi) {
578
578
  };
579
579
  };
580
580
  exports._setContracts = _setContracts;
581
+ // Find k for which x * k = target_x or y * k = target_y
582
+ // k = max(target_x / x, target_y / y)
583
+ // small_x = x * k
584
+ var _get_small_x = function (_x, _y, x_decimals, y_decimals) {
585
+ var target_x = (0, exports.BN)(Math.pow(10, (x_decimals > 5 ? x_decimals - 3 : x_decimals)));
586
+ var target_y = (0, exports.BN)(Math.pow(10, (y_decimals > 5 ? y_decimals - 3 : y_decimals)));
587
+ var x_int_BN = (0, exports.toBN)(_x, 0);
588
+ var y_int_BN = (0, exports.toBN)(_y, 0);
589
+ var k = bignumber_js_1.default.max(target_x.div(x_int_BN), target_y.div(y_int_BN));
590
+ return bignumber_js_1.default.min(x_int_BN.times(k), (0, exports.BN)(Math.pow(10, x_decimals)));
591
+ };
592
+ exports._get_small_x = _get_small_x;
593
+ var _get_price_impact = function (_x, _y, _small_x, _small_y, x_decimals, y_decimals) {
594
+ var x_BN = (0, exports.toBN)(_x, x_decimals);
595
+ var y_BN = (0, exports.toBN)(_y, y_decimals);
596
+ var small_x_BN = (0, exports.toBN)(_small_x, x_decimals);
597
+ var small_y_BN = (0, exports.toBN)(_small_y, y_decimals);
598
+ var rateBN = y_BN.div(x_BN);
599
+ var smallRateBN = small_y_BN.div(small_x_BN);
600
+ return (0, exports.BN)(1).minus(rateBN.div(smallRateBN)).times(100);
601
+ };
602
+ exports._get_price_impact = _get_price_impact;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@curvefi/api",
3
- "version": "2.13.0",
3
+ "version": "2.13.1",
4
4
  "description": "JavaScript library for curve.fi",
5
5
  "main": "lib/index.js",
6
6
  "author": "Macket",