@uniswap/universal-router-sdk 1.8.1 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,13 +3,30 @@ import { abi as abi$7 } from '@uniswap/universal-router/artifacts/contracts/Univ
3
3
  import { Interface } from '@ethersproject/abi';
4
4
  import { BigNumber, ethers } from 'ethers';
5
5
  import { defaultAbiCoder } from 'ethers/lib/utils';
6
- import { Trade, Pair } from '@uniswap/v2-sdk';
7
- import { toHex, Trade as Trade$1, encodeRouteToPath, Pool } from '@uniswap/v3-sdk';
8
- import { Protocol, MixedRouteTrade, partitionMixedRouteByProtocol, getOutputOfPools, MixedRouteSDK, MixedRoute, encodeMixedRouteToPath } from '@uniswap/router-sdk';
9
- import { TradeType, Percent } from '@uniswap/sdk-core';
6
+ import { Trade, Pair, Route as Route$1 } from '@uniswap/v2-sdk';
7
+ import { toHex, Trade as Trade$1, encodeRouteToPath, Pool, Route } from '@uniswap/v3-sdk';
8
+ import { Protocol, MixedRouteTrade, partitionMixedRouteByProtocol, getOutputOfPools, MixedRouteSDK, MixedRoute, encodeMixedRouteToPath, Trade as Trade$2 } from '@uniswap/router-sdk';
9
+ import { TradeType, Percent, CurrencyAmount, Ether, Token } from '@uniswap/sdk-core';
10
10
  import 'jsbi';
11
11
  import 'bignumber.js';
12
12
 
