@kittycorn-labs/universal-router-sdk 1.1.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.
@@ -1,9 +1,9 @@
1
1
  import { MixedRouteTrade, Trade as RouterTrade } from '@kittycorn-labs/router-sdk';
2
2
  import { Trade as V2Trade, Pair } from '@uniswap/v2-sdk';
3
3
  import { Trade as V3Trade, Pool, FeeAmount } from '@uniswap/v3-sdk';
4
- import { Trade as V4Trade } from '@kittycorn-labs/v4-sdk';
4
+ import { Pool as V4Pool, Trade as V4Trade } from '@kittycorn-labs/v4-sdk';
5
5
  import { SwapOptions } from '../../src';
6
- import { TradeType, Ether, Token, Currency } from '@uniswap/sdk-core';
6
+ import { TradeType, Ether, Token, Currency, ChainId } from '@kittycorn-labs/sdk-core';
7
7
  export declare const ETHER: Ether;
8
8
  export declare const WETH: Token;
9
9
  export declare const DAI: Token;
@@ -19,6 +19,7 @@ declare type UniswapPools = {
19
19
  export declare function getUniswapPools(forkBlock?: number): Promise<UniswapPools>;
20
20
  export declare function getPair(tokenA: Token, tokenB: Token, blockNumber: number): Promise<Pair>;
21
21
  export declare function getPool(tokenA: Token, tokenB: Token, feeAmount: FeeAmount, blockNumber: number): Promise<Pool>;
22
+ export declare function getPoolTokenize(chainId: ChainId, tokenize: Token): V4Pool;
22
23
  export declare function swapOptions(options: Partial<SwapOptions>): SwapOptions;
23
24
  export declare function buildTrade(trades: (V2Trade<Currency, Currency, TradeType> | V3Trade<Currency, Currency, TradeType> | V4Trade<Currency, Currency, TradeType> | MixedRouteTrade<Currency, Currency, TradeType>)[]): RouterTrade<Currency, Currency, TradeType>;
24
25
  export {};
@@ -16,6 +16,7 @@ var v2Sdk = require('@uniswap/v2-sdk');
16
16
  var routerSdk = require('@kittycorn-labs/router-sdk');
17
17
  require('jsbi');
18
18
  require('bignumber.js');
19
+ var smartOrderRouter = require('@kittycorn-labs/smart-order-router');
19
20
 
20
21
  function _arrayLikeToArray(r, a) {
21
22
  (null == a || a > r.length) && (a = r.length);
@@ -415,7 +416,7 @@ var CHAIN_CONFIGS = (_CHAIN_CONFIGS = {}, _CHAIN_CONFIGS[1] = {
415
416
  creationBlock: 8940568
416
417
  }, _routerConfigs2)
417
418
  }, _CHAIN_CONFIGS[11155111] = {
418
- weth: '0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14',
419
+ weth: '0xC558DBdd856501FCd9aaF1E62eae57A9F0629a3c',
419
420
  routerConfigs: (_routerConfigs3 = {}, _routerConfigs3[exports.UniversalRouterVersion.V1_2] = {
420
421
  address: '0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD',
421
422
  creationBlock: 3543575
@@ -835,8 +836,85 @@ function addV3Swap(planner, _ref2, tradeType, options, payerIsUser, routerMustCu
835
836
  planner.addCommand(exports.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]);
836
837
  }
837
838
  }
838
- function addV4Swap(planner, _ref3, tradeType, options, payerIsUser, routerMustCustody) {
839
+ function getReducePools(pools, tokenIn, tokenOut) {
840
+ if (pools.length < 3) {
841
+ return pools;
842
+ }
843
+ var chainId = pools[0].chainId;
844
+ var token0 = smartOrderRouter.getSupportUnderlyingByTokenize(chainId, tokenIn); // assume tokenIn is tokenize
845
+ var token1 = smartOrderRouter.getSupportUnderlyingByTokenize(chainId, tokenOut); // assume tokenOut is tokenize
846
+ var isSupport0 = token0 !== undefined;
847
+ var isSupport1 = token1 !== undefined;
848
+ var underlyingIn = isSupport0 ? token0 : tokenIn;
849
+ var underlyingOut = isSupport1 ? token1 : tokenOut;
850
+ // Find reduce pool for
851
+ // - first pool is underlying and tokenize for tokenIn
852
+ // - last pool is underlying and previous tokenize for tokenOut
853
+ if (!isSupport0) {
854
+ var tokenizeIn = smartOrderRouter.getSupportTokenizeByUnderlying(chainId, underlyingIn);
855
+ if (tokenizeIn !== undefined) {
856
+ var reduceFirst = pools[0].token0.equals(underlyingIn) && pools[0].token1.equals(tokenizeIn) || pools[0].token0.equals(tokenizeIn) && pools[0].token1.equals(underlyingIn);
857
+ if (reduceFirst) {
858
+ pools.shift();
859
+ }
860
+ }
861
+ }
862
+ if (!isSupport1) {
863
+ var tokenizeOut = smartOrderRouter.getSupportTokenizeByUnderlying(chainId, underlyingOut);
864
+ if (tokenizeOut !== undefined) {
865
+ var lastIndex = pools.length - 1;
866
+ var reduceLast = pools[lastIndex].token0.equals(underlyingOut) && pools[lastIndex].token1.equals(tokenizeOut) || pools[lastIndex].token0.equals(tokenizeOut) && pools[lastIndex].token1.equals(underlyingOut);
867
+ if (reduceLast) {
868
+ pools.pop();
869
+ }
870
+ }
871
+ }
872
+ return pools;
873
+ }
874
+ function buildV4Planner(trade, tradeType, options, payerIsUser, routerMustCustody) {
839
875
  var _options$recipient;
876
+ var chainId = trade.route.chainId;
877
+ var currencyIn = trade.route.pathInput;
878
+ var currencyOut = trade.route.pathOutput;
879
+ var slippageToleranceOnSwap = routerMustCustody && tradeType == sdkCore.TradeType.EXACT_INPUT ? undefined : options.slippageTolerance;
880
+ // Make tokens path from pools
881
+ var path = [];
882
+ var nextToken = currencyIn;
883
+ trade.route.pools.forEach(function (pool) {
884
+ if (nextToken.equals(pool.token0)) {
885
+ path.push(pool.token0);
886
+ nextToken = pool.token1;
887
+ } else {
888
+ path.push(pool.token1);
889
+ nextToken = pool.token0;
890
+ }
891
+ });
892
+ var v4Planner = new v4Sdk.V4Planner();
893
+ // Add trade swap type with encode pathKeys
894
+ v4Planner.addTrade(trade, slippageToleranceOnSwap);
895
+ // Pay currency in
896
+ v4Planner.addSettle(currencyIn, payerIsUser);
897
+ var token0 = smartOrderRouter.getSupportUnderlyingByTokenize(chainId, currencyIn);
898
+ var isSupport0 = token0 !== undefined;
899
+ // Build action planner for path
900
+ for (var i = 1; i < path.length; i++) {
901
+ var token1 = smartOrderRouter.getSupportUnderlyingByTokenize(chainId, path[i]);
902
+ var isSupport1 = token1 !== undefined;
903
+ if (isSupport0 && path[i].equals(token0)) {
904
+ v4Planner.addTake(path[i - 1], ROUTER_AS_RECIPIENT);
905
+ v4Planner.addSettle(token0, false);
906
+ } else if (isSupport1 && path[i - 1].equals(token1)) {
907
+ v4Planner.addTake(token1, ROUTER_AS_RECIPIENT);
908
+ v4Planner.addSettle(path[i], false);
909
+ }
910
+ isSupport0 = isSupport1;
911
+ token0 = token1;
912
+ }
913
+ // Take currency out
914
+ v4Planner.addTake(currencyOut, routerMustCustody ? ROUTER_AS_RECIPIENT : (_options$recipient = options.recipient) != null ? _options$recipient : SENDER_AS_RECIPIENT);
915
+ return v4Planner;
916
+ }
917
+ function addV4Swap(planner, _ref3, tradeType, options, payerIsUser, routerMustCustody) {
840
918
  var inputAmount = _ref3.inputAmount,
841
919
  outputAmount = _ref3.outputAmount,
842
920
  route = _ref3.route;
@@ -844,6 +922,8 @@ function addV4Swap(planner, _ref3, tradeType, options, payerIsUser, routerMustCu
844
922
  var pools = route.pools.map(function (p) {
845
923
  return p;
846
924
  });
925
+ // reduce pools for tokenize
926
+ pools = getReducePools(pools, inputAmount.currency, outputAmount.currency);
847
927
  var v4Route = new v4Sdk.Route(pools, inputAmount.currency, outputAmount.currency);
848
928
  var trade = v4Sdk.Trade.createUncheckedTrade({
849
929
  route: v4Route,
@@ -851,11 +931,8 @@ function addV4Swap(planner, _ref3, tradeType, options, payerIsUser, routerMustCu
851
931
  outputAmount: outputAmount,
852
932
  tradeType: tradeType
853
933
  });
854
- var slippageToleranceOnSwap = routerMustCustody && tradeType == sdkCore.TradeType.EXACT_INPUT ? undefined : options.slippageTolerance;
855
- var v4Planner = new v4Sdk.V4Planner();
856
- v4Planner.addTrade(trade, slippageToleranceOnSwap);
857
- v4Planner.addSettle(trade.route.pathInput, payerIsUser);
858
- v4Planner.addTake(trade.route.pathOutput, routerMustCustody ? ROUTER_AS_RECIPIENT : (_options$recipient = options.recipient) != null ? _options$recipient : SENDER_AS_RECIPIENT);
934
+ // build planner
935
+ var v4Planner = buildV4Planner(trade, tradeType, options, payerIsUser, routerMustCustody);
859
936
  planner.addCommand(exports.CommandType.V4_SWAP, [v4Planner.finalize()]);
860
937
  }
861
938
  // encode a mixed route swap, i.e. including both v2 and v3 pools