Files
v4-core/test/utils/AmountHelpers.sol

31 lines
1.3 KiB
Solidity

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.20;
import {LiquidityAmounts} from "./LiquidityAmounts.sol";
import {IPoolManager} from "../../src/interfaces/IPoolManager.sol";
import {ModifyLiquidityParams} from "../../src/types/PoolOperation.sol";
import {PoolId} from "../../src/types/PoolId.sol";
import {TickMath} from "../../src/libraries/TickMath.sol";
import {PoolKey} from "../../src/types/PoolKey.sol";
import {StateLibrary} from "../../src/libraries/StateLibrary.sol";
/// @title Calculate token<>liquidity
/// @notice Helps calculate amounts for bounding fuzz tests
library AmountHelpers {
function getMaxAmountInForPool(IPoolManager manager, ModifyLiquidityParams memory params, PoolKey memory key)
public
view
returns (uint256 amount0, uint256 amount1)
{
PoolId id = key.toId();
uint128 liquidity = StateLibrary.getLiquidity(manager, id);
(uint160 sqrtPriceX96,,,) = StateLibrary.getSlot0(manager, id);
uint160 sqrtPriceX96Lower = TickMath.getSqrtPriceAtTick(params.tickLower);
uint160 sqrtPriceX96Upper = TickMath.getSqrtPriceAtTick(params.tickUpper);
amount0 = LiquidityAmounts.getAmount0ForLiquidity(sqrtPriceX96Lower, sqrtPriceX96, liquidity);
amount1 = LiquidityAmounts.getAmount1ForLiquidity(sqrtPriceX96Upper, sqrtPriceX96, liquidity);
}
}