{"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":"7b81f8ac-7f3b-4361-ba96-2984bd7bdeae","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"e16ad365de5f55d3810fc6cd0b9e7d8a4493cd28fa8a37214c659a901be14e61","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":"16bdfec8baba820c3c3795e5bb025f3bb845ccbcc32f14e54b5e96712fa98117","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":"d9cb5a3a2e83ff33e93d8e934fad92d54c2c5ed312d4da75df9011e3d96c0d00","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":"dd4a53cb74b02811e62009c633f35b2e32ed58cf15db48475a72a9fc2d7eab2c","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":"5bfc6841e96b46651050d65076d586f518832df1a24b38d0e2d213a95e6bd907","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":"bd855aa9f7a30f3755d3f497419714938d82f3af1a6130289aabde163a776b5f","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"d59561da3b378461b7c749f6bd5084477d44993aa94972ddea90f542535751df","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"d59561da3b378461b7c749f6bd5084477d44993aa94972ddea90f542535751df","skillId":"build-contract-project","state":"accepted"},{"acceptedSubmissionHash":"1379cfbdd6703804b1c7dc0240d4fca52be476a0b3ee5f1976bd48fc541f39d0","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"992f08abc241955c80211fea0990e7e7b39e0d3fdd5462485de625a4e180b919","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"4c76766b00591dfe982fe85d3de589fdb2f810e5137c301155d1c5e36a1d3b23","skillId":"write-foundry-tests","tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"4c76766b00591dfe982fe85d3de589fdb2f810e5137c301155d1c5e36a1d3b23","skillId":"write-foundry-tests","state":"accepted"}],"objective":"A custom token: moneycanbuy (YOLO).\nToken name: moneycanbuy\nToken symbol: YOLO\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.\nWhat it does: $YOLO \n\nmoneycanbuy","parentJobId":null,"planHash":"b657f833c29ab027795dff10e6ea1ecadff6245925c33ef0452760b7464f2de5","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"7b81f8ac-7f3b-4361-ba96-2984bd7bdeae","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-2313-moneycanbuy"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"52145","feedbackHash":"be566a4e4209d87ecc6e4a4acae9e9d2cfe8efb90021634ca853e231de03e8b2","nodeKey":"audit_economics","submissionHash":"e16ad365de5f55d3810fc6cd0b9e7d8a4493cd28fa8a37214c659a901be14e61","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52290","feedbackHash":"f5fd5ae5dc88d6446f89d29892f1b27227bc7e2ec48a85d1e798143312085f38","nodeKey":"audit_flow","submissionHash":"16bdfec8baba820c3c3795e5bb025f3bb845ccbcc32f14e54b5e96712fa98117","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51251","feedbackHash":"32088861c0d3e915c7d150f72f794dcc19611261e9909b60ad3b60890ba27e05","nodeKey":"audit_judge","submissionHash":"d9cb5a3a2e83ff33e93d8e934fad92d54c2c5ed312d4da75df9011e3d96c0d00","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51891","feedbackHash":"9fd66f2d832242cb3b6cfc6bd1e6ab70b8c29ad50c12e1fd0c62f97e1f3d0f6f","nodeKey":"audit_math","submissionHash":"dd4a53cb74b02811e62009c633f35b2e32ed58cf15db48475a72a9fc2d7eab2c","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52587","feedbackHash":"c58405e9f508da694d3d986370400acee8b7b1fbc89f8731f405f8d8abd1a186","nodeKey":"audit_permissions","submissionHash":"5bfc6841e96b46651050d65076d586f518832df1a24b38d0e2d213a95e6bd907","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52140","feedbackHash":"7541d30fd95555777297b6c324dedbb13c76213e27ece8f97c57be8850647234","nodeKey":"build_contract_project","submissionHash":"bd855aa9f7a30f3755d3f497419714938d82f3af1a6130289aabde163a776b5f","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52658","feedbackHash":"d29ea216bd4c4ca4006e3ca5bbeed60a9f9ef4f65d896f9c9dcde4bcdd616afe","nodeKey":"manifest","submissionHash":"1379cfbdd6703804b1c7dc0240d4fca52be476a0b3ee5f1976bd48fc541f39d0","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52660","feedbackHash":"84c7c666e5ff4d187c7ec81e9570e61455e39273c460a826cb7910748b67ff6f","nodeKey":"write_foundry_tests","submissionHash":"992f08abc241955c80211fea0990e7e7b39e0d3fdd5462485de625a4e180b919","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"566ae75d3e4cb9c377bb9b041ae413a46d30b0839e16d2acd66560db61d99be0","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"0a45e8113a19ad89817be394949751146e7cf91211a44712fcc36b0277107fc1","device":"357c657d67170495","findings":[],"hash":"1379cfbdd6703804b1c7dc0240d4fca52be476a0b3ee5f1976bd48fc541f39d0","nodeId":"caa40737-2f70-403a-ad32-98504c80fb10","outcome":"completed","summary":"Created [launch.json](/home/seat/.identitymd/work/7b81f8ac-7f3b-4361-ba96-2984bd7bdeae/caa40737-2f70-403a-ad32-98504c80fb10/launch.json) matching `MoneyCanBuy`, its constructor and supply, and the exact required pool and economics.\n\n`forge build` succeeded; all 35 tests passed with the supplied fuzz seed. Only `launch.json` is a deliverable change.","treeHash":"6fef5cfc68668c876269b03d8042bb5dc85093a1","usage":{"cachedInputTokens":320640,"inputTokens":28239,"model":"gpt-6-astra","outputTokens":2469,"runtime":"codex","turns":3,"wallClockMs":87103}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"60c045240bb09c33","findings":[],"hash":"16bdfec8baba820c3c3795e5bb025f3bb845ccbcc32f14e54b5e96712fa98117","nodeId":"d0a9c1da-d215-49e9-a38c-68314f71aec2","outcome":"completed","summary":"The review is complete. The findings file holds zero findings and seven coverage rows, and no tracked file in the tree was changed.\n\n**Outcome.** The token at `src/MoneyCanBuy.sol` is a 17-line contract that inherits the vendored OpenZeppelin ERC-20 and mints 1e27 units to the deployer once. I found no defect in my area (Execution Trace, Periphery, First Principles) or outside it.\n\n**What I verified**\n\n- **Execution trace.** All three state-changing entry points resolve to the unmodified OpenZeppelin v5.0.2 paths. Zero-address sender, recipient and spender revert. Insufficient balance or allowance reverts with no partial state. Finite allowances decrement exactly and the max allowance is never touched. There are no fee, exemption or sentinel branches, so every launch flow moves exactly the amount requested.\n- **Periphery.** I downloaded the pinned v5.0.2 release archive, matched the digest recorded in `lib/DEPENDENCIES.md`, and compared all five vendored files byte for byte. They are unchanged. The build uses the legacy pipeline without via-IR, so no known 0.8.26 compiler bug applies.\n- **First principles.** The supply constant evaluates to exactly one billion tokens at 18 decimals. Minting goes to the immediate caller, not the transaction origin, so a CREATE2 factory deployment holds the whole supply. The compiled ABI exposes only the ERC-20 surface plus the supply constant. There is no receive, fallback, mint, burn, owner or admin path, and the runtime contains no DELEGATECALL, CALLCODE or SELFDESTRUCT.\n- **Tests.** The project's 35 tests pass with the seed the README names, including the 8192-call stateful invariant run. The formatter check passes. I also ran a scratch test that drove the launch floor (factory at an etched address, distributor claim, pool-style transferFrom, deployer attempting to pull from a holder) and it passed. The scratch test was removed afterwards.\n\n**Static analysis leads.** Slither reported nothing. Aderyn's one low lead, the large numeric literal on line 10, is the correct supply value and is not a defect.\n\n**Not reached.** The protected harness test could not run here because it imports Uniswap v4 core, which is not vendored in this project. The token has no exemption logic to interact with the pool manager, so the plain-transfer behaviour it exercises is what I traced directly.","treeHash":null,"usage":{"cachedInputTokens":660714,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":10713,"runtime":"claude","turns":27,"wallClockMs":187920}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"fb1af3f11ddf6470","findings":[],"hash":"5bfc6841e96b46651050d65076d586f518832df1a24b38d0e2d213a95e6bd907","nodeId":"ba384b50-9463-4b48-ad6e-82a58f3441c9","outcome":"completed","summary":"I found no permission defects in `MoneyCanBuy` (YOLO) that I could back with a reproduction. `.imd-findings.json` holds an empty findings list plus a coverage record, and no tracked file was changed.\n\n**What the code is:** `src/MoneyCanBuy.sol` is 17 lines. It inherits OpenZeppelin's ERC20 unchanged and its constructor mints `1_000_000_000 * 10**18` once to `msg.sender`, which is the factory in a launch. There is no owner, role, modifier, initializer, proxy, mint or burn path, pause, blocklist, fee, exemption, `receive`/`fallback`, or external call. I read the vendored `ERC20.sol` and `Context.sol` line by line; they match OZ v5.0.2, and `_msgSender()` returns `msg.sender`.\n\n**The three guides:**\n- **Access Control:** the only roles the constructor hands out are balances. No functions have a weaker guard than a neighbour, nothing can be initialized or escalated, no contract acts on someone else's behalf, and there is no delegatecall.\n- **Asymmetry:** the only paired surface is `approve` and the allowance spend inside `transferFrom`. Both write allowances through the same validated `_approve`. The one exception is that an unlimited allowance (`type(uint256).max`) is never reduced, which is the standard, documented behaviour. Every storage variable's writers and readers line up.\n- **Trust Gap:** the code has no privileged actor, admin setter or formula that depends on the caller. The factory, PoolManager, distributor and traders all go through the same transfer path, so launch transfers arrive exact.\n\n**Entry points (all `holds`):** `approve`, `transfer` and `transferFrom`. I also recorded rows for four checked invariants: no privileged role after deployment, a fixed supply, allowance symmetry, and an unmodified library with no callbacks.\n\n**Other checks:**\n- The full suite passed: 35 tests, including fuzz and invariant runs.\n- The README's permission claims match the code.\n- The static-analysis lead (a \"large numeric literal\" on line 10) is a style note, not a defect, so I left it out.\n- I did not run the protected launch tests, because they need the network's harness. The bare ERC20 has nothing they would reject.\n- The approve front-running race is inherent to every ERC-20, not specific to this code, so I didn't report it.\n\nAn empty list doesn't prove there are no defects, but the whole surface here is upstream OpenZeppelin code that I've checked.","treeHash":null,"usage":{"cachedInputTokens":385626,"inputTokens":18,"model":"claude-opus-5-5","outputTokens":4806,"runtime":"claude","turns":11,"wallClockMs":73245}},{"artifacts":[],"attempt":1,"bundleHash":"572adfa55904408d8220be43eede8e81ce4d0789704c2df226be9660039aeb2f","device":"1ec9f666356a7ad7","findings":[],"hash":"992f08abc241955c80211fea0990e7e7b39e0d3fdd5462485de625a4e180b919","nodeId":"189c1c07-368b-4729-9ec2-8d4a57d9ea94","outcome":"completed","summary":"I added `test/MoneyCanBuyProperties.t.sol` and found no defects in the token. `forge build` passes, and `forge test` with the verifier's seed passes all 52 tests across the 5 suites. I didn't write `.imd-findings.json` because there is nothing to report.\n\n**The contract:** `src/MoneyCanBuy.sol` is a plain OpenZeppelin v5 ERC-20 named \"moneycanbuy\" (YOLO). It has 18 decimals and mints 10^27 units (one billion YOLO) once, to `msg.sender`. It has no owner, mint, burn, fee or pause. The tests from the earlier contributor (`MoneyCanBuy.t.sol`, `MoneyCanBuyInvariant.t.sol`, `LaunchFlow.t.sol`) already covered the main paths, and I left them unchanged.\n\n**The new file adds:**\n- **Edge cases and failure paths:**\n  - The address 0 can't approve or send, even an amount of zero.\n  - Nobody can spend from address 0.\n  - An allowance of `max-1` counts down; an unlimited allowance still can't take more than the balance.\n  - A holder can spend from their own account with `transferFrom` only after approving themselves.\n  - Tokens sent to the token contract are stuck: they still count in the supply, but nothing can move them out.\n  - `approve` and `transferFrom` emit only their own event, not each other's.\n  - When deployed through a factory, the whole supply goes to the factory and none to the caller or the transaction's origin.\n  - The launch percentages (10% to the swarm, split 2% and 8%; 50% to the pool; 40% remainder) divide the supply exactly, with no rounding loss.\n- **Fuzz tests (1000 runs each):**\n  - A transfer to any non-zero address delivers the exact amount.\n  - A third party can't move funds without an allowance.\n  - Two split transfers end the same as one combined transfer.\n  - Approving the same value twice changes nothing, and the latest approval replaces the old one.\n  - A spender can never move more than the approval in total.\n- **Invariant tests over random call sequences (256 runs, depth 64), shaped like a launch:** a stand-in factory deploys the token and sends 10% to a distributor, 50% to a pool address and the rest to a remainder holder. A handler then makes claims, transfers, approvals and `transferFrom` calls, including to random fresh addresses and to the token contract itself. After every call:\n  - The total supply is unchanged and matches the sum of the balances of every address that ever held tokens.\n  - The distributor's balance equals what it received minus what it paid out.\n  - The factory keeps nothing and has no allowance from anyone.\n  - An unlimited allowance never decreases.\n\nThe Uniswap pool seed and the swaps in the protected test can't be run here: the Uniswap v4 library it imports isn't in this repository. The launch tests check the token movements only, without a real pool.\n\nThe new file is in the working tree but not committed.","treeHash":"716e48a0c3ac57dea9cdaca6ba151ce5772f3bdc","usage":{"cachedInputTokens":381285,"inputTokens":16,"model":"claude-opus-5-5","outputTokens":10775,"runtime":"claude","turns":9,"wallClockMs":128833}},{"artifacts":[],"attempt":1,"bundleHash":"7c570232f1e342848839e804eca7665296437c3e8c5faa54603043cab0a85797","device":"12d084f65a6fbbd8","findings":[],"hash":"bd855aa9f7a30f3755d3f497419714938d82f3af1a6130289aabde163a776b5f","nodeId":"61028caf-afbd-4c2e-8a5f-608b0fc1a538","outcome":"completed","summary":"Implemented moneycanbuy (YOLO): 1 billion tokens, 18 decimals, minted once to the deployer, with no administrative powers.\n\nVerified:\n- `forge build`\n- `forge test`: 35 passed using the requested seed\n- `forge fmt --check`\n\nIncluded offline dependencies, success/failure tests, stateful invariants, and documentation covering assumptions, deployment, and operational responsibilities.","treeHash":"aea6544317d6921b7c4f0810fa26d1cbe9c4472c","usage":{"cachedInputTokens":436480,"inputTokens":45336,"model":"gpt-6-astra","outputTokens":14225,"runtime":"codex","turns":5,"wallClockMs":385565}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"723b11f958c65250","findings":[],"hash":"d9cb5a3a2e83ff33e93d8e934fad92d54c2c5ed312d4da75df9011e3d96c0d00","nodeId":"57616c69-8aaf-4286-86ca-38844e8b4b49","outcome":"completed","summary":"The review is complete and the findings file is written. Nothing else is needed.\n\n**Result: no defects found.** The review file `.imd-findings.json` holds an empty findings list and nine coverage rows, all `holds`. The working tree is otherwise unchanged.\n\n**What the token is.** `src/MoneyCanBuy.sol` is a 17-line contract that inherits OpenZeppelin's ERC20 and mints one billion tokens with 18 decimals to msg.sender in its constructor. It overrides nothing and adds no functions.\n\n**What I verified:**\n- **All three entry points** (approve, transfer, transferFrom) are the unmodified OpenZeppelin implementations. Transfers move exactly the stated amount with no fee or burn, so the factory, distributor and PoolManager flows arrive whole.\n- **Vendored library integrity.** I downloaded the upstream OpenZeppelin v5.0.2 tarball. Its SHA-256 matches the one recorded in `lib/DEPENDENCIES.md`, and all five vendored files are byte-identical to upstream.\n- **Supply and decimals** match the manifest exactly. The constructor is the only mint, and the ABI exposes no mint, burn, pause, blacklist or owner function.\n- **Deployability.** The constructor takes no arguments and launch.json lists none. Creation code is 2,640 bytes and runtime is 1,752 bytes, well under the limits.\n- **Forbidden opcodes.** A scan of the runtime bytecode that skips PUSH immediates, using the same walk as the protected test, finds no DELEGATECALL, CALLCODE or SELFDESTRUCT.\n- **Existing suite.** All 52 tests pass, including the two invariant suites.\n\n**Specialist input.** All four specialists and the test writer reported no findings, so there was nothing to reproduce or merge. The one aderyn lead, a large numeric literal on line 10, is the supply constant and is not a defect.\n\n**Not run.** The protected tests in `.imd/reads/protected` import the launch service's own v4-core and factory contracts, which are not in this tree, so they cannot compile here. I checked each of their assertions by hand instead, as recorded in the coverage rows.","treeHash":null,"usage":{"cachedInputTokens":550304,"inputTokens":386,"model":"claude-fable-5-1","outputTokens":6658,"runtime":"claude","turns":13,"wallClockMs":216914}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"934ef01306a3cc89","findings":[],"hash":"dd4a53cb74b02811e62009c633f35b2e32ed58cf15db48475a72a9fc2d7eab2c","nodeId":"1719de3b-1fee-4864-90a9-c03c02fc6974","outcome":"completed","summary":"The findings file is valid JSON and the tree is clean apart from it. Nothing else is outstanding.\n\n**Result: no defects found in the math area.** `.imd-findings.json` holds an empty findings list and eight coverage rows, one for each of the three listed entry points plus the constructor, the supply invariant, the boundary enumeration, the numerical-gap seams and the dependency check.\n\n**What the token is.** `src/MoneyCanBuy.sol` is an unmodified OpenZeppelin v5.0.2 ERC20 that mints 10^27 units once to its deployer. It has no division, scaling, cast, shift, external call, payable path, sentinel branch or bytes decoding. Each of the three assigned guides enumerates places where such operations fail, and every list is empty for this contract.\n\n**How I checked it.**\n- Compared all five vendored OpenZeppelin files against the v5.0.2 tag on GitHub by SHA-256. All match byte for byte.\n- Traced `_update` and `_spendAllowance`: every unchecked subtraction is preceded by a strict less-than check, and the unchecked addition cannot wrap because the only mint is below 2^90.\n- Ran the project's 35 existing tests, including the invariant suite with fail_on_revert, and a scratch suite of 14 tests at the guides' edge inputs: 1 wei, full supply, supply plus one, max uint, self-transfer, zero amount, exact and one-short allowance, max and max-minus-one allowance, revert ordering, and fuzzed conservation. All pass. The scratch directory is removed.\n- The aderyn large-numeric-literal lead on line 10 is a compile-time constant that evaluates exactly to 10^27, confirmed by reading `INITIAL_SUPPLY()` and `totalSupply()`. Not a defect.\n\n**Outside my area, for the judge.** The compiled ABI contains only the three state-changing entry points and pure views, with no receive or fallback, and no admin role exists. Protected-test flows for the launch, distributor and pool depend only on plain transfers, which deliver exact amounts.","treeHash":null,"usage":{"cachedInputTokens":621774,"inputTokens":322,"model":"claude-fable-5-1","outputTokens":9788,"runtime":"claude","turns":18,"wallClockMs":141108}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"e02bec63aa9dcaa5","findings":[],"hash":"e16ad365de5f55d3810fc6cd0b9e7d8a4493cd28fa8a37214c659a901be14e61","nodeId":"dc814c9c-e082-435f-8017-c5c0889026e3","outcome":"completed","summary":"The review is complete and the findings file is written. The tree has no changes other than `.imd-findings.json`.\n\n**Result: no defects found.** The economics, invariant and flow-gap review of `src/MoneyCanBuy.sol` produced zero substantiated findings, and `.imd-findings.json` holds an empty findings list with seven coverage rows, one per entry point plus invariants.\n\n**What was checked**\n\n- **The token itself.** It is a 17-line fixed-supply ERC-20: one constructor mint of 1e27 units to msg.sender, no transfer override, no admin, no external calls. The compiled ABI exposes only approve, transfer and transferFrom as state-changing functions.\n- **The vendored library.** All five OpenZeppelin v5.0.2 files were diffed against upstream and are byte-identical, so the transfer, allowance and conservation behaviour is the audited upstream code.\n- **Economic Security guide.** No dependencies to break, no fee, rebase, pause or blacklist behaviour, no sentinel paths beyond the standard zero-address reverts, no privileged power that could dilute the pool or the swarm after launch.\n- **Invariant guide.** Sum of balances equals total supply forever, since mint and burn are unreachable after construction. The in-tree invariant suite plus a scratch fuzz over chained transfers confirmed conservation at 1 wei and whole-supply boundaries.\n- **Flow Gap guide.** A scratch probe settled the launch split by balance delta the way the v4 PoolManager does: factory to distributor, distributor claims to the last wei, factory to pool, pool to trader and back. Every leg arrived exactly whole. No manifest exists in the tree yet, and the README's 10/50/40 split is consistent with the swarm's fixed share and poolBps 5000.\n\n**Static-analysis leads.** The single aderyn line, a large numeric literal at line 10, is a compile-time constant equal to 1e27 with no overflow or runtime effect, so it was not promoted.\n\n**Checks re-run before concluding.** Build, the full test suite with the README's fuzz seed, and the format check all pass.\n\n| Check | Result |\n| --- | --- |\n| forge build | ok |\n| forge test (seeded) | 35 passed, 0 failed |\n| forge fmt --check | clean |\n\nThe scratch test directory was removed after use, so nothing besides the findings file was added.","treeHash":null,"usage":{"cachedInputTokens":781965,"inputTokens":322,"model":"claude-fable-5-1","outputTokens":13509,"runtime":"claude","turns":27,"wallClockMs":218799}}],"verification":[{"checks":[{"durationMs":1323,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.24s\nCompiler run successful!\n","passed":true},{"durationMs":2367,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 3 tests for test/LaunchFlow.t.sol:LaunchFlowTest\n[PASS] test_create2MintsWholeSupplyToFactoryAndMatchesPredictedAddress() (gas: 302104)\n[PASS] test_launchForwardingClaimsAndPoolTransfersHaveNoFeesOrRestrictions() (gas: 657428)\n[PASS] test_sameCreate2SaltCannotReinitializeAnExistingToken() (gas: 347138)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 970.17µs (1.58ms CPU time)\n\nRan 31 tests for test/MoneyCanBuy.t.sol:MoneyCanBuyTest\n[PASS] testFuzz_approvalAcceptsFullUint256Range(uint256) (runs: 512, μ: 88457, ~: 88632)\n[PASS] testFuzz_overdrawRevertsWithoutChangingState(uint256,uint256) (runs: 512, μ: 137351, ~: 137686)\nLogs:\n  Bound result 8044\n  Bound result 100\n\n[PASS] testFuzz_overspendingApprovalReverts(uint256,uint256) (runs: 512, μ: 122734, ~: 123555)\nLogs:\n  Bound result 8044\n  Bound result 100\n\n[PASS] testFuzz_transferFromConservesSupplyAndTracksAllowance(uint256,uint256) (runs: 512, μ: 162631, ~: 164808)\nLogs:\n  Bound result 388823774942718529521284529\n  Bound result 4417033135574709519\n\n[PASS] testFuzz_transferRoundTripConservesSupply(uint256,address) (runs: 512, μ: 145461, ~: 145328)\nLogs:\n  Bound result 2\n\n[PASS] test_allowanceIsSpecificToHolderAndSpender() (gas: 187989)\n[PASS] test_approvalCanBeRevoked() (gas: 133362)\n[PASS] test_approveEmitsAndOverwritesAllowanceWithoutMovingTokens() (gas: 132015)\n[PASS] test_approveZeroSpenderReverts() (gas: 37596)\n[PASS] test_constructorEmitsExactlyOneMint() (gas: 9655)\n[PASS] test_directDeploymentMintsToImmediateDeployer() (gas: 32735)\n[PASS] test_entireBalanceCanMove() (gas: 75808)\n[PASS] test_infiniteAllowanceIsNotDecremented() (gas: 219681)\n[PASS] test_maximumTransferRevertsWithoutOverflow() (gas: 55139)\n[PASS] test_metadataAndEntireSupply() (gas: 107627)\n[PASS] test_noMintBurnOrAdministrativeEntrypoints() (gas: 835714)\n[PASS] test_runtimeHasNoForbiddenOpcodesAndFitsDeploymentLimit() (gas: 2259433)\n[PASS] test_selfTransferPreservesBalance() (gas: 53916)\n[PASS] test_selfTransferStillRequiresSufficientBalance() (gas: 40231)\n[PASS] test_transferDeliversExactAmountAndEmitsEvent() (gas: 91515)\n[PASS] test_transferFromConsumesFiniteAllowanceAndEmitsTransfer() (gas: 228128)\n[PASS] test_transferFromFailureRestoresAllowanceForZeroRecipient() (gas: 114143)\n[PASS] test_transferFromFailureRestoresAllowanceWhenBalanceIsTooLow() (gas: 126164)\n[PASS] test_transferFromInsufficientAllowanceRevertsWithoutMovingTokens() (gas: 115790)\n[PASS] test_transferFromRequiresAllowanceEvenWhenCallerIsHolder() (gas: 42574)\n[PASS] test_transferFromToSameHolderConsumesAllowanceOnly() (gas: 104930)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 71970)\n[PASS] test_transferWithInsufficientBalanceReverts() (gas: 57471)\n[PASS] test_unknownCallsAndNativeEtherAreRejected() (gas: 86452)\n[PASS] test_zeroTransferFromEmptyAccountEmitsEvent() (gas: 73400)\n[PASS] test_zeroTransferFromNeedsNoAllowanceAndEmitsEvent() (gas: 81458)\nSuite result: ok. 31 passed; 0 failed; 0 skipped; finished in 25.53ms (127.96ms CPU time)\n\nRan 1 test for test/MoneyCanBuyInvariant.t.sol:MoneyCanBuyInvariantTest\n[PASS]\nMoneyCanBuyInvariantTest invariants:\n[PASS] invariant_allowancesMatchModelIncludingFailedTransactions\n[PASS] invariant_fixedSupplyAndBalancesMatchModel\n MoneyCanBuyInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+--------------+-------+---------+----------╮\n| Contract     | Selector     | Calls | Reverts | Discards |\n+==========================================================+\n| TokenHandler | approve      | 2674  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenHandler | transfer     | 2764  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenHandler | transferFrom | 2754  | 0       | 0        |\n╰--------------+--------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.29s (2.29s CPU time)\n\nRan 3 test suites in 2.29s (2.31s CPU time): 35 tests passed, 0 failed, 0 skipped (35 total tests)\n","passed":true},{"durationMs":28,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"MoneyCanBuy.approve(address,uint256)\",\"MoneyCanBuy.transfer(address,uint256)\",\"MoneyCanBuy.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"README.md\":112,\"foundry.toml\":21,\"launch.json\":24,\"remappings.txt\":2,\"src/MoneyCanBuy.sol\":17,\"test/LaunchFlow.t.sol\":103,\"test/MoneyCanBuy.t.sol\":399,\"test/MoneyCanBuyInvariant.t.sol\":135},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"1379cfbdd6703804b1c7dc0240d4fca52be476a0b3ee5f1976bd48fc541f39d0","verifiedTreeHash":"6fef5cfc68668c876269b03d8042bb5dc85093a1","verifierVersion":"0.1.0+6a374fcd"},{"checks":[{"durationMs":1635,"exitCode":0,"name":"build","output":"Compiling 29 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.57s\nCompiler run successful!\n","passed":true},{"durationMs":2989,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 3 tests for test/LaunchFlow.t.sol:LaunchFlowTest\n[PASS] test_create2MintsWholeSupplyToFactoryAndMatchesPredictedAddress() (gas: 302104)\n[PASS] test_launchForwardingClaimsAndPoolTransfersHaveNoFeesOrRestrictions() (gas: 657428)\n[PASS] test_sameCreate2SaltCannotReinitializeAnExistingToken() (gas: 347138)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 960.36µs (1.30ms CPU time)\n\nRan 31 tests for test/MoneyCanBuy.t.sol:MoneyCanBuyTest\n[PASS] testFuzz_approvalAcceptsFullUint256Range(uint256) (runs: 512, μ: 88384, ~: 88644)\n[PASS] testFuzz_overdrawRevertsWithoutChangingState(uint256,uint256) (runs: 512, μ: 137458, ~: 137734)\nLogs:\n  Bound result 17000000000000000000\n  Bound result 3815\n\n[PASS] testFuzz_overspendingApprovalReverts(uint256,uint256) (runs: 512, μ: 122877, ~: 123577)\nLogs:\n  Bound result 8044\n  Bound result 100\n\n[PASS] testFuzz_transferFromConservesSupplyAndTracksAllowance(uint256,uint256) (runs: 512, μ: 162657, ~: 164808)\nLogs:\n  Bound result 3815\n  Bound result 1880\n\n[PASS] testFuzz_transferRoundTripConservesSupply(uint256,address) (runs: 512, μ: 145447, ~: 145328)\nLogs:\n  Bound result 960537375726727200070885308\n\n[PASS] test_allowanceIsSpecificToHolderAndSpender() (gas: 187989)\n[PASS] test_approvalCanBeRevoked() (gas: 133362)\n[PASS] test_approveEmitsAndOverwritesAllowanceWithoutMovingTokens() (gas: 132015)\n[PASS] test_approveZeroSpenderReverts() (gas: 37596)\n[PASS] test_constructorEmitsExactlyOneMint() (gas: 9655)\n[PASS] test_directDeploymentMintsToImmediateDeployer() (gas: 32735)\n[PASS] test_entireBalanceCanMove() (gas: 75808)\n[PASS] test_infiniteAllowanceIsNotDecremented() (gas: 219681)\n[PASS] test_maximumTransferRevertsWithoutOverflow() (gas: 55139)\n[PASS] test_metadataAndEntireSupply() (gas: 107627)\n[PASS] test_noMintBurnOrAdministrativeEntrypoints() (gas: 835714)\n[PASS] test_runtimeHasNoForbiddenOpcodesAndFitsDeploymentLimit() (gas: 2259433)\n[PASS] test_selfTransferPreservesBalance() (gas: 53916)\n[PASS] test_selfTransferStillRequiresSufficientBalance() (gas: 40231)\n[PASS] test_transferDeliversExactAmountAndEmitsEvent() (gas: 91515)\n[PASS] test_transferFromConsumesFiniteAllowanceAndEmitsTransfer() (gas: 228128)\n[PASS] test_transferFromFailureRestoresAllowanceForZeroRecipient() (gas: 114143)\n[PASS] test_transferFromFailureRestoresAllowanceWhenBalanceIsTooLow() (gas: 126164)\n[PASS] test_transferFromInsufficientAllowanceRevertsWithoutMovingTokens() (gas: 115790)\n[PASS] test_transferFromRequiresAllowanceEvenWhenCallerIsHolder() (gas: 42574)\n[PASS] test_transferFromToSameHolderConsumesAllowanceOnly() (gas: 104930)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 71970)\n[PASS] test_transferWithInsufficientBalanceReverts() (gas: 57471)\n[PASS] test_unknownCallsAndNativeEtherAreRejected() (gas: 86452)\n[PASS] test_zeroTransferFromEmptyAccountEmitsEvent() (gas: 73400)\n[PASS] test_zeroTransferFromNeedsNoAllowanceAndEmitsEvent() (gas: 81458)\nSuite result: ok. 31 passed; 0 failed; 0 skipped; finished in 39.89ms (199.20ms CPU time)\n\nRan 16 tests for test/MoneyCanBuyProperties.t.sol:MoneyCanBuyPropertiesTest\n[PASS] testFuzz_approveIsIdempotentAndLastWriteWins(uint256,uint256) (runs: 1000, μ: 140727, ~: 140807)\n[PASS] testFuzz_partialSpendsNeverExceedApproval(uint256,uint256,uint256) (runs: 1000, μ: 173961, ~: 175465)\nLogs:\n  Bound result 1000000000\n  Bound result 16439\n  Bound result 999999999999999999000016536\n\n[PASS] testFuzz_splitTransfersEqualOneTransfer(uint256,uint256) (runs: 1000, μ: 117846, ~: 118439)\nLogs:\n  Bound result 255\n  Bound result 1000000000000000000\n\n[PASS] testFuzz_thirdPartyCannotMoveFundsWithoutAllowance(address,uint256) (runs: 1000, μ: 47477, ~: 47285)\nLogs:\n  Bound result 625722906189613523744388433\n\n[PASS] testFuzz_transferToAnyNonZeroAddressIsExact(address,uint256) (runs: 1000, μ: 100962, ~: 101251)\nLogs:\n  Bound result 683\n  Bound result 734\n\n[PASS] test_approveDoesNotEmitTransferAndTransferFromDoesNotEmitApproval() (gas: 117853)\n[PASS] test_factoryDeploymentGivesNothingToTheTestOrOrigin() (gas: 301181)\n[PASS] test_infiniteAllowanceStillCannotOverdrawBalance() (gas: 164914)\n[PASS] test_launchSharesOfTheSupplyDivideExactly() (gas: 5941)\n[PASS] test_maxMinusOneAllowanceIsFiniteAndDecrements() (gas: 123913)\n[PASS] test_selfApprovalLetsHolderUseTransferFrom() (gas: 128999)\n[PASS] test_supplyIsExactlyTenToTheTwentySeven() (gas: 26504)\n[PASS] test_tokensSentToTheTokenContractAreStuckButCounted() (gas: 106749)\n[PASS] test_transferFromZeroAddressOwnerReverts() (gas: 37959)\n[PASS] test_zeroAddressCannotApprove() (gas: 33053)\n[PASS] test_zeroAddressCannotTransferEvenZero() (gas: 33057)\nSuite result: ok. 16 passed; 0 failed; 0 skipped; finished in 39.89ms (189.41ms CPU time)\n\nRan 1 test for test/MoneyCanBuyInvariant.t.sol:MoneyCanBuyInvariantTest\n[PASS]\nMoneyCanBuyInvariantTest invariants:\n[PASS] invariant_allowancesMatchModelIncludingFailedTransactions\n[PASS] invariant_fixedSupplyAndBalancesMatchModel\n MoneyCanBuyInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+--------------+-------+---------+----------╮\n| Contract     | Selector     | Calls | Reverts | Discards |\n+==========================================================+\n| TokenHandler | approve      | 2674  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenHandler | transfer     | 2764  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenHandler | transferFrom | 2754  | 0       | 0        |\n╰--------------+--------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.27s (2.27s CPU time)\n\nRan 1 test for test/MoneyCanBuyProperties.t.sol:MoneyCanBuyLaunchInvariantTest\n[PASS]\nMoneyCanBuyLaunchInvariantTest invariants:\n[PASS] invariant_distributorPaysOutExactlyWhatItReceived\n[PASS] invariant_factoryKeepsNothingAndHasNoReach\n[PASS] invariant_supplyIsFixedAndFullyAccountedForAcrossEveryHolder\n[PASS] invariant_unlimitedAllowanceNeverDecreases\n MoneyCanBuyLaunchInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭---------------+--------------+-------+---------+----------╮\n| Contract      | Selector     | Calls | Reverts | Discards |\n+===========================================================+\n| LaunchHandler | approve      | 4077  | 0       | 0        |\n|---------------+--------------+-------+---------+----------|\n| LaunchHandler | claim        | 4123  | 0       | 0        |\n|---------------+--------------+-------+---------+----------|\n| LaunchHandler | transfer     | 4079  | 0       | 0        |\n|---------------+--------------+-------+---------+----------|\n| LaunchHandler | transferFrom | 4105  | 0       | 0        |\n╰---------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 200\n  Bound result 1\n  Bound result 0\n  Bound result 8\n  Bound result 6893\n  Bound result 0\n  Bound result 99999999999999999999992899\n  Bound result 155262802128865939097305791\n  Bound result 263503085440617691169721172\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 7\n  Bound result 2\n  Bound result 99271084\n  Bound result 1\n  Bound result 1\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 3\n  Bound result 1601\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 18\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 177362148\n  Bound result 1\n  Bound result 309635696163921955646819121\n  Bound result 0\n  Bound result 0\n  Bound result 5000\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 0\n  Bound result 500000000000000000000000000\n  Bound result 7528\n  Bound result 3196\n  Bound result 0\n  Bound result 22900278037207314084\n  Bound result 1\n  Bound result 0\n  Bound result 1000000000\n  Bound result 400000000000000000723374301\n  Bound result 4\n  Bound result 0\n  Bound result 1\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.92s (2.91s CPU time)\n\nRan 5 test suites in 2.92s (5.27s CPU time): 52 tests passed, 0 failed, 0 skipped (52 total tests)\n","passed":true},{"durationMs":31,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"MoneyCanBuy.approve(address,uint256)\",\"MoneyCanBuy.transfer(address,uint256)\",\"MoneyCanBuy.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"README.md\":112,\"foundry.toml\":21,\"remappings.txt\":2,\"src/MoneyCanBuy.sol\":17,\"test/LaunchFlow.t.sol\":103,\"test/MoneyCanBuy.t.sol\":399,\"test/MoneyCanBuyInvariant.t.sol\":135,\"test/MoneyCanBuyProperties.t.sol\":374},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"992f08abc241955c80211fea0990e7e7b39e0d3fdd5462485de625a4e180b919","verifiedTreeHash":"716e48a0c3ac57dea9cdaca6ba151ce5772f3bdc","verifierVersion":"0.1.0+6a374fcd"},{"checks":[{"durationMs":2219,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 2.08s\nCompiler run successful!\n","passed":true},{"durationMs":3907,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 3 tests for test/LaunchFlow.t.sol:LaunchFlowTest\n[PASS] test_create2MintsWholeSupplyToFactoryAndMatchesPredictedAddress() (gas: 302104)\n[PASS] test_launchForwardingClaimsAndPoolTransfersHaveNoFeesOrRestrictions() (gas: 657428)\n[PASS] test_sameCreate2SaltCannotReinitializeAnExistingToken() (gas: 347138)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 25.62ms (1.95ms CPU time)\n\nRan 31 tests for test/MoneyCanBuy.t.sol:MoneyCanBuyTest\n[PASS] testFuzz_approvalAcceptsFullUint256Range(uint256) (runs: 512, μ: 88457, ~: 88632)\n[PASS] testFuzz_overdrawRevertsWithoutChangingState(uint256,uint256) (runs: 512, μ: 137351, ~: 137686)\nLogs:\n  Bound result 1234000000000000000000\n  Bound result 3815\n\n[PASS] testFuzz_overspendingApprovalReverts(uint256,uint256) (runs: 512, μ: 122734, ~: 123555)\nLogs:\n  Bound result 8044\n  Bound result 100\n\n[PASS] testFuzz_transferFromConservesSupplyAndTracksAllowance(uint256,uint256) (runs: 512, μ: 162631, ~: 164808)\nLogs:\n  Bound result 3815\n  Bound result 2008\n\n[PASS] testFuzz_transferRoundTripConservesSupply(uint256,address) (runs: 512, μ: 145461, ~: 145328)\nLogs:\n  Bound result 568713075315070786813269516\n\n[PASS] test_allowanceIsSpecificToHolderAndSpender() (gas: 187989)\n[PASS] test_approvalCanBeRevoked() (gas: 133362)\n[PASS] test_approveEmitsAndOverwritesAllowanceWithoutMovingTokens() (gas: 132015)\n[PASS] test_approveZeroSpenderReverts() (gas: 37596)\n[PASS] test_constructorEmitsExactlyOneMint() (gas: 9655)\n[PASS] test_directDeploymentMintsToImmediateDeployer() (gas: 32735)\n[PASS] test_entireBalanceCanMove() (gas: 75808)\n[PASS] test_infiniteAllowanceIsNotDecremented() (gas: 219681)\n[PASS] test_maximumTransferRevertsWithoutOverflow() (gas: 55139)\n[PASS] test_metadataAndEntireSupply() (gas: 107627)\n[PASS] test_noMintBurnOrAdministrativeEntrypoints() (gas: 835714)\n[PASS] test_runtimeHasNoForbiddenOpcodesAndFitsDeploymentLimit() (gas: 2259433)\n[PASS] test_selfTransferPreservesBalance() (gas: 53916)\n[PASS] test_selfTransferStillRequiresSufficientBalance() (gas: 40231)\n[PASS] test_transferDeliversExactAmountAndEmitsEvent() (gas: 91515)\n[PASS] test_transferFromConsumesFiniteAllowanceAndEmitsTransfer() (gas: 228128)\n[PASS] test_transferFromFailureRestoresAllowanceForZeroRecipient() (gas: 114143)\n[PASS] test_transferFromFailureRestoresAllowanceWhenBalanceIsTooLow() (gas: 126164)\n[PASS] test_transferFromInsufficientAllowanceRevertsWithoutMovingTokens() (gas: 115790)\n[PASS] test_transferFromRequiresAllowanceEvenWhenCallerIsHolder() (gas: 42574)\n[PASS] test_transferFromToSameHolderConsumesAllowanceOnly() (gas: 104930)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 71970)\n[PASS] test_transferWithInsufficientBalanceReverts() (gas: 57471)\n[PASS] test_unknownCallsAndNativeEtherAreRejected() (gas: 86452)\n[PASS] test_zeroTransferFromEmptyAccountEmitsEvent() (gas: 73400)\n[PASS] test_zeroTransferFromNeedsNoAllowanceAndEmitsEvent() (gas: 81458)\nSuite result: ok. 31 passed; 0 failed; 0 skipped; finished in 37.79ms (201.81ms CPU time)\n\nRan 1 test for test/MoneyCanBuyInvariant.t.sol:MoneyCanBuyInvariantTest\n[PASS]\nMoneyCanBuyInvariantTest invariants:\n[PASS] invariant_allowancesMatchModelIncludingFailedTransactions\n[PASS] invariant_fixedSupplyAndBalancesMatchModel\n MoneyCanBuyInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+--------------+-------+---------+----------╮\n| Contract     | Selector     | Calls | Reverts | Discards |\n+==========================================================+\n| TokenHandler | approve      | 2674  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenHandler | transfer     | 2764  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenHandler | transferFrom | 2754  | 0       | 0        |\n╰--------------+--------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.75s (3.75s CPU time)\n\nRan 3 test suites in 3.76s (3.82s CPU time): 35 tests passed, 0 failed, 0 skipped (35 total tests)\n","passed":true},{"durationMs":76,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"MoneyCanBuy.approve(address,uint256)\",\"MoneyCanBuy.transfer(address,uint256)\",\"MoneyCanBuy.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"README.md\":112,\"foundry.toml\":21,\"remappings.txt\":2,\"src/MoneyCanBuy.sol\":17,\"test/LaunchFlow.t.sol\":103,\"test/MoneyCanBuy.t.sol\":399,\"test/MoneyCanBuyInvariant.t.sol\":135},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":726,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":313,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/MoneyCanBuy.sol:10: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"bd855aa9f7a30f3755d3f497419714938d82f3af1a6130289aabde163a776b5f","verifiedTreeHash":"aea6544317d6921b7c4f0810fa26d1cbe9c4472c","verifierVersion":"0.1.0+6a374fcd"}]}