{"assessments":[],"deployments":[],"fuzz":[],"identity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"interpretation":"Records acceptance and evidence. Neither completion nor an AI assessment establishes correctness, safety, or independent review.","jobId":"05958691-0bdb-481d-94e6-bbe8cfa54ffb","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":null,"dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_economics","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"ready"},{"acceptedSubmissionHash":null,"dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_flow","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"ready"},{"acceptedSubmissionHash":null,"dependsOn":["build_contract_project","write_foundry_tests","manifest","audit_math","audit_permissions","audit_economics","audit_flow"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"af3aa01159bbf354f621cafa5c0006f6169e0938a8b015be508b7377dbf165bc","skillId":"audit-judge","tools":[]},"key":"audit_judge","kind":"code","role":"review","skillHash":"af3aa01159bbf354f621cafa5c0006f6169e0938a8b015be508b7377dbf165bc","skillId":"audit-judge","state":"waiting"},{"acceptedSubmissionHash":null,"dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_math","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"ready"},{"acceptedSubmissionHash":null,"dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_permissions","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"ready"},{"acceptedSubmissionHash":"4bace423548b4f65cc74698feac577f4ab78839f8ed2108cd088dd41686848a3","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"816fe39c7efd64504a19175b0f4dd9186d61069f37a22684c90358a18c60bddc","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"816fe39c7efd64504a19175b0f4dd9186d61069f37a22684c90358a18c60bddc","skillId":"build-contract-project","state":"accepted"},{"acceptedSubmissionHash":null,"dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"ready"},{"acceptedSubmissionHash":null,"dependsOn":["build_contract_project"],"execution":{"forkChains":[1],"network":false,"profile":"foundry","requires":[],"skillHash":"ab3f8f2aa4e7f3b3ada558c0dcf522ba733ca3df3b1da92c707a0fe305816d5f","skillId":"write-foundry-tests","tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"ab3f8f2aa4e7f3b3ada558c0dcf522ba733ca3df3b1da92c707a0fe305816d5f","skillId":"write-foundry-tests","state":"failed"}],"objective":"Build a Uniswap v4 hook for this test launch. The pool pairs the new token with native ETH. The hook takes a fee in ETH on every swap and forwards it to two fixed recipients that fund research jobs.\n\nRecipients (immutable, set in the constructor):\n- Research vault: 0x087C0CF0A103acA2c487c5017DbC121ad6C5afEE (a contract with a payable receive)\n- Dev wallet: 0x5Cf44fb6a49156125b5f9Dfea73E4011534C7944\n- Owner of the admin functions: 0x5Cf44fb6a49156125b5f9Dfea73E4011534C7944\n\nFee schedule:\n- Launch window: the first 3600 seconds after the pool is initialized (record block.timestamp in afterInitialize, once).\n- Buys (ETH in, token out) inside the window pay a fee that decays linearly from 30% at t=0 to 2% at t=3600.\n- Sells (token in, ETH out) pay 2% at all times.\n- After the window every swap pays 2%.\n- Split of each fee: 0.5% of the swap's ETH amount goes to the dev wallet; everything else (1.5% plus any launch premium above 2%) goes to the research vault.\n\nRequirements:\n- The fee is always charged in ETH, never in the token, for both directions and for exact-input and exact-output swaps. Use beforeSwap / afterSwap with the return-delta flags as needed so that no swap type escapes the fee.\n- Fees are paid out in the same transaction. If an ETH transfer to a recipient fails, the swap must not revert: credit the amount to that recipient and let it withdraw later with a pull function.\n- The owner can only lower the fees, never raise them: the 30% launch cap and the 2% base fee are hardcoded maximums. The base fee can never go below the 0.5% dev share.\n- The owner can transfer or renounce ownership. There is no function that moves pool liquidity, mints tokens, pauses swaps or withdraws ETH that belongs to a recipient.\n- The hook only accepts one pool: an ETH pool with this launch's token. afterInitialize reverts on any second initialization.\n- Use transient storage (EIP-1153) for any state passed from beforeSwap to afterSwap.\n- Liquidity is single-sided: the launch supplies only the token, buyers bring the ETH.\n\nTests (Foundry, mainnet fork against the real PoolManager):\n- Exact-input and exact-output buys and sells: each pays the right fee and the vault and dev wallet receive the right amounts.\n- Fee at t=0, t=1800 (16%) and t=3600 (2%) after initialization.\n- A recipient that rejects ETH does not block swaps and can withdraw its credit.\n- The owner cannot raise any fee; non-owners cannot call admin functions.\n\nToken name: TEST\nToken symbol: TEST","parentJobId":null,"planHash":"156fe49b8419036fe4c576bd2aec1c53e3677b806674fbc42aac7218186ebde7","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"05958691-0bdb-481d-94e6-bbe8cfa54ffb","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-2501-test"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"52289","feedbackHash":"0af7765634d16ec81c6a3b3b2426134ca013c3d1f25b5f52cd5ca8ead1828139","nodeKey":"build_contract_project","submissionHash":"4bace423548b4f65cc74698feac577f4ab78839f8ed2108cd088dd41686848a3","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"9a00286321a03900792edca91b66d3c583f966d38e6aca6ab82bda86e33220c2","state":"blocked","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"0be47287abf7c3bd","findings":[],"hash":"05e04803ad6b0e44be2dbfa690d4ab2c680ab55e3aa1edaef74c62338ed3467c","nodeId":"c136adb4-e7dd-430c-af43-6305f4f010df","outcome":"failed","summary":"fetch failed","treeHash":null,"usage":{"cachedInputTokens":0,"inputTokens":0,"model":null,"outputTokens":0,"runtime":"codex","turns":0,"wallClockMs":35}},{"artifacts":[],"attempt":2,"bundleHash":null,"device":"76df9026b98e4277","findings":[],"hash":"0e49947cb5e77fb453281709a55e0f35fc8074b77da635083131496e06c11441","nodeId":"ecd3543a-c517-4ec8-888a-c09798e86e43","outcome":"failed","summary":"fetch failed","treeHash":null,"usage":{"cachedInputTokens":0,"inputTokens":0,"model":null,"outputTokens":0,"runtime":"claude","turns":0,"wallClockMs":56}},{"artifacts":[],"attempt":2,"bundleHash":null,"device":"89eed35842d609d7","findings":[],"hash":"13cd1eb3877f4fb556d4d845ac100c390259a7e9c071d5fd0c8f632eb73ec8a7","nodeId":"85191cfa-dc14-4e47-a6e2-f22d7aa7a257","outcome":"failed","summary":"fetch failed","treeHash":null,"usage":{"cachedInputTokens":0,"inputTokens":0,"model":null,"outputTokens":0,"runtime":"claude","turns":0,"wallClockMs":161}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"644eb561f6d70a85","findings":[],"hash":"3ccbddac9ec017f32c9d812162d2596ac983beb867dfa2937867a530f0469cb0","nodeId":"1278a2d3-bd4a-424d-aa46-f9e58cdabe79","outcome":"failed","summary":"fetch failed","treeHash":null,"usage":{"cachedInputTokens":0,"inputTokens":0,"model":null,"outputTokens":0,"runtime":"claude","turns":0,"wallClockMs":49}},{"artifacts":[],"attempt":1,"bundleHash":"96b7d45c585afbae47786635d133993909bbff42a16f67eea635d2601ad2ee7d","device":"ee9fbaf2480d1034","findings":[],"hash":"4bace423548b4f65cc74698feac577f4ab78839f8ed2108cd088dd41686848a3","nodeId":"f6c7b9db-ba2e-4d10-a226-5b67b44e3f1e","outcome":"completed","summary":"The deliverable is complete and committed. The fresh clone builds offline, passes `forge fmt --check`, and passes all tests with the verifier's fuzz seed.\n\n**What was built** (commit `65dab94` on `main`)\n\n- `src/LaunchToken.sol`: fixed-supply ERC-20 \"TEST\", 10^27 units minted once to the deployer, no admin functions.\n- `src/LaunchHook.sol`: the fee hook. `afterInitialize` binds the single ETH/TEST pool and records the launch timestamp once. `beforeSwap` plus `afterSwap`, with both return-delta flags, charge the fee on the ETH side for all four swap types. The rate and amount decided in `beforeSwap` reach `afterSwap` through transient storage.\n- Fee schedule: buys decay linearly from 30% to 2% over 3600 seconds, sells pay 2% always, 0.5% of the gross ETH goes to the dev wallet and the rest to the research vault.\n- Payout happens inside the swap. A recipient that rejects ETH is credited and pulls with `withdraw`. A PoolManager without enough ETH yields an ERC-6909 claim that anyone redeems with `redeemClaims`.\n- Owner functions only lower the two fees, never below the dev share or below the base fee. Ownership is transferable and renounceable. No liquidity, mint, pause or recipient-ETH functions exist.\n- `script/Deploy.s.sol` records the fixed recipient and owner addresses and mines a flagged CREATE2 address. `README.md` documents the fee definition, payout paths, constructor arguments for the manifest, operational duties and assumptions.\n\n**Verification**\n\n| Check | Result |\n| --- | --- |\n| `forge build` (offline, fresh clone) | passes |\n| `forge test` with the verifier's fuzz seed | 53 passed, 0 failed |\n| `forge fmt --check` | passes |\n| Pinned floor tests run in scratch with a simulated verifier environment | 16 passed, 0 failed |\n\n**Two things to know**\n\n- The brief asked for mainnet fork tests. The verifier runs with no network and an empty environment, so the tests deploy the real PoolManager code from v4-core locally instead and run every scenario against it, with a funded and an ETH-less manager fixture. The README states this.\n- Dependencies are vendored as plain files with no submodules. The sandbox mounted two nested `.gitmodules` files read-only inside `lib/v4-core` and `lib/openzeppelin-contracts`, so they could not be deleted. They are harmless since git only reads the root file and no gitlink entries exist.","treeHash":"4a6502180eeb76ad8b17e53e8631d73543270a82","usage":{"cachedInputTokens":3947581,"inputTokens":930,"model":"claude-fable-5-1","outputTokens":90512,"runtime":"claude","turns":53,"wallClockMs":1286201}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"7236faf97e42979a","findings":[],"hash":"676a3f528d0bc33bbfab7dea8a1cce6ff4fad5b19658a4adf394234d702d6458","nodeId":"ecd3543a-c517-4ec8-888a-c09798e86e43","outcome":"failed","summary":"fetch failed","treeHash":null,"usage":{"cachedInputTokens":0,"inputTokens":0,"model":null,"outputTokens":0,"runtime":"claude","turns":0,"wallClockMs":197}},{"artifacts":[],"attempt":3,"bundleHash":null,"device":"2717ac8e1d58fd36","findings":[],"hash":"72bf594f5eb06cba9ff79b8b38dcde50c4a88cb951f2d66351b5b136d889fd96","nodeId":"c136adb4-e7dd-430c-af43-6305f4f010df","outcome":"failed","summary":"fetch failed","treeHash":null,"usage":{"cachedInputTokens":0,"inputTokens":0,"model":null,"outputTokens":0,"runtime":"codex","turns":0,"wallClockMs":79}},{"artifacts":[],"attempt":2,"bundleHash":null,"device":"93c37f17670e4d98","findings":[],"hash":"8b39cc55395f7bf1acf6cb12a47e6e7ecdeb8feab1e417b63e2de0bd07ee28a1","nodeId":"3a5e9473-fb3e-4d9b-94d5-89f5d16cbf74","outcome":"failed","summary":"fetch failed","treeHash":null,"usage":{"cachedInputTokens":0,"inputTokens":0,"model":null,"outputTokens":0,"runtime":"claude","turns":0,"wallClockMs":21}},{"artifacts":[],"attempt":2,"bundleHash":null,"device":"f0c4ae5b8ada215c","findings":[],"hash":"92c10a538b286f250c924cc520736efe6174420ffbb90358abb0b9b3d977a3db","nodeId":"61f13992-8b74-4bd1-b3d1-5be49fbff085","outcome":"failed","summary":"fetch failed","treeHash":null,"usage":{"cachedInputTokens":0,"inputTokens":0,"model":null,"outputTokens":0,"runtime":"claude","turns":0,"wallClockMs":50}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"357c46e3781993d4","findings":[],"hash":"931c18cc6feadcaf28a005395b13f6d355a36cee181e20350926e4c05965db4a","nodeId":"61f13992-8b74-4bd1-b3d1-5be49fbff085","outcome":"failed","summary":"fetch failed","treeHash":null,"usage":{"cachedInputTokens":0,"inputTokens":0,"model":null,"outputTokens":0,"runtime":"claude","turns":0,"wallClockMs":102}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"6e1819675bb7567a","findings":[],"hash":"c7afbca481d2aa4ec2351a708eeadeb3d038e2d57c378fbc4abf1dea3836f07a","nodeId":"3a5e9473-fb3e-4d9b-94d5-89f5d16cbf74","outcome":"failed","summary":"fetch failed","treeHash":null,"usage":{"cachedInputTokens":0,"inputTokens":0,"model":null,"outputTokens":0,"runtime":"codex","turns":0,"wallClockMs":75}},{"artifacts":[],"attempt":2,"bundleHash":null,"device":"163f8bc7d28274e2","findings":[],"hash":"d157be13b51ed2f5ca5e493d3e237c0bc2b5f23038f2c4b519b7f53cd4816f12","nodeId":"c136adb4-e7dd-430c-af43-6305f4f010df","outcome":"failed","summary":"fetch failed","treeHash":null,"usage":{"cachedInputTokens":0,"inputTokens":0,"model":null,"outputTokens":0,"runtime":"codex","turns":0,"wallClockMs":30}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"803eeae3d8b63de3","findings":[],"hash":"d965320bd8e2d97834cd333989085ea6dba1846c833e096b4f0d179e2f085c21","nodeId":"85191cfa-dc14-4e47-a6e2-f22d7aa7a257","outcome":"failed","summary":"fetch failed","treeHash":null,"usage":{"cachedInputTokens":0,"inputTokens":0,"model":null,"outputTokens":0,"runtime":"claude","turns":0,"wallClockMs":89}},{"artifacts":[],"attempt":2,"bundleHash":null,"device":"dfa08759ca0424de","findings":[],"hash":"dd27159adb1b49673bace507baac4c22b3a2fd424b6b1e702e71e2c31fc84ffd","nodeId":"1278a2d3-bd4a-424d-aa46-f9e58cdabe79","outcome":"failed","summary":"fetch failed","treeHash":null,"usage":{"cachedInputTokens":0,"inputTokens":0,"model":null,"outputTokens":0,"runtime":"claude","turns":0,"wallClockMs":35}}],"verification":[{"checks":[{"durationMs":2962,"exitCode":0,"name":"build","output":"Compiling 84 files with Solc 0.8.26\nSolc 0.8.26 finished in 2.80s\nCompiler run successful!\n","passed":true},{"durationMs":212,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 5 tests for test/LaunchToken.t.sol:LaunchTokenTest\n[PASS] test_metadata() (gas: 29219)\n[PASS] test_noMintPauseOrOwner() (gas: 153287)\n[PASS] test_supplyMintedOnceToDeployer() (gas: 24700)\n[PASS] test_transferFromNeedsAllowance() (gas: 142183)\n[PASS] test_transferMovesExactly() (gas: 83527)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 955.05µs (913.86µs CPU time)\n\nRan 5 tests for test/LaunchHook.t.sol:LaunchHookFreshManagerTest\n[PASS] test_firstBuyOnFreshManager_mintsClaim_thenRedeems() (gas: 519088)\n[PASS] test_redeemClaims_keepsCreditForRejectingVault() (gas: 519619)\n[PASS] test_redeemClaims_withNothingPending_isNoop() (gas: 42937)\n[PASS] test_secondBuyOnFreshManager_paysDirectlyOnceEthIsIn() (gas: 522786)\n[PASS] test_withdrawRedeemsClaimsOnDemand() (gas: 402855)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 2.49ms (2.02ms CPU time)\n\nRan 13 tests for test/LaunchHookAdmin.t.sol:LaunchHookAdminTest\n[PASS] test_baseFeeCannotGoBelowDevShare() (gas: 389124)\n[PASS] test_launchFeeCannotGoBelowBaseFee() (gas: 80951)\n[PASS] test_loweringBaseBelowLaunchKeepsDecayValid() (gas: 97647)\n[PASS] test_noLiquidityOrMintOrPauseEntryPoints() (gas: 197264)\n[PASS] test_nonOwnerCannotSetFees() (gas: 130690)\n[PASS] test_ownerCanLowerBaseFee_andSwapsUseIt() (gas: 588435)\n[PASS] test_ownerCanLowerLaunchFee_andDecayStartsThere() (gas: 391321)\n[PASS] test_ownerCannotRaiseBaseFee() (gas: 116446)\n[PASS] test_ownerCannotRaiseLaunchFee() (gas: 113669)\n[PASS] test_ownerHasNoAccessToRecipientCredit() (gas: 342048)\n[PASS] test_recipientsAndFactoryAreNotOwners() (gas: 62379)\n[PASS] test_renounceOwnership_freezesFees() (gas: 347769)\n[PASS] test_transferOwnership() (gas: 110222)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 3.14ms (3.79ms CPU time)\n\nRan 2 tests for test/Deploy.t.sol:DeployTest\n[PASS] test_deployWithLaunchParams() (gas: 19242670)\n[PASS] test_launchParamsMatchBrief() (gas: 524)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 15.45ms (15.18ms CPU time)\n\nRan 28 tests for test/LaunchHook.t.sol:LaunchHookTest\n[PASS] testFuzz_buyExactInput_conservesEthAndSplitsCorrectly(uint256,uint256) (runs: 256, μ: 344053, ~: 343974)\n[PASS] testFuzz_buyFeeDecaysMonotonically(uint256,uint256) (runs: 256, μ: 22557, ~: 22581)\n[PASS] testFuzz_sellExactInput_conservesEthAndSplitsCorrectly(uint256) (runs: 256, μ: 540367, ~: 540354)\n[PASS] test_buyAt1800_pays16Percent() (gas: 333627)\n[PASS] test_buyAt3600_pays2Percent() (gas: 333267)\n[PASS] test_buyExactInput_t0_pays30Percent() (gas: 336141)\n[PASS] test_buyExactOutput_t0_pays30PercentOfGross() (gas: 332017)\n[PASS] test_buyLongAfterWindow_pays2Percent() (gas: 332274)\n[PASS] test_callbacksRefuseNonManager() (gas: 122764)\n[PASS] test_constructorRejectsWrongFlags() (gas: 78168)\n[PASS] test_constructorRejectsZeroAddresses() (gas: 230663)\n[PASS] test_feeSchedule_views() (gas: 91203)\n[PASS] test_gasHungryVault_isCredited_andPullsWithFullGas() (gas: 1397845)\n[PASS] test_hookRefusesStrayEth() (gas: 33068)\n[PASS] test_immutablesAndDefaults() (gas: 65746)\n[PASS] test_initializeAcceptsAnyListedFeeAndSpacing() (gas: 189317)\n[PASS] test_initializeWithWrongToken_reverts() (gas: 743180)\n[PASS] test_initializeWithoutEth_reverts() (gas: 743624)\n[PASS] test_permissionsMatchAddress() (gas: 12145)\n[PASS] test_rejectingVault_canWithdrawToAnotherAddress() (gas: 365311)\n[PASS] test_rejectingVault_doesNotBlockSwap_andCanWithdraw() (gas: 535117)\n[PASS] test_secondInitialize_reverts() (gas: 86855)\n[PASS] test_sellExactInput_pays2Percent() (gas: 539862)\n[PASS] test_sellExactOutput_pays2PercentOfGross() (gas: 540830)\n[PASS] test_sellInsideLaunchWindow_stillPays2Percent() (gas: 560899)\n[PASS] test_strangerCannotTakeRecipientCredit() (gas: 331253)\n[PASS] test_withdraw_nothingOwed_reverts() (gas: 59764)\n[PASS] test_withdraw_toZero_reverts() (gas: 29788)\nSuite result: ok. 28 passed; 0 failed; 0 skipped; finished in 53.76ms (99.80ms CPU time)\n\nRan 5 test suites in 55.26ms (75.80ms CPU time): 53 tests passed, 0 failed, 0 skipped (53 total tests)\n","passed":true},{"durationMs":150,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"LaunchHook.afterInitialize(address,(address,address,uint24,int24,address),uint160,int24)\",\"LaunchHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"LaunchHook.beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\",\"LaunchHook.receive()\",\"LaunchHook.redeemClaims()\",\"LaunchHook.renounceOwnership()\",\"LaunchHook.setBaseFee(uint16)\",\"LaunchHook.setLaunchFee(uint16)\",\"LaunchHook.transferOwnership(address)\",\"LaunchHook.unlockCallback(bytes)\",\"LaunchHook.withdraw(address)\",\"LaunchToken.approve(address,uint256)\",\"LaunchToken.transfer(address,uint256)\",\"LaunchToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"README.md\":192,\"foundry.toml\":24,\"remappings.txt\":5,\"script/Deploy.s.sol\":69,\"src/HookFlags.sol\":55,\"src/LaunchHook.sol\":498,\"src/LaunchToken.sol\":17,\"test/Deploy.t.sol\":49,\"test/LaunchHook.t.sol\":487,\"test/LaunchHookAdmin.t.sol\":190,\"test/LaunchHookBase.sol\":118,\"test/LaunchToken.t.sol\":65,\"test/floor/OwnerChecks.sol\":24,\"test/mocks/MockERC20.sol\":15,\"test/mocks/Recipients.sol\":41,\"test/mocks/Swapper.sol\":96},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":1412,"exitCode":0,"name":"slither","output":"[medium/high] incorrect-equality at src/LaunchHook.sol:181: LaunchHook.buyFeeBpsAt(uint256) (src/LaunchHook.sol#181-189) uses a dangerous strict equality:\n[medium/medium] uninitialized-local at src/LaunchHook.sol:302: LaunchHook.beforeSwap(address,PoolKey,SwapParams,bytes).fee (src/LaunchHook.sol#302) is a local variable never initialized\n[medium/medium] uninitialized-local at src/LaunchHook.sol:334: LaunchHook.afterSwap(address,PoolKey,SwapParams,BalanceDelta,bytes).hookDelta (src/LaunchHook.sol#334) is a local variable never initialized\n[medium/medium] unused-return at src/LaunchHook.sol:480: LaunchHook._redeemClaims() (src/LaunchHook.sol#480-485) ignores return value by poolManager.unlock(abi.encode(claims)) (src/LaunchHook.sol#483)\n[low/medium] reentrancy-benign at src/LaunchHook.sol:425: Reentrancy in LaunchHook._collect(bool,bool,uint256,uint256) (src/LaunchHook.sol#425-445):\n[low/medium] reentrancy-benign at src/LaunchHook.sol:252: Reentrancy in LaunchHook.redeemClaims() (src/LaunchHook.sol#252-256):\n[low/medium] reentrancy-benign at src/LaunchHook.sol:425: Reentrancy in LaunchHook._collect(bool,bool,uint256,uint256) (src/LaunchHook.sol#425-445):\n[low/medium] reentrancy-events at src/LaunchHook.sol:425: Reentrancy in LaunchHook._collect(bool,bool,uint256,uint256) (src/LaunchHook.sol#425-445):\n[low/medium] reentrancy-events at src/LaunchHook.sol:480: Reentrancy in LaunchHook._redeemClaims() (src/LaunchHook.sol#480-485):\n[low/medium] reentrancy-events at src/LaunchHook.sol:252: Reentrancy in LaunchHook.redeemClaims() (src/LaunchHook.sol#252-256):\n[low/medium] reentrancy-events at src/LaunchHook.sol:425: Reentrancy in LaunchHook._collect(bool,bool,uint256,uint256) (src/LaunchHook.sol#425-445):\n[low/medium] reentrancy-events at src/LaunchHook.sol:240: Reentrancy in LaunchHook.withdraw(address) (src/LaunchHook.sol#240-249):\n[low/medium] timestamp at src/LaunchHook.sol:181: LaunchHook.buyFeeBpsAt(uint256) (src/LaunchHook.sol#181-189) uses timestamp for comparisons\n[low/medium] timestamp at src/LaunchHook.sol:276: LaunchHook.afterInitialize(address,PoolKey,uint160,int24) (src/LaunchHook.sol#276-289) uses timestamp for comparisons","passed":true},{"durationMs":429,"exitCode":0,"name":"aderyn","output":"[low] centralization-risk at src/LaunchHook.sol:42: Centralization Risk (3 places)\n[low] internal-function-used-once at src/HookFlags.sol:29: Internal Function Used Only Once\n[low] large-numeric-literal at src/LaunchHook.sol:51: Large Numeric Literal (3 places)\n[low] push-zero-opcode at src/HookFlags.sol:2: PUSH0 Opcode\n[low] unchecked-return at src/LaunchHook.sol:483: Unchecked Return\n[low] unused-public-function at src/LaunchHook.sol:197: Public Function Not Used Internally (2 places)","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"4bace423548b4f65cc74698feac577f4ab78839f8ed2108cd088dd41686848a3","verifiedTreeHash":"4a6502180eeb76ad8b17e53e8631d73543270a82","verifierVersion":"0.1.0+3dc93dc1"}]}