{"hook":"0xFfe22F0ec484e8EE982db0625eBA3F5d4932A0CC","block":93112772,"bits":8396,"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":true},{"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":true},{"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":true},{"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":true},{"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":11062,"selectors":["0x07ef2190","0x0ebab9ce","0x21c0b342","0x21d0ee70","0x249d39e9","0x259982e5","0x33a0e8b7","0x353c0970","0x481c6a75","0x4e627e62","0x538a3f0e","0x575e24b4","0x60fcec47","0x61d027b3","0x62545788","0x678b2d62","0x6c2bbe7e","0x6fe7e6eb","0x8c6c6900","0x8c8f6126","0x91dd7346","0x9f063efc","0xa574a2d9","0xb47b2fb1","0xb6a8b0fa","0xc1e7af35","0xc45a0155","0xd4570c1c","0xdc98354e","0xe1b4af69","0xf5778b03","0xf85ace85","0xf887ea40","0xfd7e8033"],"delegatecall":false,"selfdestruct":false,"create":false,"calls":10,"addresses":["0xfFfd8963EFd1fC6A506488495d951d5263988d25"]},"proxy":{"implementation":null,"admin":null,"beacon":null,"clone":false},"owner":null,"functions":[{"selector":"0x07ef2190","name":"poolConfigs(bytes32)"},{"selector":"0x0ebab9ce","name":"MIN_CREATOR_BPS()"},{"selector":"0x21c0b342","name":"claim(address,address)"},{"selector":"0x21d0ee70","name":"beforeRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)"},{"selector":"0x249d39e9","name":"BPS()"},{"selector":"0x259982e5","name":"beforeAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)"},{"selector":"0x33a0e8b7","name":"claimCreator(bytes32,address)"},{"selector":"0x353c0970","name":"MAX_TOTAL_BPS()"},{"selector":"0x481c6a75","name":"manager()"},{"selector":"0x4e627e62","name":"referralRegistry()"},{"selector":"0x538a3f0e","name":"initializeFactory(address)"},{"selector":"0x575e24b4","name":"beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)"},{"selector":"0x60fcec47","name":"MIN_REFERRAL_BPS()"},{"selector":"0x61d027b3","name":"treasury()"},{"selector":"0x62545788","name":"creatorClaimed(bytes32,address)"},{"selector":"0x678b2d62","name":"MAX_CREATOR_RECIPIENTS()"},{"selector":"0x6c2bbe7e","name":"afterRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)"},{"selector":"0x6fe7e6eb","name":"afterInitialize(address,(address,address,uint24,int24,address),uint160,int24)"},{"selector":"0x8c6c6900","name":"executeBuyback((address,address,uint24,int24,address),uint256,uint256,uint160,uint256)"},{"selector":"0x8c8f6126","name":"registerPool((address,address,uint24,int24,address),address,address,bool,uint16,uint16,uint16,address[],uint16[])"},{"selector":"0x91dd7346","name":"unlockCallback(bytes)"},{"selector":"0x9f063efc","name":"afterAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)"},{"selector":"0xa574a2d9","name":"creatorWeightBps(bytes32,address)"},{"selector":"0xb47b2fb1","name":"afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)"},{"selector":"0xb6a8b0fa","name":"beforeDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)"},{"selector":"0xc1e7af35","name":"PROTOCOL_BPS()"},{"selector":"0xc45a0155","name":null},{"selector":"0xd4570c1c","name":"claimable(address,address)"},{"selector":"0xdc98354e","name":"beforeInitialize(address,(address,address,uint24,int24,address),uint160)"},{"selector":"0xe1b4af69","name":"afterDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)"},{"selector":"0xf5778b03","name":"bootstrapAdmin()"},{"selector":"0xf85ace85","name":"buybackAccrued(bytes32)"},{"selector":"0xf887ea40","name":"router()"},{"selector":"0xfd7e8033","name":"creatorAccrued(bytes32)"}],"history":{"pools":9,"firstTime":1790788168,"lastTime":1791480230},"pools":[{"id":"0x39bdda3f9081c22ee60ec1e12fef939b522ee5452ea3136f5c8c576157c40392","key":{"currency0":"0x0000000000000000000000000000000000000000","currency1":"0xA3F0Fc2d9dF1c3525DE6a7f658cB0680E2617EC7","fee":0,"tickSpacing":200,"hooks":"0xFfe22F0ec484e8EE982db0625eBA3F5d4932A0CC"},"symbols":["ETH","CZED"],"state":{"sqrtP":"1986376761789266511704607145790527","tick":202599,"protocolFee":0,"lpFee":0,"liquidity":"40286684701558882443538"},"swaps":[{"zeroForOne":true,"ok":true,"amountIn":"803432678053715","paid":"803432678053715","got":"498719135543250246036181","expected":"504773425833852554753963","feePpm":0,"takePpm":11995},{"zeroForOne":false,"ok":true,"amountIn":"641945969423836135188","paid":"641945969423836135188","got":"1008999754915","expected":"1021254812667","feePpm":0,"takePpm":12000}],"roundTrip":{"ok":true,"lossPpm":1,"added":["-4749167363917","-3960028283295064881085"],"removed":["4749167363916","3960028283295064881084"]}},{"id":"0x89e4f7e1ba2ba4c528e4549ffe6d08f0cc8b2370f13396c967f1ee432695395d","key":{"currency0":"0x0000000000000000000000000000000000000000","currency1":"0x99B30856340c96309f2055d91c84704C8bC21538","fee":0,"tickSpacing":200,"hooks":"0xFfe22F0ec484e8EE982db0625eBA3F5d4932A0CC"},"symbols":["ETH","SI"],"state":{"sqrtP":"1986332059130161733534871724318922","tick":202599,"protocolFee":0,"lpFee":0,"liquidity":"40286684701558882443538"},"swaps":[{"zeroForOne":true,"ok":true,"amountIn":"803450759409727","paid":"803450759409727","got":"499716942773532731209671","expected":"504762066098471431242027","feePpm":0,"takePpm":9996},{"zeroForOne":false,"ok":true,"amountIn":"6324653593594813021234","paid":"6324653593594813021234","got":"9961498690799","expected":"10062119889695","feePpm":0,"takePpm":10000}],"roundTrip":{"ok":true,"lossPpm":1,"added":["-4752783635120","-3957755200245396490331"],"removed":["4752783635119","3957755200245396490330"]}}],"openCallbacks":[],"checks":[{"id":"01","title":"Permissions that touch your money","status":"caution","detail":"The address enables before swap returns delta, after swap returns delta. The hook is allowed to take; the next two checks measure whether it does."},{"id":"02","title":"What it takes from a swap","status":"caution","detail":"It takes 1.20% of each 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":"pass","detail":"A fixed fee of 0%, written in the pool key."},{"id":"05","title":"No one holds the switch","status":"caution","detail":"No owner() but it has claim, claimCreator, claimable."},{"id":"06","title":"The code cannot change","status":"pass","detail":"Not a proxy, no DELEGATECALL, no SELFDESTRUCT."},{"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":"9 pools over 19 days."}],"score":75,"verdict":"caution"}