{"hook":"0xA71B7482439C4f147abFe23cBa5312770f31C0c4","block":93176538,"bits":196,"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":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":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":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":9533,"selectors":["0x01ffc9a7","0x05160b89","0x0885f732","0x196fb0d6","0x1a07d99f","0x1e83409a","0x1f3d3177","0x21d0ee70","0x248a9ca3","0x24ea54f4","0x259982e5","0x2f2ff15d","0x31731bb9","0x36568abe","0x39092a8c","0x3f4ba83a","0x4f1ef286","0x52d1902d","0x575e24b4","0x5c975abb","0x60c6d8ae","0x6c2bbe7e","0x6fe7e6eb","0x7aab2f69","0x8456cb59","0x91d14854","0x98cc1cd1","0x9f063efc","0xa217fddf","0xad3cb1cc","0xb1a25c94","0xb47b2fb1","0xb6a8b0fa","0xbac2f078","0xbe07363f","0xbf1d14cd","0xc0c53b8b","0xc267ada4","0xc4e833ce","0xc56f84cf","0xc807ad65","0xd547741f","0xd55be8c6","0xdc4c90d3","0xdc98354e","0xe1b4af69","0xf29ebf61","0xf72c0d8b","0xfad17eb6","0xfc884c1b"],"delegatecall":true,"selfdestruct":false,"create":false,"calls":5,"addresses":[]},"proxy":{"implementation":"0x7598D14A00698489aF3a40b895510dbE69022135","admin":null,"beacon":null,"clone":false},"owner":null,"functions":[{"selector":"0x01ffc9a7","name":"supportsInterface(bytes4)"},{"selector":"0x05160b89","name":"setCreatorShareBps(uint256)"},{"selector":"0x0885f732","name":"poolConfig(bytes32)"},{"selector":"0x196fb0d6","name":"configurePool(bytes32,address)"},{"selector":"0x1a07d99f","name":"hasValidHookFlags()"},{"selector":"0x1e83409a","name":"claim(address)"},{"selector":"0x1f3d3177","name":"sniperDuration()"},{"selector":"0x21d0ee70","name":"beforeRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)"},{"selector":"0x248a9ca3","name":"getRoleAdmin(bytes32)"},{"selector":"0x24ea54f4","name":"GUARDIAN_ROLE()"},{"selector":"0x259982e5","name":"beforeAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)"},{"selector":"0x2f2ff15d","name":"grantRole(bytes32,address)"},{"selector":"0x31731bb9","name":"poolFeesCollected(bytes32)"},{"selector":"0x36568abe","name":"renounceRole(bytes32,address)"},{"selector":"0x39092a8c","name":"reconfigurePool(bytes32,address)"},{"selector":"0x3f4ba83a","name":"unpause()"},{"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":"0x5c975abb","name":"paused()"},{"selector":"0x60c6d8ae","name":"totalFeesCollected()"},{"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":"0x7aab2f69","name":"MAX_CREATOR_SHARE_BPS()"},{"selector":"0x8456cb59","name":"pause()"},{"selector":"0x91d14854","name":"hasRole(bytes32,address)"},{"selector":"0x98cc1cd1","name":"setSniperDuration(uint32)"},{"selector":"0x9f063efc","name":"afterAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)"},{"selector":"0xa217fddf","name":"DEFAULT_ADMIN_ROLE()"},{"selector":"0xad3cb1cc","name":"UPGRADE_INTERFACE_VERSION()"},{"selector":"0xb1a25c94","name":"creatorShareBps()"},{"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":"0xbac2f078","name":"MAX_SNIPER_DURATION()"},{"selector":"0xbe07363f","name":"DEFAULT_SNIPER_DURATION()"},{"selector":"0xbf1d14cd","name":"setTotalFeeBps(uint256)"},{"selector":"0xc0c53b8b","name":"initialize(address,address,address)"},{"selector":"0xc267ada4","name":"setFeeRouter(address)"},{"selector":"0xc4e833ce","name":"getHookPermissions()"},{"selector":"0xc56f84cf","name":"totalFeeBps()"},{"selector":"0xc807ad65","name":"createPoolAndConfigure((address,address,uint24,int24,address),uint160,address)"},{"selector":"0xd547741f","name":"revokeRole(bytes32,address)"},{"selector":"0xd55be8c6","name":"MAX_FEE_BPS()"},{"selector":"0xdc4c90d3","name":"poolManager()"},{"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":"0xf29ebf61","name":"feeRouter()"},{"selector":"0xf72c0d8b","name":"UPGRADER_ROLE()"},{"selector":"0xfad17eb6","name":"accrued(address,address)"},{"selector":"0xfc884c1b","name":"setPoolBypass(bytes32,bool)"}],"history":{"pools":7,"firstTime":1783564109,"lastTime":1786777027},"pools":[{"id":"0xa11c684ed34c5dfab978c59240ee4974aa925b5d752d59c922f260ce34da96a8","key":{"currency0":"0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73","currency1":"0x75fFE37Ec1f1Ec7EbF5BB2c7e2A8Aae8427cB9f8","fee":3000,"tickSpacing":60,"hooks":"0xA71B7482439C4f147abFe23cBa5312770f31C0c4"},"symbols":["WETH","HOSTEST6"],"state":{"sqrtP":"1407872856340335831994129503687973","tick":195714,"protocolFee":0,"lpFee":3000,"liquidity":"70300107898045534966514"},"swaps":[{"zeroForOne":true,"ok":true,"amountIn":"1978072220170090","paid":"1978072220170090","got":"616202930088658812118245","expected":"622427202109756375877015","feePpm":3000,"takePpm":10000},{"zeroForOne":false,"ok":true,"amountIn":"78724939014719388088487","paid":"78724939014719388088487","got":"246063782470455","expected":"248549275222681","feePpm":3000,"takePpm":10000}],"roundTrip":{"ok":true,"lossPpm":1,"added":["-11788351533711","-4024489369353311198729"],"removed":["11788351533710","4024489369353311198728"]}}],"openCallbacks":[],"checks":[{"id":"01","title":"Permissions that touch your money","status":"caution","detail":"The address enables 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":"pass","detail":"It takes 1% 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.30%, written in the pool key."},{"id":"05","title":"No one holds the switch","status":"caution","detail":"No owner() but it has setCreatorShareBps, claim, grantRole, unpause, upgradeToAndCall, paused."},{"id":"06","title":"The code cannot change","status":"fail","detail":"It is a proxy. The code that runs lives at 0x7598D14A00698489aF3a40b895510dbE69022135."},{"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":"7 pools over 103 days."}],"score":73,"verdict":"danger"}