@kittycorn-labs/universal-router-sdk 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -10,6 +10,7 @@ import { Trade, Pair, Route as Route$2 } from '@uniswap/v2-sdk';
10
10
  import { Protocol, MixedRouteTrade, partitionMixedRouteByProtocol, getOutputOfPools, MixedRoute, MixedRouteSDK, encodeMixedRouteToPath, Trade as Trade$3 } from '@kittycorn-labs/router-sdk';
11
11
  import 'jsbi';
12
12
  import 'bignumber.js';
13
+ import { getSupportUnderlyingByTokenize, getSupportTokenizeByUnderlying } from '@kittycorn-labs/smart-order-router';
13
14
 
14
15
  function _arrayLikeToArray(r, a) {
15
16
  (null == a || a > r.length) && (a = r.length);
@@ -839,8 +840,85 @@ function addV3Swap(planner, _ref2, tradeType, options, payerIsUser, routerMustCu
839
840
  planner.addCommand(CommandType.V3_SWAP_EXACT_OUT, [routerMustCustody ? ROUTER_AS_RECIPIENT : options.recipient, trade.minimumAmountOut(options.slippageTolerance).quotient.toString(), trade.maximumAmountIn(options.slippageTolerance).quotient.toString(), path, payerIsUser]);
840
841
  }
841
842
  }
