Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fuzz run correction #362

Open
wants to merge 9 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ ffi = true
fs_permissions = [{ access = "read-write", path = ".forge-snapshots/" }, { access = "read", path = "foundry-out/" }]
evm_version = "cancun"
gas_limit = "3000000000"
fuzz_runs = 10_000
fuzz.runs = 500
bytecode_hash = "none"

additional_compiler_profiles = [
Expand All @@ -28,7 +28,7 @@ optimizer_runs = 200
fuzz.runs = 100

[profile.ci]
fuzz_runs = 100_000
fuzz.runs = 5_000

[profile.gas]
gas_limit=30_000_000
Expand Down
91 changes: 75 additions & 16 deletions test/position-managers/NativeToken.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ import {PosmTestSetup} from "../shared/PosmTestSetup.sol";
import {Planner, Plan} from "../shared/Planner.sol";
import {PositionConfig} from "../shared/PositionConfig.sol";

contract PositionManagerTest is Test, PosmTestSetup, LiquidityFuzzers {
contract NativeTokenPositionManagerTest is Test, PosmTestSetup, LiquidityFuzzers {
using FixedPointMathLib for uint256;
using StateLibrary for IPoolManager;
using SafeCast for *;
Expand Down Expand Up @@ -62,8 +62,12 @@ contract PositionManagerTest is Test, PosmTestSetup, LiquidityFuzzers {
}

function test_fuzz_mint_native(IPoolManager.ModifyLiquidityParams memory params) public {
// two-sided liquidity
params.tickLower =
int24(bound(params.tickLower, TickMath.minUsableTick(nativeKey.tickSpacing), -nativeKey.tickSpacing));
params.tickUpper =
int24(bound(params.tickUpper, nativeKey.tickSpacing, TickMath.maxUsableTick(nativeKey.tickSpacing)));
params = createFuzzyLiquidityParams(nativeKey, params, SQRT_PRICE_1_1);
vm.assume(params.tickLower < 0 && 0 < params.tickUpper); // two-sided liquidity

uint256 liquidityToAdd =
params.liquidityDelta < 0 ? uint256(-params.liquidityDelta) : uint256(params.liquidityDelta);
Expand Down Expand Up @@ -95,8 +99,12 @@ contract PositionManagerTest is Test, PosmTestSetup, LiquidityFuzzers {

// minting with excess native tokens are returned to caller
function test_fuzz_mint_native_excess_withClose(IPoolManager.ModifyLiquidityParams memory params) public {
// two-sided liquidity
params.tickLower =
int24(bound(params.tickLower, TickMath.minUsableTick(nativeKey.tickSpacing), -nativeKey.tickSpacing));
params.tickUpper =
int24(bound(params.tickUpper, nativeKey.tickSpacing, TickMath.maxUsableTick(nativeKey.tickSpacing)));
params = createFuzzyLiquidityParams(nativeKey, params, SQRT_PRICE_1_1);
vm.assume(params.tickLower < 0 && 0 < params.tickUpper); // two-sided liquidity

uint256 liquidityToAdd =
params.liquidityDelta < 0 ? uint256(-params.liquidityDelta) : uint256(params.liquidityDelta);
Expand Down Expand Up @@ -150,8 +158,12 @@ contract PositionManagerTest is Test, PosmTestSetup, LiquidityFuzzers {
}

function test_fuzz_mint_native_excess_withSettlePair(IPoolManager.ModifyLiquidityParams memory params) public {
// two-sided liquidity
params.tickLower =
int24(bound(params.tickLower, TickMath.minUsableTick(nativeKey.tickSpacing), -nativeKey.tickSpacing));
params.tickUpper =
int24(bound(params.tickUpper, nativeKey.tickSpacing, TickMath.maxUsableTick(nativeKey.tickSpacing)));
params = createFuzzyLiquidityParams(nativeKey, params, SQRT_PRICE_1_1);
vm.assume(params.tickLower < 0 && 0 < params.tickUpper); // two-sided liquidity

uint256 liquidityToAdd =
params.liquidityDelta < 0 ? uint256(-params.liquidityDelta) : uint256(params.liquidityDelta);
Expand Down Expand Up @@ -207,8 +219,12 @@ contract PositionManagerTest is Test, PosmTestSetup, LiquidityFuzzers {
uint256 balance0Start = address(this).balance;
uint256 balance1Start = currency1.balanceOfSelf();

// two-sided liquidity
params.tickLower =
int24(bound(params.tickLower, TickMath.minUsableTick(nativeKey.tickSpacing), -nativeKey.tickSpacing));
params.tickUpper =
int24(bound(params.tickUpper, nativeKey.tickSpacing, TickMath.maxUsableTick(nativeKey.tickSpacing)));
params = createFuzzyLiquidityParams(nativeKey, params, SQRT_PRICE_1_1);
vm.assume(params.tickLower < 0 && 0 < params.tickUpper); // two-sided liquidity

uint256 liquidityToAdd =
params.liquidityDelta < 0 ? uint256(-params.liquidityDelta) : uint256(params.liquidityDelta);
Expand Down Expand Up @@ -260,8 +276,11 @@ contract PositionManagerTest is Test, PosmTestSetup, LiquidityFuzzers {
uint256 balance0Start = address(this).balance;
uint256 balance1Start = currency1.balanceOfSelf();

params.tickLower =
int24(bound(params.tickLower, TickMath.minUsableTick(nativeKey.tickSpacing), -nativeKey.tickSpacing));
params.tickUpper =
int24(bound(params.tickUpper, nativeKey.tickSpacing, TickMath.maxUsableTick(nativeKey.tickSpacing)));
params = createFuzzyLiquidityParams(nativeKey, params, SQRT_PRICE_1_1);
vm.assume(params.tickLower < 0 && 0 < params.tickUpper); // two-sided liquidity

uint256 liquidityToAdd =
params.liquidityDelta < 0 ? uint256(-params.liquidityDelta) : uint256(params.liquidityDelta);
Expand Down Expand Up @@ -318,8 +337,12 @@ contract PositionManagerTest is Test, PosmTestSetup, LiquidityFuzzers {
uint256 balance0Start = address(this).balance;
uint256 balance1Start = currency1.balanceOfSelf();

// two-sided liquidity
params.tickLower =
int24(bound(params.tickLower, TickMath.minUsableTick(nativeKey.tickSpacing), -nativeKey.tickSpacing));
params.tickUpper =
int24(bound(params.tickUpper, nativeKey.tickSpacing, TickMath.maxUsableTick(nativeKey.tickSpacing)));
params = createFuzzyLiquidityParams(nativeKey, params, SQRT_PRICE_1_1);
vm.assume(params.tickLower < 0 && 0 < params.tickUpper); // two-sided liquidity

uint256 liquidityToAdd =
params.liquidityDelta < 0 ? uint256(-params.liquidityDelta) : uint256(params.liquidityDelta);
Expand Down Expand Up @@ -366,8 +389,12 @@ contract PositionManagerTest is Test, PosmTestSetup, LiquidityFuzzers {
uint256 balance0Start = address(this).balance;
uint256 balance1Start = currency1.balanceOfSelf();

// two-sided liquidity
params.tickLower =
int24(bound(params.tickLower, TickMath.minUsableTick(nativeKey.tickSpacing), -nativeKey.tickSpacing));
params.tickUpper =
int24(bound(params.tickUpper, nativeKey.tickSpacing, TickMath.maxUsableTick(nativeKey.tickSpacing)));
params = createFuzzyLiquidityParams(nativeKey, params, SQRT_PRICE_1_1);
vm.assume(params.tickLower < 0 && 0 < params.tickUpper); // two-sided liquidity

uint256 liquidityToAdd =
params.liquidityDelta < 0 ? uint256(-params.liquidityDelta) : uint256(params.liquidityDelta);
Expand Down Expand Up @@ -457,8 +484,12 @@ contract PositionManagerTest is Test, PosmTestSetup, LiquidityFuzzers {
public
{
// fuzz for the range
// two-sided liquidity
params.tickLower =
int24(bound(params.tickLower, TickMath.minUsableTick(nativeKey.tickSpacing), -nativeKey.tickSpacing));
params.tickUpper =
int24(bound(params.tickUpper, nativeKey.tickSpacing, TickMath.maxUsableTick(nativeKey.tickSpacing)));
params = createFuzzyLiquidityParams(nativeKey, params, SQRT_PRICE_1_1);
vm.assume(params.tickLower < 0 && 0 < params.tickUpper); // two-sided liquidity

// TODO: figure out if we can fuzz the increase liquidity delta. we're annoyingly getting TickLiquidityOverflow
uint256 liquidityToAdd = 1e18;
Expand Down Expand Up @@ -508,8 +539,12 @@ contract PositionManagerTest is Test, PosmTestSetup, LiquidityFuzzers {
public
{
// fuzz for the range
// two-sided liquidity
params.tickLower =
int24(bound(params.tickLower, TickMath.minUsableTick(nativeKey.tickSpacing), -nativeKey.tickSpacing));
params.tickUpper =
int24(bound(params.tickUpper, nativeKey.tickSpacing, TickMath.maxUsableTick(nativeKey.tickSpacing)));
params = createFuzzyLiquidityParams(nativeKey, params, SQRT_PRICE_1_1);
vm.assume(params.tickLower < 0 && 0 < params.tickUpper); // two-sided liquidity

// TODO: figure out if we can fuzz the increase liquidity delta. we're annoyingly getting TickLiquidityOverflow
uint256 liquidityToAdd = 1e18;
Expand Down Expand Up @@ -558,8 +593,12 @@ contract PositionManagerTest is Test, PosmTestSetup, LiquidityFuzzers {
IPoolManager.ModifyLiquidityParams memory params,
uint256 decreaseLiquidityDelta
) public {
// two-sided liquidity
params.tickLower =
int24(bound(params.tickLower, TickMath.minUsableTick(nativeKey.tickSpacing), -nativeKey.tickSpacing));
params.tickUpper =
int24(bound(params.tickUpper, nativeKey.tickSpacing, TickMath.maxUsableTick(nativeKey.tickSpacing)));
params = createFuzzyLiquidityParams(nativeKey, params, SQRT_PRICE_1_1);
vm.assume(params.tickLower < 0 && 0 < params.tickUpper); // two-sided liquidity
decreaseLiquidityDelta = bound(decreaseLiquidityDelta, 1, uint256(params.liquidityDelta));

PositionConfig memory config =
Expand Down Expand Up @@ -595,8 +634,12 @@ contract PositionManagerTest is Test, PosmTestSetup, LiquidityFuzzers {
IPoolManager.ModifyLiquidityParams memory params,
uint256 decreaseLiquidityDelta
) public {
// two-sided liquidity
params.tickLower =
int24(bound(params.tickLower, TickMath.minUsableTick(nativeKey.tickSpacing), -nativeKey.tickSpacing));
params.tickUpper =
int24(bound(params.tickUpper, nativeKey.tickSpacing, TickMath.maxUsableTick(nativeKey.tickSpacing)));
params = createFuzzyLiquidityParams(nativeKey, params, SQRT_PRICE_1_1);
vm.assume(params.tickLower < 0 && 0 < params.tickUpper); // two-sided liquidity
decreaseLiquidityDelta = bound(decreaseLiquidityDelta, 1, uint256(params.liquidityDelta));

PositionConfig memory config =
Expand Down Expand Up @@ -635,8 +678,12 @@ contract PositionManagerTest is Test, PosmTestSetup, LiquidityFuzzers {
}

function test_fuzz_collect_native_withClose(IPoolManager.ModifyLiquidityParams memory params) public {
// two-sided liquidity
params.tickLower =
int24(bound(params.tickLower, TickMath.minUsableTick(nativeKey.tickSpacing), -nativeKey.tickSpacing));
params.tickUpper =
int24(bound(params.tickUpper, nativeKey.tickSpacing, TickMath.maxUsableTick(nativeKey.tickSpacing)));
params = createFuzzyLiquidityParams(nativeKey, params, SQRT_PRICE_1_1);
vm.assume(params.tickLower < 0 && 0 < params.tickUpper); // two-sided liquidity

PositionConfig memory config =
PositionConfig({poolKey: nativeKey, tickLower: params.tickLower, tickUpper: params.tickUpper});
Expand All @@ -661,8 +708,12 @@ contract PositionManagerTest is Test, PosmTestSetup, LiquidityFuzzers {
}

function test_fuzz_collect_native_withTakePair(IPoolManager.ModifyLiquidityParams memory params) public {
// two-sided liquidity
params.tickLower =
int24(bound(params.tickLower, TickMath.minUsableTick(nativeKey.tickSpacing), -nativeKey.tickSpacing));
params.tickUpper =
int24(bound(params.tickUpper, nativeKey.tickSpacing, TickMath.maxUsableTick(nativeKey.tickSpacing)));
params = createFuzzyLiquidityParams(nativeKey, params, SQRT_PRICE_1_1);
vm.assume(params.tickLower < 0 && 0 < params.tickUpper); // two-sided liquidity

PositionConfig memory config =
PositionConfig({poolKey: nativeKey, tickLower: params.tickLower, tickUpper: params.tickUpper});
Expand Down Expand Up @@ -694,8 +745,12 @@ contract PositionManagerTest is Test, PosmTestSetup, LiquidityFuzzers {
function test_fuzz_collect_native_withTakePair_addressRecipient(IPoolManager.ModifyLiquidityParams memory params)
public
{
// two-sided liquidity
params.tickLower =
int24(bound(params.tickLower, TickMath.minUsableTick(nativeKey.tickSpacing), -nativeKey.tickSpacing));
params.tickUpper =
int24(bound(params.tickUpper, nativeKey.tickSpacing, TickMath.maxUsableTick(nativeKey.tickSpacing)));
params = createFuzzyLiquidityParams(nativeKey, params, SQRT_PRICE_1_1);
vm.assume(params.tickLower < 0 && 0 < params.tickUpper); // two-sided liquidity

PositionConfig memory config =
PositionConfig({poolKey: nativeKey, tickLower: params.tickLower, tickUpper: params.tickUpper});
Expand Down Expand Up @@ -737,8 +792,12 @@ contract PositionManagerTest is Test, PosmTestSetup, LiquidityFuzzers {
function test_fuzz_collect_native_withTakePair_msgSenderRecipient(IPoolManager.ModifyLiquidityParams memory params)
public
{
// two-sided liquidity
params.tickLower =
int24(bound(params.tickLower, TickMath.minUsableTick(nativeKey.tickSpacing), -nativeKey.tickSpacing));
params.tickUpper =
int24(bound(params.tickUpper, nativeKey.tickSpacing, TickMath.maxUsableTick(nativeKey.tickSpacing)));
params = createFuzzyLiquidityParams(nativeKey, params, SQRT_PRICE_1_1);
vm.assume(params.tickLower < 0 && 0 < params.tickUpper); // two-sided liquidity

PositionConfig memory config =
PositionConfig({poolKey: nativeKey, tickLower: params.tickLower, tickUpper: params.tickUpper});
Expand Down
18 changes: 1 addition & 17 deletions test/position-managers/PositionManager.modifyLiquidities.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -853,24 +853,8 @@ contract PositionManagerModifyLiquiditiesTest is Test, PosmTestSetup, LiquidityF
) public {
bips = bound(bips, 1, 10_000);
MockFOT(address(fotToken)).setFee(bips);
tickLower = int24(
bound(
tickLower,
fotKey.tickSpacing * (TickMath.MIN_TICK / fotKey.tickSpacing),
fotKey.tickSpacing * (TickMath.MAX_TICK / fotKey.tickSpacing)
)
);
tickUpper = int24(
bound(
tickUpper,
fotKey.tickSpacing * (TickMath.MIN_TICK / fotKey.tickSpacing),
fotKey.tickSpacing * (TickMath.MAX_TICK / fotKey.tickSpacing)
)
);

tickLower = fotKey.tickSpacing * (tickLower / fotKey.tickSpacing);
tickUpper = fotKey.tickSpacing * (tickUpper / fotKey.tickSpacing);
vm.assume(tickUpper > tickLower);
(tickLower, tickUpper) = boundTicks(fotKey, tickLower, tickUpper);

(uint160 sqrtPriceX96,,,) = manager.getSlot0(fotKey.toId());
{
Expand Down
Loading