13
+ function _defineProperties(target, props) {
14
+ for (var i = 0; i < props.length; i++) {
15
+ var descriptor = props[i];
16
+ descriptor.enumerable = descriptor.enumerable || false;
17
+ descriptor.configurable = true;
18
+ if ("value" in descriptor) descriptor.writable = true;
19
+ Object.defineProperty(target, descriptor.key, descriptor);
20
+ }
21
+ }
22
+ function _createClass(Constructor, protoProps, staticProps) {
23
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
24
+ if (staticProps) _defineProperties(Constructor, staticProps);
25
+ Object.defineProperty(Constructor, "prototype", {
26
+ writable: false
27
+ });
28
+ return Constructor;
29
+ }
13
30
  function _extends() {
14
31
  _extends = Object.assign ? Object.assign.bind() : function (target) {
15
32
  for (var i = 1; i < arguments.length; i++) {
@@ -245,9 +262,9 @@ var CHAIN_CONFIGS = (_CHAIN_CONFIGS = {}, _CHAIN_CONFIGS[1] = {
245
262
  weth: '0x4200000000000000000000000000000000000006',
246
263
  creationBlock: 9107268
247
264
  }, _CHAIN_CONFIGS[81457] = {
248
- router: '0xe463635f6e73C1E595554C3ae216472D0fb929a9',
265
+ router: '0x643770E279d5D0733F21d6DC03A8efbABf3255B4',
249
266
  weth: '0x4300000000000000000000000000000000000004',
250
- creationBlock: 401447
267
+ creationBlock: 1116444
251
268
  }, _CHAIN_CONFIGS);
252
269
  var UNIVERSAL_ROUTER_ADDRESS = function UNIVERSAL_ROUTER_ADDRESS(chainId) {
253
270
  if (!(chainId in CHAIN_CONFIGS)) throw new Error("Universal Router not deployed on chain " + chainId);
@@ -265,6 +282,7 @@ var WETH_ADDRESS = function WETH_ADDRESS(chainId) {
265
282
  var PERMIT2_ADDRESS = '0x000000000022D473030F116dDEE9F6B43aC78BA3';
266
283
  var CONTRACT_BALANCE = /*#__PURE__*/BigNumber.from(2).pow(255);
267
284
  var ETH_ADDRESS = '0x0000000000000000000000000000000000000000';
285
+ var E_ETH_ADDRESS = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee';
268
286
  var ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';
269
287
  var SENDER_AS_RECIPIENT = '0x0000000000000000000000000000000000000001';
270
288
  var ROUTER_AS_RECIPIENT = '0x0000000000000000000000000000000000000002';
@@ -284,17 +302,15 @@ var UniswapTrade = /*#__PURE__*/function () {
284
302
  this.options = options;
285
303
  this.tradeType = RouterTradeType.UniswapTrade;
286
304
  if (!!options.fee && !!options.flatFee) throw new Error('Only one fee option permitted');
305
+ if (this.inputRequiresWrap) this.payerIsUser = false;else if (this.options.useRouterBalance) this.payerIsUser = false;else this.payerIsUser = true;
287
306
  }
288
307
  var _proto = UniswapTrade.prototype;
289
308
  _proto.encode = function encode(planner, _config) {
290
309
  var _this$options$recipie;
291
- var payerIsUser = true;
292
310
  // If the input currency is the native currency, we need to wrap it with the router as the recipient
293
- if (this.trade.inputAmount.currency.isNative) {
311
+ if (this.inputRequiresWrap) {
294
312
  // TODO: optimize if only one v2 pool we can directly send this to the pool
295
313
  planner.addCommand(CommandType.WRAP_ETH, [ROUTER_AS_RECIPIENT, this.trade.maximumAmountIn(this.options.slippageTolerance).quotient.toString()]);
296
- // since WETH is now owned by the router, the router pays for inputs
297
- payerIsUser = false;
298
314
  }
299
315
  // The overall recipient at the end of the trade, SENDER_AS_RECIPIENT uses the msg.sender
300
316
  this.options.recipient = (_this$options$recipie = this.options.recipient) != null ? _this$options$recipie : SENDER_AS_RECIPIENT;
@@ -304,19 +320,18 @@ var UniswapTrade = /*#__PURE__*/function () {
304
320
  // in that the reversion probability is lower
305
321
  var performAggregatedSlippageCheck = this.trade.tradeType === TradeType.EXACT_INPUT && this.trade.routes.length > 2;
306
322
  var outputIsNative = this.trade.outputAmount.currency.isNative;
307
- var inputIsNative = this.trade.inputAmount.currency.isNative;
308
323
  var routerMustCustody = performAggregatedSlippageCheck || outputIsNative || hasFeeOption(this.options);
309
324
  for (var _iterator = _createForOfIteratorHelperLoose(this.trade.swaps), _step; !(_step = _iterator()).done;) {
310
325
  var swap = _step.value;
311
326
  switch (swap.route.protocol) {
312
327
  case Protocol.V2:
313
- addV2Swap(planner, swap, this.trade.tradeType, this.options, payerIsUser, routerMustCustody);
328
+ addV2Swap(planner, swap, this.trade.tradeType, this.options, this.payerIsUser, routerMustCustody);
314
329
  break;
315
330
  case Protocol.V3:
316
- addV3Swap(planner, swap, this.trade.tradeType, this.options, payerIsUser, routerMustCustody);
331
+ addV3Swap(planner, swap, this.trade.tradeType, this.options, this.payerIsUser, routerMustCustody);
317
332
  break;
318
333
  case Protocol.MIXED:
319
- addMixedSwap(planner, swap, this.trade.tradeType, this.options, payerIsUser, routerMustCustody);
334
+ addMixedSwap(planner, swap, this.trade.tradeType, this.options, this.payerIsUser, routerMustCustody);
320
335
  break;
321
336
  default:
322
337
  throw new Error('UNSUPPORTED_TRADE_PROTOCOL');
@@ -356,13 +371,19 @@ var UniswapTrade = /*#__PURE__*/function () {
356
371
  planner.addCommand(CommandType.SWEEP, [this.trade.outputAmount.currency.wrapped.address, this.options.recipient, minimumAmountOut]);
357
372
  }
358
373
  }
359
- if (inputIsNative && (this.trade.tradeType === TradeType.EXACT_OUTPUT || riskOfPartialFill(this.trade))) {
374
+ if (this.inputRequiresWrap && (this.trade.tradeType === TradeType.EXACT_OUTPUT || riskOfPartialFill(this.trade))) {
360
375
  // for exactOutput swaps that take native currency as input
361
376
  // we need to send back the change to the user
362
377
  planner.addCommand(CommandType.UNWRAP_WETH, [this.options.recipient, 0]);
363
378
  }
364
379
  if (this.options.safeMode) planner.addCommand(CommandType.SWEEP, [ETH_ADDRESS, this.options.recipient, 0]);
365
380
  };
381
+ _createClass(UniswapTrade, [{
382
+ key: "inputRequiresWrap",
383
+ get: function get() {
384
+ return this.trade.inputAmount.currency.isNative;
385
+ }
386
+ }]);
366
387
  return UniswapTrade;
367
388
  }();
368
389
  // encode a uniswap v2 swap
@@ -10549,5 +10570,123 @@ var UnwrapWETH = /*#__PURE__*/function () {
10549
10570
  return UnwrapWETH;
10550
10571
  }();
10551
10572
 
10552
- export { CommandType, CryptopunkTrade, FoundationTrade, LooksRareV2Trade, Market, NFT20Trade, NFTTrade, NFTXTrade, PERMIT2_ADDRESS, ROUTER_AS_RECIPIENT, RoutePlanner, RouterTradeType, SeaportTrade, SudoswapTrade, SwapRouter, TokenType, UNIVERSAL_ROUTER_ADDRESS, UNIVERSAL_ROUTER_CREATION_BLOCK, UniswapTrade, UnwrapWETH, WETH_ADDRESS, X2Y2Trade };
10573
+ var PoolType;
10574
+ (function (PoolType) {
10575
+ PoolType["V2Pool"] = "v2-pool";
10576
+ PoolType["V3Pool"] = "v3-pool";
10577
+ })(PoolType || (PoolType = {}));
10578
+ var isNativeCurrency = function isNativeCurrency(address) {
10579
+ return address.toLowerCase() === ETH_ADDRESS.toLowerCase() || address.toLowerCase() === E_ETH_ADDRESS.toLowerCase();
10580
+ };
10581
+ // Helper class to convert routing-specific quote entities to RouterTrade entities
10582
+ // the returned RouterTrade can then be used to build the UniswapTrade entity in this package
10583
+ var RouterTradeAdapter = /*#__PURE__*/function () {
10584
+ function RouterTradeAdapter() {}
10585
+ // Generate a RouterTrade using fields from a classic quote response
10586
+ RouterTradeAdapter.fromClassicQuote = function fromClassicQuote(quote) {
10587
+ var route = quote.route,
10588
+ tokenIn = quote.tokenIn,
10589
+ tokenOut = quote.tokenOut;
10590
+ if (!route) throw new Error('Expected route to be present');
10591
+ if (!route.length) throw new Error('Expected there to be at least one route');
10592
+ if (route.some(function (r) {
10593
+ return !r.length;
10594
+ })) throw new Error('Expected all routes to have at least one pool');
10595
+ var firstRoute = route[0];
10596
+ var tokenInData = firstRoute[0].tokenIn;
10597
+ var tokenOutData = firstRoute[firstRoute.length - 1].tokenOut;
10598
+ if (!tokenInData || !tokenOutData) throw new Error('Expected both tokenIn and tokenOut to be present');
10599
+ if (tokenInData.chainId !== tokenOutData.chainId) throw new Error('Expected tokenIn and tokenOut to be have same chainId');
10600
+ var parsedCurrencyIn = RouterTradeAdapter.toCurrency(isNativeCurrency(tokenIn), tokenInData);
10601
+ var parsedCurrencyOut = RouterTradeAdapter.toCurrency(isNativeCurrency(tokenOut), tokenOutData);
10602
+ var typedRoutes = route.map(function (subRoute) {
10603
+ var rawAmountIn = subRoute[0].amountIn;
10604
+ var rawAmountOut = subRoute[subRoute.length - 1].amountOut;
10605
+ if (!rawAmountIn || !rawAmountOut) {
10606
+ throw new Error('Expected both raw amountIn and raw amountOut to be present');
10607
+ }
10608
+ var inputAmount = CurrencyAmount.fromRawAmount(parsedCurrencyIn, rawAmountIn);
10609
+ var outputAmount = CurrencyAmount.fromRawAmount(parsedCurrencyOut, rawAmountOut);
10610
+ var isOnlyV2 = RouterTradeAdapter.isVersionedRoute(PoolType.V2Pool, subRoute);
10611
+ var isOnlyV3 = RouterTradeAdapter.isVersionedRoute(PoolType.V3Pool, subRoute);
10612
+ return {
10613
+ routev3: isOnlyV3 ? new Route(subRoute.map(RouterTradeAdapter.toPool), parsedCurrencyIn, parsedCurrencyOut) : null,
10614
+ routev2: isOnlyV2 ? new Route$1(subRoute.map(RouterTradeAdapter.toPair), parsedCurrencyIn, parsedCurrencyOut) : null,
10615
+ mixedRoute: !isOnlyV3 && !isOnlyV2 ? new MixedRouteSDK(subRoute.map(RouterTradeAdapter.toPoolOrPair), parsedCurrencyIn, parsedCurrencyOut) : null,
10616
+ inputAmount: inputAmount,
10617
+ outputAmount: outputAmount
10618
+ };
10619
+ });
10620
+ return new Trade$2({
10621
+ v2Routes: typedRoutes.filter(function (route) {
10622
+ return route.routev2;
10623
+ }).map(function (route) {
10624
+ return {
10625
+ routev2: route.routev2,
10626
+ inputAmount: route.inputAmount,
10627
+ outputAmount: route.outputAmount
10628
+ };
10629
+ }),
10630
+ v3Routes: typedRoutes.filter(function (route) {
10631
+ return route.routev3;
10632
+ }).map(function (route) {
10633
+ return {
10634
+ routev3: route.routev3,
10635
+ inputAmount: route.inputAmount,
10636
+ outputAmount: route.outputAmount
10637
+ };
10638
+ }),
10639
+ mixedRoutes: typedRoutes.filter(function (route) {
10640
+ return route.mixedRoute;
10641
+ }).map(function (route) {
10642
+ return {
10643
+ mixedRoute: route.mixedRoute,
10644
+ inputAmount: route.inputAmount,
10645
+ outputAmount: route.outputAmount
10646
+ };
10647
+ }),
10648
+ tradeType: quote.tradeType
10649
+ });
10650
+ };
10651
+ RouterTradeAdapter.toCurrency = function toCurrency(isNative, token) {
10652
+ if (isNative) {
10653
+ return Ether.onChain(token.chainId);
10654
+ }
10655
+ return this.toToken(token);
10656
+ };
10657
+ RouterTradeAdapter.toToken = function toToken(token) {
10658
+ var chainId = token.chainId,
10659
+ address = token.address,
10660
+ decimals = token.decimals,
10661
+ symbol = token.symbol,
10662
+ buyFeeBps = token.buyFeeBps,
10663
+ sellFeeBps = token.sellFeeBps;
10664
+ return new Token(chainId, address, parseInt(decimals.toString()), symbol, /* name */undefined, false, buyFeeBps ? BigNumber.from(buyFeeBps) : undefined, sellFeeBps ? BigNumber.from(sellFeeBps) : undefined);
10665
+ };
10666
+ RouterTradeAdapter.toPool = function toPool(_ref) {
10667
+ var fee = _ref.fee,
10668
+ sqrtRatioX96 = _ref.sqrtRatioX96,
10669
+ liquidity = _ref.liquidity,
10670
+ tickCurrent = _ref.tickCurrent,
10671
+ tokenIn = _ref.tokenIn,
10672
+ tokenOut = _ref.tokenOut;
10673
+ return new Pool(RouterTradeAdapter.toToken(tokenIn), RouterTradeAdapter.toToken(tokenOut), parseInt(fee), sqrtRatioX96, liquidity, parseInt(tickCurrent));
10674
+ };
10675
+ RouterTradeAdapter.isVersionedRoute = function isVersionedRoute(type, route) {
10676
+ return route.every(function (pool) {
10677
+ return pool.type === type;
10678
+ });
10679
+ };
10680
+ return RouterTradeAdapter;
10681
+ }();
10682
+ RouterTradeAdapter.toPoolOrPair = function (pool) {
10683
+ return pool.type === PoolType.V3Pool ? RouterTradeAdapter.toPool(pool) : RouterTradeAdapter.toPair(pool);
10684
+ };
10685
+ RouterTradeAdapter.toPair = function (_ref2) {
10686
+ var reserve0 = _ref2.reserve0,
10687
+ reserve1 = _ref2.reserve1;
10688
+ return new Pair(CurrencyAmount.fromRawAmount(RouterTradeAdapter.toToken(reserve0.token), reserve0.quotient), CurrencyAmount.fromRawAmount(RouterTradeAdapter.toToken(reserve1.token), reserve1.quotient));
10689
+ };
10690
+
10691
+ export { CommandType, CryptopunkTrade, FoundationTrade, LooksRareV2Trade, Market, NFT20Trade, NFTTrade, NFTXTrade, PERMIT2_ADDRESS, PoolType, ROUTER_AS_RECIPIENT, RoutePlanner, RouterTradeAdapter, RouterTradeType, SeaportTrade, SudoswapTrade, SwapRouter, TokenType, UNIVERSAL_ROUTER_ADDRESS, UNIVERSAL_ROUTER_CREATION_BLOCK, UniswapTrade, UnwrapWETH, WETH_ADDRESS, X2Y2Trade, isNativeCurrency };
10553
10692
  //# sourceMappingURL=universal-router-sdk.esm.js.map