842
- function addV4Swap(planner, _ref3, tradeType, options, payerIsUser, routerMustCustody) {
843
+ function getReducePools(pools, tokenIn, tokenOut) {
844
+ if (pools.length < 3) {
845
+ return pools;
846
+ }
847
+ var chainId = pools[0].chainId;
848
+ var token0 = getSupportUnderlyingByTokenize(chainId, tokenIn); // assume tokenIn is tokenize
849
+ var token1 = getSupportUnderlyingByTokenize(chainId, tokenOut); // assume tokenOut is tokenize
850
+ var isSupport0 = token0 !== undefined;
851
+ var isSupport1 = token1 !== undefined;
852
+ var underlyingIn = isSupport0 ? token0 : tokenIn;
853
+ var underlyingOut = isSupport1 ? token1 : tokenOut;
854
+ // Find reduce pool for
855
+ // - first pool is underlying and tokenize for tokenIn
856
+ // - last pool is underlying and previous tokenize for tokenOut
857
+ if (!isSupport0) {
858
+ var tokenizeIn = getSupportTokenizeByUnderlying(chainId, underlyingIn);
859
+ if (tokenizeIn !== undefined) {
860
+ var reduceFirst = pools[0].token0.equals(underlyingIn) && pools[0].token1.equals(tokenizeIn) || pools[0].token0.equals(tokenizeIn) && pools[0].token1.equals(underlyingIn);
861
+ if (reduceFirst) {
862
+ pools.shift();
863
+ }
864
+ }
865
+ }
866
+ if (!isSupport1) {
867
+ var tokenizeOut = getSupportTokenizeByUnderlying(chainId, underlyingOut);
868
+ if (tokenizeOut !== undefined) {
869
+ var lastIndex = pools.length - 1;
870
+ var reduceLast = pools[lastIndex].token0.equals(underlyingOut) && pools[lastIndex].token1.equals(tokenizeOut) || pools[lastIndex].token0.equals(tokenizeOut) && pools[lastIndex].token1.equals(underlyingOut);
871
+ if (reduceLast) {
872
+ pools.pop();
873
+ }
874
+ }
875
+ }
876
+ return pools;
877
+ }
878
+ function buildV4Planner(trade, tradeType, options, payerIsUser, routerMustCustody) {
843
879
  var _options$recipient;
880
+ var chainId = trade.route.chainId;
881
+ var currencyIn = trade.route.pathInput;
882
+ var currencyOut = trade.route.pathOutput;
883
+ var slippageToleranceOnSwap = routerMustCustody && tradeType == TradeType.EXACT_INPUT ? undefined : options.slippageTolerance;
884
+ // Make tokens path from pools
885
+ var path = [];
886
+ var nextToken = currencyIn;
887
+ trade.route.pools.forEach(function (pool) {
888
+ if (nextToken.equals(pool.token0)) {
889
+ path.push(pool.token0);
890
+ nextToken = pool.token1;
891
+ } else {
892
+ path.push(pool.token1);
893
+ nextToken = pool.token0;
894
+ }
895
+ });
896
+ var v4Planner = new V4Planner();
897
+ // Add trade swap type with encode pathKeys
898
+ v4Planner.addTrade(trade, slippageToleranceOnSwap);
899
+ // Pay currency in
900
+ v4Planner.addSettle(currencyIn, payerIsUser);
901
+ var token0 = getSupportUnderlyingByTokenize(chainId, currencyIn);
902
+ var isSupport0 = token0 !== undefined;
903
+ // Build action planner for path
904
+ for (var i = 1; i < path.length; i++) {
905
+ var token1 = getSupportUnderlyingByTokenize(chainId, path[i]);
906
+ var isSupport1 = token1 !== undefined;
907
+ if (isSupport0 && path[i].equals(token0)) {
908
+ v4Planner.addTake(path[i - 1], ROUTER_AS_RECIPIENT);
909
+ v4Planner.addSettle(token0, false);
910
+ } else if (isSupport1 && path[i - 1].equals(token1)) {
911
+ v4Planner.addTake(token1, ROUTER_AS_RECIPIENT);
912
+ v4Planner.addSettle(path[i], false);
913
+ }
914
+ isSupport0 = isSupport1;
915
+ token0 = token1;
916
+ }
917
+ // Take currency out
918
+ v4Planner.addTake(currencyOut, routerMustCustody ? ROUTER_AS_RECIPIENT : (_options$recipient = options.recipient) != null ? _options$recipient : SENDER_AS_RECIPIENT);
919
+ return v4Planner;
920
+ }
921
+ function addV4Swap(planner, _ref3, tradeType, options, payerIsUser, routerMustCustody) {
844
922
  var inputAmount = _ref3.inputAmount,
845
923
  outputAmount = _ref3.outputAmount,
846
924
  route = _ref3.route;
@@ -848,6 +926,8 @@ function addV4Swap(planner, _ref3, tradeType, options, payerIsUser, routerMustCu
848
926
  var pools = route.pools.map(function (p) {
849
927
  return p;
850
928
  });
929
+ // reduce pools for tokenize
930
+ pools = getReducePools(pools, inputAmount.currency, outputAmount.currency);
851
931
  var v4Route = new Route(pools, inputAmount.currency, outputAmount.currency);
852
932
  var trade = Trade$2.createUncheckedTrade({
853
933
  route: v4Route,
@@ -855,11 +935,8 @@ function addV4Swap(planner, _ref3, tradeType, options, payerIsUser, routerMustCu
855
935
  outputAmount: outputAmount,
856
936
  tradeType: tradeType
857
937
  });
858
- var slippageToleranceOnSwap = routerMustCustody && tradeType == TradeType.EXACT_INPUT ? undefined : options.slippageTolerance;
859
- var v4Planner = new V4Planner();
860
- v4Planner.addTrade(trade, slippageToleranceOnSwap);
861
- v4Planner.addSettle(trade.route.pathInput, payerIsUser);
862
- v4Planner.addTake(trade.route.pathOutput, routerMustCustody ? ROUTER_AS_RECIPIENT : (_options$recipient = options.recipient) != null ? _options$recipient : SENDER_AS_RECIPIENT);
938
+ // build planner
939
+ var v4Planner = buildV4Planner(trade, tradeType, options, payerIsUser, routerMustCustody);
863
940
  planner.addCommand(CommandType.V4_SWAP, [v4Planner.finalize()]);
864
941
  }
865
942
  // encode a mixed route swap, i.e. including both v2 and v3 pools