Skip to content

Commit 4c757b0

Browse files
committed
test that v3 CLAMM reverts
1 parent 40db263 commit 4c757b0

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

test/HookSwaps.t.sol

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,20 @@ pragma solidity ^0.8.24;
44
import {EulerSwapTestBase, EulerSwap, EulerSwapPeriphery, IEulerSwap} from "./EulerSwapTestBase.t.sol";
55
import {TestERC20} from "evk-test/unit/evault/EVaultTestBase.t.sol";
66
import {EulerSwap} from "../src/EulerSwap.sol";
7+
import {UniswapHook} from "../src/UniswapHook.sol";
78

89
import {PoolKey} from "@uniswap/v4-core/src/types/PoolKey.sol";
910
import {IPoolManager, PoolManagerDeployer} from "./utils/PoolManagerDeployer.sol";
1011
import {PoolSwapTest} from "@uniswap/v4-core/src/test/PoolSwapTest.sol";
1112
import {MinimalRouter} from "./utils/MinimalRouter.sol";
13+
import {PoolModifyLiquidityTest} from "@uniswap/v4-core/src/test/PoolModifyLiquidityTest.sol";
1214
import {Currency, CurrencyLibrary} from "@uniswap/v4-core/src/types/Currency.sol";
1315
import {StateLibrary} from "@uniswap/v4-core/src/libraries/StateLibrary.sol";
1416
import {TickMath} from "@uniswap/v4-core/src/libraries/TickMath.sol";
1517
import {BalanceDelta} from "@uniswap/v4-core/src/types/BalanceDelta.sol";
18+
import {CustomRevert} from "@uniswap/v4-core/src/libraries/CustomRevert.sol";
19+
import {IHooks} from "@uniswap/v4-core/src/interfaces/IHooks.sol";
20+
import {Hooks} from "@uniswap/v4-core/src/libraries/Hooks.sol";
1621

1722
contract HookSwapsTest is EulerSwapTestBase {
1823
using StateLibrary for IPoolManager;
@@ -22,6 +27,7 @@ contract HookSwapsTest is EulerSwapTestBase {
2227
IPoolManager public poolManager;
2328
PoolSwapTest public swapRouter;
2429
MinimalRouter public minimalRouter;
30+
PoolModifyLiquidityTest public liquidityManager;
2531

2632
PoolSwapTest.TestSettings public settings = PoolSwapTest.TestSettings({takeClaims: false, settleUsingBurn: false});
2733

@@ -31,6 +37,7 @@ contract HookSwapsTest is EulerSwapTestBase {
3137
poolManager = PoolManagerDeployer.deploy(address(this));
3238
swapRouter = new PoolSwapTest(poolManager);
3339
minimalRouter = new MinimalRouter(poolManager);
40+
liquidityManager = new PoolModifyLiquidityTest(poolManager);
3441

3542
deployEulerSwap(address(poolManager));
3643

@@ -119,6 +126,35 @@ contract HookSwapsTest is EulerSwapTestBase {
119126
vm.stopPrank();
120127
}
121128

129+
/// @dev adding liquidity as a concentrated liquidity position will revert
130+
function test_revertAddConcentratedLiquidity() public {
131+
assetTST.mint(anyone, 10000e18);
132+
assetTST2.mint(anyone, 10000e18);
133+
134+
vm.startPrank(anyone);
135+
assetTST.approve(address(liquidityManager), 1e18);
136+
assetTST2.approve(address(liquidityManager), 1e18);
137+
138+
PoolKey memory poolKey = eulerSwap.poolKey();
139+
140+
// hook intentionally reverts to prevent v3-CLAMM positions
141+
vm.expectRevert(
142+
abi.encodeWithSelector(
143+
CustomRevert.WrappedError.selector,
144+
address(eulerSwap),
145+
IHooks.beforeAddLiquidity.selector,
146+
abi.encodeWithSelector(UniswapHook.NativeConcentratedLiquidityUnsupported.selector),
147+
abi.encodeWithSelector(Hooks.HookCallFailed.selector)
148+
)
149+
);
150+
liquidityManager.modifyLiquidity(
151+
poolKey,
152+
IPoolManager.ModifyLiquidityParams({tickLower: -10, tickUpper: 10, liquidityDelta: 1000, salt: bytes32(0)}),
153+
""
154+
);
155+
vm.stopPrank();
156+
}
157+
122158
function _swap(PoolKey memory key, bool zeroForOne, bool exactInput, uint256 amount) internal {
123159
IPoolManager.SwapParams memory swapParams = IPoolManager.SwapParams({
124160
zeroForOne: zeroForOne,

0 commit comments

Comments
 (0)