@uniswap/universal-router-sdk 3.4.0 → 4.1.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.
- package/dist/index.d.ts +1 -1
- package/dist/swapRouter.d.ts +17 -1
- package/dist/test/utils/addresses.d.ts +1 -1
- package/dist/universal-router-sdk.cjs.development.js +49 -5
- package/dist/universal-router-sdk.cjs.development.js.map +1 -1
- package/dist/universal-router-sdk.cjs.production.min.js +1 -1
- package/dist/universal-router-sdk.cjs.production.min.js.map +1 -1
- package/dist/universal-router-sdk.esm.js +50 -5
- package/dist/universal-router-sdk.esm.js.map +1 -1
- package/dist/utils/constants.d.ts +0 -1
- package/dist/utils/inputTokens.d.ts +3 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -2,5 +2,5 @@ export { SwapRouter } from './swapRouter';
|
|
|
2
2
|
export * from './entities';
|
|
3
3
|
export * from './utils/routerTradeAdapter';
|
|
4
4
|
export { RoutePlanner, CommandType } from './utils/routerCommands';
|
|
5
|
-
export { UNIVERSAL_ROUTER_CREATION_BLOCK, UNIVERSAL_ROUTER_ADDRESS,
|
|
5
|
+
export { UNIVERSAL_ROUTER_CREATION_BLOCK, UNIVERSAL_ROUTER_ADDRESS, ROUTER_AS_RECIPIENT, WETH_ADDRESS, UniversalRouterVersion, } from './utils/constants';
|
|
6
6
|
export { CommandParser, UniversalRouterCommand, UniversalRouterCall, Param } from './utils/commandParser';
|
package/dist/swapRouter.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Interface } from '@ethersproject/abi';
|
|
2
2
|
import { BigNumberish } from 'ethers';
|
|
3
|
-
import { MethodParameters } from '@uniswap/v3-sdk';
|
|
3
|
+
import { MethodParameters, Position as V3Position, RemoveLiquidityOptions as V3RemoveLiquidityOptions } from '@uniswap/v3-sdk';
|
|
4
|
+
import { Position as V4Position, AddLiquidityOptions as V4AddLiquidityOptions } from '@uniswap/v4-sdk';
|
|
4
5
|
import { Trade as RouterTrade } from '@uniswap/router-sdk';
|
|
5
6
|
import { Currency, TradeType } from '@uniswap/sdk-core';
|
|
6
7
|
import { SwapOptions } from './entities/actions/uniswap';
|
|
@@ -8,9 +9,24 @@ export declare type SwapRouterConfig = {
|
|
|
8
9
|
sender?: string;
|
|
9
10
|
deadline?: BigNumberish;
|
|
10
11
|
};
|
|
12
|
+
export interface MigrateV3ToV4Options {
|
|
13
|
+
inputPosition: V3Position;
|
|
14
|
+
outputPosition: V4Position;
|
|
15
|
+
v3RemoveLiquidityOptions: V3RemoveLiquidityOptions;
|
|
16
|
+
v4AddLiquidityOptions: V4AddLiquidityOptions;
|
|
17
|
+
}
|
|
11
18
|
export declare abstract class SwapRouter {
|
|
12
19
|
static INTERFACE: Interface;
|
|
13
20
|
static swapCallParameters(trades: RouterTrade<Currency, Currency, TradeType>, options: SwapOptions): MethodParameters;
|
|
21
|
+
/**
|
|
22
|
+
* Builds the call parameters for a migration from a V3 position to a V4 position.
|
|
23
|
+
* Some requirements of the parameters:
|
|
24
|
+
* - v3RemoveLiquidityOptions.collectOptions.recipient must equal v4PositionManager
|
|
25
|
+
* - v3RemoveLiquidityOptions.liquidityPercentage must be 100%
|
|
26
|
+
* - input pool and output pool must have the same tokens
|
|
27
|
+
* - V3 NFT must be approved, or valid inputV3NFTPermit must be provided with UR as spender
|
|
28
|
+
*/
|
|
29
|
+
static migrateV3ToV4CallParameters(options: MigrateV3ToV4Options): MethodParameters;
|
|
14
30
|
/**
|
|
15
31
|
* Encodes a planned route into a method name and parameters for the Router contract.
|
|
16
32
|
* @param planner the planned route
|
|
@@ -4,5 +4,5 @@ export declare const FORGE_PERMIT2_ADDRESS = "0x4a873bdd49f7f9cc0a5458416a12973f
|
|
|
4
4
|
export declare const FORGE_SENDER_ADDRESS = "0xcf03dd0a894ef79cb5b601a43c4b25e3ae4c67ed";
|
|
5
5
|
export declare const TEST_RECIPIENT_ADDRESS = "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
|
|
6
6
|
export declare const TEST_FEE_RECIPIENT_ADDRESS = "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb";
|
|
7
|
-
export declare const PERMIT2_ADDRESS:
|
|
7
|
+
export declare const PERMIT2_ADDRESS: any;
|
|
8
8
|
export declare const ROUTER_ADDRESS: string;
|
|
@@ -8,12 +8,12 @@ var invariant = _interopDefault(require('tiny-invariant'));
|
|
|
8
8
|
var UniversalRouter_json = require('@uniswap/universal-router/artifacts/contracts/UniversalRouter.sol/UniversalRouter.json');
|
|
9
9
|
var abi = require('@ethersproject/abi');
|
|
10
10
|
var ethers = require('ethers');
|
|
11
|
-
var utils = require('ethers/lib/utils');
|
|
12
|
-
var v2Sdk = require('@uniswap/v2-sdk');
|
|
13
11
|
var v3Sdk = require('@uniswap/v3-sdk');
|
|
14
12
|
var v4Sdk = require('@uniswap/v4-sdk');
|
|
15
|
-
var routerSdk = require('@uniswap/router-sdk');
|
|
16
13
|
var sdkCore = require('@uniswap/sdk-core');
|
|
14
|
+
var utils = require('ethers/lib/utils');
|
|
15
|
+
var v2Sdk = require('@uniswap/v2-sdk');
|
|
16
|
+
var routerSdk = require('@uniswap/router-sdk');
|
|
17
17
|
require('jsbi');
|
|
18
18
|
require('bignumber.js');
|
|
19
19
|
|
|
@@ -515,7 +515,6 @@ var WETH_ADDRESS = function WETH_ADDRESS(chainId) {
|
|
|
515
515
|
if (CHAIN_CONFIGS[chainId].weth == WETH_NOT_SUPPORTED_ON_CHAIN) throw new Error("Chain " + chainId + " does not have WETH");
|
|
516
516
|
return CHAIN_CONFIGS[chainId].weth;
|
|
517
517
|
};
|
|
518
|
-
var PERMIT2_ADDRESS = '0x000000000022D473030F116dDEE9F6B43aC78BA3';
|
|
519
518
|
var CONTRACT_BALANCE = /*#__PURE__*/ethers.BigNumber.from(2).pow(255);
|
|
520
519
|
var ETH_ADDRESS = '0x0000000000000000000000000000000000000000';
|
|
521
520
|
var E_ETH_ADDRESS = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee';
|
|
@@ -784,6 +783,10 @@ function encodePermit(planner, permit2) {
|
|
|
784
783
|
}
|
|
785
784
|
planner.addCommand(exports.CommandType.PERMIT2_PERMIT, [permit2, signature]);
|
|
786
785
|
}
|
|
786
|
+
function encodeV3PositionPermit(planner, permit, tokenId) {
|
|
787
|
+
var calldata = v3Sdk.NonfungiblePositionManager.INTERFACE.encodeFunctionData('permit', [sdkCore.validateAndParseAddress(permit.spender), tokenId, permit.deadline, permit.v, permit.r, permit.s]);
|
|
788
|
+
planner.addCommand(exports.CommandType.V3_POSITION_MANAGER_PERMIT, [calldata]);
|
|
789
|
+
}
|
|
787
790
|
// Handles the encoding of commands needed to gather input tokens for a trade
|
|
788
791
|
// Approval: The router approving another address to take tokens.
|
|
789
792
|
// note: Only seaport and sudoswap support this action. Approvals are left open.
|
|
@@ -801,6 +804,11 @@ function encodeInputTokenOptions(planner, options) {
|
|
|
801
804
|
}
|
|
802
805
|
}
|
|
803
806
|
|
|
807
|
+
function isMint(options) {
|
|
808
|
+
return Object.keys(options).some(function (k) {
|
|
809
|
+
return k === 'recipient';
|
|
810
|
+
});
|
|
811
|
+
}
|
|
804
812
|
var SwapRouter = /*#__PURE__*/function () {
|
|
805
813
|
function SwapRouter() {}
|
|
806
814
|
SwapRouter.swapCallParameters = function swapCallParameters(trades, options) {
|
|
@@ -820,6 +828,43 @@ var SwapRouter = /*#__PURE__*/function () {
|
|
|
820
828
|
deadline: options.deadlineOrPreviousBlockhash ? ethers.BigNumber.from(options.deadlineOrPreviousBlockhash) : undefined
|
|
821
829
|
});
|
|
822
830
|
}
|
|
831
|
+
/**
|
|
832
|
+
* Builds the call parameters for a migration from a V3 position to a V4 position.
|
|
833
|
+
* Some requirements of the parameters:
|
|
834
|
+
* - v3RemoveLiquidityOptions.collectOptions.recipient must equal v4PositionManager
|
|
835
|
+
* - v3RemoveLiquidityOptions.liquidityPercentage must be 100%
|
|
836
|
+
* - input pool and output pool must have the same tokens
|
|
837
|
+
* - V3 NFT must be approved, or valid inputV3NFTPermit must be provided with UR as spender
|
|
838
|
+
*/;
|
|
839
|
+
SwapRouter.migrateV3ToV4CallParameters = function migrateV3ToV4CallParameters(options) {
|
|
840
|
+
var token0 = options.inputPosition.pool.token0;
|
|
841
|
+
var token1 = options.inputPosition.pool.token1;
|
|
842
|
+
var v4PositionManagerAddress = sdkCore.CHAIN_TO_ADDRESSES_MAP[options.outputPosition.pool.chainId].v4PositionManagerAddress;
|
|
843
|
+
!(token0 === options.outputPosition.pool.token0) ? invariant(false, 'TOKEN0_MISMATCH') : void 0;
|
|
844
|
+
!(token1 === options.outputPosition.pool.token1) ? invariant(false, 'TOKEN1_MISMATCH') : void 0;
|
|
845
|
+
!options.v3RemoveLiquidityOptions.liquidityPercentage.equalTo(new sdkCore.Percent(100, 100)) ? invariant(false, 'FULL_REMOVAL_REQUIRED') : void 0;
|
|
846
|
+
!(options.v3RemoveLiquidityOptions.burnToken == true) ? invariant(false, 'BURN_TOKEN_REQUIRED') : void 0;
|
|
847
|
+
!(options.v3RemoveLiquidityOptions.collectOptions.recipient === v4PositionManagerAddress) ? invariant(false, 'RECIPIENT_NOT_POSITION_MANAGER') : void 0;
|
|
848
|
+
!isMint(options.v4AddLiquidityOptions) ? invariant(false, 'MINT_REQUIRED') : void 0;
|
|
849
|
+
!options.v4AddLiquidityOptions.migrate ? invariant(false, 'MIGRATE_REQUIRED') : void 0;
|
|
850
|
+
var planner = new RoutePlanner();
|
|
851
|
+
if (options.v3RemoveLiquidityOptions.permit) {
|
|
852
|
+
// permit spender should be UR
|
|
853
|
+
var universalRouterAddress = UNIVERSAL_ROUTER_ADDRESS(exports.UniversalRouterVersion.V2_0, options.inputPosition.pool.chainId);
|
|
854
|
+
!(universalRouterAddress == options.v3RemoveLiquidityOptions.permit.spender) ? invariant(false, 'INVALID_SPENDER') : void 0;
|
|
855
|
+
// don't need to transfer it because v3posm uses isApprovedOrOwner()
|
|
856
|
+
encodeV3PositionPermit(planner, options.v3RemoveLiquidityOptions.permit, options.v3RemoveLiquidityOptions.tokenId);
|
|
857
|
+
}
|
|
858
|
+
// encode v3 withdraw
|
|
859
|
+
var v3RemoveParams = v3Sdk.NonfungiblePositionManager.removeCallParameters(options.inputPosition, options.v3RemoveLiquidityOptions);
|
|
860
|
+
planner.addCommand(exports.CommandType.V3_POSITION_MANAGER_CALL, [v3RemoveParams.calldata]);
|
|
861
|
+
// encode v4 mint
|
|
862
|
+
var v4AddParams = v4Sdk.V4PositionManager.addCallParameters(options.outputPosition, options.v4AddLiquidityOptions);
|
|
863
|
+
planner.addCommand(exports.CommandType.V4_POSITION_CALL, [v4AddParams.calldata]);
|
|
864
|
+
return SwapRouter.encodePlan(planner, ethers.BigNumber.from(0), {
|
|
865
|
+
deadline: ethers.BigNumber.from(options.v4AddLiquidityOptions.deadline)
|
|
866
|
+
});
|
|
867
|
+
}
|
|
823
868
|
/**
|
|
824
869
|
* Encodes a planned route into a method name and parameters for the Router contract.
|
|
825
870
|
* @param planner the planned route
|
|
@@ -1085,7 +1130,6 @@ function parseV3PathExactOut(path) {
|
|
|
1085
1130
|
}
|
|
1086
1131
|
|
|
1087
1132
|
exports.CommandParser = CommandParser;
|
|
1088
|
-
exports.PERMIT2_ADDRESS = PERMIT2_ADDRESS;
|
|
1089
1133
|
exports.ROUTER_AS_RECIPIENT = ROUTER_AS_RECIPIENT;
|
|
1090
1134
|
exports.RoutePlanner = RoutePlanner;
|
|
1091
1135
|
exports.RouterTradeAdapter = RouterTradeAdapter;
|