Skip to content

Commit d79342d

Browse files
committed
add hook address validation; fix test implementation
1 parent ef7a7a0 commit d79342d

File tree

2 files changed

+28
-4
lines changed

2 files changed

+28
-4
lines changed

src/UniswapHook.sol

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,22 @@ contract UniswapHook is BaseHook {
116116
return (BaseHook.beforeSwap.selector, returnDelta, 0);
117117
}
118118

119-
// TODO: fix salt mining & verification for the hook
120-
function getHookPermissions() public pure override returns (Hooks.Permissions memory) {}
121-
function validateHookAddress(BaseHook) internal pure override {}
119+
function getHookPermissions() public pure override returns (Hooks.Permissions memory) {
120+
return Hooks.Permissions({
121+
beforeInitialize: false,
122+
afterInitialize: false,
123+
beforeAddLiquidity: false,
124+
afterAddLiquidity: false,
125+
beforeRemoveLiquidity: false,
126+
afterRemoveLiquidity: false,
127+
beforeSwap: true,
128+
afterSwap: false,
129+
beforeDonate: false,
130+
afterDonate: false,
131+
beforeSwapReturnDelta: true,
132+
afterSwapReturnDelta: false,
133+
afterAddLiquidityReturnDelta: false,
134+
afterRemoveLiquidityReturnDelta: false
135+
});
136+
}
122137
}

test/EulerSwapTestBase.t.sol

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {EulerSwapFactory} from "../src/EulerSwapFactory.sol";
99
import {EulerSwapPeriphery} from "../src/EulerSwapPeriphery.sol";
1010
import {IPoolManager} from "@uniswap/v4-core/src/interfaces/IPoolManager.sol";
1111
import {HookMiner} from "./utils/HookMiner.sol";
12+
import {HookMiner as v4HookMiner} from "v4-periphery/src/utils/HookMiner.sol";
1213
import {Hooks} from "@uniswap/v4-core/src/libraries/Hooks.sol";
1314
import {MetaProxyDeployer} from "../src/MetaProxyDeployer.sol";
1415

@@ -37,7 +38,15 @@ contract EulerSwapTestBase is EVaultTestBase {
3738
}
3839

3940
function deployEulerSwap(address poolManager_) public {
40-
eulerSwapImpl = address(new EulerSwap(address(evc), poolManager_));
41+
// use the canonical miner to find a valid 'implementation' address
42+
(, bytes32 salt) = v4HookMiner.find(
43+
address(this),
44+
uint160(Hooks.BEFORE_SWAP_FLAG | Hooks.BEFORE_SWAP_RETURNS_DELTA_FLAG),
45+
type(EulerSwap).creationCode,
46+
abi.encode(address(evc), poolManager_)
47+
);
48+
49+
eulerSwapImpl = address(new EulerSwap{salt: salt}(address(evc), poolManager_));
4150
eulerSwapFactory = new EulerSwapFactory(address(evc), address(factory), eulerSwapImpl);
4251
periphery = new EulerSwapPeriphery();
4352
}

0 commit comments

Comments
 (0)