@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,114 @@
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.Trade = exports.SynthraTrade = exports.Protocol = exports.ONE_HUNDRED_PERCENT = exports.ZERO_PERCENT = exports.ONE = void 0;
7
+ const tiny_invariant_1 = __importDefault(require("tiny-invariant"));
8
+ const core_1 = require("../../core");
9
+ const v3_1 = require("../../v3");
10
+ exports.ONE = 1;
11
+ exports.ZERO_PERCENT = new core_1.Percent(0);
12
+ exports.ONE_HUNDRED_PERCENT = new core_1.Percent(100, 100);
13
+ var Protocol;
14
+ (function (Protocol) {
15
+ Protocol["V3"] = "V3";
16
+ })(Protocol = exports.Protocol || (exports.Protocol = {}));
17
+ class SynthraTrade {
18
+ constructor({ v3Routes, tradeType }) {
19
+ (0, tiny_invariant_1.default)(v3Routes.length > 0, 'ROUTES');
20
+ this.swaps = v3Routes.map(({ routev3, inputAmount, outputAmount }) => ({
21
+ route: routev3,
22
+ inputAmount,
23
+ outputAmount,
24
+ }));
25
+ this.routes = this.swaps.map(({ route }) => route);
26
+ this.tradeType = tradeType;
27
+ const inputCurrency = this.swaps[0].inputAmount.currency;
28
+ const outputCurrency = this.swaps[0].outputAmount.currency;
29
+ (0, tiny_invariant_1.default)(this.swaps.every(({ route }) => inputCurrency.wrapped.equals(route.input.wrapped)), 'INPUT_CURRENCY_MATCH');
30
+ (0, tiny_invariant_1.default)(this.swaps.every(({ route }) => outputCurrency.wrapped.equals(route.output.wrapped)), 'OUTPUT_CURRENCY_MATCH');
31
+ const numPools = this.swaps.map(({ route }) => route.pools.length).reduce((total, cur) => total + cur, 0);
32
+ const poolAddressSet = new Set();
33
+ for (const { route } of this.swaps) {
34
+ for (const pool of route.pools) {
35
+ poolAddressSet.add(v3_1.Pool.getAddress(pool.token0, pool.token1, pool.fee));
36
+ }
37
+ }
38
+ (0, tiny_invariant_1.default)(numPools === poolAddressSet.size, 'POOLS_DUPLICATED');
39
+ }
40
+ get inputAmount() {
41
+ if (this._inputAmount)
42
+ return this._inputAmount;
43
+ const inputCurrency = this.swaps[0].inputAmount.currency;
44
+ this._inputAmount = this.swaps
45
+ .map(({ inputAmount }) => inputAmount)
46
+ .reduce((total, cur) => total.add(cur), core_1.CurrencyAmount.fromRawAmount(inputCurrency, 0));
47
+ return this._inputAmount;
48
+ }
49
+ get outputAmount() {
50
+ if (this._outputAmount)
51
+ return this._outputAmount;
52
+ const outputCurrency = this.swaps[0].outputAmount.currency;
53
+ this._outputAmount = this.swaps
54
+ .map(({ outputAmount }) => outputAmount)
55
+ .reduce((total, cur) => total.add(cur), core_1.CurrencyAmount.fromRawAmount(outputCurrency, 0));
56
+ return this._outputAmount;
57
+ }
58
+ get executionPrice() {
59
+ var _a;
60
+ return ((_a = this._executionPrice) !== null && _a !== void 0 ? _a : (this._executionPrice = new core_1.Price(this.inputAmount.currency, this.outputAmount.currency, this.inputAmount.quotient, this.outputAmount.quotient)));
61
+ }
62
+ get inputTax() {
63
+ const currency = this.inputAmount.currency;
64
+ if (currency.isNative || !currency.wrapped.sellFeeBps)
65
+ return exports.ZERO_PERCENT;
66
+ return new core_1.Percent(currency.wrapped.sellFeeBps.toNumber(), 10000);
67
+ }
68
+ get outputTax() {
69
+ const currency = this.outputAmount.currency;
70
+ if (currency.isNative || !currency.wrapped.buyFeeBps)
71
+ return exports.ZERO_PERCENT;
72
+ return new core_1.Percent(currency.wrapped.buyFeeBps.toNumber(), 10000);
73
+ }
74
+ get priceImpact() {
75
+ if (this._priceImpact)
76
+ return this._priceImpact;
77
+ if (this.outputTax.equalTo(exports.ONE_HUNDRED_PERCENT))
78
+ return exports.ZERO_PERCENT;
79
+ let spotOutputAmount = core_1.CurrencyAmount.fromRawAmount(this.outputAmount.currency, 0);
80
+ for (const { route, inputAmount } of this.swaps) {
81
+ const postTaxInputAmount = inputAmount.multiply(new core_1.Fraction(exports.ONE).subtract(this.inputTax));
82
+ spotOutputAmount = spotOutputAmount.add(route.midPrice.quote(postTaxInputAmount));
83
+ }
84
+ if (spotOutputAmount.equalTo(0))
85
+ return exports.ZERO_PERCENT;
86
+ const preTaxOutputAmount = this.outputAmount.divide(new core_1.Fraction(exports.ONE).subtract(this.outputTax));
87
+ const priceImpact = spotOutputAmount.subtract(preTaxOutputAmount).divide(spotOutputAmount);
88
+ this._priceImpact = new core_1.Percent(priceImpact.numerator, priceImpact.denominator);
89
+ return this._priceImpact;
90
+ }
91
+ minimumAmountOut(slippageTolerance, amountOut = this.outputAmount) {
92
+ (0, tiny_invariant_1.default)(!slippageTolerance.lessThan(0), 'SLIPPAGE_TOLERANCE');
93
+ if (this.tradeType === core_1.TradeType.EXACT_OUTPUT)
94
+ return amountOut;
95
+ const slippageAdjustedAmountOut = new core_1.Fraction(exports.ONE)
96
+ .add(slippageTolerance)
97
+ .invert()
98
+ .multiply(amountOut.quotient).quotient;
99
+ return core_1.CurrencyAmount.fromRawAmount(amountOut.currency, slippageAdjustedAmountOut);
100
+ }
101
+ maximumAmountIn(slippageTolerance, amountIn = this.inputAmount) {
102
+ (0, tiny_invariant_1.default)(!slippageTolerance.lessThan(0), 'SLIPPAGE_TOLERANCE');
103
+ if (this.tradeType === core_1.TradeType.EXACT_INPUT)
104
+ return amountIn;
105
+ const slippageAdjustedAmountIn = new core_1.Fraction(exports.ONE).add(slippageTolerance).multiply(amountIn.quotient).quotient;
106
+ return core_1.CurrencyAmount.fromRawAmount(amountIn.currency, slippageAdjustedAmountIn);
107
+ }
108
+ worstExecutionPrice(slippageTolerance) {
109
+ return new core_1.Price(this.inputAmount.currency, this.outputAmount.currency, this.maximumAmountIn(slippageTolerance).quotient, this.minimumAmountOut(slippageTolerance).quotient);
110
+ }
111
+ }
112
+ exports.SynthraTrade = SynthraTrade;
113
+ exports.Trade = SynthraTrade;
114
+ //# sourceMappingURL=trade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trade.js","sourceRoot":"","sources":["../../../src/universal-router/entities/trade.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { SwapRouter } from './swapRouter';
2
+ export * from './entities';
3
+ export * from './utils/routerTradeAdapter';
4
+ export { RoutePlanner, CommandType } from './utils/routerCommands';
5
+ export { UNIVERSAL_ROUTER_ADDRESS, UNIVERSAL_ROUTER_CREATION_BLOCK, PERMIT2_ADDRESS, ROUTER_AS_RECIPIENT, WETH_ADDRESS, } from './utils/constants';
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.WETH_ADDRESS = exports.ROUTER_AS_RECIPIENT = exports.PERMIT2_ADDRESS = exports.UNIVERSAL_ROUTER_CREATION_BLOCK = exports.UNIVERSAL_ROUTER_ADDRESS = exports.CommandType = exports.RoutePlanner = exports.SwapRouter = void 0;
18
+ var swapRouter_1 = require("./swapRouter");
19
+ Object.defineProperty(exports, "SwapRouter", { enumerable: true, get: function () { return swapRouter_1.SwapRouter; } });
20
+ __exportStar(require("./entities"), exports);
21
+ __exportStar(require("./utils/routerTradeAdapter"), exports);
22
+ var routerCommands_1 = require("./utils/routerCommands");
23
+ Object.defineProperty(exports, "RoutePlanner", { enumerable: true, get: function () { return routerCommands_1.RoutePlanner; } });
24
+ Object.defineProperty(exports, "CommandType", { enumerable: true, get: function () { return routerCommands_1.CommandType; } });
25
+ var constants_1 = require("./utils/constants");
26
+ Object.defineProperty(exports, "UNIVERSAL_ROUTER_ADDRESS", { enumerable: true, get: function () { return constants_1.UNIVERSAL_ROUTER_ADDRESS; } });
27
+ Object.defineProperty(exports, "UNIVERSAL_ROUTER_CREATION_BLOCK", { enumerable: true, get: function () { return constants_1.UNIVERSAL_ROUTER_CREATION_BLOCK; } });
28
+ Object.defineProperty(exports, "PERMIT2_ADDRESS", { enumerable: true, get: function () { return constants_1.PERMIT2_ADDRESS; } });
29
+ Object.defineProperty(exports, "ROUTER_AS_RECIPIENT", { enumerable: true, get: function () { return constants_1.ROUTER_AS_RECIPIENT; } });
30
+ Object.defineProperty(exports, "WETH_ADDRESS", { enumerable: true, get: function () { return constants_1.WETH_ADDRESS; } });
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/universal-router/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,2CAAyC;AAAhC,wGAAA,UAAU,OAAA;AACnB,6CAA0B;AAC1B,6DAA0C;AAC1C,yDAAkE;AAAzD,8GAAA,YAAY,OAAA;AAAE,6GAAA,WAAW,OAAA;AAClC,+CAM0B;AALxB,qHAAA,wBAAwB,OAAA;AACxB,4HAAA,+BAA+B,OAAA;AAC/B,4GAAA,eAAe,OAAA;AACf,gHAAA,mBAAmB,OAAA;AACnB,yGAAA,YAAY,OAAA"}
@@ -0,0 +1,29 @@
1
+ import { Interface } from '@ethersproject/abi';
2
+ import { BigNumberish } from 'ethers';
3
+ import { MethodParameters } from '../v3';
4
+ import { Currency, TradeType } from '../core';
5
+ import { Command } from './entities/Command';
6
+ import { SynthraTrade } from './entities/trade';
7
+ import { SwapOptions } from './entities/protocols/uniswap';
8
+ export type SwapRouterConfig = {
9
+ sender?: string;
10
+ deadline?: BigNumberish;
11
+ };
12
+ export declare abstract class SwapRouter {
13
+ static INTERFACE: Interface;
14
+ static swapCallParameters(trades: Command[] | Command, config?: SwapRouterConfig): MethodParameters;
15
+ /**
16
+ * @deprecated in favor of swapCallParameters. Update before next major version 2.0.0
17
+ * Produces the on-chain method name to call and the hex encoded parameters to pass as arguments for a given trade.
18
+ * @param trades to produce call parameters for
19
+ * @param options options for the call parameters
20
+ */
21
+ static swapERC20CallParameters(trades: SynthraTrade<Currency, Currency, TradeType>, options: SwapOptions): MethodParameters;
22
+ /**
23
+ * Encodes a planned route into a method name and parameters for the Router contract.
24
+ * @param planner the planned route
25
+ * @param nativeCurrencyValue the native currency value of the planned route
26
+ * @param config the router config
27
+ */
28
+ private static encodePlan;
29
+ }
@@ -0,0 +1,102 @@
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.SwapRouter = void 0;
7
+ const tiny_invariant_1 = __importDefault(require("tiny-invariant"));
8
+ const abi_1 = require("@ethersproject/abi");
9
+ const ethers_1 = require("ethers");
10
+ const Command_1 = require("./entities/Command");
11
+ const uniswap_1 = require("./entities/protocols/uniswap");
12
+ const routerCommands_1 = require("./utils/routerCommands");
13
+ const inputTokens_1 = require("./utils/inputTokens");
14
+ const constants_1 = require("./utils/constants");
15
+ const UNIVERSAL_ROUTER_ABI = [
16
+ 'function execute(bytes commands, bytes[] inputs) payable',
17
+ 'function execute(bytes commands, bytes[] inputs, uint256 deadline) payable',
18
+ ];
19
+ class SwapRouter {
20
+ static swapCallParameters(trades, config = {}) {
21
+ if (!Array.isArray(trades))
22
+ trades = [trades];
23
+ const planner = new routerCommands_1.RoutePlanner();
24
+ // track value flow to require the right amount of native value
25
+ let currentNativeValueInRouter = ethers_1.BigNumber.from(0);
26
+ let transactionValue = ethers_1.BigNumber.from(0);
27
+ for (const trade of trades) {
28
+ if (trade.tradeType == Command_1.RouterTradeType.UniswapTrade) {
29
+ const uniswapTrade = trade;
30
+ const inputIsNative = uniswapTrade.trade.inputAmount.currency.isNative;
31
+ const outputIsNative = uniswapTrade.trade.outputAmount.currency.isNative;
32
+ const swapOptions = uniswapTrade.options;
33
+ (0, tiny_invariant_1.default)(!(inputIsNative && !!swapOptions.inputTokenPermit), 'NATIVE_INPUT_PERMIT');
34
+ if (!!swapOptions.inputTokenPermit) {
35
+ (0, inputTokens_1.encodePermit)(planner, swapOptions.inputTokenPermit);
36
+ }
37
+ if (inputIsNative) {
38
+ transactionValue = transactionValue.add(ethers_1.BigNumber.from(uniswapTrade.trade.maximumAmountIn(swapOptions.slippageTolerance).quotient.toString()));
39
+ }
40
+ // track amount of native currency in the router
41
+ if (outputIsNative && swapOptions.recipient == constants_1.ROUTER_AS_RECIPIENT) {
42
+ currentNativeValueInRouter = currentNativeValueInRouter.add(ethers_1.BigNumber.from(uniswapTrade.trade.minimumAmountOut(swapOptions.slippageTolerance).quotient.toString()));
43
+ }
44
+ uniswapTrade.encode(planner, { allowRevert: false });
45
+ /**
46
+ * is UnwrapWETH
47
+ */
48
+ }
49
+ else if (trade.tradeType == Command_1.RouterTradeType.UnwrapWETH) {
50
+ const UnwrapWETH = trade;
51
+ trade.encode(planner, { allowRevert: false });
52
+ currentNativeValueInRouter = currentNativeValueInRouter.add(UnwrapWETH.amount);
53
+ /**
54
+ * else
55
+ */
56
+ }
57
+ else {
58
+ throw 'trade must be of instance: UniswapTrade or UnwrapWETH';
59
+ }
60
+ }
61
+ return SwapRouter.encodePlan(planner, transactionValue, config);
62
+ }
63
+ /**
64
+ * @deprecated in favor of swapCallParameters. Update before next major version 2.0.0
65
+ * Produces the on-chain method name to call and the hex encoded parameters to pass as arguments for a given trade.
66
+ * @param trades to produce call parameters for
67
+ * @param options options for the call parameters
68
+ */
69
+ static swapERC20CallParameters(trades, options) {
70
+ // TODO: use permit if signature included in swapOptions
71
+ const planner = new routerCommands_1.RoutePlanner();
72
+ const trade = new uniswap_1.UniswapTrade(trades, options);
73
+ const inputCurrency = trade.trade.inputAmount.currency;
74
+ (0, tiny_invariant_1.default)(!(inputCurrency.isNative && !!options.inputTokenPermit), 'NATIVE_INPUT_PERMIT');
75
+ if (options.inputTokenPermit) {
76
+ (0, inputTokens_1.encodePermit)(planner, options.inputTokenPermit);
77
+ }
78
+ const nativeCurrencyValue = inputCurrency.isNative
79
+ ? ethers_1.BigNumber.from(trade.trade.maximumAmountIn(options.slippageTolerance).quotient.toString())
80
+ : ethers_1.BigNumber.from(0);
81
+ trade.encode(planner, { allowRevert: false });
82
+ return SwapRouter.encodePlan(planner, nativeCurrencyValue, {
83
+ deadline: options.deadlineOrPreviousBlockhash ? ethers_1.BigNumber.from(options.deadlineOrPreviousBlockhash) : undefined,
84
+ });
85
+ }
86
+ /**
87
+ * Encodes a planned route into a method name and parameters for the Router contract.
88
+ * @param planner the planned route
89
+ * @param nativeCurrencyValue the native currency value of the planned route
90
+ * @param config the router config
91
+ */
92
+ static encodePlan(planner, nativeCurrencyValue, config = {}) {
93
+ const { commands, inputs } = planner;
94
+ const functionSignature = !!config.deadline ? 'execute(bytes,bytes[],uint256)' : 'execute(bytes,bytes[])';
95
+ const parameters = !!config.deadline ? [commands, inputs, config.deadline] : [commands, inputs];
96
+ const calldata = SwapRouter.INTERFACE.encodeFunctionData(functionSignature, parameters);
97
+ return { calldata, value: nativeCurrencyValue.toHexString() };
98
+ }
99
+ }
100
+ exports.SwapRouter = SwapRouter;
101
+ SwapRouter.INTERFACE = new abi_1.Interface(UNIVERSAL_ROUTER_ABI);
102
+ //# sourceMappingURL=swapRouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swapRouter.js","sourceRoot":"","sources":["../../src/universal-router/swapRouter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export declare const UNIVERSAL_ROUTER_ADDRESS: (chainId: number) => string;
2
+ export declare const UNIVERSAL_ROUTER_CREATION_BLOCK: (chainId: number) => number;
3
+ export declare const WETH_ADDRESS: (chainId: number) => string;
4
+ export declare const PERMIT2_ADDRESS = "0x000000000022D473030F116dDEE9F6B43aC78BA3";
5
+ export declare const ETH_ADDRESS = "0x0000000000000000000000000000000000000000";
6
+ export declare const E_ETH_ADDRESS = "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee";
7
+ export declare const SENDER_AS_RECIPIENT = "0x0000000000000000000000000000000000000001";
8
+ export declare const ROUTER_AS_RECIPIENT = "0x0000000000000000000000000000000000000002";
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ROUTER_AS_RECIPIENT = exports.SENDER_AS_RECIPIENT = exports.E_ETH_ADDRESS = exports.ETH_ADDRESS = exports.PERMIT2_ADDRESS = exports.WETH_ADDRESS = exports.UNIVERSAL_ROUTER_CREATION_BLOCK = exports.UNIVERSAL_ROUTER_ADDRESS = void 0;
4
+ const chain_registry_1 = require("../../chain-registry");
5
+ const UNIVERSAL_ROUTER_ADDRESS = (chainId) => (0, chain_registry_1.getUniversalRouterDeployment)(chainId).router;
6
+ exports.UNIVERSAL_ROUTER_ADDRESS = UNIVERSAL_ROUTER_ADDRESS;
7
+ const UNIVERSAL_ROUTER_CREATION_BLOCK = (chainId) => (0, chain_registry_1.getUniversalRouterDeployment)(chainId).creationBlock;
8
+ exports.UNIVERSAL_ROUTER_CREATION_BLOCK = UNIVERSAL_ROUTER_CREATION_BLOCK;
9
+ const WETH_ADDRESS = (chainId) => {
10
+ const wrappedNative = (0, chain_registry_1.getUniversalRouterDeployment)(chainId).wrappedNative;
11
+ if (wrappedNative == chain_registry_1.WETH_NOT_SUPPORTED_ON_CHAIN)
12
+ throw new Error(`Chain ${chainId} does not have WETH`);
13
+ return wrappedNative;
14
+ };
15
+ exports.WETH_ADDRESS = WETH_ADDRESS;
16
+ exports.PERMIT2_ADDRESS = '0x000000000022D473030F116dDEE9F6B43aC78BA3';
17
+ exports.ETH_ADDRESS = '0x0000000000000000000000000000000000000000';
18
+ exports.E_ETH_ADDRESS = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee';
19
+ exports.SENDER_AS_RECIPIENT = '0x0000000000000000000000000000000000000001';
20
+ exports.ROUTER_AS_RECIPIENT = '0x0000000000000000000000000000000000000002';
21
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/universal-router/utils/constants.ts"],"names":[],"mappings":";;;AAAA,yDAAgG;AAEzF,MAAM,wBAAwB,GAAG,CAAC,OAAe,EAAU,EAAE,CAAC,IAAA,6CAA4B,EAAC,OAAO,CAAC,CAAC,MAAM,CAAA;AAApG,QAAA,wBAAwB,4BAA4E;AAE1G,MAAM,+BAA+B,GAAG,CAAC,OAAe,EAAU,EAAE,CACzE,IAAA,6CAA4B,EAAC,OAAO,CAAC,CAAC,aAAa,CAAA;AADxC,QAAA,+BAA+B,mCACS;AAE9C,MAAM,YAAY,GAAG,CAAC,OAAe,EAAU,EAAE;IACtD,MAAM,aAAa,GAAG,IAAA,6CAA4B,EAAC,OAAO,CAAC,CAAC,aAAa,CAAA;IACzE,IAAI,aAAa,IAAI,4CAA2B;QAAE,MAAM,IAAI,KAAK,CAAC,SAAS,OAAO,qBAAqB,CAAC,CAAA;IACxG,OAAO,aAAa,CAAA;AACtB,CAAC,CAAA;AAJY,QAAA,YAAY,gBAIxB;AAEY,QAAA,eAAe,GAAG,4CAA4C,CAAA;AAE9D,QAAA,WAAW,GAAG,4CAA4C,CAAA;AAC1D,QAAA,aAAa,GAAG,4CAA4C,CAAA;AAE5D,QAAA,mBAAmB,GAAG,4CAA4C,CAAA;AAClE,QAAA,mBAAmB,GAAG,4CAA4C,CAAA"}
@@ -0,0 +1,2 @@
1
+ import { Currency, CurrencyAmount } from '../../core';
2
+ export declare function getNativeCurrencyValue(currencyValues: CurrencyAmount<Currency>[]): CurrencyAmount<Currency>;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getNativeCurrencyValue = void 0;
4
+ const core_1 = require("../../core");
5
+ function getNativeCurrencyValue(currencyValues) {
6
+ for (const value of currencyValues) {
7
+ if (value.currency.isNative) {
8
+ const nativeCurrency = value.currency;
9
+ const zero = core_1.CurrencyAmount.fromRawAmount(nativeCurrency, 0);
10
+ return currencyValues.reduce(function (prevValue, currValue) {
11
+ const value = currValue.currency.isNative ? currValue : zero;
12
+ return prevValue.add(value);
13
+ }, zero);
14
+ }
15
+ }
16
+ return core_1.CurrencyAmount.fromRawAmount(core_1.Ether.onChain(1), 0);
17
+ }
18
+ exports.getNativeCurrencyValue = getNativeCurrencyValue;
19
+ //# sourceMappingURL=getNativeCurrencyValue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getNativeCurrencyValue.js","sourceRoot":"","sources":["../../../src/universal-router/utils/getNativeCurrencyValue.ts"],"names":[],"mappings":";;;AAAA,qCAA4D;AAE5D,SAAgB,sBAAsB,CAAC,cAA0C;IAC/E,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE;QAClC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE;YAC3B,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAA;YACrC,MAAM,IAAI,GAAG,qBAAc,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC,CAAC,CAAA;YAE5D,OAAO,cAAc,CAAC,MAAM,CAAC,UAAU,SAAmC,EAAE,SAAmC;gBAC7G,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAA;gBAC5D,OAAO,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YAC7B,CAAC,EAAE,IAAI,CAAC,CAAA;SACT;KACF;IACD,OAAO,qBAAc,CAAC,aAAa,CAAC,YAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAC1D,CAAC;AAbD,wDAaC"}
@@ -0,0 +1,16 @@
1
+ import { PermitSingle } from '@uniswap/permit2-sdk';
2
+ import { RoutePlanner } from './routerCommands';
3
+ export interface Permit2Permit extends PermitSingle {
4
+ signature: string;
5
+ }
6
+ export type Permit2TransferFrom = {
7
+ token: string;
8
+ amount: string;
9
+ recipient?: string;
10
+ };
11
+ export type InputTokenOptions = {
12
+ permit2Permit?: Permit2Permit;
13
+ permit2TransferFrom?: Permit2TransferFrom;
14
+ };
15
+ export declare function encodePermit(planner: RoutePlanner, permit2: Permit2Permit): void;
16
+ export declare function encodeInputTokenOptions(planner: RoutePlanner, options: InputTokenOptions): void;
@@ -0,0 +1,44 @@
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.encodeInputTokenOptions = exports.encodePermit = void 0;
7
+ const tiny_invariant_1 = __importDefault(require("tiny-invariant"));
8
+ const ethers_1 = require("ethers");
9
+ const routerCommands_1 = require("./routerCommands");
10
+ const constants_1 = require("./constants");
11
+ const SIGNATURE_LENGTH = 65;
12
+ const EIP_2098_SIGNATURE_LENGTH = 64;
13
+ function encodePermit(planner, permit2) {
14
+ let signature = permit2.signature;
15
+ const length = ethers_1.ethers.utils.arrayify(permit2.signature).length;
16
+ // signature data provided for EIP-1271 may have length different from ECDSA signature
17
+ if (length === SIGNATURE_LENGTH || length === EIP_2098_SIGNATURE_LENGTH) {
18
+ // sanitizes signature to cover edge cases of malformed EIP-2098 sigs and v used as recovery id
19
+ signature = ethers_1.ethers.utils.joinSignature(ethers_1.ethers.utils.splitSignature(permit2.signature));
20
+ }
21
+ planner.addCommand(routerCommands_1.CommandType.PERMIT2_PERMIT, [permit2, signature]);
22
+ }
23
+ exports.encodePermit = encodePermit;
24
+ // Handles the encoding of commands needed to gather input tokens for a trade
25
+ // Permit: A Permit2 signature-based Permit to allow the router to access a user's tokens
26
+ // Transfer: A Permit2 TransferFrom of tokens from a user to either the router or another address.
27
+ function encodeInputTokenOptions(planner, options) {
28
+ // first ensure that all tokens provided for encoding are the same
29
+ if (!!options.permit2TransferFrom && !!options.permit2Permit)
30
+ (0, tiny_invariant_1.default)(options.permit2TransferFrom.token === options.permit2Permit.details.token, `inconsistent token`);
31
+ // if this order has a options.permit2Permit, encode it
32
+ if (!!options.permit2Permit) {
33
+ encodePermit(planner, options.permit2Permit);
34
+ }
35
+ if (!!options.permit2TransferFrom) {
36
+ planner.addCommand(routerCommands_1.CommandType.PERMIT2_TRANSFER_FROM, [
37
+ options.permit2TransferFrom.token,
38
+ options.permit2TransferFrom.recipient ? options.permit2TransferFrom.recipient : constants_1.ROUTER_AS_RECIPIENT,
39
+ options.permit2TransferFrom.amount,
40
+ ]);
41
+ }
42
+ }
43
+ exports.encodeInputTokenOptions = encodeInputTokenOptions;
44
+ //# sourceMappingURL=inputTokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inputTokens.js","sourceRoot":"","sources":["../../../src/universal-router/utils/inputTokens.ts"],"names":[],"mappings":";;;;;;AAAA,oEAAsC;AACtC,mCAA+B;AAE/B,qDAA4D;AAC5D,2CAAiD;AAiBjD,MAAM,gBAAgB,GAAG,EAAE,CAAA;AAC3B,MAAM,yBAAyB,GAAG,EAAE,CAAA;AAEpC,SAAgB,YAAY,CAAC,OAAqB,EAAE,OAAsB;IACxE,IAAI,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;IAEjC,MAAM,MAAM,GAAG,eAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAAA;IAC9D,sFAAsF;IACtF,IAAI,MAAM,KAAK,gBAAgB,IAAI,MAAM,KAAK,yBAAyB,EAAE;QACvE,+FAA+F;QAC/F,SAAS,GAAG,eAAM,CAAC,KAAK,CAAC,aAAa,CAAC,eAAM,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAA;KACvF;IAED,OAAO,CAAC,UAAU,CAAC,4BAAW,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAA;AACtE,CAAC;AAXD,oCAWC;AAED,6EAA6E;AAC7E,yFAAyF;AACzF,kGAAkG;AAClG,SAAgB,uBAAuB,CAAC,OAAqB,EAAE,OAA0B;IACvF,kEAAkE;IAClE,IAAI,CAAC,CAAC,OAAO,CAAC,mBAAmB,IAAI,CAAC,CAAC,OAAO,CAAC,aAAa;QAC1D,IAAA,wBAAS,EAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,KAAK,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAA;IAE5G,uDAAuD;IACvD,IAAI,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE;QAC3B,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;KAC7C;IAED,IAAI,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE;QACjC,OAAO,CAAC,UAAU,CAAC,4BAAW,CAAC,qBAAqB,EAAE;YACpD,OAAO,CAAC,mBAAmB,CAAC,KAAK;YACjC,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,+BAAmB;YACnG,OAAO,CAAC,mBAAmB,CAAC,MAAM;SACnC,CAAC,CAAA;KACH;AACH,CAAC;AAjBD,0DAiBC"}
@@ -0,0 +1,6 @@
1
+ import { BigNumber } from 'ethers';
2
+ import JSBI from 'jsbi';
3
+ import { Percent } from '../../core';
4
+ export declare function expandTo18DecimalsBN(n: number): BigNumber;
5
+ export declare function expandTo18Decimals(n: number): JSBI;
6
+ export declare function encodeFeeBips(fee: Percent): string;
@@ -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.encodeFeeBips = exports.expandTo18Decimals = exports.expandTo18DecimalsBN = void 0;
7
+ const ethers_1 = require("ethers");
8
+ const jsbi_1 = __importDefault(require("jsbi"));
9
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
10
+ const v3_1 = require("../../v3");
11
+ function expandTo18DecimalsBN(n) {
12
+ // use bn intermediately to allow decimals in intermediate calculations
13
+ return ethers_1.BigNumber.from(new bignumber_js_1.default(n).times(new bignumber_js_1.default(10).pow(18)).toFixed());
14
+ }
15
+ exports.expandTo18DecimalsBN = expandTo18DecimalsBN;
16
+ function expandTo18Decimals(n) {
17
+ return jsbi_1.default.BigInt(ethers_1.BigNumber.from(n).mul(ethers_1.BigNumber.from(10).pow(18)).toString());
18
+ }
19
+ exports.expandTo18Decimals = expandTo18Decimals;
20
+ function encodeFeeBips(fee) {
21
+ return (0, v3_1.toHex)(fee.multiply(10000).quotient);
22
+ }
23
+ exports.encodeFeeBips = encodeFeeBips;
24
+ //# sourceMappingURL=numbers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numbers.js","sourceRoot":"","sources":["../../../src/universal-router/utils/numbers.ts"],"names":[],"mappings":";;;;;;AAAA,mCAAkC;AAClC,gDAAuB;AACvB,gEAA6B;AAE7B,iCAAgC;AAEhC,SAAgB,oBAAoB,CAAC,CAAS;IAC5C,uEAAuE;IACvE,OAAO,kBAAS,CAAC,IAAI,CAAC,IAAI,sBAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,sBAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;AACtE,CAAC;AAHD,oDAGC;AAED,SAAgB,kBAAkB,CAAC,CAAS;IAC1C,OAAO,cAAI,CAAC,MAAM,CAAC,kBAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,kBAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;AAClF,CAAC;AAFD,gDAEC;AAED,SAAgB,aAAa,CAAC,GAAY;IACxC,OAAO,IAAA,UAAK,EAAC,GAAG,CAAC,QAAQ,CAAC,KAAM,CAAC,CAAC,QAAQ,CAAC,CAAA;AAC7C,CAAC;AAFD,sCAEC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * CommandTypes
3
+ * @description Flags that modify a command's execution
4
+ * @enum {number}
5
+ */
6
+ export declare enum CommandType {
7
+ V3_SWAP_EXACT_IN = 0,
8
+ V3_SWAP_EXACT_OUT = 1,
9
+ PERMIT2_TRANSFER_FROM = 2,
10
+ PERMIT2_PERMIT_BATCH = 3,
11
+ SWEEP = 4,
12
+ TRANSFER = 5,
13
+ PAY_PORTION = 6,
14
+ PERMIT2_PERMIT = 10,
15
+ WRAP_ETH = 11,
16
+ UNWRAP_WETH = 12,
17
+ PERMIT2_TRANSFER_FROM_BATCH = 13
18
+ }
19
+ export declare class RoutePlanner {
20
+ commands: string;
21
+ inputs: string[];
22
+ constructor();
23
+ addCommand(type: CommandType, parameters: any[], allowRevert?: boolean): void;
24
+ }
25
+ export type RouterCommand = {
26
+ type: CommandType;
27
+ encodedInput: string;
28
+ };
29
+ export declare function createCommand(type: CommandType, parameters: any[]): RouterCommand;
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createCommand = exports.RoutePlanner = exports.CommandType = void 0;
4
+ const utils_1 = require("ethers/lib/utils");
5
+ /**
6
+ * CommandTypes
7
+ * @description Flags that modify a command's execution
8
+ * @enum {number}
9
+ */
10
+ var CommandType;
11
+ (function (CommandType) {
12
+ CommandType[CommandType["V3_SWAP_EXACT_IN"] = 0] = "V3_SWAP_EXACT_IN";
13
+ CommandType[CommandType["V3_SWAP_EXACT_OUT"] = 1] = "V3_SWAP_EXACT_OUT";
14
+ CommandType[CommandType["PERMIT2_TRANSFER_FROM"] = 2] = "PERMIT2_TRANSFER_FROM";
15
+ CommandType[CommandType["PERMIT2_PERMIT_BATCH"] = 3] = "PERMIT2_PERMIT_BATCH";
16
+ CommandType[CommandType["SWEEP"] = 4] = "SWEEP";
17
+ CommandType[CommandType["TRANSFER"] = 5] = "TRANSFER";
18
+ CommandType[CommandType["PAY_PORTION"] = 6] = "PAY_PORTION";
19
+ CommandType[CommandType["PERMIT2_PERMIT"] = 10] = "PERMIT2_PERMIT";
20
+ CommandType[CommandType["WRAP_ETH"] = 11] = "WRAP_ETH";
21
+ CommandType[CommandType["UNWRAP_WETH"] = 12] = "UNWRAP_WETH";
22
+ CommandType[CommandType["PERMIT2_TRANSFER_FROM_BATCH"] = 13] = "PERMIT2_TRANSFER_FROM_BATCH";
23
+ })(CommandType = exports.CommandType || (exports.CommandType = {}));
24
+ const PERMIT_STRUCT = '((address token,uint160 amount,uint48 expiration,uint48 nonce) details,address spender,uint256 sigDeadline)';
25
+ const PERMIT_BATCH_STRUCT = '((address token,uint160 amount,uint48 expiration,uint48 nonce)[] details,address spender,uint256 sigDeadline)';
26
+ const PERMIT2_TRANSFER_FROM_STRUCT = '(address from,address to,uint160 amount,address token)';
27
+ const PERMIT2_TRANSFER_FROM_BATCH_STRUCT = PERMIT2_TRANSFER_FROM_STRUCT + '[]';
28
+ const ABI_DEFINITION = {
29
+ // Permit2 Actions
30
+ [CommandType.PERMIT2_PERMIT]: [PERMIT_STRUCT, 'bytes'],
31
+ [CommandType.PERMIT2_PERMIT_BATCH]: [PERMIT_BATCH_STRUCT, 'bytes'],
32
+ [CommandType.PERMIT2_TRANSFER_FROM]: ['address', 'address', 'uint160'],
33
+ [CommandType.PERMIT2_TRANSFER_FROM_BATCH]: [PERMIT2_TRANSFER_FROM_BATCH_STRUCT],
34
+ // Uniswap Actions
35
+ [CommandType.V3_SWAP_EXACT_IN]: ['address', 'uint256', 'uint256', 'bytes', 'bool'],
36
+ [CommandType.V3_SWAP_EXACT_OUT]: ['address', 'uint256', 'uint256', 'bytes', 'bool'],
37
+ // Token Actions and Checks
38
+ [CommandType.WRAP_ETH]: ['address', 'uint256'],
39
+ [CommandType.UNWRAP_WETH]: ['address', 'uint256'],
40
+ [CommandType.SWEEP]: ['address', 'address', 'uint256'],
41
+ [CommandType.TRANSFER]: ['address', 'address', 'uint256'],
42
+ [CommandType.PAY_PORTION]: ['address', 'address', 'uint256'],
43
+ };
44
+ class RoutePlanner {
45
+ constructor() {
46
+ this.commands = '0x';
47
+ this.inputs = [];
48
+ }
49
+ addCommand(type, parameters, allowRevert = false) {
50
+ let command = createCommand(type, parameters);
51
+ this.inputs.push(command.encodedInput);
52
+ if (allowRevert) {
53
+ throw new Error(`command type: ${command.type} cannot be allowed to revert`);
54
+ }
55
+ this.commands = this.commands.concat(command.type.toString(16).padStart(2, '0'));
56
+ }
57
+ }
58
+ exports.RoutePlanner = RoutePlanner;
59
+ function createCommand(type, parameters) {
60
+ const encodedInput = utils_1.defaultAbiCoder.encode(ABI_DEFINITION[type], parameters);
61
+ return { type, encodedInput };
62
+ }
63
+ exports.createCommand = createCommand;
64
+ //# sourceMappingURL=routerCommands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routerCommands.js","sourceRoot":"","sources":["../../../src/universal-router/utils/routerCommands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { Currency, TradeType } from '../../core';
2
+ import { SynthraTrade } from '../entities/trade';
3
+ export type TokenInRoute = {
4
+ address: string;
5
+ chainId: number;
6
+ symbol: string;
7
+ decimals: string;
8
+ name?: string;
9
+ buyFeeBps?: string;
10
+ sellFeeBps?: string;
11
+ };
12
+ export declare enum PoolType {
13
+ V3Pool = "v3-pool"
14
+ }
15
+ export type V3PoolInRoute = {
16
+ type: PoolType.V3Pool;
17
+ address?: string;
18
+ tokenIn: TokenInRoute;
19
+ tokenOut: TokenInRoute;
20
+ sqrtRatioX96: string;
21
+ liquidity: string;
22
+ tickCurrent: string;
23
+ fee: string;
24
+ amountIn?: string;
25
+ amountOut?: string;
26
+ };
27
+ export type PartialClassicQuote = {
28
+ tokenIn: string;
29
+ tokenOut: string;
30
+ tradeType: TradeType;
31
+ route: V3PoolInRoute[][];
32
+ };
33
+ export declare const isNativeCurrency: (address: string) => boolean;
34
+ export declare class RouterTradeAdapter {
35
+ static fromClassicQuote(quote: PartialClassicQuote): SynthraTrade<Currency, Currency, TradeType>;
36
+ private static toCurrency;
37
+ private static toToken;
38
+ private static toPool;
39
+ private static isVersionedRoute;
40
+ }