{"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":"53bc6886-11bf-42e0-8b1f-5efa4e88d505","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"f9ab3943c39d473656df0fc04a3333cbd83aa33becc2d9b1b20ce13578b4a942","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_economics","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"5734990301b8cbda1148179c3f3224c483535800dd47449dbdb3e816a2e6ef2b","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_flow","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"0e706acc1ee467b5e6614b056e4d5d98828d913a2bd6ed3ef7794259d6b1c486","dependsOn":["build_contract_project","write_foundry_tests","manifest","audit_math","audit_permissions","audit_economics","audit_flow"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"af3aa01159bbf354f621cafa5c0006f6169e0938a8b015be508b7377dbf165bc","skillId":"audit-judge","tools":[]},"key":"audit_judge","kind":"code","role":"review","skillHash":"af3aa01159bbf354f621cafa5c0006f6169e0938a8b015be508b7377dbf165bc","skillId":"audit-judge","state":"accepted"},{"acceptedSubmissionHash":"d1edd090b1d1417ec5fca27ddc9daeb66c0e844ec4211106bc9179c46a1193c4","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_math","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"00847aa389897e7223e68311a036fd754a5726a126ea38d2033c35be55d0e087","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_permissions","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"f1250c7f9f88f507bbad3e9bad6ef133418a4fd9afd532e95df0f52d18541f16","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"816fe39c7efd64504a19175b0f4dd9186d61069f37a22684c90358a18c60bddc","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"816fe39c7efd64504a19175b0f4dd9186d61069f37a22684c90358a18c60bddc","skillId":"build-contract-project","state":"accepted"},{"acceptedSubmissionHash":"bc2a41661da474bc9ec4d7be7f5ef7fa5807f8313614ea6d4cd65054fec7d6cc","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"c79c60b9a84439a6e9d4bf8af2c27a619a22b555997b8ac5729bb38d56106a67","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"ab3f8f2aa4e7f3b3ada558c0dcf522ba733ca3df3b1da92c707a0fe305816d5f","skillId":"write-foundry-tests","tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"ab3f8f2aa4e7f3b3ada558c0dcf522ba733ca3df3b1da92c707a0fe305816d5f","skillId":"write-foundry-tests","state":"accepted"}],"objective":"A custom token: World Meme Token (WORLD).\nToken name: World Meme Token\nToken symbol: WORLD\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.","parentJobId":null,"planHash":"b82fd51853f435079dfff046c60652af6a92f13b1c637be0ad5fd5f0679ffcb6","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"53bc6886-11bf-42e0-8b1f-5efa4e88d505","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-2515-world-meme-token"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51250","feedbackHash":"5f1e10b78e06606101c3d42e536c223defff9a73957bce7e6ac2a04bcec644d7","nodeKey":"audit_economics","submissionHash":"f9ab3943c39d473656df0fc04a3333cbd83aa33becc2d9b1b20ce13578b4a942","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52642","feedbackHash":"2fe5c3fae75660e9f9bc1b97bb92e6df92402e835393205c694f5a1f8d0e58b2","nodeKey":"audit_flow","submissionHash":"5734990301b8cbda1148179c3f3224c483535800dd47449dbdb3e816a2e6ef2b","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51128","feedbackHash":"3c77d42ebb63244e4fe5fc107c8f0c757486aa45afff2d89ad76a4fd3c9d8eff","nodeKey":"audit_judge","submissionHash":"0e706acc1ee467b5e6614b056e4d5d98828d913a2bd6ed3ef7794259d6b1c486","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52114","feedbackHash":"9d1b85d62ab203c218b18aa1a0f88d002a91aa9f6a1acf1979dd34109585d26e","nodeKey":"audit_math","submissionHash":"d1edd090b1d1417ec5fca27ddc9daeb66c0e844ec4211106bc9179c46a1193c4","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52292","feedbackHash":"e77a60b86b29be45b131d2281bd7b7fe81e244a003509f86eb351ebddb6bddf0","nodeKey":"audit_permissions","submissionHash":"00847aa389897e7223e68311a036fd754a5726a126ea38d2033c35be55d0e087","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"54232","feedbackHash":"26bc4d2221460579b173bbce469b4b407140b9bea933cd7da63edefc4eb96c35","nodeKey":"build_contract_project","submissionHash":"f1250c7f9f88f507bbad3e9bad6ef133418a4fd9afd532e95df0f52d18541f16","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51503","feedbackHash":"d09c67d4ae8711e86dfe8cd2426491947e64c0feb771d4cff4ee295de141d27c","nodeKey":"manifest","submissionHash":"bc2a41661da474bc9ec4d7be7f5ef7fa5807f8313614ea6d4cd65054fec7d6cc","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51160","feedbackHash":"45d3820d4ef434dcf7923a280c12d9fb7992ee79919e7da8795330268fd5c99e","nodeKey":"write_foundry_tests","submissionHash":"c79c60b9a84439a6e9d4bf8af2c27a619a22b555997b8ac5729bb38d56106a67","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"065d569a0c7430256d4fd8eb508e87761f5573493b855017306407a5bf7d6299","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"ddcecd7483f623f7","findings":[],"hash":"00847aa389897e7223e68311a036fd754a5726a126ea38d2033c35be55d0e087","nodeId":"f1b1a937-031f-441b-971a-98ffcc4adb2d","outcome":"completed","summary":"The review is complete. No defects were found in the Access Control, Trust Gap or Asymmetry areas, and `.imd-findings.json` holds an empty findings list with a ten-row coverage record.\n\n**What was checked**\n\n- **Permission model.** The token has no owner, roles, initializer, receive or fallback. The compiled method table is exactly the ERC-20 surface plus five constant getters. The constructor mints the full 1e27 supply to msg.sender once, and the internal mint and burn helpers have no caller afterwards.\n- **Entry points.** All three listed entry points hold. approve writes only the caller's own allowance slot, transfer moves only the caller's balance, and transferFrom is gated by the allowance the holder set. A deployer or factory pulling from a holder without approval reverts.\n- **Vendored library.** The five OpenZeppelin files in the import chain were diffed against the npm 5.1.0 tarball and are byte-identical, so no privileged path hides in inherited code.\n- **Asymmetry and trust-gap seams.** approve and spend write the same slot in mirror directions, the burn side is unreachable so supply cannot shrink, and decimals agrees with the constants and manifest. With no setters, fees or external calls, there is no access-times-economics seam.\n- **Static-analysis lead.** The aderyn large-literal note on line 24 is style only. The constant evaluates to exactly 1e27 and is covered by an existing test.\n\n**Verification.** The existing 33 tests pass, and five scratch access-trace tests I wrote also passed before being removed. The approve front-running race is inherent to plain ERC-20, documented in the README, and recorded as a note rather than a finding.","treeHash":null,"usage":{"cachedInputTokens":425384,"inputTokens":194,"model":"claude-fable-5-1","outputTokens":9273,"runtime":"claude","turns":22,"wallClockMs":156210}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"48cf2e19b6c54386","findings":[{"citation":"resolved","description":"Merged from the economics specialist (the only specialist finding; the other four areas reported none). WorldMemeToken inherits OpenZeppelin v5.1.0 ERC20 unchanged: the vendored ERC20.sol, IERC20.sol, IERC20Metadata.sol, Context.sol and draft-IERC6093.sol were re-hashed by the judge and match the upstream v5.1.0 release byte for byte. approve() at lib/openzeppelin/contracts/token/ERC20/ERC20.sol:127 is a plain overwrite (`_approve(owner, spender, value)`), and the token adds no increaseAllowance/decreaseAllowance or permit. A holder lowering a non-zero allowance to another non-zero value can therefore have both the old and the new amount spent by a spender who front-runs the change. This is a property of the ERC-20 standard the requester chose and is already disclosed in README.md lines 88-89. It is reported at info severity as a trust-assumption record only; it is not a defect in the token's own code and the author does not need to change anything. Mitigation for holders is to set the allowance to zero first.","line":13,"path":"src/WorldMemeToken.sol","reproduction":"Judge reproduced in test/scratch/JudgeRepro.t.sol test_allowanceRaceSpendsBoth (passes, i.e. the sequence executes). State: deployer transfers 150e18 WORLD to owner; owner calls approve(spender, 100e18). Owner then intends to lower exposure with approve(spender, 50e18). Spender front-runs with transferFrom(owner, spender, 100e18): succeeds, allowance 100e18 -> 0. Owner's approve(spender, 50e18) lands: allowance 0 -> 50e18. Spender calls transferFrom(owner, spender, 50e18): succeeds. Expected by the owner: at most 100e18 (old) or 50e18 (new) moved. Actual: balanceOf(spender) == 150e18, balanceOf(owner) == 0.","severity":"info","snippet":"contract WorldMemeToken is ERC20 {","title":"Inherited approve() overwrites a live allowance (standard ERC-20 allowance race); trust assumption, no code change needed"}],"hash":"0e706acc1ee467b5e6614b056e4d5d98828d913a2bd6ed3ef7794259d6b1c486","nodeId":"86f53794-c7fb-4698-b600-893104d9ba1c","outcome":"completed","summary":"The review is complete and written to `.imd-findings.json`. No repository file was changed. The scratch test directory was removed after use.\n\n**Result: one info-level finding, no defects.** The token is a fixed-supply OpenZeppelin ERC20 with nothing added beyond constants and a `decimals()` override.\n\nWhat I verified:\n\n- **Specialist finding reproduced and kept at info.** The economics area's allowance-race report executes exactly as described. A holder who lowers a non-zero allowance can have both amounts spent by a front-running spender. This is the standard ERC-20 property, disclosed in the README, and needs no code change. It is the only specialist finding, so there were no duplicates to merge.\n- **Vendored library is genuine.** The five OpenZeppelin files the token compiles against hash-match the upstream v5.1.0 release byte for byte, so the inherited transfer, transferFrom and approve paths are the audited ones.\n- **Launch floor properties hold.** The constructor mints exactly 1e27 to msg.sender with no arguments and no external calls. The compiled ABI exposes only the ERC-20 surface plus constant getters. Privileged selectors and plain ETH calls revert. The runtime has no reachable DELEGATECALL, CALLCODE or SELFDESTRUCT, and is well under the size limit.\n- **Manifest agrees with the code.** Only schema keys are present, addresses are lowercase, numeric and string types are correct, the contract name and notes are within limits, and totalSupply matches what the constructor mints.\n- **Project tests pass.** All 56 existing tests pass, and my scratch reproduction of transfer, transferFrom, approve and their failure paths passed, including a fuzzed exact-delivery check.\n\nCoverage: all three entry points answered, two as holds and approve linked to the info finding, plus three invariant rows.","treeHash":null,"usage":{"cachedInputTokens":576202,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":10939,"runtime":"claude","turns":23,"wallClockMs":156618}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"d73af718d55ba788","findings":[],"hash":"5734990301b8cbda1148179c3f3224c483535800dd47449dbdb3e816a2e6ef2b","nodeId":"cd047fef-3b84-445b-a456-3aab16d7e1e2","outcome":"completed","summary":"Review complete. No defects found in the WORLD token; the findings file holds an empty list and a nine-row coverage record.\n\n**What I checked, by guide**\n\n- **Execution Trace.** Traced all three state-changing entry points through OpenZeppelin's `_transfer`, `_update` and `_spendAllowance`. Zero-address sender and receiver revert before any write. Balance and allowance checks precede state changes. The infinite-allowance path never decrements. No mint or burn path is reachable through `transferFrom` with a zero address on either side. Scratch probes confirmed whole-supply round trips, short calldata rejection, and that value sent to a nonpayable function reverts.\n- **Periphery.** The six sources in the compilation unit are byte-for-byte identical to the published OpenZeppelin 5.1.0 package. The 64 other vendored OpenZeppelin files differ only by `forge fmt` line reflows and are never compiled into the token. The vendored forge-std copy could not be verified because every GitHub host was refused by the network filter and npm has no 1.9.7 release. It is test-only and does not affect deployed bytecode.\n- **First Principles.** The constructor's only assumption is that `msg.sender` is the intended recipient, which matches the factory-deploys-via-CREATE2 launch flow. The supply constant resolves to 1e27 at compile time, there is no override of `_update`, and no privileged function or fallback exists in the compiled ABI. Runtime is 2224 bytes and passes the floor's reachable-opcode scan.\n\n**Checks that ran**\n\n- Full project suite with the verifier's fuzz seed, 33 tests passing.\n- `forge fmt --check` clean.\n- Ten scratch edge-case probes, all passing, then removed.\n\n**Not reproduced locally.** The Uniswap v4 seed and swap legs of the protected floor test could not be executed because v4-core is not vendored. The token has no tax, burn or exemption logic, so every leg moves exactly the stated amount by construction.\n\n**Accepted design, not reported.** The classic ERC-20 approve front-running pattern exists, as it does in every standard token. The README documents it and OpenZeppelin v5 intentionally omits `increaseAllowance`.\n\nNo tracked project files were changed. Only `.imd-findings.json` was written.","treeHash":null,"usage":{"cachedInputTokens":735200,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":15533,"runtime":"claude","turns":29,"wallClockMs":263091}},{"artifacts":[],"attempt":1,"bundleHash":"2e0538072258de1cd746e793134eadb6320a758c4033413b30822c3871fed61c","device":"c1fc321231608a52","findings":[],"hash":"bc2a41661da474bc9ec4d7be7f5ef7fa5807f8313614ea6d4cd65054fec7d6cc","nodeId":"089a0221-66bf-4b1b-825e-63d89b770ba7","outcome":"completed","summary":"Created [launch.json](/home/seat/.identitymd/work/53bc6886-11bf-42e0-8b1f-5efa4e88d505/089a0221-66bf-4b1b-825e-63d89b770ba7/launch.json) matching the accepted token, constructor, exact supply, pool settings, and economics.\n\n`forge build` succeeded. All 33 local tests passed with the specified fuzz seed. Only `launch.json` changed.","treeHash":"df0001a69bed2554aeeedd4158546af50a847ef4","usage":{"cachedInputTokens":130688,"inputTokens":33410,"model":"gpt-6-astra","outputTokens":2466,"runtime":"codex","turns":3,"wallClockMs":67812}},{"artifacts":[],"attempt":1,"bundleHash":"db62f1652695183f9452e00b52137edf840bcb552b8426dbea845ed2844e5e40","device":"4f64b8f2c68244fd","findings":[],"hash":"c79c60b9a84439a6e9d4bf8af2c27a619a22b555997b8ac5729bb38d56106a67","nodeId":"51f62f40-5bdb-49ff-a374-cceff2b307f8","outcome":"completed","summary":"Added 22 unit/fuzz tests and four stateful invariants under `test/`, covering authorization, rollback, boundary amounts, and supply conservation.\n\nValidation:\n- `forge build`: exit 0.\n- `forge test` with supplied seed: exit 0; 56 passed, none failed.\n- Invariants: 32,768 random calls passed.\n- `slither .`: exit 255; two inherited informational compiler/pragma warnings, no high-severity findings.\n- Manifest check not applicable: no `launch.json`.\n\nNo implementation defects found.","treeHash":"5bba0259e48b9e13d630e5cd4ffb9d45abad0f61","usage":{"cachedInputTokens":1191552,"inputTokens":83215,"model":"gpt-6-astra","outputTokens":16903,"runtime":"codex","turns":6,"wallClockMs":457026}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"918f8261a6fd589c","findings":[],"hash":"d1edd090b1d1417ec5fca27ddc9daeb66c0e844ec4211106bc9179c46a1193c4","nodeId":"9bf8d230-2465-4197-8e0e-3f3885a876a7","outcome":"completed","summary":"The review is complete. The findings file holds zero findings and nine coverage rows, and the working tree is otherwise untouched.\n\n**Result: no math defects found.** WorldMemeToken is an unmodified OpenZeppelin v5.1.0 ERC20 with a single constructor mint and a pure `decimals()` override. It contains no division, no scaling conversion, no downcast, no external call, no payable path and no bytes decoding, so the Math Precision, Boundary and Numerical Gap checklists have very little surface to bite on. I verified the surface that does exist rather than assuming it.\n\n**What I checked in my area**\n\n- **Supply constant.** `TOTAL_SUPPLY` evaluates to exactly 1e27, divides by 1e18 with zero remainder, and sits below both uint128 and int128 maxima, so Uniswap v4 liquidity and delta math cannot overflow on it.\n- **Launch split arithmetic.** The 10/80/10 split and the swarm's 2/8 sub-split all divide 1e27 exactly in basis points with no dust and no intermediate overflow.\n- **Transfer and allowance edges.** Max-uint and balance-plus-one transfers revert with the correct typed error. Self-transfer of the whole balance, zero-value transfers, infinite allowance, max-minus-one allowance, exact-allowance spend, and from-equals-to transferFrom all conserve balances and supply. A fuzz conservation invariant held under the verifier's seed.\n- **Dependency integrity.** The five OpenZeppelin files the token compiles against are byte-identical to the upstream v5.1.0 tag. Other vendored files differ only by formatter line-wrapping and are never imported.\n- **Static analysis lead.** The aderyn large-numeric-literal note on line 24 is a readability lint. The literal is the intended whole-token supply and its scaled value is verified.\n\n**Coverage record.** All three listed entry points are marked `holds`, plus six invariant rows covering the supply constant, launch split, decimals, boundary enumeration, the static-analysis lead and dependency integrity. Nothing is `unreached`.\n\n**Outside my area.** Nothing severe surfaced. The access-control story is trivially empty since the ABI exposes only the standard ERC20 methods and five constant getters. The protected launch tests will pass on this token given its exact transfers and 18 decimals.","treeHash":null,"usage":{"cachedInputTokens":547760,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":14484,"runtime":"claude","turns":26,"wallClockMs":225154}},{"artifacts":[],"attempt":1,"bundleHash":"ccab32e92c9d20f4dad4d1a2b7f805198b8d6f4cc059db7b2872f7e4a2d8f094","device":"89eed35842d609d7","findings":[],"hash":"f1250c7f9f88f507bbad3e9bad6ef133418a4fd9afd532e95df0f52d18541f16","nodeId":"017497dd-c73b-418e-9cba-005e140e2a6d","outcome":"completed","summary":"The World Meme Token project is complete and verified.\n\n**What was built**\n\n- `src/WorldMemeToken.sol`: contract `WorldMemeToken`, a fixed-supply ERC-20 on OpenZeppelin v5.1.0. Name \"World Meme Token\", symbol \"WORLD\", 18 decimals. The constructor takes no arguments, makes no external calls, and mints 1e27 minor units once to `msg.sender`. There is no owner, mint, burn, pause, blacklist, tax or upgrade path, so the supply can never change and no privileged hand can touch a holder's balance.\n- `test/WorldMemeToken.t.sol` and `test/DeployWorldMemeToken.t.sol`: 33 tests covering metadata, supply, deployer semantics through a factory-like contract, transfer and allowance success and failure paths, rejection of 14 common admin selectors from both a stranger and the deployer, an opcode scan for DELEGATECALL, CALLCODE and SELFDESTRUCT, the launch flows arriving whole, and four fuzz tests for conservation of supply.\n- `script/DeployWorldMemeToken.s.sol`: reference deploy script with a `deploy()` function the tests call directly. It reads no environment.\n- `foundry.toml` pins solc 0.8.26, optimizer on, `bytecode_hash = \"none\"`, ffi off, no fs permissions.\n- `lib/forge-std` v1.9.7 and `lib/openzeppelin` v5.1.0 are vendored as plain files, trimmed to sources and licenses, with no nested git metadata.\n- `README.md` documents parameters, assumptions, launch economics, deployment, operational responsibilities and security notes.\n\n**Check results**\n\n| Check | Result |\n|-------|--------|\n| forge build (clean) | pass |\n| forge test with the verifier fuzz seed | 33 passed, 0 failed |\n| forge fmt --check | pass |\n\n**One leftover to know about.** The sandbox mounts any file named `.gitmodules` read-only, so an empty directory `lib/openzeppelin-contracts/` containing only OpenZeppelin's upstream `.gitmodules` could not be deleted. It is gitignored, it is not a submodule, and nothing builds from it. The real library lives at `lib/openzeppelin`.\n\nSlither was not available here and did not run, as the README states.","treeHash":"ffeb372d76771b8b4596b5ec517c00a20b707714","usage":{"cachedInputTokens":671740,"inputTokens":418,"model":"claude-fable-5-1","outputTokens":21609,"runtime":"claude","turns":25,"wallClockMs":350913}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"0cf632e317dfab7a","findings":[{"citation":"resolved","description":"WorldMemeToken inherits OpenZeppelin v5.1.0 ERC20 unchanged (vendored files hash-match the upstream release) and adds no increaseAllowance/decreaseAllowance or permit path. approve() is a plain overwrite, so the only way to reduce a live allowance is a write that a spender can front-run. This is a property of the ERC-20 standard the requester chose, OpenZeppelin v5 deliberately removed the increase/decrease mitigation, and README.md lines 88-89 already disclose it. It is reported at info severity so the judge has it in the trust-assumptions record for the economics area; it is not a defect in the token's own code and the author does not need to change anything. The economic exposure is bounded to a holder who has granted a non-zero allowance to a spender they do not trust and then lowers it without first setting it to zero.","line":127,"path":"lib/openzeppelin/contracts/token/ERC20/ERC20.sol","reproduction":"State: owner holds 150e18 WORLD and has approved spender for 100e18. Owner submits approve(spender, 50e18) intending to lower exposure. Spender front-runs with transferFrom(owner, spender, 100e18) (succeeds, allowance 100e18 -> 0), owner's approve(spender, 50e18) then lands (allowance 0 -> 50e18), spender calls transferFrom(owner, spender, 50e18). Expected by the owner: at most 100e18 moved (old) or 50e18 (new). Actual: 150e18 moved, balanceOf(spender) == 150e18. Verified in test/scratch/EconomicsAudit.t.sol test_allowanceRaceSpendsBothAllowances (passes, i.e. the sequence executes as described). Mitigation for holders: approve(spender, 0) first, as the README says.","severity":"info","snippet":"    function approve(address spender, uint256 value) public virtual returns (bool) {\n        address owner = _msgSender();\n        _approve(owner, spender, value);\n        return true;\n    }","title":"Inherited approve() overwrites allowances, so a holder lowering a non-zero allowance can have both the old and the new amount spent (standard ERC-20 allowance race; documented in README, no code chang"}],"hash":"f9ab3943c39d473656df0fc04a3333cbd83aa33becc2d9b1b20ce13578b4a942","nodeId":"cdbf7103-c19c-4d26-a447-4e7f6a7649e1","outcome":"completed","summary":"The review is complete and the findings file is written. No repository files were changed; only `.imd-findings.json` and the scratch test under `test/scratch/` were created.\n\n**Result: no defect found in the economics area.** The token is OpenZeppelin v5.1.0 ERC20 with a fixed supply minted once to the constructor's caller, and nothing else. I recorded one info-level note and eight coverage rows.\n\n**What I checked**\n\n- **Vendored library integrity.** The five OpenZeppelin files the token compiles against hash-match the upstream v5.1.0 release, so no hidden behaviour sits on any transfer path.\n- **Economic Security guide.** The token has no oracle, external call, hook, receive or fallback, tax, burn, pause, blacklist or privileged role. None of the listed failure modes is reachable. Sentinel checks hold: transfer to the zero address and approve of a zero spender both revert.\n- **Invariant guide.** Supply conservation held under a Foundry invariant run of 256 sequences of 50 random transfer, approve and transferFrom calls. The compiled ABI exposes only three state-changing functions, and a selector sweep for mint, burn, burnFrom, permit, increase and decrease allowance, initialize and owner all revert.\n- **Flow Gap guide.** I reproduced the launch from a CREATE2 factory with the launch number as salt. The factory receives the whole supply, and the three legs of 10 percent, 80 percent and 10 percent arrive whole. The pool manager's settle path through allowance and transferFrom works.\n- **Launch economics.** No launch.json exists in the tree by design. The opening cap of 4,300 IMD for the whole supply gives a tick well inside Uniswap v4 bounds in either currency order.\n\n**The one note recorded** is the standard ERC-20 allowance race on the inherited `approve`, reported at info severity. The README already discloses it and it needs no code change. The reproduction is concrete: a spender approved for 100e18 front-runs the owner's lowering to 50e18 and ends up with 150e18.\n\n**Commands run and results**\n\n| Check | Result |\n|---|---|\n| forge build | passed |\n| forge test with the verifier's fuzz seed | 33 passed, 0 failed |\n| forge fmt --check on src, test, script | clean |\n| scratch invariant, flow, race and selector tests | 4 passed |\n| Slither and Aderyn | not run here; the verifier's output listed only a low-impact numeric-literal note, which is not a defect |\n\nPassing tests do not prove the absence of defects. The surface here is small enough that the three entry points were traced in full.","treeHash":null,"usage":{"cachedInputTokens":623783,"inputTokens":258,"model":"claude-fable-5-1","outputTokens":14081,"runtime":"claude","turns":22,"wallClockMs":209623}}],"verification":[{"checks":[{"durationMs":1012,"exitCode":0,"name":"build","output":"Compiling 29 files with Solc 0.8.26\nSolc 0.8.26 finished in 914.68ms\nCompiler run successful!\n","passed":true},{"durationMs":129,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/DeployWorldMemeToken.t.sol:DeployWorldMemeTokenTest\n[PASS] test_deployMintsSupplyToTheScriptContract() (gas: 1591377)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 444.52µs (203.19µs CPU time)\n\nRan 32 tests for test/WorldMemeToken.t.sol:WorldMemeTokenTest\n[PASS] testFuzz_multiHopConservesSupply(uint256,uint256,uint256) (runs: 256, μ: 254903, ~: 258239)\nLogs:\n  Bound result 6743\n  Bound result 6200\n  Bound result 244\n\n[PASS] testFuzz_transferAboveBalanceReverts(uint256) (runs: 256, μ: 42022, ~: 42360)\nLogs:\n  Bound result 326934802774969309596647225194095246258077277544468098961\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 256, μ: 97717, ~: 98431)\nLogs:\n  Bound result 10120\n\n[PASS] testFuzz_transferFromRespectsAllowance(uint256,uint256) (runs: 256, μ: 128356, ~: 102961)\nLogs:\n  Bound result 0\n  Bound result 1000000000000000000000000000\n\n[PASS] test_RevertWhen_approveZeroSpender() (gas: 32993)\n[PASS] test_RevertWhen_callingUnknownSelector() (gas: 29488)\n[PASS] test_RevertWhen_deployerPullsFromHolderWithoutApproval() (gas: 98110)\n[PASS] test_RevertWhen_sendingEther() (gas: 39733)\n[PASS] test_RevertWhen_transferExceedsBalance() (gas: 92745)\n[PASS] test_RevertWhen_transferFromEmptyAccount() (gas: 37748)\n[PASS] test_RevertWhen_transferFromExceedsAllowance() (gas: 88065)\n[PASS] test_RevertWhen_transferFromExceedsOwnerBalance() (gas: 148467)\n[PASS] test_RevertWhen_transferFromWithoutAllowance() (gas: 40298)\n[PASS] test_RevertWhen_transferToZeroAddress() (gas: 33004)\n[PASS] test_approveOverwritesPreviousAllowance() (gas: 95620)\n[PASS] test_approveSetsAllowanceAndEmits() (gas: 68172)\n[PASS] test_constructorEmitsMintAndSupplyEvents() (gas: 10159)\n[PASS] test_constructorMintsWholeSupplyToDeployer() (gas: 44025)\n[PASS] test_contractDeployerReceivesSupply() (gas: 305319)\n[PASS] test_implementsIERC20() (gas: 76036)\n[PASS] test_launchFlowsArriveWhole() (gas: 486351)\n[PASS] test_metadata() (gas: 58194)\n[PASS] test_noAdminCallChangesSupplyOrBalances() (gas: 1182620)\n[PASS] test_runtimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 3108894)\n[PASS] test_secondDeploymentIsIndependent() (gas: 45074)\n[PASS] test_supplyConstants() (gas: 25537)\n[PASS] test_transferFromSpendsAllowance() (gas: 166621)\n[PASS] test_transferFromWithInfiniteAllowanceDoesNotDecrease() (gas: 123377)\n[PASS] test_transferMovesExactAmount() (gas: 96058)\n[PASS] test_transferToSelfKeepsBalance() (gas: 43874)\n[PASS] test_transferWholeBalance() (gas: 77982)\n[PASS] test_transferZeroAmountSucceeds() (gas: 47814)\nSuite result: ok. 32 passed; 0 failed; 0 skipped; finished in 11.50ms (50.23ms CPU time)\n\nRan 2 test suites in 12.50ms (11.95ms CPU time): 33 tests passed, 0 failed, 0 skipped (33 total tests)\n","passed":true},{"durationMs":34,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"WorldMemeToken.approve(address,uint256)\",\"WorldMemeToken.transfer(address,uint256)\",\"WorldMemeToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":10,\"README.md\":125,\"foundry.toml\":24,\"launch.json\":20,\"remappings.txt\":2,\"script/DeployWorldMemeToken.s.sol\":25,\"src/WorldMemeToken.sol\":45,\"test/DeployWorldMemeToken.t.sol\":21,\"test/WorldMemeToken.t.sol\":421},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"bc2a41661da474bc9ec4d7be7f5ef7fa5807f8313614ea6d4cd65054fec7d6cc","verifiedTreeHash":"df0001a69bed2554aeeedd4158546af50a847ef4","verifierVersion":"0.1.0+962b3018"},{"checks":[{"durationMs":1936,"exitCode":0,"name":"build","output":"Compiling 32 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.79s\nCompiler run successful!\n","passed":true},{"durationMs":13416,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/DeployWorldMemeToken.t.sol:DeployWorldMemeTokenTest\n[PASS] test_deployMintsSupplyToTheScriptContract() (gas: 1591377)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 447.30µs (229.81µs CPU time)\n\nRan 32 tests for test/WorldMemeToken.t.sol:WorldMemeTokenTest\n[PASS] testFuzz_multiHopConservesSupply(uint256,uint256,uint256) (runs: 256, μ: 254015, ~: 258239)\nLogs:\n  Bound result 6743\n  Bound result 152\n  Bound result 82\n\n[PASS] testFuzz_transferAboveBalanceReverts(uint256) (runs: 256, μ: 42009, ~: 42360)\nLogs:\n  Bound result 673853127124142376151603296401\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 256, μ: 97734, ~: 98431)\nLogs:\n  Bound result 50493644675035\n\n[PASS] testFuzz_transferFromRespectsAllowance(uint256,uint256) (runs: 256, μ: 129536, ~: 117852)\nLogs:\n  Bound result 981618276613400935733936665\n  Bound result 735312711159037009329296494\n\n[PASS] test_RevertWhen_approveZeroSpender() (gas: 32993)\n[PASS] test_RevertWhen_callingUnknownSelector() (gas: 29488)\n[PASS] test_RevertWhen_deployerPullsFromHolderWithoutApproval() (gas: 98110)\n[PASS] test_RevertWhen_sendingEther() (gas: 39733)\n[PASS] test_RevertWhen_transferExceedsBalance() (gas: 92745)\n[PASS] test_RevertWhen_transferFromEmptyAccount() (gas: 37748)\n[PASS] test_RevertWhen_transferFromExceedsAllowance() (gas: 88065)\n[PASS] test_RevertWhen_transferFromExceedsOwnerBalance() (gas: 148467)\n[PASS] test_RevertWhen_transferFromWithoutAllowance() (gas: 40298)\n[PASS] test_RevertWhen_transferToZeroAddress() (gas: 33004)\n[PASS] test_approveOverwritesPreviousAllowance() (gas: 95620)\n[PASS] test_approveSetsAllowanceAndEmits() (gas: 68172)\n[PASS] test_constructorEmitsMintAndSupplyEvents() (gas: 10159)\n[PASS] test_constructorMintsWholeSupplyToDeployer() (gas: 44025)\n[PASS] test_contractDeployerReceivesSupply() (gas: 305319)\n[PASS] test_implementsIERC20() (gas: 76036)\n[PASS] test_launchFlowsArriveWhole() (gas: 486351)\n[PASS] test_metadata() (gas: 58194)\n[PASS] test_noAdminCallChangesSupplyOrBalances() (gas: 1182620)\n[PASS] test_runtimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 3108894)\n[PASS] test_secondDeploymentIsIndependent() (gas: 45074)\n[PASS] test_supplyConstants() (gas: 25537)\n[PASS] test_transferFromSpendsAllowance() (gas: 166621)\n[PASS] test_transferFromWithInfiniteAllowanceDoesNotDecrease() (gas: 123377)\n[PASS] test_transferMovesExactAmount() (gas: 96058)\n[PASS] test_transferToSelfKeepsBalance() (gas: 43874)\n[PASS] test_transferWholeBalance() (gas: 77982)\n[PASS] test_transferZeroAmountSucceeds() (gas: 47814)\nSuite result: ok. 32 passed; 0 failed; 0 skipped; finished in 74.16ms (116.44ms CPU time)\n\nRan 22 tests for test/WorldMemeTokenEdgeCases.t.sol:WorldMemeTokenEdgeCasesTest\n[PASS] testFuzz_failedDelegatedOverdraftPreservesAllowance(uint256,uint256,uint256) (runs: 1000, μ: 224006, ~: 224579)\nLogs:\n  Bound result 564129766723993782729947597\n  Bound result 205289330418249292433235187698529468030667116\n  Bound result 115792089237316195423570985008687702563939566416348130804282384693128553792915\n\n[PASS] testFuzz_replacementApprovalIsExactAndRevocable(uint256,uint256,uint256) (runs: 1000, μ: 274493, ~: 276079)\nLogs:\n  Bound result 24490\n\n[PASS] testFuzz_selfTransferStillRequiresSufficientBalance(uint256,uint256) (runs: 1000, μ: 164467, ~: 164746)\nLogs:\n  Bound result 543178134580771589091258410\n  Bound result 267610508159589866486963387987036108830043128714808\n\n[PASS] testFuzz_splitSpendsExhaustExactlyOneApproval(uint256) (runs: 1000, μ: 265917, ~: 266577)\nLogs:\n  Bound result 255\n\n[PASS] testFuzz_transferRoundTripRestoresBalances(uint256) (runs: 1000, μ: 125617, ~: 125543)\nLogs:\n  Bound result 905\n\n[PASS] testFuzz_zeroRecipientPreservesApproval(uint256,uint256) (runs: 1000, μ: 132490, ~: 132829)\nLogs:\n  Bound result 2052\n  Bound result 2168\n\n[PASS] test_approvalCannotBeBorrowedByAnotherCaller() (gas: 221663)\n[PASS] test_approvalForOneOwnerDoesNotAuthorizeAnotherOwner() (gas: 173258)\n[PASS] test_delegatedSelfTransferConsumesFiniteAllowance() (gas: 218481)\n[PASS] test_finiteAllowanceCanBeRevoked() (gas: 271856)\n[PASS] test_infiniteAllowanceCanBeRevoked() (gas: 268951)\n[PASS] test_infiniteApprovalPersistsButCannotOverdrawBalance() (gas: 255416)\n[PASS] test_maxMinusOneApprovalIsFinite() (gas: 153657)\n[PASS] test_maximumTransferAmountRevertsWithoutOverflowOrAllowanceLoss() (gas: 158680)\n[PASS] test_nonpayableTransferRejectsEtherAndPreservesTokens() (gas: 58888)\n[PASS] test_oneWeiAllowanceCannotBeSpentTwice() (gas: 254877)\n[PASS] test_recipientBeingApprovedDoesNotAuthorizeCaller() (gas: 173835)\n[PASS] test_transferToTokenContractIsAccountedForWithoutBurning() (gas: 92403)\n[PASS] test_zeroAmountDoesNotPermitZeroRecipient() (gas: 95163)\n[PASS] test_zeroApprovalDoesNotPermitZeroSpender() (gas: 40196)\n[PASS] test_zeroTransferEmitsEventFromEmptyHolder() (gas: 83907)\n[PASS] test_zeroTransferFromNeedsNoAllowanceAndEmitsEvent() (gas: 91779)\nSuite result: ok. 22 passed; 0 failed; 0 skipped; finished in 74.21ms (439.91ms CPU time)\n\nRan 1 test for test/WorldMemeTokenInvariant.t.sol:WorldMemeTokenInvariantTest\n[PASS]\nWorldMemeTokenInvariantTest invariants:\n[PASS] invariant_allBalancesSumToOriginalSupply\n[PASS] invariant_allowancesMatchOnlyOwnerAuthorizations\n[PASS] invariant_eachHolderOwnsExactlyItsAccountedTokens\n[PASS] invariant_supplyAndMetadataRemainFixed\n WorldMemeTokenInvariantTest invariants (runs: 256, calls: 32768, reverts: 0)\n\n╭-----------------------+--------------------------+-------+---------+----------╮\n| Contract              | Selector                 | Calls | Reverts | Discards |\n+===============================================================================+\n| WorldMemeTokenHandler | approve                  | 4087  | 0       | 0        |\n|-----------------------+--------------------------+-------+---------+----------|\n| WorldMemeTokenHandler | approveZeroSpender       | 3985  | 0       | 0        |\n|-----------------------+--------------------------+-------+---------+----------|\n| WorldMemeTokenHandler | transfer                 | 4064  | 0       | 0        |\n|-----------------------+--------------------------+-------+---------+----------|\n| WorldMemeTokenHandler | transferAboveBalance     | 4144  | 0       | 0        |\n|-----------------------+--------------------------+-------+---------+----------|\n| WorldMemeTokenHandler | transferFrom             | 4161  | 0       | 0        |\n|-----------------------+--------------------------+-------+---------+----------|\n| WorldMemeTokenHandler | transferFromAboveBalance | 4127  | 0       | 0        |\n|-----------------------+--------------------------+-------+---------+----------|\n| WorldMemeTokenHandler | transferFromRaw          | 4090  | 0       | 0        |\n|-----------------------+--------------------------+-------+---------+----------|\n| WorldMemeTokenHandler | transferToZero           | 4110  | 0       | 0        |\n╰-----------------------+--------------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 3\n  Bound result 0\n  Bound result 2\n  Bound result 2\n  Bound result 1\n  Bound result 1\n  Bound result 1\n  Bound result 115792089237316195423570985008687907853269984665640314039457584007913129640190\n  Bound result 1\n  Bound result 0\n  Bound result 3\n  Bound result 2\n  Bound result 0\n  Bound result 415833977408092584552985267\n  Bound result 1\n  Bound result 2\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640314039457584007913129639941\n  Bound result 3\n  Bound result 0\n  Bound result 0\n  Bound result 3\n  Bound result 0\n  Bound result 3\n  Bound result 0\n  Bound result 2\n  Bound result 1\n  Bound result 1\n  Bound result 1\n  Bound result 2\n  Bound result 1\n  Bound result 3\n  Bound result 0\n  Bound result 1\n  Bound result 3\n  Bound result 3\n  Bound result 1\n  Bound result 0\n  Bound result 0\n  Bound result 3\n  Bound result 2\n  Bound result 2\n  Bound result 1\n  Bound result 1\n  Bound result 3\n  Bound result 0\n  Bound result 2\n  Bound result 4\n  Bound result 115792089237316195423570985008687907853269984665640314039457584007915869494273\n  Bound result 0\n  Bound result 1\n  Bound result 1\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 2\n  Bound result 3\n  Bound result 2\n  Bound result 3\n  Bound result 3\n  Bound result 3\n  Bound result 2\n  Bound result 3\n  Bound result 4\n  Bound result 1\n  Bound result 2\n  Bound result 0\n  Bound result 1\n  Bound result 2\n  Bound result 0\n  Bound result 3\n  Bound result 1\n  Bound result 254\n  Bound result 0\n  Bound result 0\n  Bound result 1\n  Bound result 2\n  Bound result 1\n  Bound result 1170\n  Bound result 3\n  Bound result 2\n  Bound result 0\n  Bound result 0\n  Bound result 2\n  Bound result 0\n  Bound result 4\n  Bound result 3\n  Bound result 0\n  Bound result 1547084198680967278504887771327394549280\n  Bound result 3\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 2\n  Bound result 2\n  Bound result 1\n  Bound result 5879\n  Bound result 3\n  Bound result 0\n  Bound result 0\n  Bound result 2\n  Bound result 0\n  Bound result 3\n  Bound result 3\n  Bound result 2\n  Bound result 4\n  Bound result 115792089237316195423570985008687907853269984665640314039457584007913129653208\n  Bound result 0\n  Bound result 4\n  Bound result 1\n  Bound result 0\n  Bound result 1\n  Bound result 3\n  Bound result 4\n  Bound result 1\n  Bound result 0\n  Bound result 1\n  Bound result 902572754879693514931054626763\n  Bound result 0\n  Bound result 0\n  Bound result 3\n  Bound result 3\n  Bound result 3\n  Bound result 0\n  Bound result 3\n  Bound result 4\n  Bound result 2\n  Bound result 2\n  Bound result 43\n  Bound result 3\n  Bound result 1\n  Bound result 0\n  Bound result 1097216157\n  Bound result 2\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640314039457584007913129645885\n  Bound result 3\n  Bound result 0\n  Bound result 2\n  Bound result 0\n  Bound result 3\n  Bound result 134666838108\n  Bound result 2\n  Bound result 0\n  Bound result 1\n  Bound result 1\n  Bound result 3\n  Bound result 2\n  Bound result 0\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 2\n  Bound result 2\n  Bound result 1\n  Bound result 3\n  Bound result 0\n  Bound result 60000000000000000000\n  Bound result 3\n  Bound result 1\n  Bound result 2\n  Bound result 2\n  Bound result 0\n  Bound result 244\n  Bound result 0\n  Bound result 3\n  Bound result 0\n  Bound result 0\n  Bound result 2003\n  Bound result 1\n  Bound result 0\n  Bound result 0\n  Bound result 4\n  Bound result 0\n  Bound result 1\n  Bound result 3\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639935\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 3\n  Bound result 3\n  Bound result 2\n  Bound result 3\n  Bound result 3\n  Bound result 3\n  Bound result 2\n  Bound result 3\n  Bound result 0\n  Bound result 0\n  Bound result 2\n  Bound result 3\n  Bound result 0\n  Bound result 1\n  Bound result 963204426014882706149178188\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 2\n  Bound result 2\n  Bound result 2\n  Bound result 75673339452\n  Bound result 0\n  Bound result 3\n  Bound result 2\n  Bound result 0\n  Bound result 4\n  Bound result 0\n  Bound result 3\n  Bound result 0\n  Bound result 3\n  Bound result 115792089237316195423570985008687907853269984665640314039457584007913129647689\n  Bound result 3\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 4\n  Bound result 0\n  Bound result 1\n  Bound result 3\n  Bound result 0\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 0\n  Bound result 1511\n  Bound result 1\n  Bound result 1\n  Bound result 4\n  Bound result 7000000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 10000000000000000000\n  Bound result 1\n  Bound result 3\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 2\n  Bound result 2\n  Bound result 1\n  Bound result 4\n  Bound result 1101\n  Bound result 2\n  Bound result 3\n  Bound result 25\n  Bound result 2\n  Bound result 3\n  Bound result 20\n  Bound result 1\n  Bound result 3\n  Bound result 2\n  Bound result 2\n  Bound result 4\n  Bound result 2\n  Bound result 1\n  Bound result 2\n  Bound result 0\n  Bound result 2\n  Bound result 7000000000000000000\n  Bound result 0\n  Bound result 4\n  Bound result 0\n  Bound result 3\n  Bound result 0\n  Bound result 6\n  Bound result 0\n  Bound result 2\n  Bound result 1\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 0\n  Bound result 3\n  Bound result 0\n  Bound result 0\n  Bound result 3\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 2\n  Bound result 4\n  Bound result 2\n  Bound result 3\n  Bound result 0\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 3\n  Bound result 2\n  Bound result 1\n  Bound result 1\n  Bound result 2\n  Bound result 5000000000000000000\n  Bound result 0\n  Bound result 2\n  Bound result 1\n  Bound result 2\n  Bound result 2\n  Bound result 1\n  Bound result 0\n  Bound result 2\n  Bound result 0\n  Bound result 4\n  Bound result 5246224194058\n  Bound result 3\n  Bound result 1\n  Bound result 0\n  Bound result 4\n  Bound result 0\n  Bound result 2\n  Bound result 243\n  Bound result 2\n  Bound result 1\n  Bound result 3\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 13.28s (13.27s CPU time)\n\nRan 4 test suites in 13.28s (13.43s CPU time): 56 tests passed, 0 failed, 0 skipped (56 total tests)\n","passed":true},{"durationMs":51,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"WorldMemeToken.approve(address,uint256)\",\"WorldMemeToken.transfer(address,uint256)\",\"WorldMemeToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":10,\"README.md\":125,\"foundry.toml\":24,\"remappings.txt\":2,\"script/DeployWorldMemeToken.s.sol\":25,\"src/WorldMemeToken.sol\":45,\"test/DeployWorldMemeToken.t.sol\":21,\"test/WorldMemeToken.t.sol\":421,\"test/WorldMemeTokenEdgeCases.t.sol\":320,\"test/WorldMemeTokenInvariant.t.sol\":81,\"test/handlers/WorldMemeTokenHandler.sol\":178},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"c79c60b9a84439a6e9d4bf8af2c27a619a22b555997b8ac5729bb38d56106a67","verifiedTreeHash":"5bba0259e48b9e13d630e5cd4ffb9d45abad0f61","verifierVersion":"0.1.0+962b3018"},{"checks":[{"durationMs":1270,"exitCode":0,"name":"build","output":"Compiling 29 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.13s\nCompiler run successful!\n","passed":true},{"durationMs":219,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/DeployWorldMemeToken.t.sol:DeployWorldMemeTokenTest\n[PASS] test_deployMintsSupplyToTheScriptContract() (gas: 1591377)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 390.35µs (220.45µs CPU time)\n\nRan 32 tests for test/WorldMemeToken.t.sol:WorldMemeTokenTest\n[PASS] testFuzz_multiHopConservesSupply(uint256,uint256,uint256) (runs: 256, μ: 254903, ~: 258239)\nLogs:\n  Bound result 66951668064932475337839\n  Bound result 62099576781226963962789\n  Bound result 62099576781226963962786\n\n[PASS] testFuzz_transferAboveBalanceReverts(uint256) (runs: 256, μ: 42022, ~: 42360)\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129641894\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 256, μ: 97717, ~: 98431)\nLogs:\n  Bound result 10120\n\n[PASS] testFuzz_transferFromRespectsAllowance(uint256,uint256) (runs: 256, μ: 128356, ~: 102961)\nLogs:\n  Bound result 0\n  Bound result 1000000000000000000000000000\n\n[PASS] test_RevertWhen_approveZeroSpender() (gas: 32993)\n[PASS] test_RevertWhen_callingUnknownSelector() (gas: 29488)\n[PASS] test_RevertWhen_deployerPullsFromHolderWithoutApproval() (gas: 98110)\n[PASS] test_RevertWhen_sendingEther() (gas: 39733)\n[PASS] test_RevertWhen_transferExceedsBalance() (gas: 92745)\n[PASS] test_RevertWhen_transferFromEmptyAccount() (gas: 37748)\n[PASS] test_RevertWhen_transferFromExceedsAllowance() (gas: 88065)\n[PASS] test_RevertWhen_transferFromExceedsOwnerBalance() (gas: 148467)\n[PASS] test_RevertWhen_transferFromWithoutAllowance() (gas: 40298)\n[PASS] test_RevertWhen_transferToZeroAddress() (gas: 33004)\n[PASS] test_approveOverwritesPreviousAllowance() (gas: 95620)\n[PASS] test_approveSetsAllowanceAndEmits() (gas: 68172)\n[PASS] test_constructorEmitsMintAndSupplyEvents() (gas: 10159)\n[PASS] test_constructorMintsWholeSupplyToDeployer() (gas: 44025)\n[PASS] test_contractDeployerReceivesSupply() (gas: 305319)\n[PASS] test_implementsIERC20() (gas: 76036)\n[PASS] test_launchFlowsArriveWhole() (gas: 486351)\n[PASS] test_metadata() (gas: 58194)\n[PASS] test_noAdminCallChangesSupplyOrBalances() (gas: 1182620)\n[PASS] test_runtimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 3108894)\n[PASS] test_secondDeploymentIsIndependent() (gas: 45074)\n[PASS] test_supplyConstants() (gas: 25537)\n[PASS] test_transferFromSpendsAllowance() (gas: 166621)\n[PASS] test_transferFromWithInfiniteAllowanceDoesNotDecrease() (gas: 123377)\n[PASS] test_transferMovesExactAmount() (gas: 96058)\n[PASS] test_transferToSelfKeepsBalance() (gas: 43874)\n[PASS] test_transferWholeBalance() (gas: 77982)\n[PASS] test_transferZeroAmountSucceeds() (gas: 47814)\nSuite result: ok. 32 passed; 0 failed; 0 skipped; finished in 12.94ms (47.14ms CPU time)\n\nRan 2 test suites in 14.05ms (13.33ms CPU time): 33 tests passed, 0 failed, 0 skipped (33 total tests)\n","passed":true},{"durationMs":66,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"WorldMemeToken.approve(address,uint256)\",\"WorldMemeToken.transfer(address,uint256)\",\"WorldMemeToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":10,\"README.md\":125,\"foundry.toml\":24,\"remappings.txt\":2,\"script/DeployWorldMemeToken.s.sol\":25,\"src/WorldMemeToken.sol\":45,\"test/DeployWorldMemeToken.t.sol\":21,\"test/WorldMemeToken.t.sol\":421},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":1663,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":464,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/WorldMemeToken.sol:24: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"f1250c7f9f88f507bbad3e9bad6ef133418a4fd9afd532e95df0f52d18541f16","verifiedTreeHash":"ffeb372d76771b8b4596b5ec517c00a20b707714","verifierVersion":"0.1.0+962b3018"}]}