{"hook":"0x7E2f5bb6762ca3c0079695034F47620A3A410080","block":93327872,"bits":128,"flags":[{"bit":13,"key":"beforeInitialize","label":"Before initialize","risk":0,"does":"Runs once, when a pool is created.","fn":"beforeInitialize(address,(address,address,uint24,int24,address),uint160)","on":false},{"bit":12,"key":"afterInitialize","label":"After initialize","risk":0,"does":"Runs once, right after a pool is created.","fn":"afterInitialize(address,(address,address,uint24,int24,address),uint160,int24)","on":false},{"bit":11,"key":"beforeAddLiquidity","label":"Before add liquidity","risk":1,"does":"Can refuse a deposit, or only let some addresses provide liquidity.","fn":"beforeAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)","on":false},{"bit":10,"key":"afterAddLiquidity","label":"After add liquidity","risk":0,"does":"Runs after each deposit.","fn":"afterAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)","on":false},{"bit":9,"key":"beforeRemoveLiquidity","label":"Before remove liquidity","risk":2,"does":"Can refuse a withdrawal. LPs may not get out.","fn":"beforeRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)","on":false},{"bit":8,"key":"afterRemoveLiquidity","label":"After remove liquidity","risk":0,"does":"Runs after each withdrawal.","fn":"afterRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)","on":false},{"bit":7,"key":"beforeSwap","label":"Before swap","risk":1,"does":"Runs before every swap. On a dynamic-fee pool it can set the fee each time.","fn":"beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)","on":true},{"bit":6,"key":"afterSwap","label":"After swap","risk":0,"does":"Runs after every swap.","fn":"afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)","on":false},{"bit":5,"key":"beforeDonate","label":"Before donate","risk":0,"does":"Runs before a donation to LPs.","fn":"beforeDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)","on":false},{"bit":4,"key":"afterDonate","label":"After donate","risk":0,"does":"Runs after a donation to LPs.","fn":"afterDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)","on":false},{"bit":3,"key":"beforeSwapReturnDelta","label":"Before swap returns delta","risk":2,"does":"Can take part of what you put into a swap, or change how much is swapped.","fn":null,"on":false},{"bit":2,"key":"afterSwapReturnDelta","label":"After swap returns delta","risk":2,"does":"Can take part of what you get out of every swap.","fn":null,"on":false},{"bit":1,"key":"afterAddLiquidityReturnDelta","label":"After add returns delta","risk":2,"does":"Can charge LPs on the way in.","fn":null,"on":false},{"bit":0,"key":"afterRemoveLiquidityReturnDelta","label":"After remove returns delta","risk":2,"does":"Can take part of what LPs withdraw.","fn":null,"on":false}],"code":{"size":5128,"selectors":["0x102239af","0x272e7c96","0x284b554b","0x3fc8cef3","0x4f1ef286","0x52d1902d","0x575e24b4","0x579e9e9e","0x715018a6","0x75b05cb6","0x76000daa","0x8b34afd1","0x8da5cb5b","0x96944945","0x99254d68","0x9cb346b2","0x9fde54f5","0xad3cb1cc","0xb4687cf7","0xc0c53b8b","0xc45a0155","0xccddbca4","0xd4314a5d","0xd443f1a6","0xdc4c90d3","0xe0b01bac","0xe59c2d49","0xe873a07b","0xe9c216a1","0xf1320af2","0xf2fde38b","0xfd37a45b"],"delegatecall":true,"selfdestruct":false,"create":false,"calls":0,"addresses":["0x229Faa919ABf14279E2461Dba53F039c5B4C7E29"]},"proxy":{"implementation":"0x7E879C5a70Ef35395411E9E8BA2507Bd152E0cc6","admin":null,"beacon":null,"clone":false},"owner":"0x039485D0944E7274acECafa68702E1051dAEA28a","functions":[{"selector":"0x102239af","name":"dumpFee()"},{"selector":"0x272e7c96","name":"normalFee()"},{"selector":"0x284b554b","name":null},{"selector":"0x3fc8cef3","name":"weth()"},{"selector":"0x4f1ef286","name":"upgradeToAndCall(address,bytes)"},{"selector":"0x52d1902d","name":"proxiableUUID()"},{"selector":"0x575e24b4","name":"beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)"},{"selector":"0x579e9e9e","name":null},{"selector":"0x715018a6","name":"renounceOwnership()"},{"selector":"0x75b05cb6","name":null},{"selector":"0x76000daa","name":null},{"selector":"0x8b34afd1","name":null},{"selector":"0x8da5cb5b","name":"owner()"},{"selector":"0x96944945","name":null},{"selector":"0x99254d68","name":null},{"selector":"0x9cb346b2","name":"sniperFee()"},{"selector":"0x9fde54f5","name":"setExempt(address,bool)"},{"selector":"0xad3cb1cc","name":"UPGRADE_INTERFACE_VERSION()"},{"selector":"0xb4687cf7","name":null},{"selector":"0xc0c53b8b","name":"initialize(address,address,address)"},{"selector":"0xc45a0155","name":null},{"selector":"0xccddbca4","name":null},{"selector":"0xd4314a5d","name":null},{"selector":"0xd443f1a6","name":null},{"selector":"0xdc4c90d3","name":"poolManager()"},{"selector":"0xe0b01bac","name":"poolState(bytes32)"},{"selector":"0xe59c2d49","name":null},{"selector":"0xe873a07b","name":null},{"selector":"0xe9c216a1","name":null},{"selector":"0xf1320af2","name":"exempt(address)"},{"selector":"0xf2fde38b","name":"transferOwnership(address)"},{"selector":"0xfd37a45b","name":null}],"history":{"pools":4,"firstTime":1786042550,"lastTime":1786103566},"pools":[{"id":"0xf4d4aa24c9bbbeeeb02d84330965f231748846bc0ac946694a766c4450a226ca","key":{"currency0":"0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73","currency1":"0x63618b402558ad3EbCB9B30D0834187C01774b03","fee":8388608,"tickSpacing":200,"hooks":"0x7E2f5bb6762ca3c0079695034F47620A3A410080"},"symbols":["WETH","FWOGEN"],"state":{"sqrtP":"4062638333198508019101555583105253","tick":216911,"protocolFee":0,"lpFee":0,"liquidity":"14142135620000000000000"},"swaps":[{"zeroForOne":true,"ok":true,"amountIn":"137897509857589","paid":"137897509857589","got":"358784648451781246731784","expected":"362406924671770344675957","feePpm":0,"takePpm":9996},{"zeroForOne":false,"ok":true,"amountIn":"362588128134108183144848","paid":"362588128134108183144848","got":"103384363256970","expected":"137828595559809","feePpm":0,"takePpm":249907}],"roundTrip":{"ok":true,"lossPpm":1,"added":["-933793312534","-2532841621750944050973"],"removed":["933793312533","2532841621750944050972"]}},{"id":"0x6ab07c619626306c063e81ff25679e29b526f9dc9abeece9d0dc5ed3eccafa64","key":{"currency0":"0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73","currency1":"0x7130eF56E082028e7971A0625D3E59c3c09f0b03","fee":8388608,"tickSpacing":200,"hooks":"0x7E2f5bb6762ca3c0079695034F47620A3A410080"},"symbols":["WETH","FWOGEN"],"state":{"sqrtP":"3836854324151570678242449773150909","tick":215767,"protocolFee":0,"lpFee":0,"liquidity":"18708286930000000000000"},"swaps":[{"zeroForOne":true,"ok":true,"amountIn":"193156042949491","paid":"193156042949491","got":"448249718113200311285803","expected":"452775230287549716472231","feePpm":0,"takePpm":9996},{"zeroForOne":false,"ok":true,"amountIn":"369260626713160718391744","paid":"369260626713160718391744","got":"118051110925629","expected":"157385449699171","feePpm":0,"takePpm":249924}],"roundTrip":{"ok":true,"lossPpm":1,"added":["-1202687643627","-3410402448250568988416"],"removed":["1202687643626","3410402448250568988415"]}}],"openCallbacks":[],"checks":[{"id":"01","title":"Permissions that touch your money","status":"pass","detail":"None of the permissions that let a hook take from swaps or from LPs are switched on."},{"id":"02","title":"What it takes from a swap","status":"fail","detail":"It took 24.99% of a swap on top of the pool fee."},{"id":"03","title":"LPs can get out","status":"pass","detail":"Liquidity added and removed in the same block came back whole."},{"id":"04","title":"The fee is the fee","status":"caution","detail":"Its pools use a dynamic fee that the hook sets before every swap. It stands at 0% now and can change."},{"id":"05","title":"No one holds the switch","status":"caution","detail":"Owned by 0x039485D0944E7274acECafa68702E1051dAEA28a. Owner-style functions: upgradeToAndCall, setExempt, UPGRADE_INTERFACE_VERSION, transferOwnership."},{"id":"06","title":"The code cannot change","status":"fail","detail":"It is a proxy. The code that runs lives at 0x7E879C5a70Ef35395411E9E8BA2507Bd152E0cc6."},{"id":"07","title":"Only the PoolManager can call it","status":"pass","detail":"Each callback refused a call that did not come from the PoolManager."},{"id":"08","title":"Track record","status":"pass","detail":"4 pools over 74 days."}],"score":50,"verdict":"danger"}