@uniswap/universal-router-sdk 4.5.1 → 4.6.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/swapRouter.d.ts +1 -1
- package/dist/test/utils/addresses.d.ts +2 -5
- package/dist/universal-router-sdk.cjs.development.js +41 -8
- 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 +42 -9
- package/dist/universal-router-sdk.esm.js.map +1 -1
- package/dist/utils/routerCommands.d.ts +2 -1
- package/package.json +3 -3
package/dist/swapRouter.d.ts
CHANGED
|
@@ -26,7 +26,7 @@ export declare abstract class SwapRouter {
|
|
|
26
26
|
* - input pool and output pool must have the same tokens
|
|
27
27
|
* - V3 NFT must be approved, or valid inputV3NFTPermit must be provided with UR as spender
|
|
28
28
|
*/
|
|
29
|
-
static migrateV3ToV4CallParameters(options: MigrateV3ToV4Options): MethodParameters;
|
|
29
|
+
static migrateV3ToV4CallParameters(options: MigrateV3ToV4Options, positionManagerOverride?: string): MethodParameters;
|
|
30
30
|
/**
|
|
31
31
|
* Encodes a planned route into a method name and parameters for the Router contract.
|
|
32
32
|
* @param planner the planned route
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
export declare const
|
|
2
|
-
export declare const FORGE_ROUTER_ADDRESS = "0xe808c1cfeebb6cb36b537b82fa7c9eef31415a05";
|
|
3
|
-
export declare const FORGE_PERMIT2_ADDRESS = "0x4a873bdd49f7f9cc0a5458416a12973fab208f8d";
|
|
1
|
+
export declare const FORGE_V4_POSITION_MANAGER = "0x2e234DAe75C793f67A35089C9d99245E1C58470b";
|
|
4
2
|
export declare const FORGE_SENDER_ADDRESS = "0xcf03dd0a894ef79cb5b601a43c4b25e3ae4c67ed";
|
|
5
3
|
export declare const TEST_RECIPIENT_ADDRESS = "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
|
|
6
4
|
export declare const TEST_FEE_RECIPIENT_ADDRESS = "0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb";
|
|
7
|
-
export declare const PERMIT2_ADDRESS
|
|
8
|
-
export declare const ROUTER_ADDRESS: string;
|
|
5
|
+
export declare const PERMIT2_ADDRESS = "0x000000000022D473030F116dDEE9F6B43aC78BA3";
|
|
@@ -99,7 +99,8 @@ var _COMMAND_DEFINITION;
|
|
|
99
99
|
CommandType[CommandType["V4_SWAP"] = 16] = "V4_SWAP";
|
|
100
100
|
CommandType[CommandType["V3_POSITION_MANAGER_PERMIT"] = 17] = "V3_POSITION_MANAGER_PERMIT";
|
|
101
101
|
CommandType[CommandType["V3_POSITION_MANAGER_CALL"] = 18] = "V3_POSITION_MANAGER_CALL";
|
|
102
|
-
CommandType[CommandType["
|
|
102
|
+
CommandType[CommandType["V4_INITIALIZE_POOL"] = 19] = "V4_INITIALIZE_POOL";
|
|
103
|
+
CommandType[CommandType["V4_POSITION_MANAGER_CALL"] = 20] = "V4_POSITION_MANAGER_CALL";
|
|
103
104
|
CommandType[CommandType["EXECUTE_SUB_PLAN"] = 33] = "EXECUTE_SUB_PLAN";
|
|
104
105
|
})(exports.CommandType || (exports.CommandType = {}));
|
|
105
106
|
(function (Subparser) {
|
|
@@ -115,6 +116,7 @@ var ALLOW_REVERT_FLAG = 0x80;
|
|
|
115
116
|
var REVERTIBLE_COMMANDS = /*#__PURE__*/new Set([exports.CommandType.EXECUTE_SUB_PLAN]);
|
|
116
117
|
var PERMIT_STRUCT = '((address token,uint160 amount,uint48 expiration,uint48 nonce) details,address spender,uint256 sigDeadline)';
|
|
117
118
|
var PERMIT_BATCH_STRUCT = '((address token,uint160 amount,uint48 expiration,uint48 nonce)[] details,address spender,uint256 sigDeadline)';
|
|
119
|
+
var POOL_KEY_STRUCT = '(address currency0,address currency1,uint24 fee,int24 tickSpacing,address hooks)';
|
|
118
120
|
var PERMIT2_TRANSFER_FROM_STRUCT = '(address from,address to,uint160 amount,address token)';
|
|
119
121
|
var PERMIT2_TRANSFER_FROM_BATCH_STRUCT = PERMIT2_TRANSFER_FROM_STRUCT + '[]';
|
|
120
122
|
var COMMAND_DEFINITION = (_COMMAND_DEFINITION = {}, _COMMAND_DEFINITION[exports.CommandType.EXECUTE_SUB_PLAN] = {
|
|
@@ -304,11 +306,20 @@ var COMMAND_DEFINITION = (_COMMAND_DEFINITION = {}, _COMMAND_DEFINITION[exports.
|
|
|
304
306
|
name: 'minBalance',
|
|
305
307
|
type: 'uint256'
|
|
306
308
|
}]
|
|
309
|
+
}, _COMMAND_DEFINITION[exports.CommandType.V4_INITIALIZE_POOL] = {
|
|
310
|
+
parser: exports.Parser.Abi,
|
|
311
|
+
params: [{
|
|
312
|
+
name: 'poolKey',
|
|
313
|
+
type: POOL_KEY_STRUCT
|
|
314
|
+
}, {
|
|
315
|
+
name: 'sqrtPriceX96',
|
|
316
|
+
type: 'uint160'
|
|
317
|
+
}]
|
|
307
318
|
}, _COMMAND_DEFINITION[exports.CommandType.V3_POSITION_MANAGER_PERMIT] = {
|
|
308
319
|
parser: exports.Parser.V3Actions
|
|
309
320
|
}, _COMMAND_DEFINITION[exports.CommandType.V3_POSITION_MANAGER_CALL] = {
|
|
310
321
|
parser: exports.Parser.V3Actions
|
|
311
|
-
}, _COMMAND_DEFINITION[exports.CommandType.
|
|
322
|
+
}, _COMMAND_DEFINITION[exports.CommandType.V4_POSITION_MANAGER_CALL] = {
|
|
312
323
|
parser: exports.Parser.V4Actions
|
|
313
324
|
}, _COMMAND_DEFINITION);
|
|
314
325
|
var RoutePlanner = /*#__PURE__*/function () {
|
|
@@ -936,31 +947,53 @@ var SwapRouter = /*#__PURE__*/function () {
|
|
|
936
947
|
* - input pool and output pool must have the same tokens
|
|
937
948
|
* - V3 NFT must be approved, or valid inputV3NFTPermit must be provided with UR as spender
|
|
938
949
|
*/;
|
|
939
|
-
SwapRouter.migrateV3ToV4CallParameters = function migrateV3ToV4CallParameters(options) {
|
|
950
|
+
SwapRouter.migrateV3ToV4CallParameters = function migrateV3ToV4CallParameters(options, positionManagerOverride) {
|
|
951
|
+
var v4Pool = options.outputPosition.pool;
|
|
940
952
|
var token0 = options.inputPosition.pool.token0;
|
|
941
953
|
var token1 = options.inputPosition.pool.token1;
|
|
942
|
-
var v4PositionManagerAddress = sdkCore.CHAIN_TO_ADDRESSES_MAP[
|
|
943
|
-
|
|
944
|
-
!(
|
|
954
|
+
var v4PositionManagerAddress = positionManagerOverride != null ? positionManagerOverride : sdkCore.CHAIN_TO_ADDRESSES_MAP[v4Pool.chainId].v4PositionManagerAddress;
|
|
955
|
+
// validate the parameters
|
|
956
|
+
!(token0 === v4Pool.token0) ? invariant(false, 'TOKEN0_MISMATCH') : void 0;
|
|
957
|
+
!(token1 === v4Pool.token1) ? invariant(false, 'TOKEN1_MISMATCH') : void 0;
|
|
945
958
|
!options.v3RemoveLiquidityOptions.liquidityPercentage.equalTo(new sdkCore.Percent(100, 100)) ? invariant(false, 'FULL_REMOVAL_REQUIRED') : void 0;
|
|
946
959
|
!(options.v3RemoveLiquidityOptions.burnToken == true) ? invariant(false, 'BURN_TOKEN_REQUIRED') : void 0;
|
|
947
960
|
!(options.v3RemoveLiquidityOptions.collectOptions.recipient === v4PositionManagerAddress) ? invariant(false, 'RECIPIENT_NOT_POSITION_MANAGER') : void 0;
|
|
948
961
|
!isMint(options.v4AddLiquidityOptions) ? invariant(false, 'MINT_REQUIRED') : void 0;
|
|
949
962
|
!options.v4AddLiquidityOptions.migrate ? invariant(false, 'MIGRATE_REQUIRED') : void 0;
|
|
950
963
|
var planner = new RoutePlanner();
|
|
964
|
+
// to prevent reentrancy by the pool hook, we initialize the v4 pool before moving funds
|
|
965
|
+
if (options.v4AddLiquidityOptions.createPool) {
|
|
966
|
+
var poolKey = v4Sdk.Pool.getPoolKey(v4Pool.currency0, v4Pool.currency1, v4Pool.fee, v4Pool.tickSpacing, v4Pool.hooks);
|
|
967
|
+
planner.addCommand(exports.CommandType.V4_INITIALIZE_POOL, [poolKey, v4Pool.sqrtRatioX96.toString()]);
|
|
968
|
+
// remove createPool setting, so that it doesnt get encoded again later
|
|
969
|
+
delete options.v4AddLiquidityOptions.createPool;
|
|
970
|
+
}
|
|
971
|
+
// add position permit to the universal router planner
|
|
951
972
|
if (options.v3RemoveLiquidityOptions.permit) {
|
|
952
973
|
// permit spender should be UR
|
|
953
974
|
var universalRouterAddress = UNIVERSAL_ROUTER_ADDRESS(exports.UniversalRouterVersion.V2_0, options.inputPosition.pool.chainId);
|
|
954
975
|
!(universalRouterAddress == options.v3RemoveLiquidityOptions.permit.spender) ? invariant(false, 'INVALID_SPENDER') : void 0;
|
|
955
976
|
// don't need to transfer it because v3posm uses isApprovedOrOwner()
|
|
956
977
|
encodeV3PositionPermit(planner, options.v3RemoveLiquidityOptions.permit, options.v3RemoveLiquidityOptions.tokenId);
|
|
978
|
+
// remove permit so that multicall doesnt add it again
|
|
979
|
+
delete options.v3RemoveLiquidityOptions.permit;
|
|
957
980
|
}
|
|
958
981
|
// encode v3 withdraw
|
|
959
982
|
var v3RemoveParams = v3Sdk.NonfungiblePositionManager.removeCallParameters(options.inputPosition, options.v3RemoveLiquidityOptions);
|
|
960
|
-
|
|
983
|
+
var v3Calls = v3Sdk.Multicall.decodeMulticall(v3RemoveParams.calldata);
|
|
984
|
+
for (var _iterator = _createForOfIteratorHelperLoose(v3Calls), _step; !(_step = _iterator()).done;) {
|
|
985
|
+
var v3Call = _step.value;
|
|
986
|
+
// slice selector - 0x + 4 bytes = 10 characters
|
|
987
|
+
var _selector = v3Call.slice(0, 10);
|
|
988
|
+
!(_selector == v3Sdk.NonfungiblePositionManager.INTERFACE.getSighash('collect') || _selector == v3Sdk.NonfungiblePositionManager.INTERFACE.getSighash('decreaseLiquidity') || _selector == v3Sdk.NonfungiblePositionManager.INTERFACE.getSighash('burn')) ? invariant(false, 'INVALID_V3_CALL: ' + _selector) : void 0;
|
|
989
|
+
planner.addCommand(exports.CommandType.V3_POSITION_MANAGER_CALL, [v3Call]);
|
|
990
|
+
}
|
|
961
991
|
// encode v4 mint
|
|
962
992
|
var v4AddParams = v4Sdk.V4PositionManager.addCallParameters(options.outputPosition, options.v4AddLiquidityOptions);
|
|
963
|
-
|
|
993
|
+
// only modifyLiquidities can be called by the UniversalRouter
|
|
994
|
+
var selector = v4AddParams.calldata.slice(0, 10);
|
|
995
|
+
!(selector == v4Sdk.V4PositionManager.INTERFACE.getSighash('modifyLiquidities')) ? invariant(false, 'INVALID_V4_CALL: ' + selector) : void 0;
|
|
996
|
+
planner.addCommand(exports.CommandType.V4_POSITION_MANAGER_CALL, [v4AddParams.calldata]);
|
|
964
997
|
return SwapRouter.encodePlan(planner, ethers.BigNumber.from(0), {
|
|
965
998
|
deadline: ethers.BigNumber.from(options.v4AddLiquidityOptions.deadline)
|
|
966
999
|
});
|