{"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":"7ba3bec6-c8de-466a-ba1e-e843c1944cc9","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"41b3bb3118b10c1d4a3922c57811df0991d9ea907de22b33b3c0fd4ddce9603a","dependsOn":["token_logo","build_website","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":"accepted"},{"acceptedSubmissionHash":"2ab08847c4fd130b162f8de1adc0316b4ec9ebd37f0463511bae0f458f62f3d4","dependsOn":["token_logo","build_website","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":"accepted"},{"acceptedSubmissionHash":"86debc947b152d8a0f74ebf536a18527d0cbe73a60eb661da9dc62d36778c8ef","dependsOn":["token_logo","build_website","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":"accepted"},{"acceptedSubmissionHash":"f15d77961dcb07ec3d7d9e9616e3fbf3de951d51962ab3614baff67eff48493d","dependsOn":["token_logo","build_website","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":"accepted"},{"acceptedSubmissionHash":"ebed08fd0e50c78987bc475f3e09ed616b38df529a873667a2f6edb01a039a05","dependsOn":["token_logo","build_website","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":"accepted"},{"acceptedSubmissionHash":"e6ff22b695a557714bfcbb9457da960d0b239d32d5dd54142e0d76bd8f786ac8","dependsOn":["build_website"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"6b8d2c2ebd3301cff2be8edb1e1cc6ba65c858c02fe7247be81722b969842265","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"6b8d2c2ebd3301cff2be8edb1e1cc6ba65c858c02fe7247be81722b969842265","skillId":"build-contract-project","state":"accepted"},{"acceptedSubmissionHash":"558227b5c02a923df829a51c7034d6e15560dbae5f767ef985e90c15aab649b0","dependsOn":["token_logo"],"execution":{"mustProduce":["dist/index.html"],"network":true,"optionalTools":["browser"],"profile":"foundry","requires":["network"],"skillHash":"fd6f55db4fafb257d4f31f207e5f234e3b9181141e56bdd273f6c130e64c2d8e","skillId":"build-website","tools":[]},"key":"build_website","kind":"code","role":"implement","skillHash":"fd6f55db4fafb257d4f31f207e5f234e3b9181141e56bdd273f6c130e64c2d8e","skillId":"build-website","state":"accepted"},{"acceptedSubmissionHash":"fdf75375f3eb5934348edaa86c28b9c435f7d9948d027810fce50b88f9816579","dependsOn":["token_logo","build_website","build_contract_project","write_foundry_tests"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"897397bdbb3b1d08eae85ac30fa77621e36a68a8983da6f102706c127e258580","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":["tool:image"],"skillHash":"9fa92c5200aa48ce2c9551714aaa720e895a50b88afa3346815752b923cb8378","skillId":"token-logo","tools":["image"]},"key":"token_logo","kind":"code","role":"implement","skillHash":"9fa92c5200aa48ce2c9551714aaa720e895a50b88afa3346815752b923cb8378","skillId":"token-logo","state":"accepted"},{"acceptedSubmissionHash":"1463e8830650f8d8bb059bf683d98de1e3f8a52bf30a874dd1ce514d08ae86c6","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]\nA custom token: Only test (TEST).\nToken name: Only test\nToken symbol: TEST\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.\nMinting after launch: none, the supply is fixed forever.\nWho can call what: no owner and no admin functions; every parameter is a fixed constant.\n\nWhat it does:\n1. Token name: \"Only test\", symbol: \"TEST\".\n2. Total fixed supply of 1,000,000,000 tokens with 18 decimals minted once to deployer.\n3. No fees or taxes on transfers or swaps.\n4. On every transfer, emits a TransferRunningTotal(address sender, uint256 cumulativeAmount) event tracking the sender's running total of tokens transferred.\n5. 10% of supply allocated to the swarm via the launch factory; this contract does not mint or hold the swarm allocation.\n6. 90% of the supply seeds the Uniswap v4 pool paired with IMD at 0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7.\n7. Pool fee fixed at 1.25% (12500 bps); PoolManager address: 0x000000000004444c5dc75cB358380D2e3dE08A90.\n\nWho can call what:\n- No owner, no admin, all parameters immutable constants.\n- Anyone can transfer tokens and trigger the running total event.\n\nTests:\n1. Confirm total supply is exactly 1,000,000,000 tokens with 18 decimals minted to deployer.\n2. Verify no fees deducted on transfers or swaps.\n3. On multiple transfers from the same sender, verify the TransferRunningTotal event emits with an accurate cumulative transferred amount.\n4. Check that the 10% swarm allocation is handled outside the token contract.\n5. Confirm pool is seeded with 90% of the supply correctly.\n6. Validate no owner or admin functions exist.\n7. Mainnet fork test to simulate transfers and event emissions.\n8. Adversarial review to confirm absence of owner powers, selfdestruct, delegatecall, and ensure fixed constants.\n\nBuild requirements (mandatory):\n- Context: an ordinary, legitimate token launch on Ethereum. The coin's name, story and theme are branding only; nothing here is real-world harm or offensive security work.\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 and verifiable: deployed contracts live in src/ and every import resolves to a committed file.\n- Token contract: TESTToken. No selfdestruct and no delegatecall anywhere. No proxies, no owner, no upgradeability.\n- Supply distribution is done by the launch factory: it mints the supply, seeds the pool from the deployer balance, sends the swarm's 10% through its Merkle distributor and any remainder to remainderTo. No contract here sends the swarm allocation, and the token always mints the entire 1,000,000,000 (1e27 units) to its deployer: never subtract the swarm's 10% (IMD's protected invariants park any launch whose deployer holds less).\n- Chain: Ethereum mainnet (set by the order, not a launch.json field). Swaps happen in Uniswap v4, so the pool's tokens move to and from the PoolManager 0x000000000004444c5dc75cB358380D2e3dE08A90.\n- launch.json top-level keys, exactly: kind (\"custom_token\"), token {contract, name, symbol, decimals, constructorArgs, totalSupply}, contracts ([] if none), pool, economics, notes (one string). No chainId or other keys.\n- launch.json pool: pairedCurrency 0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7, fee 12500, tickSpacing 60, initialPrice \"125270724187523965593206900\" (paired-currency minor units per TEST minor unit with TEST as currency0, provenance only; the deployer derives the real opening price from the economics using the deployed currency order). launch.json also carries the economics block below.\n- launch.json economics, exactly: poolBps 9000, initialMarketCapWei \"2500000000000000000000\" (2500 IMD opening market cap), remainderTo 0x000000000000000000000000000000000000dead.","parentJobId":null,"planHash":"4b954fb8aa35acfe65c66f636c1cbefa2c166d588a9dfe9490d91f0ae8497923","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"7ba3bec6-c8de-466a-ba1e-e843c1944cc9","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-1274-only-test"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51040","feedbackHash":"20544431707ac8e5a6e9a4389800489df81463ebd4c1008d9cc3642a129a671d","nodeKey":"audit_economics","submissionHash":"41b3bb3118b10c1d4a3922c57811df0991d9ea907de22b33b3c0fd4ddce9603a","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52292","feedbackHash":"4982c247fed0667b99e23507b0dce6fdc7779e68e748384b74601a55ae529190","nodeKey":"audit_flow","submissionHash":"2ab08847c4fd130b162f8de1adc0316b4ec9ebd37f0463511bae0f458f62f3d4","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52272","feedbackHash":"606b070cacb85b8bb7e582a969d9c84dbf17c48ea06248d03e845db75452fe30","nodeKey":"audit_judge","submissionHash":"86debc947b152d8a0f74ebf536a18527d0cbe73a60eb661da9dc62d36778c8ef","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52289","feedbackHash":"eb289edcf582d78369f4131cb3093ebc92ed5b9193b39072239005887f522d01","nodeKey":"audit_math","submissionHash":"f15d77961dcb07ec3d7d9e9616e3fbf3de951d51962ab3614baff67eff48493d","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51304","feedbackHash":"d6d94ed351b73b550882f0622a9e2d319d6b420ac052290dfbea01a353d8a4d4","nodeKey":"audit_permissions","submissionHash":"ebed08fd0e50c78987bc475f3e09ed616b38df529a873667a2f6edb01a039a05","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51431","feedbackHash":"bfb5c59a025308621ca1f4652400397c1d2ff734f0753e79dae84cbd1ee9cdd8","nodeKey":"build_contract_project","submissionHash":"e6ff22b695a557714bfcbb9457da960d0b239d32d5dd54142e0d76bd8f786ac8","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51059","feedbackHash":"206b8a4123f6f7bfa625a6155bff5dd950db418114f38091d562366a7b3b6de3","nodeKey":"build_website","submissionHash":"558227b5c02a923df829a51c7034d6e15560dbae5f767ef985e90c15aab649b0","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52225","feedbackHash":"22ab426fa7c03dd3fc8ec223f302314118c318f7f8a9a8d22612b6c862a16301","nodeKey":"manifest","submissionHash":"fdf75375f3eb5934348edaa86c28b9c435f7d9948d027810fce50b88f9816579","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51299","feedbackHash":"e875752830150857b77588ac803135547e31af869d04707a7cae9b1efcdc7b4f","nodeKey":"token_logo","submissionHash":"897397bdbb3b1d08eae85ac30fa77621e36a68a8983da6f102706c127e258580","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"50979","feedbackHash":"9fea8a2c37cd36b9f96bd4ea45927c7f23aa466851dcbffbfc749cdc92a2da91","nodeKey":"write_foundry_tests","submissionHash":"1463e8830650f8d8bb059bf683d98de1e3f8a52bf30a874dd1ce514d08ae86c6","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"da9fcc540d9ad554aa573ca9122579d6462e15a8f2ed4289f121326a0c291ab3","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"b3280f20e86b4e0d","findings":[],"hash":"09ebd690287700c368dbc413d7e3217b6bcaea037c3126da5c21219f40dc6314","nodeId":"fdbcf239-4dcb-4910-9aae-615821960122","outcome":"failed","summary":"Your workspace is out of credits. Ask your workspace owner to refill in order to continue.","treeHash":null,"usage":{"cachedInputTokens":0,"inputTokens":0,"model":"gpt-6-astra","outputTokens":0,"runtime":"codex","turns":7,"wallClockMs":1678239}},{"artifacts":[],"attempt":1,"bundleHash":"e4b58b4522095697db674aabad3c4413bdc1a91f4418d59cc5046ebdb12c75c9","device":"eaa98ad0794d4f76","findings":[],"hash":"1463e8830650f8d8bb059bf683d98de1e3f8a52bf30a874dd1ce514d08ae86c6","nodeId":"e4edfb9b-2bba-4f5b-8cb3-64fa5f713a9d","outcome":"completed","summary":"Implemented entirely under `test/`: expanded failure-path checks, valid admin probes, stateful invariants, and PoolManager fee and rollback tests.\n\n`forge build` and `forge test` pass: **31 passed, 0 failed, 1 optional mainnet fork test skipped**. Token coverage is 100% across lines, statements, branches, and functions.\n\nNo reproducible implementation defects found. Live fork verification remains outstanding.","treeHash":"d44f783fcbf2285a8e96988962fb0485f5eb87c4","usage":{"cachedInputTokens":1099776,"inputTokens":71270,"model":"gpt-6-astra","outputTokens":17348,"runtime":"codex","turns":7,"wallClockMs":446286}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"ddcecd7483f623f7","findings":[{"citation":"resolved","description":"The brief declares the event as TransferRunningTotal(address sender, uint256 cumulativeAmount) with no indexed parameter. The contract marks `sender` as indexed. The topic-0 hash is identical (keccak256(\"TransferRunningTotal(address,uint256)\")), so filtering by signature works, but the ABI JSON entry (`indexed: true`) and the raw log layout differ: the sender lives in topics[1] and the data segment holds only 32 bytes. Any consumer that builds its decoder from the brief's declaration rather than from the compiled ABI (for example an ABI hand-written as `event TransferRunningTotal(address sender, uint256 cumulativeAmount)`) fails to decode the data segment. Indexing an address is the conventional and arguably better choice; this is reported so the requester confirms the ABI they intend, not as a logic defect. Token logic, balances and totals are unaffected.","line":21,"path":"src/TESTToken.sol","reproduction":"Deploy TESTToken; call transfer(0xB0B, 5); read the second log. Expected under the brief's literal declaration: 1 topic and 64 bytes of data decoding to (address sender, uint256 cumulativeAmount). Actual: topics.length == 2 with topics[1] == bytes32(uint256(uint160(sender))), data.length == 32, and abi.decode(data, (address, uint256)) reverts. Verified with a Foundry test (test/scratch, removed): assertEq(l.topics.length, 2); assertEq(l.data.length, 32); a call to a function performing abi.decode(data,(address,uint256)) returns ok == false. The existing suite already asserts the same layout at test/LaunchIntegration.t.sol:346-348 and test/TESTTokenEdgeCases.t.sol:84-87. Fix if the non-indexed layout is wanted: drop `indexed` on line 21; otherwise document the indexed ABI in the notes.","severity":"info","snippet":"    event TransferRunningTotal(address indexed sender, uint256 cumulativeAmount);","title":"TransferRunningTotal indexes `sender`, so its log layout differs from the brief's literal declaration"},{"citation":"resolved","description":"`_transfer` adds `amount` to the sender's running total before checking whether `from == to`, so a holder can emit arbitrarily large TransferRunningTotal values by transferring to itself (or round-tripping with a second address) while its balance never changes. The NatSpec on line 15 states this is intended (\"including self and zero transfers\"), and the brief's wording \"running total of tokens transferred\" admits this reading, so this is a design confirmation rather than a logic defect. It matters only if any off-chain or future consumer treats cumulativeTransferred or the event as a measure of real volume, activity or eligibility: that metric is costlessly inflatable by the sender. The checked addition means the counter cannot wrap; reaching 2^256 would need more than 1e50 full-supply transfers from one address, so there is no reachable denial-of-service.","line":71,"path":"src/TESTToken.sol","reproduction":"Deploy TESTToken as A (A holds 1e27). A calls transfer(A, 1e27) twice. Expected if the total were meant to track tokens that actually changed hands: cumulativeTransferred(A) == 0 and balance 1e27. Actual: cumulativeTransferred(A) == 2e27 (twice the fixed supply) and the second call emits TransferRunningTotal(A, 2e27), while balanceOf(A) is still 1e27. Verified with a Foundry test (test/scratch, removed); the same behaviour is asserted as intended at test/TESTToken.t.sol:94-97. No fix is required if the gross semantics are confirmed; otherwise skip the accumulation when from == to or when amount == 0.","severity":"info","snippet":"        uint256 cumulative = cumulativeTransferred[from] + amount;\n        cumulativeTransferred[from] = cumulative;","title":"Running total is a gross counter: self-transfers raise cumulativeTransferred above the supply without moving tokens"}],"hash":"2ab08847c4fd130b162f8de1adc0316b4ec9ebd37f0463511bae0f458f62f3d4","nodeId":"91fca88c-1346-45f8-abec-427b21e82653","outcome":"completed","summary":"The review is complete and `.imd-findings.json` holds the result. No repository files were changed; the scratch test directory was removed after use.\n\n**Outcome: no exploitable defect in the token's control flow.** Two info-level notes are recorded, each with a concrete reproduction, for the requester to confirm as intended design.\n\n**What I checked, against the Execution Trace, Periphery and First Principles guides**\n\n- **Within-transaction flow.** The three entry points have no external calls, so no reentrancy, stale reads or callbacks exist. `transferFrom` reduces a finite allowance before the balance move, and any later revert unwinds both. The unchecked balance addition is bounded by the fixed total of 1e27, which only the constructor assignment and the conserving transfer ever write. Self-transfers re-read the reduced balance, so they preserve it.\n- **Launch flow.** The constructor mints the whole supply to the factory with no arguments. There is no fee or burn, so no exemption list is needed. The existing suite seeds 90% single-sided into a real v4 PoolManager built at the mainnet address and trades both ways with exact settlement. The protected harness flows match that.\n- **Periphery.** The vendored libraries are 80 plain tracked files with no submodule, and the build and offline suite pass with the mandated toolchain. The untracked `.gitmodules` in the working directory is a sandbox device node, not a repository file. The manifest has exactly the required keys, lowercase addresses, verbatim economics, and an initial price consistent with a 2500 IMD cap.\n- **Tests.** The suite exercises zero, max, self, delegated, revoked and failed paths, runs a stateful invariant with a separate ledger, and skips the fork test cleanly without an RPC.\n\n**Info findings recorded**\n\n1. The event marks `sender` as indexed while the brief wrote it unindexed. The topic hash is the same, but the log layout differs, and a decoder written from the brief's literal declaration fails on the 32-byte data segment.\n2. The running total is gross. Two full-supply self-transfers push it to twice the supply while no tokens move. The NatSpec documents this, so it only matters if a consumer reads the counter as real volume.\n\n**Coverage** has rows for all three ABI entry points plus the constructor, the supply and no-admin invariants, the launch flow, the manifest and the dependencies. The site, dist, scripts and web directories are marked unreached as outside the assigned area. The live mainnet fork run remains owed to an environment with an RPC.","treeHash":null,"usage":{"cachedInputTokens":591177,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":17059,"runtime":"claude","turns":24,"wallClockMs":270914}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"df74f6c887684f20","findings":[{"citation":"resolved","description":"The token's one non-standard feature is TransferRunningTotal, which reports a sender's cumulative gross outgoing amount. _transfer adds `amount` to cumulativeTransferred[from] for every successful call, including `to == from`. A self-transfer moves nothing (the balance is unchanged because the credit is read after the debit) but still raises the sender's running total by `amount`, so a holder can push their reported total to any multiple of their balance for nothing but gas, and the total can exceed totalSupply while the supply is conserved. This matches the documented design (NatSpec on line 15, README, REVIEW.md) and the brief does not exclude self-transfers, so it is not a correctness defect in the token. It is reported so that no off-chain consumer (allocation, leaderboard, 'volume' display on the site) treats cumulativeTransferred or the event as evidence that tokens changed hands. Economic impact inside the contract: none; balances, allowances and supply are unaffected. Nothing in this repository consumes the value.","line":71,"path":"src/TESTToken.sol","reproduction":"Deploy TESTToken; deployer transfers 1e18 to alice. alice calls transfer(alice, 1e18) three times. Expected if the total measured tokens that changed hands: cumulativeTransferred(alice) == 0 and balanceOf(alice) == 1e18. Actual: balanceOf(alice) == 1e18, cumulativeTransferred(alice) == 3e18, and each call emits TransferRunningTotal(alice, 1e18/2e18/3e18). alice then calls transfer(0xB0B, 0): emits TransferRunningTotal(alice, 3e18) with no balance change. Verified with test/scratch/RunningTotalInflation.t.sol (passes on current code, demonstrating the behaviour).","severity":"info","snippet":"        uint256 cumulative = cumulativeTransferred[from] + amount;\n        cumulativeTransferred[from] = cumulative;","title":"Running total counts self-transfers and zero-value transfers, so it is inflatable at gas cost only and cannot serve as a volume or activity metric"}],"hash":"41b3bb3118b10c1d4a3922c57811df0991d9ea907de22b33b3c0fd4ddce9603a","nodeId":"e364ef4b-fafd-4f9f-accd-c8d7beba5fde","outcome":"completed","summary":"The review is complete and the findings file is written. The working tree is otherwise untouched: the only new files are the ignored scratch test and the findings record.\n\n**Outcome: no defect found in the assigned area.** The token at `src/TESTToken.sol` holds up under the Economic Security, Invariant and Flow Gap checklists. One info-level note is recorded.\n\n**What was checked**\n- **Conservation and supply.** The supply is a compile-time constant, the only balance writer debits and credits equal amounts, transfers to the zero address revert, and the unchecked credit is bounded by the conserved supply. The invariant suite and all 31 offline tests pass.\n- **Launch flows.** No fee, hook, exemption or external call exists, so the distributor transfer, the single-sided seed into the PoolManager, swaps both ways and the remainder transfer all move exactly what they say. The integration tests run a real v4 PoolManager at the mainnet address in both currency orders with exact delta equality.\n- **Economic dependencies.** The token reads no oracle, calls no contract and has no callbacks, so no sandwich, flash-loan or dependency-failure path exists inside it.\n- **Manifest.** Keys, constructor arguments, total supply, pool parameters and economics all match the job. I recomputed the initial sqrt price independently and it matches the file.\n- **Bytecode.** The compiled runtime contains no DELEGATECALL, CALLCODE, SELFDESTRUCT, CALL or STATICCALL, and has no receive or fallback.\n\n**The one note (info).** The running total counts self-transfers and zero-value transfers, so a holder can inflate their reported total for gas alone. A scratch test confirms a holder with 1 TEST reaches a cumulative total of 3 TEST after three self-transfers. This matches the documented design and the brief does not exclude it, so it is a caution for any off-chain consumer rather than a contract defect.\n\n**Still owed outside this environment.** The mainnet fork smoke test skips cleanly offline and has not been run against live state.","treeHash":null,"usage":{"cachedInputTokens":900428,"inputTokens":354,"model":"claude-fable-5-1","outputTokens":15434,"runtime":"claude","turns":29,"wallClockMs":259924}},{"artifacts":[],"attempt":1,"bundleHash":"2780e0e66becc147d32b081c37efc12d260d1974692365515238e3e3e616ddc4","device":"5b85781dd6c37cca","findings":[],"hash":"558227b5c02a923df829a51c7034d6e15560dbae5f767ef985e90c15aab649b0","nodeId":"fdbcf239-4dcb-4910-9aae-615821960122","outcome":"completed","summary":"Built the website in `site/` and the ready-to-publish export in `dist/`, including live stats, meme tools, sharing and documentation.\n\n- Build and typecheck passed.\n- 29 browser checks and four accessibility scans passed.\n- Foundry: 17 passed; one fork test skipped without an RPC URL.\n- Submission files: 5.30 MiB. Protected files unchanged.","treeHash":"98ed1355d8c37b2abc6c8b883e790ad1e8f83623","usage":{"cachedInputTokens":4351744,"inputTokens":186084,"model":"gpt-6-astra","outputTokens":70704,"runtime":"codex","turns":10,"wallClockMs":1873990}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"ef31844bb462de78","findings":[{"citation":"resolved","description":"Merged from audit_flow, audit_permissions and audit_economics (same root cause, same line). _transfer adds `amount` to cumulativeTransferred[from] on every successful call before any from == to or amount == 0 distinction, so a holder can push its reported total to any multiple of its balance (and above totalSupply) for gas only, while its balance never changes. The NatSpec on line 15 and the launch.json notes document this as intended (\"including self and zero transfers\"), and the brief's wording \"running total of tokens transferred\" admits it, so this is a design confirmation and a trust assumption for off-chain consumers, not a logic defect: balances, allowances and supply are unaffected and nothing in the repository consumes the value. Reported so no leaderboard, allocation or volume display treats TransferRunningTotal as evidence that tokens changed hands. No code change required if the gross semantics are confirmed; otherwise skip the accumulation when from == to.","line":71,"path":"src/TESTToken.sol","reproduction":"Deploy TESTToken as D; D.transfer(alice, 1e18). As alice call transfer(alice, 1e18) three times. Expected if the total measured tokens that changed hands: cumulativeTransferred(alice) == 0, balanceOf(alice) == 1e18. Actual (reproduced in test/scratch/Repro.t.sol, passes on current code): balanceOf(alice) == 1e18 unchanged, cumulativeTransferred(alice) == 3e18, each call emits TransferRunningTotal(alice, 1e18 / 2e18 / 3e18). alice.transfer(bob, 0) then emits TransferRunningTotal(alice, 3e18) with no balance change. The existing suite asserts the same behaviour as intended at test/TESTToken.t.sol.","severity":"info","snippet":"        uint256 cumulative = cumulativeTransferred[from] + amount;","title":"Running total is a gross counter: self-transfers and zero transfers inflate cumulativeTransferred without moving value"},{"citation":"resolved","description":"From audit_flow, reproduced. The brief declares TransferRunningTotal(address sender, uint256 cumulativeAmount) with no indexed parameter; the contract indexes `sender`. topic0 is identical (keccak256(\"TransferRunningTotal(address,uint256)\")), so signature filtering works, but the sender lives in topics[1] and the data segment holds only 32 bytes. A consumer that hand-writes its decoder from the brief's declaration instead of the compiled ABI fails to decode the data. Indexing the address is the conventional choice and the launch.json notes describe the event by signature only, so this is a documentation/ABI confirmation for the requester, not a logic defect. Fix if the non-indexed layout is wanted: drop `indexed` on line 21; otherwise state the indexed ABI in the notes.","line":21,"path":"src/TESTToken.sol","reproduction":"Deploy TESTToken; transfer(alice, 1e18); as alice call transfer(0xB0B, 0) with vm.recordLogs(). Expected under the brief's literal declaration: topics.length == 1 and data.length == 64 decoding to (address, uint256). Actual (test/scratch/Repro.t.sol, passes on current code): the second log has topics.length == 2 with topics[1] == bytes32(uint256(uint160(alice))), data.length == 32, and abi.decode(data, (uint256)) == cumulative; abi.decode(data, (address, uint256)) would revert.","severity":"info","snippet":"    event TransferRunningTotal(address indexed sender, uint256 cumulativeAmount);","title":"TransferRunningTotal indexes `sender`, so its raw log layout differs from the brief's literal declaration"},{"citation":"resolved","description":"From audit_math, reproduced. Every other arithmetic step in _transfer is unchecked and bounded by the fixed 1e27 supply (balance - amount is guarded on line 65; balances always sum to 1e27). The gross running total grows monotonically and is the one quantity not bounded by supply, so it is the single revertable arithmetic path: at cumulativeTransferred[from] == type(uint256).max every further non-zero transfer or transferFrom from that holder reverts with Panic(0x11). Reaching it requires about 1.16e50 full-supply transfers from one address, so it cannot happen on Ethereum. Recorded so the judge has the trace for the contract's sole revertable arithmetic; no change recommended.","line":71,"path":"src/TESTToken.sol","reproduction":"Deploy TESTToken as D. D.transfer(alice, 2). vm.store(token, keccak256(abi.encode(alice, uint256(2))), bytes32(type(uint256).max - 1)) so cumulativeTransferred[alice] == 2^256-2. alice.transfer(bob, 1) succeeds and cumulativeTransferred[alice] == 2^256-1. alice.transfer(bob, 1): expected success for a holder with balance 1; actual revert Panic(0x11) from line 71, balanceOf[alice] stays 1 (test/scratch/Repro.t.sol test_saturation passes on current code). Without vm.store the state is unreachable.","severity":"info","snippet":"        uint256 cumulative = cumulativeTransferred[from] + amount;","title":"Running-total accumulator is the only checked addition and would strand a sender at uint256 saturation (unreachable in practice)"}],"hash":"86debc947b152d8a0f74ebf536a18527d0cbe73a60eb661da9dc62d36778c8ef","nodeId":"604be639-0892-486e-9ab4-cd1d661ba6e1","outcome":"completed","summary":"Review complete. The findings file is written and validated.\n\n**Outcome: no defects.** TESTToken holds up against every specialist finding, the static-analysis leads, and my own read with the Pashov and Trail of Bits checklists. The file `.imd-findings.json` holds three info-level notes and a seven-row coverage record.\n\n**What I verified**\n\n- **Specialist findings reproduced and merged.** Four specialists reported five items. Three were the same root cause, the gross running total counting self-transfers and zero transfers on line 71, so they became one note. The indexed-sender event layout and the unreachable uint256 saturation each stayed as their own note. I reproduced all three in a scratch Foundry test that passed on the current code, then removed the scratch directory.\n- **Severity.** All three stay at info. They are documented design choices or unreachable states. None moves funds, breaks a launch flow, or violates the brief.\n- **Entry points.** All three state-changing functions hold. Guards precede effects, unchecked arithmetic is bounded by the fixed supply, self-transfers preserve balance, and a revert inside the transfer rolls back the allowance decrement.\n- **Protected invariants.** Supply is a constant minted whole to the deployer with no swarm subtraction. The runtime bytecode scan found zero DELEGATECALL, CALLCODE, SELFDESTRUCT, or CALL opcodes. No owner, admin, mint, or burn exists in the ABI. The full suite passes, including the local Uniswap v4 seed-and-swap integration test, with the fork test skipping cleanly.\n- **Manifest.** launch.json has exactly the six required keys, empty constructorArgs matching the no-arg constructor, the correct supply, verbatim pool and economics, lowercase addresses, and libraries vendored as ordinary files with no submodule.\n\n**Not run.** The mainnet fork test requires an RPC and was skipped by design. Slither and aderyn ran upstream and reported nothing above low impact.","treeHash":null,"usage":{"cachedInputTokens":534606,"inputTokens":258,"model":"claude-fable-5-1","outputTokens":8653,"runtime":"claude","turns":9,"wallClockMs":171949}},{"artifacts":[],"attempt":1,"bundleHash":"9178e8f78d3905676bc9ad698a9dcb4f16e87c242aa2e359ccf4652efdf6eb88","device":"f42f27bce9bb7fc5","findings":[],"hash":"897397bdbb3b1d08eae85ac30fa77621e36a68a8983da6f102706c127e258580","nodeId":"ec743c9e-46d1-40a5-8104-6bca9eeb53cc","outcome":"completed","summary":"Delivered the token, launch manifest, complete Foundry project, and five 1024×1024 logo options.\n\nArtwork used built-in image generation: **five drafts, all retained; none rejected**. Option 2 was selected for `artifacts/logo.png` after checking it as a 32-pixel circle. Descriptions and previews are in `logos/README.md`.\n\nVerification passed: `forge build`, delivery checks, and **17 tests**, including 3,000 fuzz cases and 16,384 invariant calls. One mainnet fork test skipped because no RPC URL was configured.","treeHash":"5aed854d306fdcd8be474d0e883f266b5600e53c","usage":{"cachedInputTokens":2206080,"inputTokens":107567,"model":"gpt-6-astra","outputTokens":30916,"runtime":"codex","turns":8,"wallClockMs":691549}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"dede2fc25efa8cdd","findings":[],"hash":"b5ad6b3f5ac0a0c718b97238103fd85110617c828d5f5c80a3c7cc65427a3aa2","nodeId":"fdbcf239-4dcb-4910-9aae-615821960122","outcome":"failed","summary":"Your workspace is out of credits. Ask your workspace owner to refill in order to continue.","treeHash":null,"usage":{"cachedInputTokens":0,"inputTokens":0,"model":"gpt-6-astra","outputTokens":0,"runtime":"codex","turns":9,"wallClockMs":1705351}},{"artifacts":[],"attempt":1,"bundleHash":"b6da9808f7ccd41ed0d21f09d2d8170772c34e468d0a5f6f718a57bdff494086","device":"74f6c6912a376f27","findings":[],"hash":"e6ff22b695a557714bfcbb9457da960d0b239d32d5dd54142e0d76bd8f786ac8","nodeId":"434b9e07-db07-43b2-b8dd-9e6636427b67","outcome":"completed","summary":"Verified the existing TESTToken and exact launch manifest. Improved fork-test selection, added token-only delivery validation, and updated documentation. Protected configuration and dependencies remain unchanged.\n\nChecks passed:\n\n- `forge build`\n- `forge test`: 17 passed, 0 failed\n- `forge fmt --check`\n- Manifest and ABI validation\n\nOne optional mainnet fork test skipped; live mainnet validation remains outstanding.","treeHash":"5afc2c70fdc6bb29b3f4da478a824970fe6b2f21","usage":{"cachedInputTokens":529920,"inputTokens":77257,"model":"gpt-6-astra","outputTokens":4751,"runtime":"codex","turns":4,"wallClockMs":129508}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"4be5e039e1c77ce3","findings":[{"citation":"resolved","description":"Not a permission or asymmetry defect: _transfer treats a transfer with to == from exactly like any other, so the sender's running total grows by the amount while the balance is unchanged. The NatSpec on line 15 and the launch.json notes document this choice, and ERC-20 semantics do count a self-transfer as a transfer, so this is recorded for the author as a trust assumption for anyone who reads TransferRunningTotal or cumulativeTransferred as a measure of value actually moved. Any off-chain consumer treating the running total as volume or activity must discount self-transfers. No on-chain state other than the sender's own counter is affected, nobody else's balance or total changes, and the only cost is the sender's gas.","line":71,"path":"src/TESTToken.sol","reproduction":"Deploy TESTToken; transfer 1e18 to alice. As alice call transfer(alice, 1e18) five times. Expected if the total measured value moved: cumulativeTransferred(alice) == 0 and balanceOf(alice) == 1e18. Actual: balanceOf(alice) == 1e18 (unchanged) and cumulativeTransferred(alice) == 5e18; a sixth self-transfer emits TransferRunningTotal(alice, 6e18). Verified with a scratch Foundry test (test passed on the current code).","severity":"info","snippet":"        uint256 cumulative = cumulativeTransferred[from] + amount;\n        cumulativeTransferred[from] = cumulative;","title":"Running total counts self-transfers, so any holder can inflate cumulativeTransferred without moving value"}],"hash":"ebed08fd0e50c78987bc475f3e09ed616b38df529a873667a2f6edb01a039a05","nodeId":"56239186-06c6-4baa-9a5f-7632a55accbb","outcome":"completed","summary":"The review is complete and `.imd-findings.json` is written at the repository root. No source or test files were changed. The scratch test I used was removed.\n\n**Result: no permission, trust-gap or asymmetry defect found.** The report holds one informational note and seven coverage rows, all `holds`.\n\nWhat I checked in the assigned area:\n\n- **Access control.** The compiled ABI has exactly three state-changing functions: approve, transfer and transferFrom. There is no owner, role, initializer, fallback, receive, proxy or external call. The constructor hands out nothing but the full supply to msg.sender, which is the factory under CREATE2. Allowance can only be set by its owner and spent only by the approved spender, verified by the existing tests and my own trace.\n- **Asymmetry.** transfer and transferFrom share one internal path, so balances, running totals and events are updated identically. The infinite and finite allowance branches differ only in the decrement, matching OpenZeppelin v5 semantics. Every storage variable has consistent writers and readers. Supply is a constant with no writer, so the conservation invariant cannot drift.\n- **Trust gap.** With no privileged actor, no settable parameter and no price or fee formula, there is no seam where authorization, economics and asymmetry interact.\n- **Manifest and build.** The launch manifest has exactly the required keys, lowercase addresses, even-length hex, an empty constructor argument list that matches the argument-free constructor, and a total supply equal to what the constructor mints. The suite builds offline, all 31 tests pass with one fork test skipping cleanly, and formatting is clean.\n\n**The one informational note.** A holder can inflate their own running total by self-transferring, since a transfer to oneself counts toward cumulativeTransferred while the balance is unchanged. This is documented in the NatSpec and the manifest notes and is consistent with ERC-20 semantics, so it is recorded as a trust assumption for off-chain consumers rather than a defect. I reproduced it with a scratch test and included the exact call sequence.\n\nNot covered: live mainnet state and the real factory's distribution flow, which the offline suite stands in for with a local PoolManager and probes. Those remain owed to a fork run by the deployer.","treeHash":null,"usage":{"cachedInputTokens":769728,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":11460,"runtime":"claude","turns":15,"wallClockMs":177354}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"ee9fbaf2480d1034","findings":[{"citation":"resolved","description":"Math Precision / Numerical Gap (boundary x invariant) note, not an exploitable defect. Every other arithmetic step in _transfer is in an unchecked block and is bounded by the fixed 1e27 supply (balance - amount is guarded on line 65; balanceOf[to] += amount can never exceed totalSupply because balances always sum to 1e27). The gross running total on line 71 is the one quantity not bounded by supply: it grows monotonically with every outgoing transfer including self-transfers, so it is the single place where checked arithmetic can revert. If a sender's cumulativeTransferred ever reached type(uint256).max, every further non-zero transfer or transferFrom from that holder would revert with Panic(0x11) and the holder's remaining balance would be stranded (the invariant 'any holder can always move their balance' would stop holding for that address). Reachability: saturating the counter requires floor((2^256-1)/1e27) = 115792089237316195423570985008687907853269984665640 (about 1.16e50) full-supply transfers from one address, i.e. it cannot happen on Ethereum. Reported as info only so the judge has the trace for the contract's sole revertable arithmetic; no change is recommended. Confirmed with the repro below by writing the storage slot directly.","line":71,"path":"src/TESTToken.sol","reproduction":"Deploy TESTToken as deployer D. D.transfer(alice, 2). vm.store(token, keccak256(abi.encode(alice, uint256(2))), bytes32(type(uint256).max - 1)) so cumulativeTransferred[alice] == 2^256-2. alice.transfer(bob, 1): succeeds, cumulativeTransferred[alice] == 2^256-1. alice.transfer(bob, 1): expected (for a holder with balance 1) success; actual revert Panic(0x11) from line 71, balanceOf[alice] stays 1. alice.transfer(bob, 0) still succeeds. Without vm.store the state is unreachable: it needs > 1.15e50 full-supply transfers from alice.","severity":"info","snippet":"        uint256 cumulative = cumulativeTransferred[from] + amount;","title":"Running-total accumulator is the only checked addition and would freeze a sender at uint256 saturation (unreachable in practice)"}],"hash":"f15d77961dcb07ec3d7d9e9616e3fbf3de951d51962ab3614baff67eff48493d","nodeId":"557a6770-354d-44ae-b915-68ba3596e2ae","outcome":"completed","summary":"Done. The review is written to `.imd-findings.json` and the working tree is otherwise untouched.\n\n**Result: no exploitable math defect in TESTToken.** The contract has no division, multiplication, scaling, downcast or external call, so most of the Math Precision and Boundary checklists have nothing to attach to. What arithmetic exists was traced and tested with concrete inputs:\n\n- **Unchecked debit and credit** in `_transfer` are bounded by the guard on line 65 and the fixed 1e27 supply. Self-transfer of a full balance preserves it. One wei over balance reverts with the exact custom error.\n- **Allowance handling** treats max as infinite and max minus one as finite. An allowance one wei short reverts without touching storage. A zero-address receiver rolls back the allowance write atomically.\n- **Launch split** is exact. Ten percent of 1e27 is 1e26 and ninety percent is 9e26, with no dust. The fee-free transfer path moves these amounts whole, and the committed integration suite confirms exact settlement against a real PoolManager in both currency orders.\n- **Manifest** keys, types and address casing match the schema. The initial price equals the derived sqrtPriceX96 to the last digit.\n\n**One informational note was recorded.** The running-total accumulator on line 71 is the only checked addition. At uint256 saturation it would strand a sender's balance, but reaching it needs over 1e50 full-supply transfers, so it is unreachable and no change is recommended. The reproduction uses a direct storage write.\n\n**Coverage** has nine rows: the three entry points hold, five invariant rows hold, and the mainnet fork test is marked unreached because this environment has no network. The full suite passed with 31 tests and one clean skip.","treeHash":null,"usage":{"cachedInputTokens":423217,"inputTokens":194,"model":"claude-fable-5-1","outputTokens":13716,"runtime":"claude","turns":18,"wallClockMs":244615}},{"artifacts":[],"attempt":1,"bundleHash":"157fad985ddc63055d820012274481fee7e0a85d43e430883e34cd800f302009","device":"820ba900755d37ad","findings":[],"hash":"fdf75375f3eb5934348edaa86c28b9c435f7d9948d027810fce50b88f9816579","nodeId":"46ba0de9-6e35-47a5-84e2-3f5cad55c901","outcome":"completed","summary":"Updated only [launch.json](/home/imd/.identitymd/work/7ba3bec6-c8de-466a-ba1e-e843c1944cc9/46ba0de9-6e35-47a5-84e2-3f5cad55c901/launch.json). Verified exact deployment fields, economics, supply and constructor ABI; refined notes to match `TESTToken`.\n\n`forge build` passed. `forge test`: 31 passed, 0 failed, 1 skipped because no mainnet fork was selected.","treeHash":"601dcd9a6c96842fb03f238b5c81869933aa5517","usage":{"cachedInputTokens":323328,"inputTokens":43366,"model":"gpt-6-astra","outputTokens":2690,"runtime":"codex","turns":3,"wallClockMs":79097}}],"verification":[{"checks":[{"durationMs":2723,"exitCode":0,"name":"build","output":"Compiling 73 files with Solc 0.8.26\nSolc 0.8.26 finished in 2.54s\nCompiler run successful!\n","passed":true},{"durationMs":5460,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/MainnetFork.t.sol:MainnetForkTest\n[SKIP: Select an Ethereum mainnet fork with --fork-url] test_MainnetForkTransfersAndRunningTotals() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 297.48µs (104.46µs CPU time)\n\nRan 11 tests for test/TESTTokenEdgeCases.t.sol:TESTTokenEdgeCasesTest\n[PASS] testFuzz_FiniteAllowanceAboveSupplyStillDecrements(uint256) (runs: 256, μ: 279187, ~: 279518)\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129640014\n\n[PASS] testFuzz_InsufficientAllowanceCannotSpendFundedBalance(uint256,uint256,uint256) (runs: 256, μ: 230370, ~: 232092)\nLogs:\n  Bound result 731442115739394450404335146\n  Bound result 458768344757017116197239654\n  Bound result 545347541964754671827630764\n\n[PASS] testFuzz_InsufficientBalanceIsAtomic(uint256,uint256,bool,bool) (runs: 256, μ: 252141, ~: 251435)\nLogs:\n  Bound result 642641166610938238019904768\n  Bound result 115792089237316195423570985008687907853269984665639921398291247276139431553948\n\n[PASS] test_ApprovalReplacementIsIsolatedAndDoesNotCountAsATransfer() (gas: 293165)\n[PASS] test_ContractRecipientReceivesWholeAmountWithoutCallback() (gas: 230098)\n[PASS] test_FiniteAllowanceCannotBeReplayedAndHolderNeedsApprovalForTransferFrom() (gas: 329449)\n[PASS] test_InvalidReceiverRollsBackFiniteAndInfiniteAllowance() (gas: 315066)\n[PASS] test_MalformedCallsAndNativeValueCannotChangeState() (gas: 195950)\n[PASS] test_OneHoldersApprovalCannotAuthorizeSpendingAnotherHoldersTokens() (gas: 198433)\n[PASS] test_ZeroDelegatedTransferWithoutAllowanceEmitsUnchangedSenderTotal() (gas: 254910)\n[PASS] test_ZeroSenderAndApproverRevertEvenForZeroAmount() (gas: 88232)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 15.60ms (46.54ms CPU time)\n\nRan 13 tests for test/TESTToken.t.sol:TESTTokenTest\n[PASS] testFuzz_DelegatedTransfersAreExact(uint256,uint256) (runs: 256, μ: 317058, ~: 320310)\nLogs:\n  Bound result 3144\n  Bound result 3057\n\n[PASS] testFuzz_TransferRoundTripConservesSupplyAndGrossTotals(uint256) (runs: 256, μ: 202268, ~: 202377)\nLogs:\n  Bound result 80\n\n[PASS] test_ConstructorMintsOnceAndRetainsNothing() (gas: 65791)\n[PASS] test_FailedTransferFromRollsBackAllowanceAndTotals() (gas: 272169)\n[PASS] test_InfiniteAllowanceAndRevocation() (gas: 292583)\n[PASS] test_MaxUintTransferCannotOverflowBalances() (gas: 65325)\n[PASS] test_NoAdministrativeEntryPointsForDeployerOrStranger() (gas: 4682575)\n[PASS] test_RunningTotalsAccumulatePerSenderInMinorUnits() (gas: 274044)\n[PASS] test_RuntimeHasNoDestructiveOrDelegatingOpcodes() (gas: 899824)\n[PASS] test_TransferFromCountsHolderAndSpendsExactAllowance() (gas: 319524)\n[PASS] test_TransferFromToSelfStillSpendsAllowance() (gas: 213015)\n[PASS] test_ZeroAddressCannotBurnOrApprove() (gas: 113833)\n[PASS] test_ZeroAndSelfTransfersEmitAndDoNotChangeSupply() (gas: 209573)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 144.60ms (37.12ms CPU time)\n\nRan 6 tests for test/LaunchIntegration.t.sol:LaunchIntegrationTest\n[PASS] testFuzz_PoolSettlementNeverTaxesTEST(bool,uint128) (runs: 256, μ: 2299688, ~: 2294805)\nLogs:\n  Bound result 758668228122544686\n\n[PASS] test_SeedAndSwapBothWaysWhenTESTIsCurrency0() (gas: 2290403)\n[PASS] test_SeedAndSwapBothWaysWhenTESTIsCurrency1() (gas: 2300781)\n[PASS] test_UnderfundedSwapsRollBackWhenTESTIsCurrency0() (gas: 2753175)\n[PASS] test_UnderfundedSwapsRollBackWhenTESTIsCurrency1() (gas: 2738550)\n[PASS] test_ZeroSwapCannotChangePoolOrTokenState() (gas: 1693760)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 144.57ms (154.32ms CPU time)\n\nRan 1 test for test/TESTTokenInvariant.t.sol:TESTTokenInvariantTest\n[PASS] invariant_ConservationAndGrossTotalsAcrossSequences() (runs: 256, calls: 16384, reverts: 0)\n\n╭-----------------+------------------------+-------+---------+----------╮\n| Contract        | Selector               | Calls | Reverts | Discards |\n+=======================================================================+\n| TransferHandler | approve                | 2366  | 0       | 0        |\n|-----------------+------------------------+-------+---------+----------|\n| TransferHandler | delegatedTransfer      | 2357  | 0       | 0        |\n|-----------------+------------------------+-------+---------+----------|\n| TransferHandler | rejectedAllowance      | 2393  | 0       | 0        |\n|-----------------+------------------------+-------+---------+----------|\n| TransferHandler | rejectedTransfer       | 2323  | 0       | 0        |\n|-----------------+------------------------+-------+---------+----------|\n| TransferHandler | rejectedZeroReceiver   | 2385  | 0       | 0        |\n|-----------------+------------------------+-------+---------+----------|\n| TransferHandler | spendExistingAllowance | 2296  | 0       | 0        |\n|-----------------+------------------------+-------+---------+----------|\n| TransferHandler | transfer               | 2264  | 0       | 0        |\n╰-----------------+------------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 11942\n  Bound result 0\n  Bound result 188463463374606070638743772\n  Bound result 249999999999999999999988056\n  Bound result 11335\n  Bound result 0\n  Bound result 2\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 724\n  Bound result 127\n  Bound result 559\n  Bound result 86\n  Bound result 1\n  Bound result 0\n  Bound result 2\n  Bound result 1000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 228431735202934660801152596\n  Bound result 215478707074656256224756379\n  Bound result 11083\n  Bound result 2\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 2000000000000000000\n  Bound result 10000000000000000000\n  Bound result 156729768401377164605912172\n  Bound result 57\n  Bound result 34\n  Bound result 1275\n  Bound result 0\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 5.34s (5.34s CPU time)\n\nRan 5 test suites in 5.34s (5.65s CPU time): 31 tests passed, 0 failed, 1 skipped (32 total tests)\n","passed":true},{"durationMs":135,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"TESTToken.approve(address,uint256)\",\"TESTToken.transfer(address,uint256)\",\"TESTToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":9,\"DESIGN.md\":78,\"README.md\":83,\"REVIEW.md\":10,\"SITE-VALIDATION.md\":62,\"dist/404.html\":65,\"dist/assets/CREDITS.txt\":16,\"dist/assets/app.js\":619,\"dist/assets/fonts/archivo-black.woff2\":84,\"dist/assets/fonts/archivoblack-OFL.txt\":93,\"dist/assets/fonts/dm-sans.woff2\":139,\"dist/assets/fonts/dmsans-OFL.txt\":93,\"dist/assets/fonts/space-mono.woff2\":77,\"dist/assets/fonts/spacemono-OFL.txt\":93,\"dist/assets/logo.webp\":3,\"dist/assets/memes.js\":159,\"dist/assets/style.css\":2014,\"dist/index.html\":714,\"foundry.toml\":16,\"launch.json\":24,\"logos/PROMPTS.md\":21,\"logos/README.md\":15,\"logos/logo-1.png\":1580,\"logos/logo-2.png\":1220,\"logos/logo-3.png\":1838,\"logos/logo-4.png\":5408,\"logos/logo-5.png\":2266,\"logos/preview-64px.png\":143,\"scripts/build-site.mjs\":58,\"scripts/check-site-delivery.py\":71,\"scripts/check-site.mjs\":594,\"scripts/verify_delivery.py\":85,\"site/404.html\":65,\"site/assets/CREDITS.txt\":16,\"site/assets/app.js\":619,\"site/assets/fonts/archivo-black.woff2\":84,\"site/assets/fonts/archivoblack-OFL.txt\":93,\"site/assets/fonts/dm-sans.woff2\":139,\"site/assets/fonts/dmsans-OFL.txt\":93,\"site/assets/fonts/space-mono.woff2\":77,\"site/assets/fonts/spacemono-OFL.txt\":93,\"site/assets/logo.webp\":3,\"site/assets/memes.js\":159,\"site/assets/style.css\":2014,\"site/index.html\":714,\"src/TESTToken.sol\":77,\"test/LaunchIntegration.t.sol\":363,\"test/MainnetFork.t.sol\":48,\"test/README.md\":48,\"test/TESTToken.t.sol\":274,\"test/TESTTokenEdgeCases.t.sol\":233,\"test/TESTTokenInvariant.t.sol\":189,\"test/helpers/LaunchHarness.sol\":130,\"web/licenses/better-interface.txt\":220,\"web/package-lock.json\":104,\"web/package.json\":11,\"web/review/site-404.jpg\":68,\"web/review/site-checks.json\":185,\"web/review/site-desktop-1440.jpg\":1537,\"web/review/site-mobile-390.jpg\":82,\"web/tsconfig.json\":14},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"1463e8830650f8d8bb059bf683d98de1e3f8a52bf30a874dd1ce514d08ae86c6","verifiedTreeHash":"d44f783fcbf2285a8e96988962fb0485f5eb87c4","verifierVersion":"0.1.0+0e08a464"},{"checks":[{"durationMs":2004,"exitCode":0,"name":"build","output":"Compiling 71 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.88s\nCompiler run successful!\n","passed":true},{"durationMs":2034,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/MainnetFork.t.sol:MainnetForkTest\n[SKIP] test_MainnetForkTransfersAndRunningTotals() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 231.36µs (102.36µs CPU time)\n\nRan 13 tests for test/TESTToken.t.sol:TESTTokenTest\n[PASS] testFuzz_DelegatedTransfersAreExact(uint256,uint256) (runs: 1000, μ: 316118, ~: 320324)\nLogs:\n  Bound result 147\n  Bound result 100\n\n[PASS] testFuzz_TransferRoundTripConservesSupplyAndGrossTotals(uint256) (runs: 1000, μ: 201666, ~: 202389)\nLogs:\n  Bound result 14005\n\n[PASS] test_ConstructorMintsOnceAndRetainsNothing() (gas: 65791)\n[PASS] test_FailedTransferFromRollsBackAllowanceAndTotals() (gas: 272169)\n[PASS] test_InfiniteAllowanceAndRevocation() (gas: 292583)\n[PASS] test_MaxUintTransferCannotOverflowBalances() (gas: 65325)\n[PASS] test_NoAdministrativeEntryPointsForDeployerOrStranger() (gas: 1332463)\n[PASS] test_RunningTotalsAccumulatePerSenderInMinorUnits() (gas: 274044)\n[PASS] test_RuntimeHasNoDestructiveOrDelegatingOpcodes() (gas: 899824)\n[PASS] test_TransferFromCountsHolderAndSpendsExactAllowance() (gas: 319524)\n[PASS] test_TransferFromToSelfStillSpendsAllowance() (gas: 213015)\n[PASS] test_ZeroAddressCannotBurnOrApprove() (gas: 113833)\n[PASS] test_ZeroAndSelfTransfersEmitAndDoNotChangeSupply() (gas: 209573)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 31.65ms (68.42ms CPU time)\n\nRan 3 tests for test/LaunchIntegration.t.sol:LaunchIntegrationTest\n[PASS] testFuzz_PoolSettlementNeverTaxesTEST(bool,uint128) (runs: 1000, μ: 1868118, ~: 1872099)\nLogs:\n  Bound result 338301274787155\n\n[PASS] test_SeedAndSwapBothWaysWhenTESTIsCurrency0() (gas: 1858323)\n[PASS] test_SeedAndSwapBothWaysWhenTESTIsCurrency1() (gas: 1868547)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 105.91ms (109.12ms CPU time)\n\nRan 1 test for test/TESTTokenInvariant.t.sol:TESTTokenInvariantTest\n[PASS] invariant_ConservationAndGrossTotalsAcrossSequences() (runs: 256, calls: 16384, reverts: 0)\n\n╭-----------------+-------------------+-------+---------+----------╮\n| Contract        | Selector          | Calls | Reverts | Discards |\n+==================================================================+\n| TransferHandler | delegatedTransfer | 5434  | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| TransferHandler | rejectedTransfer  | 5422  | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| TransferHandler | transfer          | 5528  | 0       | 0        |\n╰-----------------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 12000000000000000007\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 3\n  Bound result 0\n  Bound result 0\n  Bound result 10\n  Bound result 17000000000000000000\n  Bound result 3299\n  Bound result 999999982999999999999999997\n  Bound result 4993\n  Bound result 822\n  Bound result 0\n  Bound result 228163857264337593543950494\n  Bound result 4993\n  Bound result 7329\n  Bound result 34577\n  Bound result 7862\n  Bound result 100000000000000000000\n  Bound result 12000000000000000000\n  Bound result 2000000000000000000\n  Bound result 3073\n  Bound result 1879\n  Bound result 7634\n  Bound result 26999999999999960433\n  Bound result 12000000000000000000\n  Bound result 86191076599008350055444253\n  Bound result 3264\n  Bound result 0\n  Bound result 0\n  Bound result 3\n  Bound result 4715\n  Bound result 72030498377845555749241976\n  Bound result 153614895602874623716260836\n  Bound result 18\n  Bound result 771836101735662406456069988\n  Bound result 1\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.94s (1.94s CPU time)\n\nRan 4 test suites in 1.94s (2.08s CPU time): 17 tests passed, 0 failed, 1 skipped (18 total tests)\n","passed":true},{"durationMs":98,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"TESTToken.approve(address,uint256)\",\"TESTToken.transfer(address,uint256)\",\"TESTToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":9,\"DESIGN.md\":78,\"README.md\":80,\"REVIEW.md\":10,\"SITE-VALIDATION.md\":62,\"dist/404.html\":65,\"dist/assets/CREDITS.txt\":16,\"dist/assets/app.js\":619,\"dist/assets/fonts/archivo-black.woff2\":84,\"dist/assets/fonts/archivoblack-OFL.txt\":93,\"dist/assets/fonts/dm-sans.woff2\":139,\"dist/assets/fonts/dmsans-OFL.txt\":93,\"dist/assets/fonts/space-mono.woff2\":77,\"dist/assets/fonts/spacemono-OFL.txt\":93,\"dist/assets/logo.webp\":3,\"dist/assets/memes.js\":159,\"dist/assets/style.css\":2014,\"dist/index.html\":714,\"foundry.toml\":16,\"launch.json\":24,\"logos/PROMPTS.md\":21,\"logos/README.md\":15,\"logos/logo-1.png\":1580,\"logos/logo-2.png\":1220,\"logos/logo-3.png\":1838,\"logos/logo-4.png\":5408,\"logos/logo-5.png\":2266,\"logos/preview-64px.png\":143,\"scripts/build-site.mjs\":58,\"scripts/check-site-delivery.py\":71,\"scripts/check-site.mjs\":594,\"scripts/verify_delivery.py\":78,\"site/404.html\":65,\"site/assets/CREDITS.txt\":16,\"site/assets/app.js\":619,\"site/assets/fonts/archivo-black.woff2\":84,\"site/assets/fonts/archivoblack-OFL.txt\":93,\"site/assets/fonts/dm-sans.woff2\":139,\"site/assets/fonts/dmsans-OFL.txt\":93,\"site/assets/fonts/space-mono.woff2\":77,\"site/assets/fonts/spacemono-OFL.txt\":93,\"site/assets/logo.webp\":3,\"site/assets/memes.js\":159,\"site/assets/style.css\":2014,\"site/index.html\":714,\"src/TESTToken.sol\":77,\"test/LaunchIntegration.t.sol\":213,\"test/MainnetFork.t.sol\":50,\"test/TESTToken.t.sol\":255,\"test/TESTTokenInvariant.t.sol\":103,\"test/helpers/LaunchHarness.sol\":130,\"web/licenses/better-interface.txt\":220,\"web/package-lock.json\":104,\"web/package.json\":11,\"web/review/site-404.jpg\":68,\"web/review/site-checks.json\":185,\"web/review/site-desktop-1440.jpg\":1537,\"web/review/site-mobile-390.jpg\":82,\"web/tsconfig.json\":14},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"558227b5c02a923df829a51c7034d6e15560dbae5f767ef985e90c15aab649b0","verifiedTreeHash":"98ed1355d8c37b2abc6c8b883e790ad1e8f83623","verifierVersion":"0.1.0+0e08a464"},{"checks":[{"durationMs":1802,"exitCode":0,"name":"build","output":"Compiling 71 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.67s\nCompiler run successful!\n","passed":true},{"durationMs":1874,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/MainnetFork.t.sol:MainnetForkTest\n[SKIP] test_MainnetForkTransfersAndRunningTotals() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 254.06µs (92.24µs CPU time)\n\nRan 13 tests for test/TESTToken.t.sol:TESTTokenTest\n[PASS] testFuzz_DelegatedTransfersAreExact(uint256,uint256) (runs: 1000, μ: 316190, ~: 320280)\nLogs:\n  Bound result 15461827\n  Bound result 8233067\n\n[PASS] testFuzz_TransferRoundTripConservesSupplyAndGrossTotals(uint256) (runs: 1000, μ: 202342, ~: 202365)\nLogs:\n  Bound result 0\n\n[PASS] test_ConstructorMintsOnceAndRetainsNothing() (gas: 65791)\n[PASS] test_FailedTransferFromRollsBackAllowanceAndTotals() (gas: 272169)\n[PASS] test_InfiniteAllowanceAndRevocation() (gas: 292583)\n[PASS] test_MaxUintTransferCannotOverflowBalances() (gas: 65325)\n[PASS] test_NoAdministrativeEntryPointsForDeployerOrStranger() (gas: 1332463)\n[PASS] test_RunningTotalsAccumulatePerSenderInMinorUnits() (gas: 274044)\n[PASS] test_RuntimeHasNoDestructiveOrDelegatingOpcodes() (gas: 899824)\n[PASS] test_TransferFromCountsHolderAndSpendsExactAllowance() (gas: 319524)\n[PASS] test_TransferFromToSelfStillSpendsAllowance() (gas: 213015)\n[PASS] test_ZeroAddressCannotBurnOrApprove() (gas: 113833)\n[PASS] test_ZeroAndSelfTransfersEmitAndDoNotChangeSupply() (gas: 209573)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 99.97ms (200.87ms CPU time)\n\nRan 3 tests for test/LaunchIntegration.t.sol:LaunchIntegrationTest\n[PASS] testFuzz_PoolSettlementNeverTaxesTEST(bool,uint128) (runs: 1000, μ: 1867664, ~: 1871993)\nLogs:\n  Bound result 999999000000000543\n\n[PASS] test_SeedAndSwapBothWaysWhenTESTIsCurrency0() (gas: 1858323)\n[PASS] test_SeedAndSwapBothWaysWhenTESTIsCurrency1() (gas: 1868547)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 100.00ms (102.04ms CPU time)\n\nRan 1 test for test/TESTTokenInvariant.t.sol:TESTTokenInvariantTest\n[PASS] invariant_ConservationAndGrossTotalsAcrossSequences() (runs: 256, calls: 16384, reverts: 0)\n\n╭-----------------+-------------------+-------+---------+----------╮\n| Contract        | Selector          | Calls | Reverts | Discards |\n+==================================================================+\n| TransferHandler | delegatedTransfer | 5505  | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| TransferHandler | rejectedTransfer  | 5511  | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| TransferHandler | transfer          | 5368  | 0       | 0        |\n╰-----------------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 1507\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 4855\n  Bound result 10000000000000000\n  Bound result 0\n  Bound result 4353\n  Bound result 0\n  Bound result 0\n  Bound result 945\n  Bound result 12349741099934573993939565\n  Bound result 10000000000000000\n  Bound result 2831\n  Bound result 7\n  Bound result 70000000000000000000\n  Bound result 25\n  Bound result 957625570\n  Bound result 6729054540601\n  Bound result 5502\n  Bound result 3344\n  Bound result 2233625728\n  Bound result 8445581824828539043800492\n  Bound result 6541\n  Bound result 12000000000000000007\n  Bound result 1000000\n  Bound result 6853\n  Bound result 2500000000000000000000\n  Bound result 1281\n  Bound result 4502\n  Bound result 844336868232956457884720650\n  Bound result 117300739\n  Bound result 104039077699960834567319332\n  Bound result 127\n  Bound result 8443081824828539044813855\n  Bound result 8578323904863555695744\n  Bound result 5792434721362007374791620\n  Bound result 1728\n  Bound result 3188\n  Bound result 37725726408495391949018\n  Bound result 20648212852601502166705461\n  Bound result 1000000000000\n  Bound result 340798\n  Bound result 244\n  Bound result 2500000000000000000000\n  Bound result 351\n  Bound result 100\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.79s (1.79s CPU time)\n\nRan 4 test suites in 1.79s (1.99s CPU time): 17 tests passed, 0 failed, 1 skipped (18 total tests)\n","passed":true},{"durationMs":89,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"TESTToken.approve(address,uint256)\",\"TESTToken.transfer(address,uint256)\",\"TESTToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":9,\"README.md\":25,\"REVIEW.md\":10,\"foundry.toml\":16,\"launch.json\":24,\"logos/PROMPTS.md\":21,\"logos/README.md\":15,\"logos/logo-1.png\":1580,\"logos/logo-2.png\":1220,\"logos/logo-3.png\":1838,\"logos/logo-4.png\":5408,\"logos/logo-5.png\":2266,\"logos/preview-64px.png\":143,\"scripts/verify_delivery.py\":78,\"src/TESTToken.sol\":77,\"test/LaunchIntegration.t.sol\":213,\"test/MainnetFork.t.sol\":50,\"test/TESTToken.t.sol\":255,\"test/TESTTokenInvariant.t.sol\":103,\"test/helpers/LaunchHarness.sol\":130},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":283,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":207,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/TESTToken.sol:10: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"897397bdbb3b1d08eae85ac30fa77621e36a68a8983da6f102706c127e258580","verifiedTreeHash":"5aed854d306fdcd8be474d0e883f266b5600e53c","verifierVersion":"0.1.0+0e08a464"},{"checks":[{"durationMs":2267,"exitCode":0,"name":"build","output":"Compiling 71 files with Solc 0.8.26\nSolc 0.8.26 finished in 2.09s\nCompiler run successful!\n","passed":true},{"durationMs":2227,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/MainnetFork.t.sol:MainnetForkTest\n[SKIP: Select an Ethereum mainnet fork with --fork-url] test_MainnetForkTransfersAndRunningTotals() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 278.58µs (94.19µs CPU time)\n\nRan 3 tests for test/LaunchIntegration.t.sol:LaunchIntegrationTest\n[PASS] testFuzz_PoolSettlementNeverTaxesTEST(bool,uint128) (runs: 1000, μ: 1867660, ~: 1871843)\nLogs:\n  Bound result 66368216219574180\n\n[PASS] test_SeedAndSwapBothWaysWhenTESTIsCurrency0() (gas: 1858323)\n[PASS] test_SeedAndSwapBothWaysWhenTESTIsCurrency1() (gas: 1868547)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 123.89ms (126.03ms CPU time)\n\nRan 13 tests for test/TESTToken.t.sol:TESTTokenTest\n[PASS] testFuzz_DelegatedTransfersAreExact(uint256,uint256) (runs: 1000, μ: 316124, ~: 320280)\nLogs:\n  Bound result 17668\n  Bound result 14630\n\n[PASS] testFuzz_TransferRoundTripConservesSupplyAndGrossTotals(uint256) (runs: 1000, μ: 201591, ~: 202365)\nLogs:\n  Bound result 589555155404107645174807025\n\n[PASS] test_ConstructorMintsOnceAndRetainsNothing() (gas: 65791)\n[PASS] test_FailedTransferFromRollsBackAllowanceAndTotals() (gas: 272169)\n[PASS] test_InfiniteAllowanceAndRevocation() (gas: 292583)\n[PASS] test_MaxUintTransferCannotOverflowBalances() (gas: 65325)\n[PASS] test_NoAdministrativeEntryPointsForDeployerOrStranger() (gas: 1332463)\n[PASS] test_RunningTotalsAccumulatePerSenderInMinorUnits() (gas: 274044)\n[PASS] test_RuntimeHasNoDestructiveOrDelegatingOpcodes() (gas: 899824)\n[PASS] test_TransferFromCountsHolderAndSpendsExactAllowance() (gas: 319524)\n[PASS] test_TransferFromToSelfStillSpendsAllowance() (gas: 213015)\n[PASS] test_ZeroAddressCannotBurnOrApprove() (gas: 113833)\n[PASS] test_ZeroAndSelfTransfersEmitAndDoNotChangeSupply() (gas: 209573)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 123.97ms (231.85ms CPU time)\n\nRan 1 test for test/TESTTokenInvariant.t.sol:TESTTokenInvariantTest\n[PASS] invariant_ConservationAndGrossTotalsAcrossSequences() (runs: 256, calls: 16384, reverts: 0)\n\n╭-----------------+-------------------+-------+---------+----------╮\n| Contract        | Selector          | Calls | Reverts | Discards |\n+==================================================================+\n| TransferHandler | delegatedTransfer | 5610  | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| TransferHandler | rejectedTransfer  | 5329  | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| TransferHandler | transfer          | 5445  | 0       | 0        |\n╰-----------------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 4188\n  Bound result 0\n  Bound result 1065\n  Bound result 0\n  Bound result 0\n  Bound result 256291001250210803886073238\n  Bound result 0\n  Bound result 133\n  Bound result 0\n  Bound result 100\n  Bound result 7861\n  Bound result 0\n  Bound result 0\n  Bound result 1952\n  Bound result 192\n  Bound result 0\n  Bound result 1\n  Bound result 8023\n  Bound result 5256\n  Bound result 1000\n  Bound result 2\n  Bound result 395008646786682805469417620\n  Bound result 1007\n  Bound result 8008\n  Bound result 289\n  Bound result 1000000000000\n  Bound result 5344\n  Bound result 7224\n  Bound result 46308294823576414824927932\n  Bound result 1025\n  Bound result 1502\n  Bound result 1281\n  Bound result 3929\n  Bound result 794183411696938881\n  Bound result 1000\n  Bound result 96\n  Bound result 6422496864801155776\n  Bound result 4\n  Bound result 17000000000000000016\n  Bound result 5560617361178451477\n  Bound result 430\n  Bound result 12500\n  Bound result 7579\n  Bound result 348700335757289802341426379\n  Bound result 7546\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.12s (2.11s CPU time)\n\nRan 4 test suites in 2.12s (2.37s CPU time): 17 tests passed, 0 failed, 1 skipped (18 total tests)\n","passed":true},{"durationMs":144,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"TESTToken.approve(address,uint256)\",\"TESTToken.transfer(address,uint256)\",\"TESTToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":9,\"DESIGN.md\":78,\"README.md\":83,\"REVIEW.md\":10,\"SITE-VALIDATION.md\":62,\"dist/404.html\":65,\"dist/assets/CREDITS.txt\":16,\"dist/assets/app.js\":619,\"dist/assets/fonts/archivo-black.woff2\":84,\"dist/assets/fonts/archivoblack-OFL.txt\":93,\"dist/assets/fonts/dm-sans.woff2\":139,\"dist/assets/fonts/dmsans-OFL.txt\":93,\"dist/assets/fonts/space-mono.woff2\":77,\"dist/assets/fonts/spacemono-OFL.txt\":93,\"dist/assets/logo.webp\":3,\"dist/assets/memes.js\":159,\"dist/assets/style.css\":2014,\"dist/index.html\":714,\"foundry.toml\":16,\"launch.json\":24,\"logos/PROMPTS.md\":21,\"logos/README.md\":15,\"logos/logo-1.png\":1580,\"logos/logo-2.png\":1220,\"logos/logo-3.png\":1838,\"logos/logo-4.png\":5408,\"logos/logo-5.png\":2266,\"logos/preview-64px.png\":143,\"scripts/build-site.mjs\":58,\"scripts/check-site-delivery.py\":71,\"scripts/check-site.mjs\":594,\"scripts/verify_delivery.py\":85,\"site/404.html\":65,\"site/assets/CREDITS.txt\":16,\"site/assets/app.js\":619,\"site/assets/fonts/archivo-black.woff2\":84,\"site/assets/fonts/archivoblack-OFL.txt\":93,\"site/assets/fonts/dm-sans.woff2\":139,\"site/assets/fonts/dmsans-OFL.txt\":93,\"site/assets/fonts/space-mono.woff2\":77,\"site/assets/fonts/spacemono-OFL.txt\":93,\"site/assets/logo.webp\":3,\"site/assets/memes.js\":159,\"site/assets/style.css\":2014,\"site/index.html\":714,\"src/TESTToken.sol\":77,\"test/LaunchIntegration.t.sol\":213,\"test/MainnetFork.t.sol\":48,\"test/TESTToken.t.sol\":255,\"test/TESTTokenInvariant.t.sol\":103,\"test/helpers/LaunchHarness.sol\":130,\"web/licenses/better-interface.txt\":220,\"web/package-lock.json\":104,\"web/package.json\":11,\"web/review/site-404.jpg\":68,\"web/review/site-checks.json\":185,\"web/review/site-desktop-1440.jpg\":1537,\"web/review/site-mobile-390.jpg\":82,\"web/tsconfig.json\":14},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"e6ff22b695a557714bfcbb9457da960d0b239d32d5dd54142e0d76bd8f786ac8","verifiedTreeHash":"5afc2c70fdc6bb29b3f4da478a824970fe6b2f21","verifierVersion":"0.1.0+0e08a464"},{"checks":[{"durationMs":2968,"exitCode":0,"name":"build","output":"Compiling 73 files with Solc 0.8.26\nSolc 0.8.26 finished in 2.72s\nCompiler run successful!\n","passed":true},{"durationMs":5139,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/MainnetFork.t.sol:MainnetForkTest\n[SKIP: Select an Ethereum mainnet fork with --fork-url] test_MainnetForkTransfersAndRunningTotals() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 313.64µs (136.14µs CPU time)\n\nRan 13 tests for test/TESTToken.t.sol:TESTTokenTest\n[PASS] testFuzz_DelegatedTransfersAreExact(uint256,uint256) (runs: 256, μ: 317457, ~: 320304)\nLogs:\n  Bound result 13599\n  Bound result 56\n\n[PASS] testFuzz_TransferRoundTripConservesSupplyAndGrossTotals(uint256) (runs: 256, μ: 201276, ~: 202413)\nLogs:\n  Bound result 21568\n\n[PASS] test_ConstructorMintsOnceAndRetainsNothing() (gas: 65791)\n[PASS] test_FailedTransferFromRollsBackAllowanceAndTotals() (gas: 272169)\n[PASS] test_InfiniteAllowanceAndRevocation() (gas: 292583)\n[PASS] test_MaxUintTransferCannotOverflowBalances() (gas: 65325)\n[PASS] test_NoAdministrativeEntryPointsForDeployerOrStranger() (gas: 4682575)\n[PASS] test_RunningTotalsAccumulatePerSenderInMinorUnits() (gas: 274044)\n[PASS] test_RuntimeHasNoDestructiveOrDelegatingOpcodes() (gas: 899824)\n[PASS] test_TransferFromCountsHolderAndSpendsExactAllowance() (gas: 319524)\n[PASS] test_TransferFromToSelfStillSpendsAllowance() (gas: 213015)\n[PASS] test_ZeroAddressCannotBurnOrApprove() (gas: 113833)\n[PASS] test_ZeroAndSelfTransfersEmitAndDoNotChangeSupply() (gas: 209573)\nSuite result: ok. 13 passed; 0 failed; 0 skipped; finished in 16.79ms (45.97ms CPU time)\n\nRan 11 tests for test/TESTTokenEdgeCases.t.sol:TESTTokenEdgeCasesTest\n[PASS] testFuzz_FiniteAllowanceAboveSupplyStillDecrements(uint256) (runs: 256, μ: 279180, ~: 279518)\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913139705767\n\n[PASS] testFuzz_InsufficientAllowanceCannotSpendFundedBalance(uint256,uint256,uint256) (runs: 256, μ: 230840, ~: 232094)\nLogs:\n  Bound result 782321670465690710495573919\n  Bound result 726911833674501655122309353\n  Bound result 775737715076646775225704966\n\n[PASS] testFuzz_InsufficientBalanceIsAtomic(uint256,uint256,bool,bool) (runs: 256, μ: 252826, ~: 253219)\nLogs:\n  Bound result 19555\n  Bound result 12000000000000000007\n\n[PASS] test_ApprovalReplacementIsIsolatedAndDoesNotCountAsATransfer() (gas: 293165)\n[PASS] test_ContractRecipientReceivesWholeAmountWithoutCallback() (gas: 230098)\n[PASS] test_FiniteAllowanceCannotBeReplayedAndHolderNeedsApprovalForTransferFrom() (gas: 329449)\n[PASS] test_InvalidReceiverRollsBackFiniteAndInfiniteAllowance() (gas: 315066)\n[PASS] test_MalformedCallsAndNativeValueCannotChangeState() (gas: 195950)\n[PASS] test_OneHoldersApprovalCannotAuthorizeSpendingAnotherHoldersTokens() (gas: 198433)\n[PASS] test_ZeroDelegatedTransferWithoutAllowanceEmitsUnchangedSenderTotal() (gas: 254910)\n[PASS] test_ZeroSenderAndApproverRevertEvenForZeroAmount() (gas: 88232)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 18.17ms (51.07ms CPU time)\n\nRan 6 tests for test/LaunchIntegration.t.sol:LaunchIntegrationTest\n[PASS] testFuzz_PoolSettlementNeverTaxesTEST(bool,uint128) (runs: 256, μ: 2299900, ~: 2304108)\nLogs:\n  Bound result 506079514315708594\n\n[PASS] test_SeedAndSwapBothWaysWhenTESTIsCurrency0() (gas: 2290403)\n[PASS] test_SeedAndSwapBothWaysWhenTESTIsCurrency1() (gas: 2300781)\n[PASS] test_UnderfundedSwapsRollBackWhenTESTIsCurrency0() (gas: 2753175)\n[PASS] test_UnderfundedSwapsRollBackWhenTESTIsCurrency1() (gas: 2738550)\n[PASS] test_ZeroSwapCannotChangePoolOrTokenState() (gas: 1693760)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 104.54ms (113.07ms CPU time)\n\nRan 1 test for test/TESTTokenInvariant.t.sol:TESTTokenInvariantTest\n[PASS] invariant_ConservationAndGrossTotalsAcrossSequences() (runs: 256, calls: 16384, reverts: 0)\n\n╭-----------------+------------------------+-------+---------+----------╮\n| Contract        | Selector               | Calls | Reverts | Discards |\n+=======================================================================+\n| TransferHandler | approve                | 2332  | 0       | 0        |\n|-----------------+------------------------+-------+---------+----------|\n| TransferHandler | delegatedTransfer      | 2372  | 0       | 0        |\n|-----------------+------------------------+-------+---------+----------|\n| TransferHandler | rejectedAllowance      | 2386  | 0       | 0        |\n|-----------------+------------------------+-------+---------+----------|\n| TransferHandler | rejectedTransfer       | 2332  | 0       | 0        |\n|-----------------+------------------------+-------+---------+----------|\n| TransferHandler | rejectedZeroReceiver   | 2320  | 0       | 0        |\n|-----------------+------------------------+-------+---------+----------|\n| TransferHandler | spendExistingAllowance | 2321  | 0       | 0        |\n|-----------------+------------------------+-------+---------+----------|\n| TransferHandler | transfer               | 2321  | 0       | 0        |\n╰-----------------+------------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 127\n  Bound result 2239\n  Bound result 0\n  Bound result 2\n  Bound result 0\n  Bound result 108585788894834\n  Bound result 0\n  Bound result 5000000000000000009\n  Bound result 10399741253477432206960348\n  Bound result 100000000000000000000\n  Bound result 0\n  Bound result 40000000000000000000\n  Bound result 0\n  Bound result 10000000000000000006\n  Bound result 223536413182962355582829268\n  Bound result 0\n  Bound result 104\n  Bound result 3\n  Bound result 2233625729\n  Bound result 7036\n  Bound result 11925\n  Bound result 5120\n  Bound result 0\n  Bound result 387\n  Bound result 0\n  Bound result 2233625728\n  Bound result 0\n  Bound result 0\n  Bound result 10\n  Bound result 0\n  Bound result 5343\n  Bound result 34\n  Bound result 17000000000000000016\n  Bound result 7\n  Bound result 80\n  Bound result 2\n  Bound result 5\n  Bound result 0\n  Bound result 20\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 5.00s (5.00s CPU time)\n\nRan 5 test suites in 5.00s (5.14s CPU time): 31 tests passed, 0 failed, 1 skipped (32 total tests)\n","passed":true},{"durationMs":144,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"TESTToken.approve(address,uint256)\",\"TESTToken.transfer(address,uint256)\",\"TESTToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":9,\"DESIGN.md\":78,\"README.md\":83,\"REVIEW.md\":10,\"SITE-VALIDATION.md\":62,\"dist/404.html\":65,\"dist/assets/CREDITS.txt\":16,\"dist/assets/app.js\":619,\"dist/assets/fonts/archivo-black.woff2\":84,\"dist/assets/fonts/archivoblack-OFL.txt\":93,\"dist/assets/fonts/dm-sans.woff2\":139,\"dist/assets/fonts/dmsans-OFL.txt\":93,\"dist/assets/fonts/space-mono.woff2\":77,\"dist/assets/fonts/spacemono-OFL.txt\":93,\"dist/assets/logo.webp\":3,\"dist/assets/memes.js\":159,\"dist/assets/style.css\":2014,\"dist/index.html\":714,\"foundry.toml\":16,\"launch.json\":24,\"logos/PROMPTS.md\":21,\"logos/README.md\":15,\"logos/logo-1.png\":1580,\"logos/logo-2.png\":1220,\"logos/logo-3.png\":1838,\"logos/logo-4.png\":5408,\"logos/logo-5.png\":2266,\"logos/preview-64px.png\":143,\"scripts/build-site.mjs\":58,\"scripts/check-site-delivery.py\":71,\"scripts/check-site.mjs\":594,\"scripts/verify_delivery.py\":85,\"site/404.html\":65,\"site/assets/CREDITS.txt\":16,\"site/assets/app.js\":619,\"site/assets/fonts/archivo-black.woff2\":84,\"site/assets/fonts/archivoblack-OFL.txt\":93,\"site/assets/fonts/dm-sans.woff2\":139,\"site/assets/fonts/dmsans-OFL.txt\":93,\"site/assets/fonts/space-mono.woff2\":77,\"site/assets/fonts/spacemono-OFL.txt\":93,\"site/assets/logo.webp\":3,\"site/assets/memes.js\":159,\"site/assets/style.css\":2014,\"site/index.html\":714,\"src/TESTToken.sol\":77,\"test/LaunchIntegration.t.sol\":363,\"test/MainnetFork.t.sol\":48,\"test/README.md\":48,\"test/TESTToken.t.sol\":274,\"test/TESTTokenEdgeCases.t.sol\":233,\"test/TESTTokenInvariant.t.sol\":189,\"test/helpers/LaunchHarness.sol\":130,\"web/licenses/better-interface.txt\":220,\"web/package-lock.json\":104,\"web/package.json\":11,\"web/review/site-404.jpg\":68,\"web/review/site-checks.json\":185,\"web/review/site-desktop-1440.jpg\":1537,\"web/review/site-mobile-390.jpg\":82,\"web/tsconfig.json\":14},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"fdf75375f3eb5934348edaa86c28b9c435f7d9948d027810fce50b88f9816579","verifiedTreeHash":"601dcd9a6c96842fb03f238b5c81869933aa5517","verifierVersion":"0.1.0+0e08a464"}]}