This commit is contained in:
Tim Olson
2023-08-19 18:13:43 -04:00
commit e76bc70297
8 changed files with 167 additions and 0 deletions

71
test/TestSinglePool.sol Normal file
View File

@@ -0,0 +1,71 @@
// SPDX-License-Identifier: UNLICENSED
pragma solidity =0.7.6;
import "forge-std/console2.sol";
import "../src/MockERC20.sol";
import "uniswap/v3-core/contracts/interfaces/IUniswapV3Factory.sol";
import "uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol";
import "uniswap/v3-core/contracts/libraries/TickMath.sol";
import "uniswap/v3-periphery/contracts/interfaces/INonfungiblePositionManager.sol";
import "uniswap/v3-periphery/contracts/interfaces/ISwapRouter.sol";
import "uniswap/v3-periphery/contracts/libraries/LiquidityAmounts.sol";
contract TestSinglePool {
IUniswapV3Factory public factory = IUniswapV3Factory(0x1F98431c8aD98523631AE4a59f267346ea31F984);
INonfungiblePositionManager public nfpm = INonfungiblePositionManager(0xC36442b4a4522E871399CD717aBDD847Ab11FE88);
ISwapRouter public swapper = ISwapRouter(0xE592427A0AEce92De3Edee1F18E0157C05861564);
IUniswapV3Pool public immutable pool;
uint24 public fee;
MockERC20 public WETH;
MockERC20 public USDC;
MockERC20 public token0; // either WETH or USDC depending on the order in the pool
MockERC20 public token1;
function setUp() public {
MockERC20 weth = MockERC20('Mock Wrapped Ethereum', 'WETH', 18);
MockERC20 usdc = MockERC20('Mock USD Coin', 'USDC', 6);
uint24 fee_ = 500;
fee = fee_;
WETH = weth;
USDC = usdc;
IUniswapV3Pool pool_ = UniswapV3Pool(factory.createPool(address(weth), address(usdc), fee_));
pool = pool_;
token0 = pool_.token0();
token1 = pool_.token1();
}
// struct MintParams {
// address token0;
// address token1;
// uint24 fee;
// int24 tickLower;
// int24 tickUpper;
// uint256 amount0Desired;
// uint256 amount1Desired;
// uint256 amount0Min;
// uint256 amount1Min;
// address recipient;
// uint256 deadline;
// }
function stake(uint160 liquidity, uint24 lower, uint24 upper) public {
uint160 sqrtRatioAX96 = TickMath.getSqrtRatioAtTick(lower);
uint160 sqrtRatioBX96 = TickMath.getSqrtRatioAtTick(upper);
(uint160 sqrtPriceX96, , , , , , ) = pool.slot0();
(uint256 amount0, uint256 amount1) = LiquidityAmounts.getAmountsForLiquidity(liquidity, sqrtPriceX96, sqrtRatioAX96, sqrtRatioBX96);
token0.mint(amount0);
token1.mint(amount1);
INonfungiblePositionManager.MintParams memory params = INonfungiblePositionManager.MintParams(
address(token0), address(token1), fee, lower, upper, amount0, amount1, 0, 0, msg.sender, block.timestamp
);
nfpm.mint(params);
}
function swap() public {
}
}