Skip to content

Commit 70cd473

Browse files
committed
validate hook configuration at install time
Spearbit #3
1 parent 6647518 commit 70cd473

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

src/EulerSwap.sol

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ contract EulerSwap is IEulerSwap, EVCUtil, UniswapHook {
6565

6666
require(dParams.fee0 <= 1e18 && dParams.fee1 <= 1e18, BadDynamicParam());
6767

68+
require(dParams.swapHookedOperations <= 7, BadDynamicParam());
69+
require(dParams.swapHookedOperations == 0 || dParams.swapHook != address(0), BadDynamicParam());
70+
6871
require(CurveLib.verify(dParams, initialState.reserve0, initialState.reserve1), SwapLib.CurveViolation());
6972

7073
CtxLib.writeDynamicParamsToStorage(dParams);

test/EulerSwapHooks.t.sol

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ contract EulerSwapHooks is EulerSwapTestBase {
1919
uint64 fee1 = 0;
2020
bool expectRejectedError = false;
2121
address toOverride;
22+
address swapHookOverride;
23+
bool setSwapHookOverride = false;
24+
bool expectBadDynamicParamError = false;
2225

2326
function setHook(uint8 hookedOps, uint64 fee0Param, uint64 fee1Param) internal {
2427
PoolConfig memory pc = getPoolConfig(eulerSwap);
@@ -28,6 +31,9 @@ contract EulerSwapHooks is EulerSwapTestBase {
2831
pc.dParams.swapHookedOperations = hookedOps;
2932
pc.dParams.swapHook = address(this);
3033

34+
if (setSwapHookOverride) pc.dParams.swapHook = swapHookOverride;
35+
36+
if (expectBadDynamicParamError) vm.expectRevert(EulerSwap.BadDynamicParam.selector);
3137
reconfigurePool(eulerSwap, pc);
3238
}
3339

@@ -350,4 +356,26 @@ contract EulerSwapHooks is EulerSwapTestBase {
350356
assertEq(getFeeCounter, 1);
351357
assertEq(afterSwapCounter, 1);
352358
}
359+
360+
function test_multipleHooks3() public {
361+
setHook(EULER_SWAP_HOOK_BEFORE_SWAP | EULER_SWAP_HOOK_GET_FEE | EULER_SWAP_HOOK_AFTER_SWAP, 0, 0);
362+
363+
doSwap(true, assetTST, assetTST2, 1e18, 0.9974e18);
364+
365+
assertEq(beforeSwapCounter, 1);
366+
assertEq(getFeeCounter, 1);
367+
assertEq(afterSwapCounter, 1);
368+
}
369+
370+
function test_invalidHook1() public {
371+
expectBadDynamicParamError = true;
372+
setHook(uint8(8), 0, 0);
373+
}
374+
375+
function test_invalidHook2() public {
376+
setSwapHookOverride = true;
377+
swapHookOverride = address(0);
378+
expectBadDynamicParamError = true;
379+
setHook(EULER_SWAP_HOOK_BEFORE_SWAP, 0, 0);
380+
}
353381
}

0 commit comments

Comments
 (0)