{"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":"1698e300-e594-4daa-82d3-a4bfb7d09b2d","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":null,"dependsOn":["build_contract_project","write_foundry_tests","manifest"],"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":"waiting"},{"acceptedSubmissionHash":null,"dependsOn":["build_contract_project","write_foundry_tests","manifest"],"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":"waiting"},{"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":"3014f1ea5961918ca059453a484bf4c8bcbbfc2248dbe31d94ac7c5cdf8f50bd","skillId":"audit-judge","tools":[]},"key":"audit_judge","kind":"code","role":"review","skillHash":"3014f1ea5961918ca059453a484bf4c8bcbbfc2248dbe31d94ac7c5cdf8f50bd","skillId":"audit-judge","state":"waiting"},{"acceptedSubmissionHash":null,"dependsOn":["build_contract_project","write_foundry_tests","manifest"],"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":"waiting"},{"acceptedSubmissionHash":null,"dependsOn":["build_contract_project","write_foundry_tests","manifest"],"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":"waiting"},{"acceptedSubmissionHash":"7179241efa50ada0b2be4fb08cfc15593c420531b5de464051e233425dacdace","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"587567a5ef71546b5973ceaf6ef1dbbd590f49503b5ac9a6973ed86b89584857","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"587567a5ef71546b5973ceaf6ef1dbbd590f49503b5ac9a6973ed86b89584857","skillId":"build-contract-project","state":"accepted"},{"acceptedSubmissionHash":null,"dependsOn":["build_contract_project","write_foundry_tests"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"failed"},{"acceptedSubmissionHash":"0cfb7d50d2771badf47ed59a253f1111a5c82da21ee7a7ad5d86ce9f6b06cfaf","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"73431852439ad3a343f3d2b7db1c43cd363b9f48f9bb51497374a0cf6d50b223","skillId":"write-foundry-tests","tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"73431852439ad3a343f3d2b7db1c43cd363b9f48f9bb51497374a0cf6d50b223","skillId":"write-foundry-tests","state":"accepted"}],"objective":"[SIMD-LAUNCH]\nThe token will be named SIMDTEST with symbol SIMDTEST, paired with IMD on Ethereum via Identity.md's launch.open using the Uniswap v4 hook mechanism. The project is a preset fair launch test on the SIMD Launchpad, demonstrating trustless anti-snipe and max buy rules to protect early liquidity and buyers. The SIMDTESTHook contract acts on the pool's open callback and on every swap callback. For the first 10 blocks after pool opening, it adds an anti-snipe swap fee that starts at 30% on volume and linearly decays to 0% by block 10; this fee is immediately donated back to the pool's in-range liquidity via the PoolManager donate function, so no paired (IMD) currency is burned. For the first 1 hour after pool opening, the hook enforces a max buy limit: any single swap cannot purchase more than 1% of the token's total supply. After these periods, swaps are normal, with no extra fees or limits. The hook takes no owner or upgrade rights, is not pausable, and no other contract (vault) is used. Testing must cover the anti-snipe fee decay from 30% to 0% over 10 blocks at pool open, enforcement of the 1% max buy per swap limit for 1 hour, and normal trading behavior afterward. It must also verify that the donated fees properly increase pool liquidity without burning paired tokens. The hook respects SIMD's fixed fees (creator fees split by the fee splitter) and the pool's base 1.25% fee, which it does not alter or replace.\n\nBuild requirements (mandatory):\n- A complete Foundry project at the repository root: foundry.toml with solc 0.8.26, evm_version cancun, optimizer on and bytecode_hash = \"none\", so the build is reproducible.\n- Contracts: SIMDTESTHook. The hook is the hook of this launch's pool; keep its creation code within the EIP-3860 size limit.\n- No selfdestruct and no delegatecall anywhere in runtime code. No proxies, no owner, no upgradeability.","parentJobId":null,"planHash":"90e94c52b2974bbbe986029430aea643b6413adb5a85ac36483fb4d0ef63164d","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"1698e300-e594-4daa-82d3-a4bfb7d09b2d","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-962-simd-launch-token-will-named"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51380","feedbackHash":"b962f4992fa8ec0ec5fa83bdb3a2ca8461581d1d7ac4a53a22e25eccb00aeb21","nodeKey":"build_contract_project","submissionHash":"7179241efa50ada0b2be4fb08cfc15593c420531b5de464051e233425dacdace","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51411","feedbackHash":"2cc0cdfb5ce8b4e101e730ff38c079a1c733d93c73bb70051453cab18f98dc5e","nodeKey":"write_foundry_tests","submissionHash":"0cfb7d50d2771badf47ed59a253f1111a5c82da21ee7a7ad5d86ce9f6b06cfaf","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"d609c7de31812256ae80b369f55c043a7ee9b1c96724a7092355b84dc70e5616","state":"blocked","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"45abe0eb3d278f8df875d3bbef0b9880efa2b39b94d6e360db482b71d699c364","device":"964f2d8baaf7b03b","findings":[],"hash":"0cfb7d50d2771badf47ed59a253f1111a5c82da21ee7a7ad5d86ce9f6b06cfaf","nodeId":"3c1d5f8e-5b16-4d0e-9b63-c286b68d7a5f","outcome":"completed","summary":"Added stateful invariants, batch rollback tests, tick-crossing donation checks, and stronger fuzz coverage. All changes are under `test/`.\n\n`forge build` and `forge test` pass: **65 tests**, 4,000 fuzz cases, and 32,768 invariant calls.\n\nLive launch factory and fee-splitter integration remains unverified because those implementations were not supplied. No confirmed implementation defects were found.","treeHash":"1cfea62440de742299b7d04ac3fe61d9a36cc815","usage":{"cachedInputTokens":936448,"inputTokens":68722,"model":"gpt-6-astra","outputTokens":21862,"runtime":"codex","turns":7,"wallClockMs":670388}},{"artifacts":[],"attempt":1,"bundleHash":"51b6bcd7f3bf5ed0f88484e6d9dcbf4ef66111159a7c6bbb52de702ccee32879","device":"f7cb61cceaa27e78","findings":[],"hash":"7179241efa50ada0b2be4fb08cfc15593c420531b5de464051e233425dacdace","nodeId":"8c401d60-acff-466c-b0dd-f5ed618deeb9","outcome":"completed","summary":"Implemented the token, immutable hook, vendored dependencies, and integration tests.\n\n- `forge build` passes.\n- All 53 tests pass.\n- `forge fmt --check` passes.\n- Hook init code is 5,289 bytes, below EIP-3860’s limit.\n\n[README](./README.md) documents fee denomination, donation behavior, deployment parameters, and responsibilities. Tests use the real v4 PoolManager; live `launch.open` integration remains unverified.","treeHash":"50f58955161e8ea6fd1ca827ad348b0ff2a808e9","usage":{"cachedInputTokens":1370368,"inputTokens":101200,"model":"gpt-6-astra","outputTokens":24829,"runtime":"codex","turns":6,"wallClockMs":709701}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"ce823f211d29a38d","findings":[],"hash":"d8f790609926540d54320300de21674cf77a6fd8f573cceab59bed4ae4ffa8b1","nodeId":"712e723f-cf52-4b74-8f78-67555ec7b416","outcome":"failed","summary":"needs input: The required pool.tickSpacing and pool.initialPrice (decimal sqrtPriceX96) are not specified for the SIMDTEST/IMD launch. The repository documents tick spacing 60 and a 1:1 price only as local test fixtures. The manifest schema provides no placeholders for these fields, so using those fixture values would guess deployment inputs. — What approved tickSpacing and initialPrice (sqrtPriceX96 in decimal, for the address-sorted currency0/currency1 pool) should launch.json use for the SIMDTEST/IMD launch?","treeHash":null,"usage":{"cachedInputTokens":212992,"inputTokens":36581,"model":"gpt-6-astra","outputTokens":1861,"runtime":"codex","turns":3,"wallClockMs":69490}}],"verification":[{"checks":[{"durationMs":3508,"exitCode":0,"name":"build","output":"Compiling 78 files with Solc 0.8.26\nSolc 0.8.26 finished in 3.38s\nCompiler run successful!\nwarning[block-timestamp]: usage of `block.timestamp` in a comparison may be manipulated by validators\n    ╭▸ src/SIMDTESTHook.sol:119:13\n    │\n119 │         if (block.timestamp - openedAtTimestamp < MAX_BUY_DURATION && tokenDelta > int256(maxBuy)) {\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/block-timestamp\n\nwarning[reentrancy-events]: event emitted after an external call; reentrancy can reorder or fabricate logs that off-chain consumers rely on\n    ╭▸ src/SIMDTESTHook.sol:137:9\n    │\n137 │         emit AntiSnipeDonation(poolId, feeIsCurrency0 ? key.currency0 : key.currency1, volume, fee, feeBps);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:119:84\n    │\n119 │         if (block.timestamp - openedAtTimestamp < MAX_BUY_DURATION && tokenDelta > int256(maxBuy)) {\n    │                                                                                    ━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:120:35\n    │\n120 │             revert MaxBuyExceeded(uint256(int256(tokenDelta)), maxBuy);\n    │                                   ━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:128:26\n    │\n128 │         uint256 volume = uint256(unspecified < 0 ? -unspecified : unspecified);\n    │                          ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unused-return]: return value of an external call is not used\n    ╭▸ src/SIMDTESTHook.sol:136:9\n    │\n136 │         poolManager.donate(key, feeIsCurrency0 ? fee : 0, feeIsCurrency0 ? 0 : fee, \"\");\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/unused-return\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:138:44\n    │\n138 │         return (IHooks.afterSwap.selector, int128(int256(fee)));\n    │                                            ━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:138:51\n    │\n138 │         return (IHooks.afterSwap.selector, int128(int256(fee)));\n    │                                                   ━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:146:16\n    │\n146 │         return uint24(INITIAL_FEE_BPS * (ANTI_SNIPE_BLOCKS - elapsed) / ANTI_SNIPE_BLOCKS);\n    │                ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint24' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\n","passed":true},{"durationMs":4721,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 3 tests for test/SIMDTEST.t.sol:SIMDTESTTest\n[PASS] testFixedSupplyAndMetadata() (gas: 52579)\n[PASS] testRejectsZeroRecipientAndInsufficientBalance() (gas: 58647)\n[PASS] testTransferAndAllowance() (gas: 203518)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 725.64µs (417.12µs CPU time)\n\nRan 4 tests for test/SIMDTESTLaunchEdges.t.sol:SIMDTESTLaunchToken1EdgesTest\n[PASS] testFuzz_capChecksActualOutputAcrossBothClocks(uint96,uint16,bool,bool) (runs: 1000, μ: 511583, ~: 504438)\nLogs:\n  Bound result 24999999999999999999999944\n  Bound result 3610\n\n[PASS] test_batchCapIsPerSwapAndEveryDonationIsSettled() (gas: 1661270)\n[PASS] test_batchRejectedSecondBuyRollsBackFirstSwapAndDonation() (gas: 1296416)\n[PASS] test_donationFollowsLiquidityAfterCrossingInitializedTick() (gas: 1353899)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 124.02ms (114.58ms CPU time)\n\nRan 4 tests for test/SIMDTESTLaunchEdges.t.sol:SIMDTESTLaunchEdgesTest\n[PASS] testFuzz_capChecksActualOutputAcrossBothClocks(uint96,uint16,bool,bool) (runs: 1000, μ: 500453, ~: 494991)\nLogs:\n  Bound result 24999999999999999999999944\n  Bound result 3610\n\n[PASS] test_batchCapIsPerSwapAndEveryDonationIsSettled() (gas: 1652952)\n[PASS] test_batchRejectedSecondBuyRollsBackFirstSwapAndDonation() (gas: 1292277)\n[PASS] test_donationFollowsLiquidityAfterCrossingInitializedTick() (gas: 1353791)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 130.32ms (119.38ms CPU time)\n\nRan 25 tests for test/SIMDTESTHook.t.sol:SIMDTESTHookTest\n[PASS] testActualFeeDecayEveryBlockBothDirectionsAndModes() (gas: 26846879)\n[PASS] testAllEnabledCallbacksRejectUnauthorizedCaller() (gas: 84201)\n[PASS] testBeforeSwapNeverOverridesBaseFee() (gas: 27546)\n[PASS] testCannotFrontRunFactoryOpening() (gas: 50490604)\n[PASS] testCannotReuseHookForAnotherPoolOrResetClocks() (gas: 125456)\n[PASS] testConstructorRejectsIncorrectPermissionBits() (gas: 17777)\n[PASS] testConstructorRejectsMissingContractsFactoryAndWrongSupply() (gas: 7665)\n[PASS] testDeploymentSizeAndNoForbiddenRuntimeOpcodes() (gas: 1303255)\n[PASS] testDonatedIMDIsClaimableOnlyByInRangeLiquidity() (gas: 984581)\n[PASS] testDonationWithoutRemainingInRangeLiquidityRevertsAtomically() (gas: 791871)\n[PASS] testDustRoundingAndZeroOutput() (gas: 4646025)\n[PASS] testElapsedTimeDoesNotDisableBlockFee() (gas: 649925)\n[PASS] testFactoryOpeningAndPermissions() (gas: 114988)\n[PASS] testFeeExpiryDoesNotDisableMaxBuy() (gas: 142510)\n[PASS] testFuzzExecutedVolumeFeeAndConservation(uint96,uint8,bool,bool) (runs: 1000, μ: 654512, ~: 655789)\nLogs:\n  Bound result 0\n  Bound result 5012\n\n[PASS] testHookDataCannotExemptBuyer() (gas: 125915)\n[PASS] testInitializationFailureRollsBackOpeningAndCanRetry() (gas: 50624653)\n[PASS] testMaxBuyChecksGrossOutputBeforeFeeDeduction() (gas: 301678)\n[PASS] testMaxBuyExactOutputBoundaryAndOneUnitOver() (gas: 372157)\n[PASS] testOneHourBoundaryAndNormalTradingAfterward() (gas: 2544614)\n[PASS] testPartialFillUsesExecutedAmount() (gas: 436691)\n[PASS] testRejectsWrongFeeAndWrongToken() (gas: 50778719)\n[PASS] testSellsAreNotCappedAndCapIsPerSwap() (gas: 616144)\n[PASS] testSettlementFailureRollsBackDonationAndSwap() (gas: 384723)\n[PASS] testUnopenedHookRejectsSwaps() (gas: 50319846)\nSuite result: ok. 25 passed; 0 failed; 0 skipped; finished in 135.37ms (277.37ms CPU time)\n\nRan 25 tests for test/SIMDTESTHook.t.sol:SIMDTESTHookToken1Test\n[PASS] testActualFeeDecayEveryBlockBothDirectionsAndModes() (gas: 26862507)\n[PASS] testAllEnabledCallbacksRejectUnauthorizedCaller() (gas: 84005)\n[PASS] testBeforeSwapNeverOverridesBaseFee() (gas: 27526)\n[PASS] testCannotFrontRunFactoryOpening() (gas: 34558986)\n[PASS] testCannotReuseHookForAnotherPoolOrResetClocks() (gas: 125260)\n[PASS] testConstructorRejectsIncorrectPermissionBits() (gas: 17777)\n[PASS] testConstructorRejectsMissingContractsFactoryAndWrongSupply() (gas: 7665)\n[PASS] testDeploymentSizeAndNoForbiddenRuntimeOpcodes() (gas: 1303255)\n[PASS] testDonatedIMDIsClaimableOnlyByInRangeLiquidity() (gas: 972178)\n[PASS] testDonationWithoutRemainingInRangeLiquidityRevertsAtomically() (gas: 779571)\n[PASS] testDustRoundingAndZeroOutput() (gas: 4670535)\n[PASS] testElapsedTimeDoesNotDisableBlockFee() (gas: 659893)\n[PASS] testFactoryOpeningAndPermissions() (gas: 114987)\n[PASS] testFeeExpiryDoesNotDisableMaxBuy() (gas: 147533)\n[PASS] testFuzzExecutedVolumeFeeAndConservation(uint96,uint8,bool,bool) (runs: 1000, μ: 654014, ~: 655716)\nLogs:\n  Bound result 13\n  Bound result 999999999999999999999944\n\n[PASS] testHookDataCannotExemptBuyer() (gas: 130938)\n[PASS] testInitializationFailureRollsBackOpeningAndCanRetry() (gas: 34695046)\n[PASS] testMaxBuyChecksGrossOutputBeforeFeeDeduction() (gas: 314368)\n[PASS] testMaxBuyExactOutputBoundaryAndOneUnitOver() (gas: 382178)\n[PASS] testOneHourBoundaryAndNormalTradingAfterward() (gas: 2561383)\n[PASS] testPartialFillUsesExecutedAmount() (gas: 448552)\n[PASS] testRejectsWrongFeeAndWrongToken() (gas: 34767518)\n[PASS] testSellsAreNotCappedAndCapIsPerSwap() (gas: 608120)\n[PASS] testSettlementFailureRollsBackDonationAndSwap() (gas: 371709)\n[PASS] testUnopenedHookRejectsSwaps() (gas: 34389150)\nSuite result: ok. 25 passed; 0 failed; 0 skipped; finished in 135.55ms (373.33ms CPU time)\n\nRan 2 tests for test/SIMDTESTLaunch.invariant.t.sol:SIMDTESTLaunchInvariantTest\n[PASS] invariant_conservationSettlementAndLaunchRules() (runs: 256, calls: 16384, reverts: 0)\n\n╭---------------+-----------------------+-------+---------+----------╮\n| Contract      | Selector              | Calls | Reverts | Discards |\n+====================================================================+\n| LaunchHandler | advanceBlocks         | 2080  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| LaunchHandler | advanceTime           | 2016  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| LaunchHandler | buyAtLimit            | 2024  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| LaunchHandler | changeLiquidity       | 2062  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| LaunchHandler | collectFees           | 2080  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| LaunchHandler | failPayment           | 2038  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| LaunchHandler | trade                 | 1994  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| LaunchHandler | unauthorizedCallbacks | 2090  | 0       | 0        |\n╰---------------+-----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 179715121819044\n  Bound result 17521\n  Bound result 10660\n  Bound result 0\n  Bound result 3735\n  Bound result 16845\n  Bound result 0\n  Bound result 1037327066\n  Bound result 56\n  Bound result 3\n  Bound result 2063\n  Bound result 0\n  Bound result 0\n  Bound result 99000000000000002237\n  Bound result 2957397981\n  Bound result 99000000000000009347\n  Bound result 0\n  Bound result 99003191960530911751\n  Bound result 99000000000000002039\n  Bound result 99006550377872773713\n  Bound result 10157\n  Bound result 13372\n  Bound result 16003\n  Bound result 1017108793\n  Bound result 17133\n  Bound result 51923727504012558383\n  Bound result 3\n  Bound result 8\n  Bound result 7\n  Bound result 179715143538924\n  Bound result 99000000000000017565\n  Bound result 99000000000000005597\n  Bound result 99000004191644118201\n  Bound result 0\n  Bound result 373\n  Bound result 99000000000000000250\n  Bound result 128\n  Bound result 99000000000000006019\n  Bound result 571\n  Bound result 0\n\n[PASS] test_handlerActionsAreNonVacuous() (gas: 3624350)\nLogs:\n  Bound result 10000000000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 1000000000000000000\n  Bound result 1000000000000000000\n  Bound result 3\n  Bound result 900\n  Bound result 3\n  Bound result 900\n  Bound result 3\n  Bound result 900\n  Bound result 3\n  Bound result 900\n  Bound result 0\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 4.62s (4.60s CPU time)\n\nRan 2 tests for test/SIMDTESTLaunch.invariant.t.sol:SIMDTESTLaunchToken1InvariantTest\n[PASS] invariant_conservationSettlementAndLaunchRules() (runs: 256, calls: 16384, reverts: 0)\n\n╭---------------+-----------------------+-------+---------+----------╮\n| Contract      | Selector              | Calls | Reverts | Discards |\n+====================================================================+\n| LaunchHandler | advanceBlocks         | 2080  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| LaunchHandler | advanceTime           | 2016  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| LaunchHandler | buyAtLimit            | 2024  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| LaunchHandler | changeLiquidity       | 2062  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| LaunchHandler | collectFees           | 2080  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| LaunchHandler | failPayment           | 2038  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| LaunchHandler | trade                 | 1994  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| LaunchHandler | unauthorizedCallbacks | 2090  | 0       | 0        |\n╰---------------+-----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 179715121819044\n  Bound result 70187531273912218377811\n  Bound result 8571\n  Bound result 0\n  Bound result 515\n  Bound result 791\n  Bound result 0\n  Bound result 50838696058970097513300102\n  Bound result 620\n  Bound result 3\n  Bound result 20189844570792960965720\n  Bound result 0\n  Bound result 0\n  Bound result 99000000000000004451\n  Bound result 2039\n  Bound result 99000000002428483687\n  Bound result 3\n  Bound result 99003191960530911751\n  Bound result 99000000000000016446\n  Bound result 99006550377872773713\n  Bound result 11221\n  Bound result 11039\n  Bound result 6372\n  Bound result 1334\n  Bound result 76139969642249661883300\n  Bound result 51923727504012558383\n  Bound result 3\n  Bound result 8\n  Bound result 7\n  Bound result 29812468905802925181554\n  Bound result 99000000000000012502\n  Bound result 99000000000000002224\n  Bound result 99000004191644118201\n  Bound result 0\n  Bound result 856\n  Bound result 99000000000000016845\n  Bound result 181\n  Bound result 99000000003291928461\n  Bound result 429\n  Bound result 0\n\n[PASS] test_handlerActionsAreNonVacuous() (gas: 3626668)\nLogs:\n  Bound result 10000000000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 1000000000000000000\n  Bound result 1000000000000000000\n  Bound result 3\n  Bound result 900\n  Bound result 3\n  Bound result 900\n  Bound result 3\n  Bound result 900\n  Bound result 3\n  Bound result 900\n  Bound result 0\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 4.64s (4.63s CPU time)\n\nRan 7 test suites in 4.64s (9.79s CPU time): 65 tests passed, 0 failed, 0 skipped (65 total tests)\n","passed":true},{"durationMs":49,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SIMDTEST.approve(address,uint256)\",\"SIMDTEST.transfer(address,uint256)\",\"SIMDTEST.transferFrom(address,address,uint256)\",\"SIMDTESTHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"SIMDTESTHook.beforeInitialize(address,(address,address,uint24,int24,address),uint160)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":9,\"README.md\":179,\"foundry.toml\":22,\"src/SIMDTEST.sol\":11,\"src/SIMDTESTHook.sol\":153,\"test/SIMDTEST.t.sol\":46,\"test/SIMDTESTHook.t.sol\":565,\"test/SIMDTESTLaunch.invariant.t.sol\":124,\"test/SIMDTESTLaunchEdges.t.sol\":236,\"test/TESTING.md\":58,\"test/helpers/LaunchFixture.sol\":91,\"test/helpers/LaunchHandler.sol\":281,\"test/helpers/PoolRouter.sol\":67},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"0cfb7d50d2771badf47ed59a253f1111a5c82da21ee7a7ad5d86ce9f6b06cfaf","verifiedTreeHash":"1cfea62440de742299b7d04ac3fe61d9a36cc815","verifierVersion":"0.1.0+ad90ce4c"},{"checks":[{"durationMs":2080,"exitCode":0,"name":"build","output":"Compiling 74 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.96s\nCompiler run successful!\nwarning[block-timestamp]: usage of `block.timestamp` in a comparison may be manipulated by validators\n    ╭▸ src/SIMDTESTHook.sol:119:13\n    │\n119 │         if (block.timestamp - openedAtTimestamp < MAX_BUY_DURATION && tokenDelta > int256(maxBuy)) {\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/block-timestamp\n\nwarning[reentrancy-events]: event emitted after an external call; reentrancy can reorder or fabricate logs that off-chain consumers rely on\n    ╭▸ src/SIMDTESTHook.sol:137:9\n    │\n137 │         emit AntiSnipeDonation(poolId, feeIsCurrency0 ? key.currency0 : key.currency1, volume, fee, feeBps);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:119:84\n    │\n119 │         if (block.timestamp - openedAtTimestamp < MAX_BUY_DURATION && tokenDelta > int256(maxBuy)) {\n    │                                                                                    ━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:120:35\n    │\n120 │             revert MaxBuyExceeded(uint256(int256(tokenDelta)), maxBuy);\n    │                                   ━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:128:26\n    │\n128 │         uint256 volume = uint256(unspecified < 0 ? -unspecified : unspecified);\n    │                          ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unused-return]: return value of an external call is not used\n    ╭▸ src/SIMDTESTHook.sol:136:9\n    │\n136 │         poolManager.donate(key, feeIsCurrency0 ? fee : 0, feeIsCurrency0 ? 0 : fee, \"\");\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/unused-return\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:138:44\n    │\n138 │         return (IHooks.afterSwap.selector, int128(int256(fee)));\n    │                                            ━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int128' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:138:51\n    │\n138 │         return (IHooks.afterSwap.selector, int128(int256(fee)));\n    │                                                   ━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'int256' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\nwarning[unsafe-typecast]: typecast can truncate values\n    ╭▸ src/SIMDTESTHook.sol:146:16\n    │\n146 │         return uint24(INITIAL_FEE_BPS * (ANTI_SNIPE_BLOCKS - elapsed) / ANTI_SNIPE_BLOCKS);\n    │                ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'uint24' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://getfoundry.sh/forge/linting/unsafe-typecast\n\n","passed":true},{"durationMs":145,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 3 tests for test/SIMDTEST.t.sol:SIMDTESTTest\n[PASS] testFixedSupplyAndMetadata() (gas: 52579)\n[PASS] testRejectsZeroRecipientAndInsufficientBalance() (gas: 58647)\n[PASS] testTransferAndAllowance() (gas: 203518)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 711.24µs (655.01µs CPU time)\n\nRan 25 tests for test/SIMDTESTHook.t.sol:SIMDTESTHookToken1Test\n[PASS] testActualFeeDecayEveryBlockBothDirectionsAndModes() (gas: 26862507)\n[PASS] testAllEnabledCallbacksRejectUnauthorizedCaller() (gas: 84005)\n[PASS] testBeforeSwapNeverOverridesBaseFee() (gas: 27526)\n[PASS] testCannotFrontRunFactoryOpening() (gas: 34558986)\n[PASS] testCannotReuseHookForAnotherPoolOrResetClocks() (gas: 125260)\n[PASS] testConstructorRejectsIncorrectPermissionBits() (gas: 17777)\n[PASS] testConstructorRejectsMissingContractsFactoryAndWrongSupply() (gas: 7665)\n[PASS] testDeploymentSizeAndNoForbiddenRuntimeOpcodes() (gas: 1303255)\n[PASS] testDonatedIMDIsClaimableOnlyByInRangeLiquidity() (gas: 972178)\n[PASS] testDonationWithoutRemainingInRangeLiquidityRevertsAtomically() (gas: 779571)\n[PASS] testDustRoundingAndZeroOutput() (gas: 4670535)\n[PASS] testElapsedTimeDoesNotDisableBlockFee() (gas: 659893)\n[PASS] testFactoryOpeningAndPermissions() (gas: 114987)\n[PASS] testFeeExpiryDoesNotDisableMaxBuy() (gas: 147533)\n[PASS] testFuzzExecutedVolumeFeeAndConservation(uint96,uint8,bool,bool) (runs: 256, μ: 652157, ~: 647353)\nLogs:\n  Bound result 9\n  Bound result 130900\n\n[PASS] testHookDataCannotExemptBuyer() (gas: 130938)\n[PASS] testInitializationFailureRollsBackOpeningAndCanRetry() (gas: 34695046)\n[PASS] testMaxBuyChecksGrossOutputBeforeFeeDeduction() (gas: 314368)\n[PASS] testMaxBuyExactOutputBoundaryAndOneUnitOver() (gas: 382178)\n[PASS] testOneHourBoundaryAndNormalTradingAfterward() (gas: 2561383)\n[PASS] testPartialFillUsesExecutedAmount() (gas: 448552)\n[PASS] testRejectsWrongFeeAndWrongToken() (gas: 34767518)\n[PASS] testSellsAreNotCappedAndCapIsPerSwap() (gas: 608120)\n[PASS] testSettlementFailureRollsBackDonationAndSwap() (gas: 371709)\n[PASS] testUnopenedHookRejectsSwaps() (gas: 34389150)\nSuite result: ok. 25 passed; 0 failed; 0 skipped; finished in 70.37ms (233.53ms CPU time)\n\nRan 25 tests for test/SIMDTESTHook.t.sol:SIMDTESTHookTest\n[PASS] testActualFeeDecayEveryBlockBothDirectionsAndModes() (gas: 26846879)\n[PASS] testAllEnabledCallbacksRejectUnauthorizedCaller() (gas: 84201)\n[PASS] testBeforeSwapNeverOverridesBaseFee() (gas: 27546)\n[PASS] testCannotFrontRunFactoryOpening() (gas: 50490604)\n[PASS] testCannotReuseHookForAnotherPoolOrResetClocks() (gas: 125456)\n[PASS] testConstructorRejectsIncorrectPermissionBits() (gas: 17777)\n[PASS] testConstructorRejectsMissingContractsFactoryAndWrongSupply() (gas: 7665)\n[PASS] testDeploymentSizeAndNoForbiddenRuntimeOpcodes() (gas: 1303255)\n[PASS] testDonatedIMDIsClaimableOnlyByInRangeLiquidity() (gas: 984581)\n[PASS] testDonationWithoutRemainingInRangeLiquidityRevertsAtomically() (gas: 791871)\n[PASS] testDustRoundingAndZeroOutput() (gas: 4646025)\n[PASS] testElapsedTimeDoesNotDisableBlockFee() (gas: 649925)\n[PASS] testFactoryOpeningAndPermissions() (gas: 114988)\n[PASS] testFeeExpiryDoesNotDisableMaxBuy() (gas: 142510)\n[PASS] testFuzzExecutedVolumeFeeAndConservation(uint96,uint8,bool,bool) (runs: 256, μ: 653409, ~: 655729)\nLogs:\n  Bound result 10\n  Bound result 313305541\n\n[PASS] testHookDataCannotExemptBuyer() (gas: 125915)\n[PASS] testInitializationFailureRollsBackOpeningAndCanRetry() (gas: 50624653)\n[PASS] testMaxBuyChecksGrossOutputBeforeFeeDeduction() (gas: 301678)\n[PASS] testMaxBuyExactOutputBoundaryAndOneUnitOver() (gas: 372157)\n[PASS] testOneHourBoundaryAndNormalTradingAfterward() (gas: 2544614)\n[PASS] testPartialFillUsesExecutedAmount() (gas: 436691)\n[PASS] testRejectsWrongFeeAndWrongToken() (gas: 50778719)\n[PASS] testSellsAreNotCappedAndCapIsPerSwap() (gas: 616144)\n[PASS] testSettlementFailureRollsBackDonationAndSwap() (gas: 384723)\n[PASS] testUnopenedHookRejectsSwaps() (gas: 50319846)\nSuite result: ok. 25 passed; 0 failed; 0 skipped; finished in 70.39ms (258.14ms CPU time)\n\nRan 3 test suites in 71.29ms (141.47ms CPU time): 53 tests passed, 0 failed, 0 skipped (53 total tests)\n","passed":true},{"durationMs":48,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SIMDTEST.approve(address,uint256)\",\"SIMDTEST.transfer(address,uint256)\",\"SIMDTEST.transferFrom(address,address,uint256)\",\"SIMDTESTHook.afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\",\"SIMDTESTHook.beforeInitialize(address,(address,address,uint24,int24,address),uint160)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":9,\"README.md\":179,\"foundry.toml\":22,\"src/SIMDTEST.sol\":11,\"src/SIMDTESTHook.sol\":153,\"test/SIMDTEST.t.sol\":46,\"test/SIMDTESTHook.t.sol\":563,\"test/helpers/PoolRouter.sol\":67},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":832,"exitCode":0,"name":"slither","output":"[medium/high] incorrect-equality at src/SIMDTESTHook.sol:109: SIMDTESTHook.afterSwap(address,PoolKey,IPoolManager.SwapParams,BalanceDelta,bytes) (src/SIMDTESTHook.sol#109-139) uses a dangerous strict equality:\n[medium/high] incorrect-equality at src/SIMDTESTHook.sol:109: SIMDTESTHook.afterSwap(address,PoolKey,IPoolManager.SwapParams,BalanceDelta,bytes) (src/SIMDTESTHook.sol#109-139) uses a dangerous strict equality:\n[medium/medium] unused-return at src/SIMDTESTHook.sol:109: SIMDTESTHook.afterSwap(address,PoolKey,IPoolManager.SwapParams,BalanceDelta,bytes) (src/SIMDTESTHook.sol#109-139) ignores return value by poolManager.donate(key,0,fee,) (src/SIMDTESTHook.sol#136)\n[medium/medium] unused-return at src/SIMDTESTHook.sol:109: SIMDTESTHook.afterSwap(address,PoolKey,IPoolManager.SwapParams,BalanceDelta,bytes) (src/SIMDTESTHook.sol#109-139) ignores return value by poolManager.donate(key,fee,0,) (src/SIMDTESTHook.sol#136)\n[low/medium] reentrancy-events at src/SIMDTESTHook.sol:109: Reentrancy in SIMDTESTHook.afterSwap(address,PoolKey,IPoolManager.SwapParams,BalanceDelta,bytes) (src/SIMDTESTHook.sol#109-139):\n[low/medium] timestamp at src/SIMDTESTHook.sol:109: SIMDTESTHook.afterSwap(address,PoolKey,IPoolManager.SwapParams,BalanceDelta,bytes) (src/SIMDTESTHook.sol#109-139) uses timestamp for comparisons","passed":true},{"durationMs":308,"exitCode":0,"name":"aderyn","output":"[high] reentrancy-state-change at src/SIMDTESTHook.sol:54: Reentrancy: State change after external call\n[low] large-numeric-literal at src/SIMDTEST.sol:9: Large Numeric Literal (3 places)\n[low] unchecked-return at src/SIMDTESTHook.sol:136: Unchecked Return","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"7179241efa50ada0b2be4fb08cfc15593c420531b5de464051e233425dacdace","verifiedTreeHash":"50f58955161e8ea6fd1ca827ad348b0ff2a808e9","verifierVersion":"0.1.0+ad90ce4c"}]}