@uniswap/universal-router-sdk 4.5.2 → 4.6.1

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.
@@ -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["V4_POSITION_CALL"] = 19] = "V4_POSITION_CALL";
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.V4_POSITION_CALL] = {
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 () {
@@ -421,8 +432,8 @@ var CHAIN_CONFIGS = (_CHAIN_CONFIGS = {}, _CHAIN_CONFIGS[1] = {
421
432
  address: '0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD',
422
433
  creationBlock: 3543575
423
434
  }, _routerConfigs3[exports.UniversalRouterVersion.V2_0] = {
424
- address: '0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f',
425
- creationBlock: 6789351
435
+ address: '0x4D73A4411CA1c660035e4AECC8270E5DdDEC8C17',
436
+ creationBlock: 6898582
426
437
  }, _routerConfigs3)
427
438
  }, _CHAIN_CONFIGS[137] = {
428
439
  weth: '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270',
@@ -937,18 +948,26 @@ var SwapRouter = /*#__PURE__*/function () {
937
948
  * - V3 NFT must be approved, or valid inputV3NFTPermit must be provided with UR as spender
938
949
  */;
939
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 = positionManagerOverride != null ? positionManagerOverride : sdkCore.CHAIN_TO_ADDRESSES_MAP[options.outputPosition.pool.chainId].v4PositionManagerAddress;
954
+ var v4PositionManagerAddress = positionManagerOverride != null ? positionManagerOverride : sdkCore.CHAIN_TO_ADDRESSES_MAP[v4Pool.chainId].v4PositionManagerAddress;
943
955
  // validate the parameters
944
- !(token0 === options.outputPosition.pool.token0) ? invariant(false, 'TOKEN0_MISMATCH') : void 0;
945
- !(token1 === options.outputPosition.pool.token1) ? invariant(false, 'TOKEN1_MISMATCH') : void 0;
956
+ !(token0 === v4Pool.token0) ? invariant(false, 'TOKEN0_MISMATCH') : void 0;
957
+ !(token1 === v4Pool.token1) ? invariant(false, 'TOKEN1_MISMATCH') : void 0;
946
958
  !options.v3RemoveLiquidityOptions.liquidityPercentage.equalTo(new sdkCore.Percent(100, 100)) ? invariant(false, 'FULL_REMOVAL_REQUIRED') : void 0;
947
959
  !(options.v3RemoveLiquidityOptions.burnToken == true) ? invariant(false, 'BURN_TOKEN_REQUIRED') : void 0;
948
960
  !(options.v3RemoveLiquidityOptions.collectOptions.recipient === v4PositionManagerAddress) ? invariant(false, 'RECIPIENT_NOT_POSITION_MANAGER') : void 0;
949
961
  !isMint(options.v4AddLiquidityOptions) ? invariant(false, 'MINT_REQUIRED') : void 0;
950
962
  !options.v4AddLiquidityOptions.migrate ? invariant(false, 'MIGRATE_REQUIRED') : void 0;
951
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
+ }
952
971
  // add position permit to the universal router planner
953
972
  if (options.v3RemoveLiquidityOptions.permit) {
954
973
  // permit spender should be UR
@@ -965,13 +984,16 @@ var SwapRouter = /*#__PURE__*/function () {
965
984
  for (var _iterator = _createForOfIteratorHelperLoose(v3Calls), _step; !(_step = _iterator()).done;) {
966
985
  var v3Call = _step.value;
967
986
  // slice selector - 0x + 4 bytes = 10 characters
968
- var selector = v3Call.slice(0, 10);
969
- !(selector == v3Sdk.NonfungiblePositionManager.INTERFACE.getSighash('collect') || selector == v3Sdk.NonfungiblePositionManager.INTERFACE.getSighash('decreaseLiquidity') || selector == v3Sdk.NonfungiblePositionManager.INTERFACE.getSighash('burn')) ? invariant(false, 'INVALID_CALL: ' + selector) : void 0;
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;
970
989
  planner.addCommand(exports.CommandType.V3_POSITION_MANAGER_CALL, [v3Call]);
971
990
  }
972
991
  // encode v4 mint
973
992
  var v4AddParams = v4Sdk.V4PositionManager.addCallParameters(options.outputPosition, options.v4AddLiquidityOptions);
974
- planner.addCommand(exports.CommandType.V4_POSITION_CALL, [v4AddParams.calldata]);
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]);
975
997
  return SwapRouter.encodePlan(planner, ethers.BigNumber.from(0), {
976
998
  deadline: ethers.BigNumber.from(options.v4AddLiquidityOptions.deadline)
977
999
  });