{"hook":"0x9299f4487C18f5A1A68c3F3d986312542c60a850","block":93242370,"bits":10320,"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":true},{"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":false},{"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":true},{"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":24576,"selectors":["0xb69a12d1","0xbc234eb7","0xbd382b40","0xc8f5a5f1","0xdc98354e","0xe1b4af69","0x8a2be940","0x8a351445","0x9da6e6e7","0xa3f4bac7","0xb47b2fb1","0x2263fae0","0x259982e5","0x31b031a6","0x60460f06","0x64a8b121","0x77ca16ff","0x03857e2f","0x07eff0dd","0x08826cd5","0x199a9e5f","0x1a97bb89"],"delegatecall":false,"selfdestruct":false,"create":false,"calls":0,"addresses":["0x464F524D4154494f4E5F50524F56454E414E4345","0x2624A8Aaa4A224Aa2CafA1a7A72a2927a62622A9","0x4C49515549444954595f50524F56454E414e4345","0xfFfD8963eFD1FC6A506488495D951d5263988d26"]},"proxy":{"implementation":null,"admin":null,"beacon":null,"clone":false},"owner":null,"functions":[{"selector":"0xb69a12d1","name":"permissionBitmap()"},{"selector":"0xbc234eb7","name":"hookPermissions()"},{"selector":"0xbd382b40","name":"FACTORY_VERSION()"},{"selector":"0xc8f5a5f1","name":"bindings()"},{"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":"0x8a2be940","name":"registration(bytes32)"},{"selector":"0x8a351445","name":"FIXED_STONK_SUPPLY()"},{"selector":"0x9da6e6e7","name":"MAX_STATIC_FEE_PIPS()"},{"selector":"0xa3f4bac7","name":"ALL_HOOK_MASK()"},{"selector":"0xb47b2fb1","name":"afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)"},{"selector":"0x2263fae0","name":"formationForLiquidityController(address)"},{"selector":"0x259982e5","name":"beforeAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)"},{"selector":"0x31b031a6","name":"constructionSchemaHash()"},{"selector":"0x60460f06","name":"MAX_TICK_SPACING()"},{"selector":"0x64a8b121","name":"EXPECTED_PERMISSION_BITMAP()"},{"selector":"0x77ca16ff","name":"bindingsCommitment()"},{"selector":"0x03857e2f","name":"formationForStonk(address)"},{"selector":"0x07eff0dd","name":"MIN_TICK_SPACING()"},{"selector":"0x08826cd5","name":"hashConstruction((uint256,(address,bytes32),bytes32,bytes32,bytes32,(address,bytes32),(address,bytes32),(address,bytes32),(address,address,uint24,int24,address),uint160,int24,int24,uint128,bytes32,uint256,uint256,bool))"},{"selector":"0x199a9e5f","name":"registerPool((uint256,(address,bytes32),bytes32,bytes32,bytes32,(address,bytes32),(address,bytes32),(address,bytes32),(address,address,uint24,int24,address),uint160,int24,int24,uint128,bytes32,uint256,uint256,bool))"},{"selector":"0x1a97bb89","name":"poolForFormation(uint256)"}],"history":{"pools":6,"firstTime":1789030408,"lastTime":1790049402},"pools":[{"id":"0x17c3f962879410da8d7ec1044862cdccc7eb934569dd66ac406a2ee87d4dcbb0","key":{"currency0":"0x5fd945aAB6D4E720f6e7Dd9d468474b3e7ACE129","currency1":"0x8Df62D145D97A47dc9906b933461C9ead665427F","fee":20000,"tickSpacing":200,"hooks":"0x9299f4487C18f5A1A68c3F3d986312542c60a850"},"symbols":["CLARITY","MUCHFUN"],"state":{"sqrtP":"23324535749562713531723357","tick":-162620,"protocolFee":0,"lpFee":20000,"liquidity":"193309034597428144765546"},"swaps":[{"zeroForOne":true,"ok":true,"amountIn":"328313492988766530125068","paid":"328313492988766530125068","got":"27872049483550912","expected":"27872049483550912","feePpm":20000,"takePpm":0},{"zeroForOne":false,"ok":true,"amountIn":"14059799627326657","paid":"14059799627326657","got":"158940004851300605529764","expected":"158940004851300605529764","feePpm":20000,"takePpm":0}],"roundTrip":{"ok":true,"lossPpm":1,"added":["-2003439785248293489481","-217731407157903"],"removed":["2003439785248293489480","217731407157902"]}},{"id":"0x0a6ca9f8388889a8198dd209d66fef179dfb8b452f88f655074c4b7c19c8abf1","key":{"currency0":"0x8Df62D145D97A47dc9906b933461C9ead665427F","currency1":"0xF5850906Ca01D3bcf7e5C4FD1e5cF2dc2ca3DE8e","fee":20000,"tickSpacing":200,"hooks":"0x9299f4487C18f5A1A68c3F3d986312542c60a850"},"symbols":["MUCHFUN","RERE"],"state":{"sqrtP":"70673185776161822454146108984394","tick":135876,"protocolFee":0,"lpFee":20000,"liquidity":"162724733347377793795188"},"swaps":[{"zeroForOne":true,"ok":true,"amountIn":"91211266883945948","paid":"91211266883945948","got":"71090567539448561856372","expected":"71090567539448561856372","feePpm":20000,"takePpm":0},{"zeroForOne":false,"ok":true,"amountIn":"72576940732186624363677","paid":"72576940732186624363677","got":"89343263347226888","expected":"89343263347226888","feePpm":20000,"takePpm":0}],"roundTrip":{"ok":true,"lossPpm":1,"added":["-648011472062565","-482809514990078550393"],"removed":["648011472062564","482809514990078550392"]}}],"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":"pass","detail":"A swap through it pays the pool fee and nothing else."},{"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":"A fixed fee, but a high one: 2%."},{"id":"05","title":"No one holds the switch","status":"pass","detail":"No owner and no admin functions found."},{"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":"6 pools over 39 days."}],"score":98,"verdict":"caution"}