@synthra-swap/sdk 0.1.4

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 (235) hide show
  1. package/README.md +12 -0
  2. package/chains.d.ts +1 -0
  3. package/chains.js +1 -0
  4. package/core.d.ts +1 -0
  5. package/core.js +1 -0
  6. package/dist/chain-registry.d.ts +22 -0
  7. package/dist/chain-registry.js +315 -0
  8. package/dist/chain-registry.js.map +1 -0
  9. package/dist/chains.d.ts +5 -0
  10. package/dist/chains.js +29 -0
  11. package/dist/chains.js.map +1 -0
  12. package/dist/core/addresses.d.ts +21 -0
  13. package/dist/core/addresses.js +76 -0
  14. package/dist/core/addresses.js.map +1 -0
  15. package/dist/core/chains.d.ts +51 -0
  16. package/dist/core/chains.js +82 -0
  17. package/dist/core/chains.js.map +1 -0
  18. package/dist/core/constants.d.ts +12 -0
  19. package/dist/core/constants.js +20 -0
  20. package/dist/core/constants.js.map +1 -0
  21. package/dist/core/entities/baseCurrency.d.ts +48 -0
  22. package/dist/core/entities/baseCurrency.js +29 -0
  23. package/dist/core/entities/baseCurrency.js.map +1 -0
  24. package/dist/core/entities/currency.d.ts +3 -0
  25. package/dist/core/entities/currency.js +3 -0
  26. package/dist/core/entities/currency.js.map +1 -0
  27. package/dist/core/entities/ether.d.ts +13 -0
  28. package/dist/core/entities/ether.js +32 -0
  29. package/dist/core/entities/ether.js.map +1 -0
  30. package/dist/core/entities/fractions/currencyAmount.d.ts +31 -0
  31. package/dist/core/entities/fractions/currencyAmount.js +74 -0
  32. package/dist/core/entities/fractions/currencyAmount.js.map +1 -0
  33. package/dist/core/entities/fractions/fraction.d.ts +24 -0
  34. package/dist/core/entities/fractions/fraction.js +106 -0
  35. package/dist/core/entities/fractions/fraction.js.map +1 -0
  36. package/dist/core/entities/fractions/index.d.ts +4 -0
  37. package/dist/core/entities/fractions/index.js +12 -0
  38. package/dist/core/entities/fractions/index.js.map +1 -0
  39. package/dist/core/entities/fractions/percent.d.ts +14 -0
  40. package/dist/core/entities/fractions/percent.js +45 -0
  41. package/dist/core/entities/fractions/percent.js.map +1 -0
  42. package/dist/core/entities/fractions/price.d.ts +38 -0
  43. package/dist/core/entities/fractions/price.js +75 -0
  44. package/dist/core/entities/fractions/price.js.map +1 -0
  45. package/dist/core/entities/index.d.ts +7 -0
  46. package/dist/core/entities/index.js +24 -0
  47. package/dist/core/entities/index.js.map +1 -0
  48. package/dist/core/entities/nativeCurrency.d.ts +8 -0
  49. package/dist/core/entities/nativeCurrency.js +16 -0
  50. package/dist/core/entities/nativeCurrency.js.map +1 -0
  51. package/dist/core/entities/nativeOnChain.d.ts +19 -0
  52. package/dist/core/entities/nativeOnChain.js +141 -0
  53. package/dist/core/entities/nativeOnChain.js.map +1 -0
  54. package/dist/core/entities/token.d.ts +48 -0
  55. package/dist/core/entities/token.js +71 -0
  56. package/dist/core/entities/token.js.map +1 -0
  57. package/dist/core/entities/weth9.d.ts +7 -0
  58. package/dist/core/entities/weth9.js +28 -0
  59. package/dist/core/entities/weth9.js.map +1 -0
  60. package/dist/core/index.d.ts +5 -0
  61. package/dist/core/index.js +22 -0
  62. package/dist/core/index.js.map +1 -0
  63. package/dist/core/utils/computePriceImpact.d.ts +8 -0
  64. package/dist/core/utils/computePriceImpact.js +18 -0
  65. package/dist/core/utils/computePriceImpact.js.map +1 -0
  66. package/dist/core/utils/index.d.ts +4 -0
  67. package/dist/core/utils/index.js +12 -0
  68. package/dist/core/utils/index.js.map +1 -0
  69. package/dist/core/utils/sortedInsert.d.ts +1 -0
  70. package/dist/core/utils/sortedInsert.js +40 -0
  71. package/dist/core/utils/sortedInsert.js.map +1 -0
  72. package/dist/core/utils/sqrt.d.ts +7 -0
  73. package/dist/core/utils/sqrt.js +34 -0
  74. package/dist/core/utils/sqrt.js.map +1 -0
  75. package/dist/core/utils/validateAndParseAddress.d.ts +10 -0
  76. package/dist/core/utils/validateAndParseAddress.js +31 -0
  77. package/dist/core/utils/validateAndParseAddress.js.map +1 -0
  78. package/dist/index.d.ts +4 -0
  79. package/dist/index.js +34 -0
  80. package/dist/index.js.map +1 -0
  81. package/dist/universal-router/entities/Command.d.ts +12 -0
  82. package/dist/universal-router/entities/Command.js +9 -0
  83. package/dist/universal-router/entities/Command.js.map +1 -0
  84. package/dist/universal-router/entities/index.d.ts +3 -0
  85. package/dist/universal-router/entities/index.js +20 -0
  86. package/dist/universal-router/entities/index.js.map +1 -0
  87. package/dist/universal-router/entities/protocols/index.d.ts +2 -0
  88. package/dist/universal-router/entities/protocols/index.js +19 -0
  89. package/dist/universal-router/entities/protocols/index.js.map +1 -0
  90. package/dist/universal-router/entities/protocols/uniswap.d.ts +32 -0
  91. package/dist/universal-router/entities/protocols/uniswap.js +143 -0
  92. package/dist/universal-router/entities/protocols/uniswap.js.map +1 -0
  93. package/dist/universal-router/entities/protocols/unwrapWETH.d.ts +12 -0
  94. package/dist/universal-router/entities/protocols/unwrapWETH.js +35 -0
  95. package/dist/universal-router/entities/protocols/unwrapWETH.js.map +1 -0
  96. package/dist/universal-router/entities/trade.d.ts +41 -0
  97. package/dist/universal-router/entities/trade.js +114 -0
  98. package/dist/universal-router/entities/trade.js.map +1 -0
  99. package/dist/universal-router/index.d.ts +5 -0
  100. package/dist/universal-router/index.js +31 -0
  101. package/dist/universal-router/index.js.map +1 -0
  102. package/dist/universal-router/swapRouter.d.ts +29 -0
  103. package/dist/universal-router/swapRouter.js +102 -0
  104. package/dist/universal-router/swapRouter.js.map +1 -0
  105. package/dist/universal-router/utils/constants.d.ts +8 -0
  106. package/dist/universal-router/utils/constants.js +21 -0
  107. package/dist/universal-router/utils/constants.js.map +1 -0
  108. package/dist/universal-router/utils/getNativeCurrencyValue.d.ts +2 -0
  109. package/dist/universal-router/utils/getNativeCurrencyValue.js +19 -0
  110. package/dist/universal-router/utils/getNativeCurrencyValue.js.map +1 -0
  111. package/dist/universal-router/utils/inputTokens.d.ts +16 -0
  112. package/dist/universal-router/utils/inputTokens.js +44 -0
  113. package/dist/universal-router/utils/inputTokens.js.map +1 -0
  114. package/dist/universal-router/utils/numbers.d.ts +6 -0
  115. package/dist/universal-router/utils/numbers.js +24 -0
  116. package/dist/universal-router/utils/numbers.js.map +1 -0
  117. package/dist/universal-router/utils/routerCommands.d.ts +29 -0
  118. package/dist/universal-router/utils/routerCommands.js +64 -0
  119. package/dist/universal-router/utils/routerCommands.js.map +1 -0
  120. package/dist/universal-router/utils/routerTradeAdapter.d.ts +40 -0
  121. package/dist/universal-router/utils/routerTradeAdapter.js +82 -0
  122. package/dist/universal-router/utils/routerTradeAdapter.js.map +1 -0
  123. package/dist/v3/abis.d.ts +6 -0
  124. package/dist/v3/abis.js +39 -0
  125. package/dist/v3/abis.js.map +1 -0
  126. package/dist/v3/constants.d.ts +18 -0
  127. package/dist/v3/constants.js +26 -0
  128. package/dist/v3/constants.js.map +1 -0
  129. package/dist/v3/entities/index.d.ts +7 -0
  130. package/dist/v3/entities/index.js +24 -0
  131. package/dist/v3/entities/index.js.map +1 -0
  132. package/dist/v3/entities/pool.d.ts +81 -0
  133. package/dist/v3/entities/pool.js +215 -0
  134. package/dist/v3/entities/pool.js.map +1 -0
  135. package/dist/v3/entities/position.d.ts +131 -0
  136. package/dist/v3/entities/position.js +250 -0
  137. package/dist/v3/entities/position.js.map +1 -0
  138. package/dist/v3/entities/route.d.ts +26 -0
  139. package/dist/v3/entities/route.js +77 -0
  140. package/dist/v3/entities/route.js.map +1 -0
  141. package/dist/v3/entities/tick.d.ts +13 -0
  142. package/dist/v3/entities/tick.js +19 -0
  143. package/dist/v3/entities/tick.js.map +1 -0
  144. package/dist/v3/entities/tickDataProvider.d.ts +31 -0
  145. package/dist/v3/entities/tickDataProvider.js +18 -0
  146. package/dist/v3/entities/tickDataProvider.js.map +1 -0
  147. package/dist/v3/entities/tickListDataProvider.d.ts +15 -0
  148. package/dist/v3/entities/tickListDataProvider.js +23 -0
  149. package/dist/v3/entities/tickListDataProvider.js.map +1 -0
  150. package/dist/v3/entities/trade.d.ts +220 -0
  151. package/dist/v3/entities/trade.js +442 -0
  152. package/dist/v3/entities/trade.js.map +1 -0
  153. package/dist/v3/index.d.ts +9 -0
  154. package/dist/v3/index.js +26 -0
  155. package/dist/v3/index.js.map +1 -0
  156. package/dist/v3/internalConstants.d.ts +6 -0
  157. package/dist/v3/internalConstants.js +15 -0
  158. package/dist/v3/internalConstants.js.map +1 -0
  159. package/dist/v3/multicall.d.ts +9 -0
  160. package/dist/v3/multicall.js +20 -0
  161. package/dist/v3/multicall.js.map +1 -0
  162. package/dist/v3/nonfungiblePositionManager.d.ts +146 -0
  163. package/dist/v3/nonfungiblePositionManager.js +231 -0
  164. package/dist/v3/nonfungiblePositionManager.js.map +1 -0
  165. package/dist/v3/payments.d.ts +24 -0
  166. package/dist/v3/payments.js +55 -0
  167. package/dist/v3/payments.js.map +1 -0
  168. package/dist/v3/quoter.d.ts +37 -0
  169. package/dist/v3/quoter.js +76 -0
  170. package/dist/v3/quoter.js.map +1 -0
  171. package/dist/v3/selfPermit.d.ts +25 -0
  172. package/dist/v3/selfPermit.js +37 -0
  173. package/dist/v3/selfPermit.js.map +1 -0
  174. package/dist/v3/swapRouter.d.ts +51 -0
  175. package/dist/v3/swapRouter.js +147 -0
  176. package/dist/v3/swapRouter.js.map +1 -0
  177. package/dist/v3/utils/calldata.d.ts +20 -0
  178. package/dist/v3/utils/calldata.js +22 -0
  179. package/dist/v3/utils/calldata.js.map +1 -0
  180. package/dist/v3/utils/computePoolAddress.d.ts +18 -0
  181. package/dist/v3/utils/computePoolAddress.js +22 -0
  182. package/dist/v3/utils/computePoolAddress.js.map +1 -0
  183. package/dist/v3/utils/encodeRouteToPath.d.ts +8 -0
  184. package/dist/v3/utils/encodeRouteToPath.js +32 -0
  185. package/dist/v3/utils/encodeRouteToPath.js.map +1 -0
  186. package/dist/v3/utils/encodeSqrtRatioX96.d.ts +9 -0
  187. package/dist/v3/utils/encodeSqrtRatioX96.js +22 -0
  188. package/dist/v3/utils/encodeSqrtRatioX96.js.map +1 -0
  189. package/dist/v3/utils/fullMath.d.ts +8 -0
  190. package/dist/v3/utils/fullMath.js +23 -0
  191. package/dist/v3/utils/fullMath.js.map +1 -0
  192. package/dist/v3/utils/index.d.ts +17 -0
  193. package/dist/v3/utils/index.js +34 -0
  194. package/dist/v3/utils/index.js.map +1 -0
  195. package/dist/v3/utils/isSorted.d.ts +7 -0
  196. package/dist/v3/utils/isSorted.js +19 -0
  197. package/dist/v3/utils/isSorted.js.map +1 -0
  198. package/dist/v3/utils/liquidityMath.d.ts +8 -0
  199. package/dist/v3/utils/liquidityMath.js +24 -0
  200. package/dist/v3/utils/liquidityMath.js.map +1 -0
  201. package/dist/v3/utils/maxLiquidityForAmounts.d.ts +14 -0
  202. package/dist/v3/utils/maxLiquidityForAmounts.js +89 -0
  203. package/dist/v3/utils/maxLiquidityForAmounts.js.map +1 -0
  204. package/dist/v3/utils/mostSignificantBit.d.ts +2 -0
  205. package/dist/v3/utils/mostSignificantBit.js +29 -0
  206. package/dist/v3/utils/mostSignificantBit.js.map +1 -0
  207. package/dist/v3/utils/nearestUsableTick.d.ts +6 -0
  208. package/dist/v3/utils/nearestUsableTick.js +27 -0
  209. package/dist/v3/utils/nearestUsableTick.js.map +1 -0
  210. package/dist/v3/utils/position.d.ts +8 -0
  211. package/dist/v3/utils/position.js +23 -0
  212. package/dist/v3/utils/position.js.map +1 -0
  213. package/dist/v3/utils/priceTickConversions.d.ts +15 -0
  214. package/dist/v3/utils/priceTickConversions.js +52 -0
  215. package/dist/v3/utils/priceTickConversions.js.map +1 -0
  216. package/dist/v3/utils/sqrtPriceMath.d.ts +13 -0
  217. package/dist/v3/utils/sqrtPriceMath.js +97 -0
  218. package/dist/v3/utils/sqrtPriceMath.js.map +1 -0
  219. package/dist/v3/utils/swapMath.d.ts +9 -0
  220. package/dist/v3/utils/swapMath.js +79 -0
  221. package/dist/v3/utils/swapMath.js.map +1 -0
  222. package/dist/v3/utils/tickLibrary.d.ts +14 -0
  223. package/dist/v3/utils/tickLibrary.js +53 -0
  224. package/dist/v3/utils/tickLibrary.js.map +1 -0
  225. package/dist/v3/utils/tickList.d.ts +23 -0
  226. package/dist/v3/utils/tickList.js +110 -0
  227. package/dist/v3/utils/tickList.js.map +1 -0
  228. package/dist/v3/utils/tickMath.d.ts +34 -0
  229. package/dist/v3/utils/tickMath.js +127 -0
  230. package/dist/v3/utils/tickMath.js.map +1 -0
  231. package/package.json +80 -0
  232. package/universal-router.d.ts +1 -0
  233. package/universal-router.js +1 -0
  234. package/v3.d.ts +1 -0
  235. package/v3.js +1 -0
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Determines if a tick list is sorted
3
+ * @param list The tick list
4
+ * @param comparator The comparator
5
+ * @returns true if sorted
6
+ */
7
+ export declare function isSorted<T>(list: Array<T>, comparator: (a: T, b: T) => number): boolean;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isSorted = void 0;
4
+ /**
5
+ * Determines if a tick list is sorted
6
+ * @param list The tick list
7
+ * @param comparator The comparator
8
+ * @returns true if sorted
9
+ */
10
+ function isSorted(list, comparator) {
11
+ for (let i = 0; i < list.length - 1; i++) {
12
+ if (comparator(list[i], list[i + 1]) > 0) {
13
+ return false;
14
+ }
15
+ }
16
+ return true;
17
+ }
18
+ exports.isSorted = isSorted;
19
+ //# sourceMappingURL=isSorted.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isSorted.js","sourceRoot":"","sources":["../../../src/v3/utils/isSorted.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,SAAgB,QAAQ,CAAI,IAAc,EAAE,UAAkC;IAC5E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QACxC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;YACxC,OAAO,KAAK,CAAA;SACb;KACF;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAPD,4BAOC"}
@@ -0,0 +1,8 @@
1
+ import JSBI from 'jsbi';
2
+ export declare abstract class LiquidityMath {
3
+ /**
4
+ * Cannot be constructed.
5
+ */
6
+ private constructor();
7
+ static addDelta(x: JSBI, y: JSBI): JSBI;
8
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.LiquidityMath = void 0;
7
+ const jsbi_1 = __importDefault(require("jsbi"));
8
+ const internalConstants_1 = require("../internalConstants");
9
+ class LiquidityMath {
10
+ /**
11
+ * Cannot be constructed.
12
+ */
13
+ constructor() { }
14
+ static addDelta(x, y) {
15
+ if (jsbi_1.default.lessThan(y, internalConstants_1.ZERO)) {
16
+ return jsbi_1.default.subtract(x, jsbi_1.default.multiply(y, internalConstants_1.NEGATIVE_ONE));
17
+ }
18
+ else {
19
+ return jsbi_1.default.add(x, y);
20
+ }
21
+ }
22
+ }
23
+ exports.LiquidityMath = LiquidityMath;
24
+ //# sourceMappingURL=liquidityMath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"liquidityMath.js","sourceRoot":"","sources":["../../../src/v3/utils/liquidityMath.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAuB;AACvB,4DAAyD;AAEzD,MAAsB,aAAa;IACjC;;OAEG;IACH,gBAAuB,CAAC;IAEjB,MAAM,CAAC,QAAQ,CAAC,CAAO,EAAE,CAAO;QACrC,IAAI,cAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,wBAAI,CAAC,EAAE;YAC1B,OAAO,cAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,cAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,gCAAY,CAAC,CAAC,CAAA;SACxD;aAAM;YACL,OAAO,cAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;SACtB;IACH,CAAC;CACF;AAbD,sCAaC"}
@@ -0,0 +1,14 @@
1
+ import { BigintIsh } from '../../core';
2
+ import JSBI from 'jsbi';
3
+ /**
4
+ * Computes the maximum amount of liquidity received for a given amount of token0, token1,
5
+ * and the prices at the tick boundaries.
6
+ * @param sqrtRatioCurrentX96 the current price
7
+ * @param sqrtRatioAX96 price at lower boundary
8
+ * @param sqrtRatioBX96 price at upper boundary
9
+ * @param amount0 token0 amount
10
+ * @param amount1 token1 amount
11
+ * @param useFullPrecision if false, liquidity will be maximized according to what the router can calculate,
12
+ * not what core can theoretically support
13
+ */
14
+ export declare function maxLiquidityForAmounts(sqrtRatioCurrentX96: JSBI, sqrtRatioAX96: JSBI, sqrtRatioBX96: JSBI, amount0: BigintIsh, amount1: BigintIsh, useFullPrecision: boolean): JSBI;
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.maxLiquidityForAmounts = void 0;
7
+ const jsbi_1 = __importDefault(require("jsbi"));
8
+ const internalConstants_1 = require("../internalConstants");
9
+ /**
10
+ * Returns an imprecise maximum amount of liquidity received for a given amount of token 0.
11
+ * This function is available to accommodate LiquidityAmounts#getLiquidityForAmount0 in the v3 periphery,
12
+ * which could be more precise by at least 32 bits by dividing by Q64 instead of Q96 in the intermediate step,
13
+ * and shifting the subtracted ratio left by 32 bits. This imprecise calculation will likely be replaced in a future
14
+ * v3 router contract.
15
+ * @param sqrtRatioAX96 The price at the lower boundary
16
+ * @param sqrtRatioBX96 The price at the upper boundary
17
+ * @param amount0 The token0 amount
18
+ * @returns liquidity for amount0, imprecise
19
+ */
20
+ function maxLiquidityForAmount0Imprecise(sqrtRatioAX96, sqrtRatioBX96, amount0) {
21
+ if (jsbi_1.default.greaterThan(sqrtRatioAX96, sqrtRatioBX96)) {
22
+ ;
23
+ [sqrtRatioAX96, sqrtRatioBX96] = [sqrtRatioBX96, sqrtRatioAX96];
24
+ }
25
+ const intermediate = jsbi_1.default.divide(jsbi_1.default.multiply(sqrtRatioAX96, sqrtRatioBX96), internalConstants_1.Q96);
26
+ return jsbi_1.default.divide(jsbi_1.default.multiply(jsbi_1.default.BigInt(amount0), intermediate), jsbi_1.default.subtract(sqrtRatioBX96, sqrtRatioAX96));
27
+ }
28
+ /**
29
+ * Returns a precise maximum amount of liquidity received for a given amount of token 0 by dividing by Q64 instead of Q96 in the intermediate step,
30
+ * and shifting the subtracted ratio left by 32 bits.
31
+ * @param sqrtRatioAX96 The price at the lower boundary
32
+ * @param sqrtRatioBX96 The price at the upper boundary
33
+ * @param amount0 The token0 amount
34
+ * @returns liquidity for amount0, precise
35
+ */
36
+ function maxLiquidityForAmount0Precise(sqrtRatioAX96, sqrtRatioBX96, amount0) {
37
+ if (jsbi_1.default.greaterThan(sqrtRatioAX96, sqrtRatioBX96)) {
38
+ ;
39
+ [sqrtRatioAX96, sqrtRatioBX96] = [sqrtRatioBX96, sqrtRatioAX96];
40
+ }
41
+ const numerator = jsbi_1.default.multiply(jsbi_1.default.multiply(jsbi_1.default.BigInt(amount0), sqrtRatioAX96), sqrtRatioBX96);
42
+ const denominator = jsbi_1.default.multiply(internalConstants_1.Q96, jsbi_1.default.subtract(sqrtRatioBX96, sqrtRatioAX96));
43
+ return jsbi_1.default.divide(numerator, denominator);
44
+ }
45
+ /**
46
+ * Computes the maximum amount of liquidity received for a given amount of token1
47
+ * @param sqrtRatioAX96 The price at the lower tick boundary
48
+ * @param sqrtRatioBX96 The price at the upper tick boundary
49
+ * @param amount1 The token1 amount
50
+ * @returns liquidity for amount1
51
+ */
52
+ function maxLiquidityForAmount1(sqrtRatioAX96, sqrtRatioBX96, amount1) {
53
+ if (jsbi_1.default.greaterThan(sqrtRatioAX96, sqrtRatioBX96)) {
54
+ ;
55
+ [sqrtRatioAX96, sqrtRatioBX96] = [sqrtRatioBX96, sqrtRatioAX96];
56
+ }
57
+ return jsbi_1.default.divide(jsbi_1.default.multiply(jsbi_1.default.BigInt(amount1), internalConstants_1.Q96), jsbi_1.default.subtract(sqrtRatioBX96, sqrtRatioAX96));
58
+ }
59
+ /**
60
+ * Computes the maximum amount of liquidity received for a given amount of token0, token1,
61
+ * and the prices at the tick boundaries.
62
+ * @param sqrtRatioCurrentX96 the current price
63
+ * @param sqrtRatioAX96 price at lower boundary
64
+ * @param sqrtRatioBX96 price at upper boundary
65
+ * @param amount0 token0 amount
66
+ * @param amount1 token1 amount
67
+ * @param useFullPrecision if false, liquidity will be maximized according to what the router can calculate,
68
+ * not what core can theoretically support
69
+ */
70
+ function maxLiquidityForAmounts(sqrtRatioCurrentX96, sqrtRatioAX96, sqrtRatioBX96, amount0, amount1, useFullPrecision) {
71
+ if (jsbi_1.default.greaterThan(sqrtRatioAX96, sqrtRatioBX96)) {
72
+ ;
73
+ [sqrtRatioAX96, sqrtRatioBX96] = [sqrtRatioBX96, sqrtRatioAX96];
74
+ }
75
+ const maxLiquidityForAmount0 = useFullPrecision ? maxLiquidityForAmount0Precise : maxLiquidityForAmount0Imprecise;
76
+ if (jsbi_1.default.lessThanOrEqual(sqrtRatioCurrentX96, sqrtRatioAX96)) {
77
+ return maxLiquidityForAmount0(sqrtRatioAX96, sqrtRatioBX96, amount0);
78
+ }
79
+ else if (jsbi_1.default.lessThan(sqrtRatioCurrentX96, sqrtRatioBX96)) {
80
+ const liquidity0 = maxLiquidityForAmount0(sqrtRatioCurrentX96, sqrtRatioBX96, amount0);
81
+ const liquidity1 = maxLiquidityForAmount1(sqrtRatioAX96, sqrtRatioCurrentX96, amount1);
82
+ return jsbi_1.default.lessThan(liquidity0, liquidity1) ? liquidity0 : liquidity1;
83
+ }
84
+ else {
85
+ return maxLiquidityForAmount1(sqrtRatioAX96, sqrtRatioBX96, amount1);
86
+ }
87
+ }
88
+ exports.maxLiquidityForAmounts = maxLiquidityForAmounts;
89
+ //# sourceMappingURL=maxLiquidityForAmounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maxLiquidityForAmounts.js","sourceRoot":"","sources":["../../../src/v3/utils/maxLiquidityForAmounts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import JSBI from 'jsbi';
2
+ export declare function mostSignificantBit(x: JSBI): number;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.mostSignificantBit = void 0;
7
+ const core_1 = require("../../core");
8
+ const jsbi_1 = __importDefault(require("jsbi"));
9
+ const tiny_invariant_1 = __importDefault(require("tiny-invariant"));
10
+ const internalConstants_1 = require("../internalConstants");
11
+ const TWO = jsbi_1.default.BigInt(2);
12
+ const POWERS_OF_2 = [128, 64, 32, 16, 8, 4, 2, 1].map((pow) => [
13
+ pow,
14
+ jsbi_1.default.exponentiate(TWO, jsbi_1.default.BigInt(pow))
15
+ ]);
16
+ function mostSignificantBit(x) {
17
+ (0, tiny_invariant_1.default)(jsbi_1.default.greaterThan(x, internalConstants_1.ZERO), 'ZERO');
18
+ (0, tiny_invariant_1.default)(jsbi_1.default.lessThanOrEqual(x, core_1.MaxUint256), 'MAX');
19
+ let msb = 0;
20
+ for (const [power, min] of POWERS_OF_2) {
21
+ if (jsbi_1.default.greaterThanOrEqual(x, min)) {
22
+ x = jsbi_1.default.signedRightShift(x, jsbi_1.default.BigInt(power));
23
+ msb += power;
24
+ }
25
+ }
26
+ return msb;
27
+ }
28
+ exports.mostSignificantBit = mostSignificantBit;
29
+ //# sourceMappingURL=mostSignificantBit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mostSignificantBit.js","sourceRoot":"","sources":["../../../src/v3/utils/mostSignificantBit.ts"],"names":[],"mappings":";;;;;;AAAA,qCAAuC;AACvC,gDAAuB;AACvB,oEAAsC;AACtC,4DAA2C;AAE3C,MAAM,GAAG,GAAG,cAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AAC1B,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAW,EAAkB,EAAE,CAAC;IACrF,GAAG;IACH,cAAI,CAAC,YAAY,CAAC,GAAG,EAAE,cAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;CACzC,CAAC,CAAA;AAEF,SAAgB,kBAAkB,CAAC,CAAO;IACxC,IAAA,wBAAS,EAAC,cAAI,CAAC,WAAW,CAAC,CAAC,EAAE,wBAAI,CAAC,EAAE,MAAM,CAAC,CAAA;IAC5C,IAAA,wBAAS,EAAC,cAAI,CAAC,eAAe,CAAC,CAAC,EAAE,iBAAU,CAAC,EAAE,KAAK,CAAC,CAAA;IAErD,IAAI,GAAG,GAAW,CAAC,CAAA;IACnB,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,WAAW,EAAE;QACtC,IAAI,cAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;YACnC,CAAC,GAAG,cAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,cAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;YAChD,GAAG,IAAI,KAAK,CAAA;SACb;KACF;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAZD,gDAYC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Returns the closest tick that is nearest a given tick and usable for the given tick spacing
3
+ * @param tick the target tick
4
+ * @param tickSpacing the spacing of the pool
5
+ */
6
+ export declare function nearestUsableTick(tick: number, tickSpacing: number): number;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.nearestUsableTick = void 0;
7
+ const tiny_invariant_1 = __importDefault(require("tiny-invariant"));
8
+ const tickMath_1 = require("./tickMath");
9
+ /**
10
+ * Returns the closest tick that is nearest a given tick and usable for the given tick spacing
11
+ * @param tick the target tick
12
+ * @param tickSpacing the spacing of the pool
13
+ */
14
+ function nearestUsableTick(tick, tickSpacing) {
15
+ (0, tiny_invariant_1.default)(Number.isInteger(tick) && Number.isInteger(tickSpacing), 'INTEGERS');
16
+ (0, tiny_invariant_1.default)(tickSpacing > 0, 'TICK_SPACING');
17
+ (0, tiny_invariant_1.default)(tick >= tickMath_1.TickMath.MIN_TICK && tick <= tickMath_1.TickMath.MAX_TICK, 'TICK_BOUND');
18
+ const rounded = Math.round(tick / tickSpacing) * tickSpacing;
19
+ if (rounded < tickMath_1.TickMath.MIN_TICK)
20
+ return rounded + tickSpacing;
21
+ else if (rounded > tickMath_1.TickMath.MAX_TICK)
22
+ return rounded - tickSpacing;
23
+ else
24
+ return rounded;
25
+ }
26
+ exports.nearestUsableTick = nearestUsableTick;
27
+ //# sourceMappingURL=nearestUsableTick.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nearestUsableTick.js","sourceRoot":"","sources":["../../../src/v3/utils/nearestUsableTick.ts"],"names":[],"mappings":";;;;;;AAAA,oEAAsC;AACtC,yCAAqC;AAErC;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,IAAY,EAAE,WAAmB;IACjE,IAAA,wBAAS,EAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC,CAAA;IAC9E,IAAA,wBAAS,EAAC,WAAW,GAAG,CAAC,EAAE,cAAc,CAAC,CAAA;IAC1C,IAAA,wBAAS,EAAC,IAAI,IAAI,mBAAQ,CAAC,QAAQ,IAAI,IAAI,IAAI,mBAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;IAC/E,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,WAAW,CAAC,GAAG,WAAW,CAAA;IAC5D,IAAI,OAAO,GAAG,mBAAQ,CAAC,QAAQ;QAAE,OAAO,OAAO,GAAG,WAAW,CAAA;SACxD,IAAI,OAAO,GAAG,mBAAQ,CAAC,QAAQ;QAAE,OAAO,OAAO,GAAG,WAAW,CAAA;;QAC7D,OAAO,OAAO,CAAA;AACrB,CAAC;AARD,8CAQC"}
@@ -0,0 +1,8 @@
1
+ import JSBI from 'jsbi';
2
+ export declare abstract class PositionLibrary {
3
+ /**
4
+ * Cannot be constructed.
5
+ */
6
+ private constructor();
7
+ static getTokensOwed(feeGrowthInside0LastX128: JSBI, feeGrowthInside1LastX128: JSBI, liquidity: JSBI, feeGrowthInside0X128: JSBI, feeGrowthInside1X128: JSBI): JSBI[];
8
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PositionLibrary = void 0;
7
+ const jsbi_1 = __importDefault(require("jsbi"));
8
+ const _1 = require(".");
9
+ const Q128 = jsbi_1.default.exponentiate(jsbi_1.default.BigInt(2), jsbi_1.default.BigInt(128));
10
+ class PositionLibrary {
11
+ /**
12
+ * Cannot be constructed.
13
+ */
14
+ constructor() { }
15
+ // replicates the portions of Position#update required to compute unaccounted fees
16
+ static getTokensOwed(feeGrowthInside0LastX128, feeGrowthInside1LastX128, liquidity, feeGrowthInside0X128, feeGrowthInside1X128) {
17
+ const tokensOwed0 = jsbi_1.default.divide(jsbi_1.default.multiply((0, _1.subIn256)(feeGrowthInside0X128, feeGrowthInside0LastX128), liquidity), Q128);
18
+ const tokensOwed1 = jsbi_1.default.divide(jsbi_1.default.multiply((0, _1.subIn256)(feeGrowthInside1X128, feeGrowthInside1LastX128), liquidity), Q128);
19
+ return [tokensOwed0, tokensOwed1];
20
+ }
21
+ }
22
+ exports.PositionLibrary = PositionLibrary;
23
+ //# sourceMappingURL=position.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"position.js","sourceRoot":"","sources":["../../../src/v3/utils/position.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAuB;AACvB,wBAA4B;AAE5B,MAAM,IAAI,GAAG,cAAI,CAAC,YAAY,CAAC,cAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,cAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;AAEhE,MAAsB,eAAe;IACnC;;OAEG;IACH,gBAAuB,CAAC;IAExB,kFAAkF;IAC3E,MAAM,CAAC,aAAa,CACzB,wBAA8B,EAC9B,wBAA8B,EAC9B,SAAe,EACf,oBAA0B,EAC1B,oBAA0B;QAE1B,MAAM,WAAW,GAAG,cAAI,CAAC,MAAM,CAC7B,cAAI,CAAC,QAAQ,CAAC,IAAA,WAAQ,EAAC,oBAAoB,EAAE,wBAAwB,CAAC,EAAE,SAAS,CAAC,EAClF,IAAI,CACL,CAAA;QAED,MAAM,WAAW,GAAG,cAAI,CAAC,MAAM,CAC7B,cAAI,CAAC,QAAQ,CAAC,IAAA,WAAQ,EAAC,oBAAoB,EAAE,wBAAwB,CAAC,EAAE,SAAS,CAAC,EAClF,IAAI,CACL,CAAA;QAED,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;IACnC,CAAC;CACF;AA1BD,0CA0BC"}
@@ -0,0 +1,15 @@
1
+ import { Price, Token } from '../../core';
2
+ /**
3
+ * Returns a price object corresponding to the input tick and the base/quote token
4
+ * Inputs must be tokens because the address order is used to interpret the price represented by the tick
5
+ * @param baseToken the base token of the price
6
+ * @param quoteToken the quote token of the price
7
+ * @param tick the tick for which to return the price
8
+ */
9
+ export declare function tickToPrice(baseToken: Token, quoteToken: Token, tick: number): Price<Token, Token>;
10
+ /**
11
+ * Returns the first tick for which the given price is greater than or equal to the tick price
12
+ * @param price for which to return the closest tick that represents a price less than or equal to the input price,
13
+ * i.e. the price of the returned tick is less than or equal to the input price
14
+ */
15
+ export declare function priceToClosestTick(price: Price<Token, Token>): number;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.priceToClosestTick = exports.tickToPrice = void 0;
7
+ const core_1 = require("../../core");
8
+ const jsbi_1 = __importDefault(require("jsbi"));
9
+ const internalConstants_1 = require("../internalConstants");
10
+ const encodeSqrtRatioX96_1 = require("./encodeSqrtRatioX96");
11
+ const tickMath_1 = require("./tickMath");
12
+ /**
13
+ * Returns a price object corresponding to the input tick and the base/quote token
14
+ * Inputs must be tokens because the address order is used to interpret the price represented by the tick
15
+ * @param baseToken the base token of the price
16
+ * @param quoteToken the quote token of the price
17
+ * @param tick the tick for which to return the price
18
+ */
19
+ function tickToPrice(baseToken, quoteToken, tick) {
20
+ const sqrtRatioX96 = tickMath_1.TickMath.getSqrtRatioAtTick(tick);
21
+ const ratioX192 = jsbi_1.default.multiply(sqrtRatioX96, sqrtRatioX96);
22
+ return baseToken.sortsBefore(quoteToken)
23
+ ? new core_1.Price(baseToken, quoteToken, internalConstants_1.Q192, ratioX192)
24
+ : new core_1.Price(baseToken, quoteToken, ratioX192, internalConstants_1.Q192);
25
+ }
26
+ exports.tickToPrice = tickToPrice;
27
+ /**
28
+ * Returns the first tick for which the given price is greater than or equal to the tick price
29
+ * @param price for which to return the closest tick that represents a price less than or equal to the input price,
30
+ * i.e. the price of the returned tick is less than or equal to the input price
31
+ */
32
+ function priceToClosestTick(price) {
33
+ const sorted = price.baseCurrency.sortsBefore(price.quoteCurrency);
34
+ const sqrtRatioX96 = sorted
35
+ ? (0, encodeSqrtRatioX96_1.encodeSqrtRatioX96)(price.numerator, price.denominator)
36
+ : (0, encodeSqrtRatioX96_1.encodeSqrtRatioX96)(price.denominator, price.numerator);
37
+ let tick = tickMath_1.TickMath.getTickAtSqrtRatio(sqrtRatioX96);
38
+ const nextTickPrice = tickToPrice(price.baseCurrency, price.quoteCurrency, tick + 1);
39
+ if (sorted) {
40
+ if (!price.lessThan(nextTickPrice)) {
41
+ tick++;
42
+ }
43
+ }
44
+ else {
45
+ if (!price.greaterThan(nextTickPrice)) {
46
+ tick++;
47
+ }
48
+ }
49
+ return tick;
50
+ }
51
+ exports.priceToClosestTick = priceToClosestTick;
52
+ //# sourceMappingURL=priceTickConversions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"priceTickConversions.js","sourceRoot":"","sources":["../../../src/v3/utils/priceTickConversions.ts"],"names":[],"mappings":";;;;;;AAAA,qCAAyC;AACzC,gDAAuB;AACvB,4DAA2C;AAC3C,6DAAyD;AACzD,yCAAqC;AAErC;;;;;;GAMG;AACH,SAAgB,WAAW,CAAC,SAAgB,EAAE,UAAiB,EAAE,IAAY;IAC3E,MAAM,YAAY,GAAG,mBAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAA;IAEtD,MAAM,SAAS,GAAG,cAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC,CAAA;IAE3D,OAAO,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC;QACtC,CAAC,CAAC,IAAI,YAAK,CAAC,SAAS,EAAE,UAAU,EAAE,wBAAI,EAAE,SAAS,CAAC;QACnD,CAAC,CAAC,IAAI,YAAK,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,wBAAI,CAAC,CAAA;AACvD,CAAC;AARD,kCAQC;AAED;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,KAA0B;IAC3D,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;IAElE,MAAM,YAAY,GAAG,MAAM;QACzB,CAAC,CAAC,IAAA,uCAAkB,EAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC;QACxD,CAAC,CAAC,IAAA,uCAAkB,EAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;IAE1D,IAAI,IAAI,GAAG,mBAAQ,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAA;IACpD,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,aAAa,EAAE,IAAI,GAAG,CAAC,CAAC,CAAA;IACpF,IAAI,MAAM,EAAE;QACV,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;YAClC,IAAI,EAAE,CAAA;SACP;KACF;SAAM;QACL,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE;YACrC,IAAI,EAAE,CAAA;SACP;KACF;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAnBD,gDAmBC"}
@@ -0,0 +1,13 @@
1
+ import JSBI from 'jsbi';
2
+ export declare abstract class SqrtPriceMath {
3
+ /**
4
+ * Cannot be constructed.
5
+ */
6
+ private constructor();
7
+ static getAmount0Delta(sqrtRatioAX96: JSBI, sqrtRatioBX96: JSBI, liquidity: JSBI, roundUp: boolean): JSBI;
8
+ static getAmount1Delta(sqrtRatioAX96: JSBI, sqrtRatioBX96: JSBI, liquidity: JSBI, roundUp: boolean): JSBI;
9
+ static getNextSqrtPriceFromInput(sqrtPX96: JSBI, liquidity: JSBI, amountIn: JSBI, zeroForOne: boolean): JSBI;
10
+ static getNextSqrtPriceFromOutput(sqrtPX96: JSBI, liquidity: JSBI, amountOut: JSBI, zeroForOne: boolean): JSBI;
11
+ private static getNextSqrtPriceFromAmount0RoundingUp;
12
+ private static getNextSqrtPriceFromAmount1RoundingDown;
13
+ }
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SqrtPriceMath = void 0;
7
+ const core_1 = require("../../core");
8
+ const jsbi_1 = __importDefault(require("jsbi"));
9
+ const tiny_invariant_1 = __importDefault(require("tiny-invariant"));
10
+ const internalConstants_1 = require("../internalConstants");
11
+ const fullMath_1 = require("./fullMath");
12
+ const MaxUint160 = jsbi_1.default.subtract(jsbi_1.default.exponentiate(jsbi_1.default.BigInt(2), jsbi_1.default.BigInt(160)), internalConstants_1.ONE);
13
+ function multiplyIn256(x, y) {
14
+ const product = jsbi_1.default.multiply(x, y);
15
+ return jsbi_1.default.bitwiseAnd(product, core_1.MaxUint256);
16
+ }
17
+ function addIn256(x, y) {
18
+ const sum = jsbi_1.default.add(x, y);
19
+ return jsbi_1.default.bitwiseAnd(sum, core_1.MaxUint256);
20
+ }
21
+ class SqrtPriceMath {
22
+ /**
23
+ * Cannot be constructed.
24
+ */
25
+ constructor() { }
26
+ static getAmount0Delta(sqrtRatioAX96, sqrtRatioBX96, liquidity, roundUp) {
27
+ if (jsbi_1.default.greaterThan(sqrtRatioAX96, sqrtRatioBX96)) {
28
+ ;
29
+ [sqrtRatioAX96, sqrtRatioBX96] = [sqrtRatioBX96, sqrtRatioAX96];
30
+ }
31
+ const numerator1 = jsbi_1.default.leftShift(liquidity, jsbi_1.default.BigInt(96));
32
+ const numerator2 = jsbi_1.default.subtract(sqrtRatioBX96, sqrtRatioAX96);
33
+ return roundUp
34
+ ? fullMath_1.FullMath.mulDivRoundingUp(fullMath_1.FullMath.mulDivRoundingUp(numerator1, numerator2, sqrtRatioBX96), internalConstants_1.ONE, sqrtRatioAX96)
35
+ : jsbi_1.default.divide(jsbi_1.default.divide(jsbi_1.default.multiply(numerator1, numerator2), sqrtRatioBX96), sqrtRatioAX96);
36
+ }
37
+ static getAmount1Delta(sqrtRatioAX96, sqrtRatioBX96, liquidity, roundUp) {
38
+ if (jsbi_1.default.greaterThan(sqrtRatioAX96, sqrtRatioBX96)) {
39
+ ;
40
+ [sqrtRatioAX96, sqrtRatioBX96] = [sqrtRatioBX96, sqrtRatioAX96];
41
+ }
42
+ return roundUp
43
+ ? fullMath_1.FullMath.mulDivRoundingUp(liquidity, jsbi_1.default.subtract(sqrtRatioBX96, sqrtRatioAX96), internalConstants_1.Q96)
44
+ : jsbi_1.default.divide(jsbi_1.default.multiply(liquidity, jsbi_1.default.subtract(sqrtRatioBX96, sqrtRatioAX96)), internalConstants_1.Q96);
45
+ }
46
+ static getNextSqrtPriceFromInput(sqrtPX96, liquidity, amountIn, zeroForOne) {
47
+ (0, tiny_invariant_1.default)(jsbi_1.default.greaterThan(sqrtPX96, internalConstants_1.ZERO));
48
+ (0, tiny_invariant_1.default)(jsbi_1.default.greaterThan(liquidity, internalConstants_1.ZERO));
49
+ return zeroForOne
50
+ ? this.getNextSqrtPriceFromAmount0RoundingUp(sqrtPX96, liquidity, amountIn, true)
51
+ : this.getNextSqrtPriceFromAmount1RoundingDown(sqrtPX96, liquidity, amountIn, true);
52
+ }
53
+ static getNextSqrtPriceFromOutput(sqrtPX96, liquidity, amountOut, zeroForOne) {
54
+ (0, tiny_invariant_1.default)(jsbi_1.default.greaterThan(sqrtPX96, internalConstants_1.ZERO));
55
+ (0, tiny_invariant_1.default)(jsbi_1.default.greaterThan(liquidity, internalConstants_1.ZERO));
56
+ return zeroForOne
57
+ ? this.getNextSqrtPriceFromAmount1RoundingDown(sqrtPX96, liquidity, amountOut, false)
58
+ : this.getNextSqrtPriceFromAmount0RoundingUp(sqrtPX96, liquidity, amountOut, false);
59
+ }
60
+ static getNextSqrtPriceFromAmount0RoundingUp(sqrtPX96, liquidity, amount, add) {
61
+ if (jsbi_1.default.equal(amount, internalConstants_1.ZERO))
62
+ return sqrtPX96;
63
+ const numerator1 = jsbi_1.default.leftShift(liquidity, jsbi_1.default.BigInt(96));
64
+ if (add) {
65
+ let product = multiplyIn256(amount, sqrtPX96);
66
+ if (jsbi_1.default.equal(jsbi_1.default.divide(product, amount), sqrtPX96)) {
67
+ const denominator = addIn256(numerator1, product);
68
+ if (jsbi_1.default.greaterThanOrEqual(denominator, numerator1)) {
69
+ return fullMath_1.FullMath.mulDivRoundingUp(numerator1, sqrtPX96, denominator);
70
+ }
71
+ }
72
+ return fullMath_1.FullMath.mulDivRoundingUp(numerator1, internalConstants_1.ONE, jsbi_1.default.add(jsbi_1.default.divide(numerator1, sqrtPX96), amount));
73
+ }
74
+ else {
75
+ let product = multiplyIn256(amount, sqrtPX96);
76
+ (0, tiny_invariant_1.default)(jsbi_1.default.equal(jsbi_1.default.divide(product, amount), sqrtPX96));
77
+ (0, tiny_invariant_1.default)(jsbi_1.default.greaterThan(numerator1, product));
78
+ const denominator = jsbi_1.default.subtract(numerator1, product);
79
+ return fullMath_1.FullMath.mulDivRoundingUp(numerator1, sqrtPX96, denominator);
80
+ }
81
+ }
82
+ static getNextSqrtPriceFromAmount1RoundingDown(sqrtPX96, liquidity, amount, add) {
83
+ if (add) {
84
+ const quotient = jsbi_1.default.lessThanOrEqual(amount, MaxUint160)
85
+ ? jsbi_1.default.divide(jsbi_1.default.leftShift(amount, jsbi_1.default.BigInt(96)), liquidity)
86
+ : jsbi_1.default.divide(jsbi_1.default.multiply(amount, internalConstants_1.Q96), liquidity);
87
+ return jsbi_1.default.add(sqrtPX96, quotient);
88
+ }
89
+ else {
90
+ const quotient = fullMath_1.FullMath.mulDivRoundingUp(amount, internalConstants_1.Q96, liquidity);
91
+ (0, tiny_invariant_1.default)(jsbi_1.default.greaterThan(sqrtPX96, quotient));
92
+ return jsbi_1.default.subtract(sqrtPX96, quotient);
93
+ }
94
+ }
95
+ }
96
+ exports.SqrtPriceMath = SqrtPriceMath;
97
+ //# sourceMappingURL=sqrtPriceMath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqrtPriceMath.js","sourceRoot":"","sources":["../../../src/v3/utils/sqrtPriceMath.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import JSBI from 'jsbi';
2
+ import { FeeAmount } from '../constants';
3
+ export declare abstract class SwapMath {
4
+ /**
5
+ * Cannot be constructed.
6
+ */
7
+ private constructor();
8
+ static computeSwapStep(sqrtRatioCurrentX96: JSBI, sqrtRatioTargetX96: JSBI, liquidity: JSBI, amountRemaining: JSBI, feePips: FeeAmount): [JSBI, JSBI, JSBI, JSBI];
9
+ }
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SwapMath = void 0;
7
+ const jsbi_1 = __importDefault(require("jsbi"));
8
+ const internalConstants_1 = require("../internalConstants");
9
+ const fullMath_1 = require("./fullMath");
10
+ const sqrtPriceMath_1 = require("./sqrtPriceMath");
11
+ const MAX_FEE = jsbi_1.default.exponentiate(jsbi_1.default.BigInt(10), jsbi_1.default.BigInt(6));
12
+ class SwapMath {
13
+ /**
14
+ * Cannot be constructed.
15
+ */
16
+ constructor() { }
17
+ static computeSwapStep(sqrtRatioCurrentX96, sqrtRatioTargetX96, liquidity, amountRemaining, feePips) {
18
+ const returnValues = {};
19
+ const zeroForOne = jsbi_1.default.greaterThanOrEqual(sqrtRatioCurrentX96, sqrtRatioTargetX96);
20
+ const exactIn = jsbi_1.default.greaterThanOrEqual(amountRemaining, internalConstants_1.ZERO);
21
+ if (exactIn) {
22
+ const amountRemainingLessFee = jsbi_1.default.divide(jsbi_1.default.multiply(amountRemaining, jsbi_1.default.subtract(MAX_FEE, jsbi_1.default.BigInt(feePips))), MAX_FEE);
23
+ returnValues.amountIn = zeroForOne
24
+ ? sqrtPriceMath_1.SqrtPriceMath.getAmount0Delta(sqrtRatioTargetX96, sqrtRatioCurrentX96, liquidity, true)
25
+ : sqrtPriceMath_1.SqrtPriceMath.getAmount1Delta(sqrtRatioCurrentX96, sqrtRatioTargetX96, liquidity, true);
26
+ if (jsbi_1.default.greaterThanOrEqual(amountRemainingLessFee, returnValues.amountIn)) {
27
+ returnValues.sqrtRatioNextX96 = sqrtRatioTargetX96;
28
+ }
29
+ else {
30
+ returnValues.sqrtRatioNextX96 = sqrtPriceMath_1.SqrtPriceMath.getNextSqrtPriceFromInput(sqrtRatioCurrentX96, liquidity, amountRemainingLessFee, zeroForOne);
31
+ }
32
+ }
33
+ else {
34
+ returnValues.amountOut = zeroForOne
35
+ ? sqrtPriceMath_1.SqrtPriceMath.getAmount1Delta(sqrtRatioTargetX96, sqrtRatioCurrentX96, liquidity, false)
36
+ : sqrtPriceMath_1.SqrtPriceMath.getAmount0Delta(sqrtRatioCurrentX96, sqrtRatioTargetX96, liquidity, false);
37
+ if (jsbi_1.default.greaterThanOrEqual(jsbi_1.default.multiply(amountRemaining, internalConstants_1.NEGATIVE_ONE), returnValues.amountOut)) {
38
+ returnValues.sqrtRatioNextX96 = sqrtRatioTargetX96;
39
+ }
40
+ else {
41
+ returnValues.sqrtRatioNextX96 = sqrtPriceMath_1.SqrtPriceMath.getNextSqrtPriceFromOutput(sqrtRatioCurrentX96, liquidity, jsbi_1.default.multiply(amountRemaining, internalConstants_1.NEGATIVE_ONE), zeroForOne);
42
+ }
43
+ }
44
+ const max = jsbi_1.default.equal(sqrtRatioTargetX96, returnValues.sqrtRatioNextX96);
45
+ if (zeroForOne) {
46
+ returnValues.amountIn =
47
+ max && exactIn
48
+ ? returnValues.amountIn
49
+ : sqrtPriceMath_1.SqrtPriceMath.getAmount0Delta(returnValues.sqrtRatioNextX96, sqrtRatioCurrentX96, liquidity, true);
50
+ returnValues.amountOut =
51
+ max && !exactIn
52
+ ? returnValues.amountOut
53
+ : sqrtPriceMath_1.SqrtPriceMath.getAmount1Delta(returnValues.sqrtRatioNextX96, sqrtRatioCurrentX96, liquidity, false);
54
+ }
55
+ else {
56
+ returnValues.amountIn =
57
+ max && exactIn
58
+ ? returnValues.amountIn
59
+ : sqrtPriceMath_1.SqrtPriceMath.getAmount1Delta(sqrtRatioCurrentX96, returnValues.sqrtRatioNextX96, liquidity, true);
60
+ returnValues.amountOut =
61
+ max && !exactIn
62
+ ? returnValues.amountOut
63
+ : sqrtPriceMath_1.SqrtPriceMath.getAmount0Delta(sqrtRatioCurrentX96, returnValues.sqrtRatioNextX96, liquidity, false);
64
+ }
65
+ if (!exactIn && jsbi_1.default.greaterThan(returnValues.amountOut, jsbi_1.default.multiply(amountRemaining, internalConstants_1.NEGATIVE_ONE))) {
66
+ returnValues.amountOut = jsbi_1.default.multiply(amountRemaining, internalConstants_1.NEGATIVE_ONE);
67
+ }
68
+ if (exactIn && jsbi_1.default.notEqual(returnValues.sqrtRatioNextX96, sqrtRatioTargetX96)) {
69
+ // we didn't reach the target, so take the remainder of the maximum input as fee
70
+ returnValues.feeAmount = jsbi_1.default.subtract(amountRemaining, returnValues.amountIn);
71
+ }
72
+ else {
73
+ returnValues.feeAmount = fullMath_1.FullMath.mulDivRoundingUp(returnValues.amountIn, jsbi_1.default.BigInt(feePips), jsbi_1.default.subtract(MAX_FEE, jsbi_1.default.BigInt(feePips)));
74
+ }
75
+ return [returnValues.sqrtRatioNextX96, returnValues.amountIn, returnValues.amountOut, returnValues.feeAmount];
76
+ }
77
+ }
78
+ exports.SwapMath = SwapMath;
79
+ //# sourceMappingURL=swapMath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swapMath.js","sourceRoot":"","sources":["../../../src/v3/utils/swapMath.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import JSBI from 'jsbi';
2
+ interface FeeGrowthOutside {
3
+ feeGrowthOutside0X128: JSBI;
4
+ feeGrowthOutside1X128: JSBI;
5
+ }
6
+ export declare function subIn256(x: JSBI, y: JSBI): JSBI;
7
+ export declare abstract class TickLibrary {
8
+ /**
9
+ * Cannot be constructed.
10
+ */
11
+ private constructor();
12
+ static getFeeGrowthInside(feeGrowthOutsideLower: FeeGrowthOutside, feeGrowthOutsideUpper: FeeGrowthOutside, tickLower: number, tickUpper: number, tickCurrent: number, feeGrowthGlobal0X128: JSBI, feeGrowthGlobal1X128: JSBI): JSBI[];
13
+ }
14
+ export {};