// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.24; import "forge-std/Test.sol"; interface IUniswapV3Factory { function createPool(address tokenA, address tokenB, uint24 fee) external returns (address pool); function enableFeeAmount(uint24 fee, int24 tickSpacing) external; } interface IUniswapV3Pool { function initialize(uint160 sqrtPriceX96) external; function mint(address recipient, int24 tickLower, int24 tickUpper, uint128 amount, bytes calldata data) external returns (uint256 amount0, uint256 amount1); function burn(int24 tickLower, int24 tickUpper, uint128 amount) external returns (uint256 amount0, uint256 amount1); function swap( address recipient, bool zeroForOne, int256 amountSpecified, uint160 sqrtPriceLimitX96, bytes calldata data ) external returns (int256 amount0, int256 amount1); } interface IUniswapV3MintCallback { function uniswapV3MintCallback(uint256 amount0Owed, uint256 amount1Owed, bytes calldata data) external; } interface IUniswapV3SwapCallback { function uniswapV3SwapCallback(int256 amount0Delta, int256 amount1Delta, bytes calldata data) external; } abstract contract V3Helper is Test { IUniswapV3Factory v3Factory; function setUp() public virtual { address deployedAddr; bytes memory bytecode = vm.readFileBinary("test/bin/v3Factory.bytecode"); assembly { deployedAddr := create(0, add(bytecode, 0x20), mload(bytecode)) } v3Factory = IUniswapV3Factory(deployedAddr); } }