Warning
This project is still in a very early and experimental phase. It has never been audited nor thoroughly reviewed for security vulnerabilities. Do not use in production.
This template is built on top of Uniswap V4 Template.
- The example hook Counter.sol demonstrates:
beforeSwap()
hook calling external custom curve implementation written in Stylus,afterSwap()
hook,beforeAddLiquidity()
hook,beforeRemoveLiquidity()
hook,getHookPermissions()
function.
- The test template Counter.t.sol preconfigures the v4 pool manager, test tokens, and test liquidity.
Ensure that you have correctly installed Foundry (Forge) and that it's up to date. You can update Foundry by running:
foundryup
requires foundry
forge install
forge test
Other than writing unit tests, you can deploy & test hooks on Nitro Testnode.
You can follow this instruction to run Nitro Testnode.
When installing dependencies with forge install
, Github may throw a Permission Denied
error
Typically caused by missing Github SSH keys, and can be resolved by following the steps here
Or adding the keys to your ssh-agent, if you have already uploaded SSH keys
Hook deployment failures are caused by incorrect flags or incorrect salt mining
- Verify the flags are in agreement:
getHookCalls()
returns the correct flagsflags
provided toHookMiner.find(...)
- Verify salt mining is correct:
- In forge test: the deployer for:
new Hook{salt: salt}(...)
andHookMiner.find(deployer, ...)
are the same. This will beaddress(this)
. If usingvm.prank
, the deployer will be the pranking address - In forge script: the deployer must be the CREATE2 Proxy:
0x4e59b44847b379578588920cA78FbF26c0B4956C
- If anvil does not have the CREATE2 deployer, your foundry may be out of date. You can update it with
foundryup
- If anvil does not have the CREATE2 deployer, your foundry may be out of date. You can update it with
- In forge test: the deployer for:
Additional resources:
v4-periphery contains advanced hook implementations that serve as a great reference