{"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":"4a91e151-420e-4036-8409-4078e14c9cf2","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"43a8bdf974792f68496880b204ad2ed8a7e1d81442caa88c0b68f1c1b7e9d2d0","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":"2fa355cf543875ade8914a636870f4f1e6ed57d26e95876c517b4b7143d37619","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":"7a66558c71f43781484c783f1fc4a227d855f0e7bd4e73cf8fd7f743c8c78bb7","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":"be0c7c8c33251b3c9088dd0b5c94c791b8002336890bbc998b628ab68a1681c0","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":"1a9db0b1724d103363232d103522a8517dd7205a44267b2047e050cd182b3d28","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":"eabadd7a97e88344c515de088eef9c905388b373f686aed64fb3f6ff2d07f1d0","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":"fb4ada080aae7a361a467a60b9f086cde7ce8ec999887439a6773744fa45eae2","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"901d1fac71317babb2121be44bea55bbbc8a2f6d32262be3c7b220120c55091e","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: Mutually Assured Destruction (MAD).\nToken name: Mutually Assured Destruction\nToken symbol: MAD\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.","parentJobId":null,"planHash":"600ed4cc53b73d049ab116da6e8ac59af1f0960c677a87f30c87c187b4aca3ca","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"4a91e151-420e-4036-8409-4078e14c9cf2","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-2488-mutually-assured-destruction"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51508","feedbackHash":"d31dc7f36f24bf183818a26d557622ffd39b24a9fc7a0edd6ef5da674cd1fdc2","nodeKey":"audit_economics","submissionHash":"43a8bdf974792f68496880b204ad2ed8a7e1d81442caa88c0b68f1c1b7e9d2d0","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52193","feedbackHash":"368375f558449a2d1816f57d791b372e0d4c8037e175af434d56515abb6aabe6","nodeKey":"audit_flow","submissionHash":"2fa355cf543875ade8914a636870f4f1e6ed57d26e95876c517b4b7143d37619","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52124","feedbackHash":"fb68c5a4323638d07f13806cb7ae75c0b4d477244739e06ea132f4c88ea687dc","nodeKey":"audit_judge","submissionHash":"7a66558c71f43781484c783f1fc4a227d855f0e7bd4e73cf8fd7f743c8c78bb7","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51060","feedbackHash":"73fe3eec027625b8e392d30f929eaf2530d3c4c9090d297bd75f870f0c879b6b","nodeKey":"audit_math","submissionHash":"be0c7c8c33251b3c9088dd0b5c94c791b8002336890bbc998b628ab68a1681c0","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51425","feedbackHash":"13a86f2e1c0a152d2fcf12e430155d3a0642c0febe94f5aeec67a67be0cbefa8","nodeKey":"audit_permissions","submissionHash":"1a9db0b1724d103363232d103522a8517dd7205a44267b2047e050cd182b3d28","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52473","feedbackHash":"c7691217c9ab273630944ac5bbc10abb3a14427ab5236d4c1bdec6da82a5c044","nodeKey":"build_contract_project","submissionHash":"eabadd7a97e88344c515de088eef9c905388b373f686aed64fb3f6ff2d07f1d0","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51744","feedbackHash":"f32e1c63dbc6ab934865001f023f4e38dea7b62d0ef8c75bb83a345a41df7fb3","nodeKey":"manifest","submissionHash":"fb4ada080aae7a361a467a60b9f086cde7ce8ec999887439a6773744fa45eae2","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"50966","feedbackHash":"a1b588733bf2153d11312072543f51e7426dce5092b4f6531e2ccd4935fbe513","nodeKey":"write_foundry_tests","submissionHash":"901d1fac71317babb2121be44bea55bbbc8a2f6d32262be3c7b220120c55091e","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"af48471c7df7134204197d39d9d624b6cb4c320f41117c69c4d51435ca41f63d","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"bcb8a3f211778fd6","findings":[],"hash":"1a9db0b1724d103363232d103522a8517dd7205a44267b2047e050cd182b3d28","nodeId":"a2e6dc39-eff4-4f97-91ea-6b828c2dfa83","outcome":"completed","summary":"The review is complete. Findings are in `.imd-findings.json` at the repository root with an empty findings list and a full coverage record. The working tree shows no tracked changes; the scratch test lives under the gitignored `test/scratch/` and the findings file is the review output.\n\n**Result: no defects in the assigned area.** The token is a 17-line wrapper over the unmodified OpenZeppelin v5.4.0 ERC-20 with a single constructor mint to msg.sender and no roles of any kind. Each check from the three guides came up empty against reproducible probes.\n\n**Access Control.** The permission map has exactly one authority: a holder over its own balance and allowance rows. There is no owner, minter, pauser, initializer, proxy or upgrade path, so no inconsistent-guard, escalation or confused-deputy chain exists. The ABI exposes only the eleven standard ERC-20 members. I pranked 22 privileged selectors from both the factory and a stranger. All reverted with supply and holder balance unchanged. The factory calling `transferFrom` on a holder without allowance reverts.\n\n**Asymmetry.** The only paired surface is approve against spend. Both write the same allowance row in mirror directions, the infinite-allowance branch is preserved, and revert paths leave balance and allowance intact. The transfer and transferFrom branches deliver identical balances for the same inputs. The mint branch of `_update` is reachable only in the constructor and the burn branch is unreachable.\n\n**Trust Gap.** No privileged actor, pricing formula or caller-class branch exists, so no two-lens seam can be built. Launch legs for factory, distributor, claimant and pool round-trip exactly.\n\n**Supporting checks:** the vendored library files hash identically to upstream v5.4.0 fetched from GitHub. The compiled runtime contains no reachable DELEGATECALL, CALLCODE or SELFDESTRUCT. The existing 29-test suite passes with the pinned seed.\n\n**Deliberately not reported:** the standard ERC-20 approve front-running race and tokens sent to the token's own address. Both are inherent ERC-20 properties the README already documents, not defects of this code.","treeHash":null,"usage":{"cachedInputTokens":502328,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":12212,"runtime":"claude","turns":26,"wallClockMs":174653}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"5d667e4b0751bcb5","findings":[],"hash":"2fa355cf543875ade8914a636870f4f1e6ed57d26e95876c517b4b7143d37619","nodeId":"204ad8d9-c144-4080-bf78-827c2e476a5d","outcome":"completed","summary":"The review is complete. No defects were found, and `.imd-findings.json` holds an empty findings list with seven coverage rows.\n\n**What was reviewed.** The only production contract is `src/MADToken.sol`: a 17-line OpenZeppelin v5.4.0 ERC-20 whose constructor mints one billion tokens with 18 decimals to the immediate deployer. I applied the Execution Trace, Periphery and First Principles guides from the Pashov reference, plus the Senior Auditor's Mindset, to the three state-changing entry points and the constructor.\n\n**Evidence gathered.**\n- All five vendored OpenZeppelin files hash identically to the upstream v5.4.0 release fetched from GitHub, so the periphery the token trusts is exactly the published library.\n- The compiled ABI exposes only approve, transfer and transferFrom as state-changing calls. No receive, fallback, mint, burn, pause, blacklist, owner or upgrade surface exists.\n- The reachable runtime bytecode contains no DELEGATECALL, CALLCODE or SELFDESTRUCT under the same scan the protected floor uses.\n- The project's 29 tests pass with the README's seed, and formatting is clean. A scratch suite I wrote and ran confirmed the privileged-selector list from the protected floor all revert from the deployer, that a holder can still transfer afterwards, that infinite allowance is never decremented while finite allowance is, and that a transferFrom from the zero address reverts even for a zero value. The scratch directory was removed afterwards.\n\n**Traced behaviors.** Transfers deliver the exact amount with no fee, burn or callback, so the factory, distributor and pool manager legs need no exemptions. Insufficient balance or allowance reverts before any state change. Self-transfers and zero-value transfers are no-ops that still emit events. The unchecked additions in the library are bounded by the fixed supply.\n\n**Items noted but not defects.** The aderyn large-numeric-literal lead is a compile-time constant. No launch.json exists yet, which the brief states is expected before the manifest step. The token name implies a destruction mechanic, but the task text asks only for a plain fixed-supply token and the README states that choice explicitly.\n\n**Not reached.** Nothing within the assigned area was left unverified. Pool seeding and swapping through a real Uniswap v4 PoolManager were not simulated locally, since that harness is not in this tree, but the token has no transfer logic that could differ in that path.","treeHash":null,"usage":{"cachedInputTokens":525807,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":10910,"runtime":"claude","turns":24,"wallClockMs":212045}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"3516474d8a268bd8","findings":[{"citation":"resolved","description":"MADToken inherits OpenZeppelin v5.4.0 ERC20 unmodified (vendored files hash-identical to upstream). OZ v5 removed increaseAllowance/decreaseAllowance, so the only way to change a nonzero allowance is approve(), which replaces the value. A spender who observes a pending approve() can spend the old allowance first and then the new one. This is inherent ERC-20 behaviour, is documented in README.md (holders should revoke to zero first), and is not a deviation from the requested design. Recorded so the judge has the economic trust assumption on file; no code change is required and none is recommended that would alter the agreed plain-ERC-20 design.","line":8,"path":"src/MADToken.sol","reproduction":"owner: approve(spender, 100e18). spender (front-running owner's next tx): transferFrom(owner, sink, 100e18). owner: approve(spender, 50e18) intending to lower the allowance. spender: transferFrom(owner, sink, 50e18). Result: sink holds 150e18 although the owner never intended more than 100e18 to be spendable. Verified with a Foundry test on this tree (test/scratch, removed): balanceOf(sink) == 150 ether after the four calls.","severity":"info","snippet":"contract MADToken is ERC20 {","title":"Standard ERC-20 allowance replacement race is inherited (trust assumption, not a defect)"}],"hash":"43a8bdf974792f68496880b204ad2ed8a7e1d81442caa88c0b68f1c1b7e9d2d0","nodeId":"686beb39-94c5-4498-b575-8d815173fcbe","outcome":"completed","summary":"The findings file is in place and excluded from git by the workspace's own exclude rules, so the tree is unchanged.\n\n**Result: no defects in the Economic Security, Invariant or Flow Gap areas.** The findings file holds one informational note and seven coverage rows.\n\n**What I verified**\n\n- The token is an unmodified OpenZeppelin v5.4.0 ERC-20 with a single constructor mint of 1e27 units to msg.sender. All five vendored files are hash-identical to upstream v5.4.0, fetched from GitHub for comparison.\n- Supply conservation holds: only the internal update function writes balances or supply, mint is reachable only from the constructor, and burn is unreachable. The project's invariant test passes with its pinned seed and again with a different seed and double the runs.\n- Launch flows arrive whole. There is no fee, burn, hook, callback, blacklist, pause, owner or payable path, so the distributor share, pool seed, claims and swaps each move exactly the requested amount. A scratch test confirmed this with contract recipients and checked that they receive no call.\n- Sentinel and edge paths behave as standard: zero receiver, zero spender and zero sender all revert, zero-value transferFrom needs no allowance, a finite allowance is consumed exactly, an infinite one is not, and a failed transferFrom leaves the allowance intact.\n- The compiled runtime contains no reachable DELEGATECALL, CALLCODE or SELFDESTRUCT, the constructor takes no arguments, and decimals returns 18, matching the manifest expectations in the protected test.\n\n**The one note, severity info:** the standard ERC-20 allowance replacement race is inherited, since OpenZeppelin v5 has no increaseAllowance or decreaseAllowance. A spender who front-runs a reduced approval can spend old plus new allowance. The README already documents the revoke-to-zero mitigation, and it is not a deviation from the requested plain-ERC-20 design, so I recorded it as a trust assumption with a reproduction rather than a defect.\n\n**Outside my area but worth a line for the judge:** the token's name suggests a destruction mechanic, and the README states explicitly that no transfer rule is inferred from it. The brief in this task specifies only name, symbol, supply, decimals and the single mint, so the plain implementation matches what was asked.\n\nBoth static-analysis leads were checked. Slither reported nothing, and aderyn's large-numeric-literal note is a compile-time constant that evaluates to exactly 1e27.","treeHash":null,"usage":{"cachedInputTokens":711820,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":13049,"runtime":"claude","turns":27,"wallClockMs":175115}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"03845cacb54c3a73","findings":[{"citation":"resolved","description":"Merged from audit_economics (its only finding; audit_permissions, audit_flow, audit_math and write_foundry_tests reported nothing). MADToken inherits the vendored OpenZeppelin v5.4.0 ERC20 unmodified: I diffed every vendored file (ERC20.sol, IERC20.sol, IERC20Metadata.sol, Context.sol, draft-IERC6093.sol) against the upstream v5.4.0 tag and all five are byte-identical. OZ v5 has no increaseAllowance/decreaseAllowance, so approve() is the only way to change an allowance and it overwrites the previous value. A spender who sees a pending approve() can spend the old allowance first and then the new one. This is the behaviour of the ERC-20 standard itself, is documented in README.md (revoke to zero before setting a replacement), and is not a deviation from the requested plain fixed-supply design. Recorded as the economic trust assumption holders accept; no code change is required or recommended. Severity info: it cannot be triggered by the token, the deployer or the launch, only by a holder's own approval to a malicious spender.","line":8,"path":"src/MADToken.sol","reproduction":"Reproduced on this tree with a Foundry test (test/scratch, removed). State: owner holds the supply. 1) owner: approve(spender, 100e18). 2) spender, ordered before the owner's next tx: transferFrom(owner, sink, 100e18). 3) owner: approve(spender, 50e18), intending to lower the allowance. 4) spender: transferFrom(owner, sink, 50e18). Expected by the owner: at most 100e18 spendable. Actual: balanceOf(sink) == 150e18, every call returns true, none reverts. Identical to upstream OZ ERC20 behaviour.","severity":"info","snippet":"contract MADToken is ERC20 {","title":"Standard ERC-20 allowance replacement race is inherited unchanged (trust assumption, not a defect)"}],"hash":"7a66558c71f43781484c783f1fc4a227d855f0e7bd4e73cf8fd7f743c8c78bb7","nodeId":"54ce57a0-3635-4ff8-a576-7aa2541aa07d","outcome":"completed","summary":"The review is complete and the report is written to the findings file at the repository root. The tree is otherwise unchanged, and the scratch test directory was removed.\n\n**Outcome:** the token is clean. No defect was found that would open a revision. One info-level note is kept, merged from the single specialist finding.\n\n**What was checked**\n\n- **Build and tests** pass. The full suite of 47 tests, including both stateful invariant suites, passed with the README's seed, and `forge fmt --check` is clean.\n- **Vendored OpenZeppelin** is genuine. All five vendored files diff byte-identical against the upstream v5.4.0 tag.\n- **Supply and metadata** are right. The constant evaluates to exactly 1e27, matching the manifest, and name, symbol and decimals match the brief. A CREATE2 deployment from a contract leaves the whole supply with that contract.\n- **Deployability** holds. The constructor takes no arguments and needs no prior code. Creation code is 2658 bytes and runtime 1753 bytes. A reachable-opcode scan mirroring the protected test finds no DELEGATECALL, CALLCODE or SELFDESTRUCT.\n- **Manifest** is consistent with the code and uses only schema keys with the right value types.\n- **Static analysis** leads: Slither had nothing, and aderyn's large-literal line is style only.\n\n**Specialist findings**\n\n- The audit_economics allowance-race note reproduces exactly as stated. After approve 100, front-run spend 100, approve 50, spend 50, the sink holds 150. That is the ERC-20 standard's own replace semantics, documented in the README, so it is kept at info as a trust assumption rather than a defect.\n- The other four areas reported nothing, and my own pass with the Pashov, x-ray and Trail of Bits checklists found nothing they missed. Every applicable failure mode there concerns external calls, non-standard tokens, callbacks or privileged roles, and this contract has none.\n\n**Coverage record:** all three entry points are marked holds, plus four invariant rows covering the constructor mint, deployability, the manifest and the aderyn lead.","treeHash":null,"usage":{"cachedInputTokens":279694,"inputTokens":162,"model":"claude-fable-5-1","outputTokens":8956,"runtime":"claude","turns":17,"wallClockMs":134854}},{"artifacts":[],"attempt":1,"bundleHash":"54068a21a41bca82fd815e4c231049f3855e8ff54f79fbb16e0cecf6b0e67d5f","device":"759c614fdc84ff66","findings":[],"hash":"901d1fac71317babb2121be44bea55bbbc8a2f6d32262be3c7b220120c55091e","nodeId":"e5f8cdbf-f926-4df2-912b-0f88c98e44d7","outcome":"completed","summary":"The commit failed because no git identity is set on this machine. I didn't change any git configuration; the two new files are staged and the submission pipeline can commit them.\n\nI added two test files and all 47 tests pass with the verifier's seed (`forge test`). I found no defect, so I didn't write `.imd-findings.json`. The token is OpenZeppelin v5.4's standard ERC-20, unchanged. It has no owner, no mint or burn after deployment, no transfer rules, and it mints all 10^27 units (1 billion with 18 decimals) to the deployer. That matches the brief.\n\n**`test/MADToken.model.invariant.t.sol`:** random call sequences checked against a separate record of the state.\n- A handler acts for five accounts, including the token's own address as a recipient. It keeps its own record of every balance and allowance, updated by hand rather than read back from the token.\n- It makes 8 kinds of call. Half are failure paths that must revert with the exact error and change nothing: sending more than the balance, sending to the zero address, approving the zero address, and `transferFrom` over the allowance or over the balance.\n- After every call it checks:\n  - total supply never changes;\n  - every balance matches the record, and the balances add up to the full supply;\n  - every allowance matches the record, including unlimited (max) allowances that are never spent down;\n  - name, symbol and decimals never change.\n- It uses 256 runs of 64 calls, set in the test file. Each call type ran about 2,000 times with no unexpected reverts.\n\n**`test/MADToken.edge.t.sol`:** 17 edge-case and fuzz tests.\n- **Launch in one transaction:** a helper contract deploys the token and sends the 10% / 80% / 10% launch shares in a single call. Each share arrives exact.\n- **Boundaries:** sending exactly the balance works and one unit more fails; the same for allowances; sending the maximum value fails; an allowance one below the maximum still decreases when spent; an unlimited allowance can move the whole supply and no more.\n- **Zero-address sender:** a zero-value `transferFrom` from the zero address reverts with `ERC20InvalidApprover`. My first version expected `ERC20InvalidSender` and failed. That was my mistake: OpenZeppelin checks the allowance owner before the sender. I corrected the test.\n- **No hidden functions:** a fuzz test calls random function selectors from random callers. Every call outside the standard ERC-20 functions reverts and changes nothing.\n- **No dangerous opcodes:** the deployed code is scanned for DELEGATECALL, CALLCODE and SELFDESTRUCT, the same way the launch floor checks.\n- **Other fuzz tests:** approvals store the exact value, split spends never exceed the allowance, round trips restore balances, and other holders are untouched by a transfer.\n- **Lost tokens:** tokens sent to the token's own address can never be moved out. This is the behaviour the README documents, not a defect.\n\nI didn't run the launch floor tests in `.imd/reads/protected/`. They need Uniswap v4-core and launch settings from the environment, which this repository doesn't have; the verifier runs them.","treeHash":"1e1512112c687cb355f714d514a4324afea3b3f1","usage":{"cachedInputTokens":521211,"inputTokens":22,"model":"claude-opus-5-5","outputTokens":15007,"runtime":"claude","turns":12,"wallClockMs":213701}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"312a95392d3e8a75","findings":[],"hash":"be0c7c8c33251b3c9088dd0b5c94c791b8002336890bbc998b628ab68a1681c0","nodeId":"55889e15-e2be-4933-9ec9-b24cf772f676","outcome":"completed","summary":"The review is complete. The math audit of `MADToken` found no defects, and `.imd-findings.json` holds an empty findings list with a full coverage record.\n\n**What was reviewed.** The token is a 17-line contract that inherits OpenZeppelin ERC-20 v5.4.0 and mints a fixed supply once in its constructor. I confirmed all five vendored OpenZeppelin files are byte-identical to the upstream v5.4.0 tag, so the transfer and allowance arithmetic is the audited upstream code. The compiled ABI exposes only the three listed entry points plus views, with no receive or fallback.\n\n**Math Precision pass.** The contract contains no divisions, scale conversions, downcasts, or fixed-point mixing. The supply constant evaluates exactly to 10^27 at compile time, which closes the aderyn large-numeric-literal lead as a non-defect. The unchecked blocks in the vendored `_update` and `_spendAllowance` are each preceded by the guard that makes them safe, and the single mint leaves over 2^160 of headroom below the uint256 ceiling.\n\n**Boundary pass.** There are no external calls, payable paths, sentinel branches, or decoded bytes to exercise. I probed the remaining edges with a scratch Foundry suite of 12 tests, all passing:\n\n- Transfers of `type(uint256).max` and supply plus one revert with the exact ERC-6093 error and leave state untouched.\n- An allowance of max minus one stays finite and decrements. An allowance of exactly max is infinite and survives a full-supply spend.\n- When allowance exceeds balance, the balance check wins and the allowance is restored by the revert.\n- A zero-address sender through `transferFrom` reverts for both zero and nonzero values.\n\n**Numerical Gap pass.** Supply conservation holds across 1-wei hop chains, zero-value `transferFrom` with no allowance, and a 1024-run split-transfer fuzz, in addition to the project's own 256-sequence stateful invariant. The launch's 10/80/10 split of 10^27 divides with no remainder, so no leg of the factory flow can arrive short.\n\n**Coverage.** All three entry points are marked `holds`, with four extra rows for the invariants checked. Nothing in the assigned area was left unreached. The scratch tests were removed and the working tree is unchanged apart from the findings file.","treeHash":null,"usage":{"cachedInputTokens":525581,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":10559,"runtime":"claude","turns":24,"wallClockMs":163789}},{"artifacts":[],"attempt":1,"bundleHash":"efeb01b6c6d6800e6daaa302bd24e8a42778a749c32497085bebabdbad7d7697","device":"d67781b306f5a952","findings":[],"hash":"eabadd7a97e88344c515de088eef9c905388b373f686aed64fb3f6ff2d07f1d0","nodeId":"1bb60747-1583-4fb8-b0ae-8b037c436f51","outcome":"completed","summary":"Implemented MAD: 1,000,000,000 tokens with 18 decimals, minted once to the deployer, with no admin powers or additional minting.\n\nDependencies are vendored for offline builds. README documents assumptions, deployment, and operations.\n\nVerified with Solidity 0.8.26:\n\n- `forge build` passed.\n- `forge test` passed all 29 tests using the supplied fuzz seed.\n- `forge fmt --check` passed.","treeHash":"56df063a3a8ffb125aba486f77c5511815bf32bc","usage":{"cachedInputTokens":420608,"inputTokens":60075,"model":"gpt-6-astra","outputTokens":14064,"runtime":"codex","turns":5,"wallClockMs":353015}},{"artifacts":[],"attempt":1,"bundleHash":"b2a0dd466cd2b61de950ee5a74113829a3417d553ebeebfa07b7de754f990e9b","device":"81314195390981c7","findings":[],"hash":"fb4ada080aae7a361a467a60b9f086cde7ce8ec999887439a6773744fa45eae2","nodeId":"81df1162-89f5-4575-81c3-df99548c4562","outcome":"completed","summary":"I wrote `launch.json` for the MAD launch, and it's the only file I changed. The JSON parses, and `forge build` and `forge test` passed (29 tests) with the fuzz seed you gave. The two protected floor tests weren't part of that run: they import files that aren't in this tree, like `src/LaunchLiquidity.sol`, so the verifier runs those.\n\nThe manifest follows the accepted `src/MADToken.sol`:\n- **Token:** contract `MADToken`, name \"Mutually Assured Destruction\", symbol `MAD`, 18 decimals.\n- **Constructor arguments:** none. The constructor takes no parameters, so `constructorArgs` is `[]`.\n- **Supply:** `totalSupply` is `\"1000000000000000000000000000\"` (1 billion × 10^18), which is what the constructor mints once to `msg.sender` (the factory).\n- **Application contracts:** none. The accepted tree only has the token, so `contracts` is `[]`.\n- **Pool:** FWA pair `0xa0df17b5ac76ababa36e1450e2cbcd18a620c845`, fee 12500, tick spacing 60, starting price `79228162514264337593543950336` (one to one).\n- **Economics:** copied exactly from the brief.\n- **Notes:** a short description of the token. It has no owner, mint, burn, pause, fees or transfer restrictions.\n\nThe file isn't committed yet.","treeHash":"681019a293007462ff87a024274c35184e5e3da2","usage":{"cachedInputTokens":138172,"inputTokens":10,"model":"claude-opus-5-5","outputTokens":1839,"runtime":"claude","turns":5,"wallClockMs":51738}}],"verification":[{"checks":[{"durationMs":2089,"exitCode":0,"name":"build","output":"Compiling 29 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.98s\nCompiler run successful!\n","passed":true},{"durationMs":7666,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 17 tests for test/MADToken.edge.t.sol:MADTokenEdgeTest\n[PASS] testFuzz_ApproveStoresExactValue(address,address,uint256) (runs: 1000, μ: 78317, ~: 78619)\nLogs:\n  Bound result 428518160366499283210683554564345439695065702312\n  Bound result 523738411944345910929494645621728619389888591881\n\n[PASS] testFuzz_RoundTripRestoresBalances(uint256,uint256) (runs: 1000, μ: 120496, ~: 121262)\nLogs:\n  Bound result 832580250648495146885855812\n  Bound result 6031246367\n\n[PASS] testFuzz_SplitSpendsNeverExceedAllowance(uint256,uint256,uint256) (runs: 1000, μ: 207949, ~: 198169)\nLogs:\n  Bound result 1014697973417\n  Bound result 927627370929\n  Bound result 24457441836484496127053746\n\n[PASS] testFuzz_ThirdPartiesUnaffectedByTransfer(address,address,uint256,uint256) (runs: 1000, μ: 277064, ~: 280875)\nLogs:\n  Bound result 3714247997\n  Bound result 1\n  Bound result 123000000000000000000\n  Bound result 1511451215348781141\n\n[PASS] testFuzz_UnknownSelectorsRevertAndChangeNothing(bytes4,address,bytes32,bytes32) (runs: 1000, μ: 114761, ~: 114972)\n[PASS] test_AllowanceOneBelowMaxIsFiniteAndDecreases() (gas: 123960)\n[PASS] test_AllowancesAreDirectionalAndPerSpender() (gas: 110625)\n[PASS] test_InfiniteAllowanceCanMoveEntireSupplyButNoMore() (gas: 158970)\n[PASS] test_OneTransactionLaunchLegsAreExact() (gas: 282072)\n[PASS] test_RuntimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 2475942)\n[PASS] test_SupplyIsExactlyTenToThe27() (gas: 21634)\n[PASS] test_TokensSentToTokenContractAreUnrecoverable() (gas: 100438)\n[PASS] test_TransferExactBalanceSucceedsButOneMoreReverts() (gas: 157934)\n[PASS] test_TransferFromExactAllowanceThenOneWeiMoreReverts() (gas: 146614)\n[PASS] test_TransferFromZeroSourceNonZeroValueRevertsOnAllowance() (gas: 38109)\n[PASS] test_TransferFromZeroSourceZeroValueRevertsInvalidApprover() (gas: 37863)\n[PASS] test_TransferMaxUintReverts() (gas: 35547)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 67.70ms (338.29ms CPU time)\n\nRan 28 tests for test/MADToken.t.sol:MADTokenTest\n[PASS] testFuzz_InsufficientAllowanceLeavesStateIntact(uint256,uint256) (runs: 1024, μ: 133266, ~: 133664)\nLogs:\n  Bound result 999999999999999999999999998\n  Bound result 1000000000000000000000000000\n\n[PASS] testFuzz_InsufficientBalanceRestoresAllowance(uint256,uint256) (runs: 1024, μ: 195910, ~: 196672)\nLogs:\n  Bound result 999999999999999999999999998\n  Bound result 264168616965461608682961304856294679377888862090\n\n[PASS] testFuzz_InsufficientBalanceTransferLeavesStateIntact(uint256) (runs: 1024, μ: 69152, ~: 69478)\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639565057423025413427220259884\n\n[PASS] testFuzz_SelfTransferConservesBalance(uint256) (runs: 1024, μ: 55132, ~: 54879)\nLogs:\n  Bound result 253\n\n[PASS] testFuzz_TransferConservesSupply(address,uint256) (runs: 1024, μ: 92979, ~: 93778)\nLogs:\n  Bound result 247740201550054541\n\n[PASS] testFuzz_TransferFromDeliversExactAmount(uint256,uint256) (runs: 1024, μ: 162656, ~: 164869)\nLogs:\n  Bound result 49722554558886056\n  Bound result 8544569349624758\n\n[PASS] test_ApprovalCanBeReplacedAndRevoked() (gas: 181246)\n[PASS] test_ApprovalEmitsEventAndOnlyChangesAllowance() (gas: 99109)\n[PASS] test_ApproveZeroSpenderReverts() (gas: 37618)\n[PASS] test_ConstructorEmitsExactlyOneMint() (gas: 9692)\n[PASS] test_ContractRecipientIsNotCalled() (gas: 172185)\n[PASS] test_Create2MintsToImmediateFactoryDeployer() (gas: 302196)\n[PASS] test_EntireSupplyCanBeTransferredAndReturned() (gas: 188455)\n[PASS] test_InfiniteAllowanceIsPreserved() (gas: 214763)\n[PASS] test_LaunchDistributionClaimsAndPoolTransferLegsAreExact() (gas: 711194)\n[PASS] test_MetadataAndEntireInitialSupply() (gas: 107600)\n[PASS] test_NoMintBurnOrAdministrativeEntrypoints() (gas: 1159836)\n[PASS] test_RejectsNativeEther() (gas: 36831)\n[PASS] test_TransferEmitsEventAndDeliversExactAmount() (gas: 91573)\n[PASS] test_TransferFromEmitsEventAndConsumesFiniteAllowance() (gas: 242106)\n[PASS] test_TransferFromRequiresAllowanceEvenForHolder() (gas: 35773)\n[PASS] test_TransferFromToSelfConsumesAllowanceWithoutChangingBalance() (gas: 115624)\n[PASS] test_TransferFromToZeroRollsBackAllowance() (gas: 114181)\n[PASS] test_TransferFromZeroSourceReverts() (gas: 64724)\n[PASS] test_TransferToZeroRevertsEvenForZeroAmount() (gas: 71882)\n[PASS] test_UnapprovedSpenderCannotUseAnotherSpendersAllowance() (gas: 117808)\n[PASS] test_ZeroTransferFromEmptyAccountEmitsEvent() (gas: 73366)\n[PASS] test_ZeroTransferFromNeedsNoAllowance() (gas: 81460)\nSuite result: ok. 28 passed; 0 failed; 0 skipped; finished in 67.74ms (377.24ms CPU time)\n\nRan 1 test for test/MADToken.invariant.t.sol:MADTokenInvariantTest\n[PASS] invariant_EntireSupplyIsConservedAcrossCallSequences() (runs: 256, calls: 16384, reverts: 0)\n\n╭-----------------+--------------+-------+---------+----------╮\n| Contract        | Selector     | Calls | Reverts | Discards |\n+=============================================================+\n| MADTokenHandler | approve      | 5483  | 0       | 0        |\n|-----------------+--------------+-------+---------+----------|\n| MADTokenHandler | transfer     | 5472  | 0       | 0        |\n|-----------------+--------------+-------+---------+----------|\n| MADTokenHandler | transferFrom | 5429  | 0       | 0        |\n╰-----------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 999999999999999999999999998\n  Bound result 0\n  Bound result 0\n  Bound result 684831254781382325029624772\n  Bound result 0\n  Bound result 2\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 1000\n  Bound result 565512004330391690789288657\n  Bound result 98\n  Bound result 70880257823986140828377720\n  Bound result 3\n  Bound result 10\n  Bound result 5097\n  Bound result 54493764344146975088874337\n  Bound result 0\n  Bound result 105251984199447239821322413\n  Bound result 0\n  Bound result 830\n  Bound result 63269881395156536931607777\n  Bound result 100\n  Bound result 845\n  Bound result 7124242600850696220358375\n  Bound result 1085\n  Bound result 1131\n  Bound result 0\n  Bound result 3905\n  Bound result 0\n  Bound result 2864\n  Bound result 1396203853056746985290\n  Bound result 11118443331878628\n  Bound result 0\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.54s (1.54s CPU time)\n\nRan 1 test for test/MADToken.model.invariant.t.sol:MADTokenModelInvariantTest\n[PASS]\nMADTokenModelInvariantTest invariants:\n[PASS] invariant_AllowancesMatchModel\n[PASS] invariant_BalancesMatchModelAndSumToSupply\n[PASS] invariant_MetadataIsImmutable\n[PASS] invariant_TotalSupplyNeverChanges\n MADTokenModelInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭----------------------+---------------------------+-------+---------+----------╮\n| Contract             | Selector                  | Calls | Reverts | Discards |\n+===============================================================================+\n| MADTokenModelHandler | approve                   | 2089  | 0       | 0        |\n|----------------------+---------------------------+-------+---------+----------|\n| MADTokenModelHandler | approveZeroSpender        | 2028  | 0       | 0        |\n|----------------------+---------------------------+-------+---------+----------|\n| MADTokenModelHandler | transfer                  | 2080  | 0       | 0        |\n|----------------------+---------------------------+-------+---------+----------|\n| MADTokenModelHandler | transferFrom              | 2043  | 0       | 0        |\n|----------------------+---------------------------+-------+---------+----------|\n| MADTokenModelHandler | transferFromOverAllowance | 1972  | 0       | 0        |\n|----------------------+---------------------------+-------+---------+----------|\n| MADTokenModelHandler | transferFromOverBalance   | 2002  | 0       | 0        |\n|----------------------+---------------------------+-------+---------+----------|\n| MADTokenModelHandler | transferToZero            | 2120  | 0       | 0        |\n|----------------------+---------------------------+-------+---------+----------|\n| MADTokenModelHandler | transferTooMuch           | 2050  | 0       | 0        |\n╰----------------------+---------------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 6905\n  Bound result 0\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 3861479741314673163834939411563862058199007258961738976038395668\n  Bound result 60143313188311053758203936256977488101433234\n  Bound result 0\n  Bound result 0\n  Bound result 9788556514448863746542723027885608749920518270911453274660798238617937110961\n  Bound result 5\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129640935\n  Bound result 1089\n  Bound result 4\n  Bound result 27\n  Bound result 7079\n  Bound result 6251\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129655733\n  Bound result 27\n  Bound result 7077\n  Bound result 5208\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639931\n  Bound result 1\n  Bound result 2225\n  Bound result 0\n  Bound result 0\n  Bound result 3001\n  Bound result 3000000000000000000\n  Bound result 0\n  Bound result 1705\n  Bound result 0\n  Bound result 60000000000000000000\n  Bound result 96\n  Bound result 6\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639616\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129637030\n  Bound result 1058\n  Bound result 3000000000000000000\n  Bound result 0\n  Bound result 999999999999999999999996493\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 7.54s (7.54s CPU time)\n\nRan 4 test suites in 7.54s (9.22s CPU time): 47 tests passed, 0 failed, 0 skipped (47 total tests)\n","passed":true},{"durationMs":64,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"MADToken.approve(address,uint256)\",\"MADToken.transfer(address,uint256)\",\"MADToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":5,\"README.md\":131,\"foundry.toml\":23,\"src/MADToken.sol\":17,\"test/MADToken.edge.t.sol\":251,\"test/MADToken.invariant.t.sol\":92,\"test/MADToken.model.invariant.t.sol\":209,\"test/MADToken.t.sol\":387},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"901d1fac71317babb2121be44bea55bbbc8a2f6d32262be3c7b220120c55091e","verifiedTreeHash":"1e1512112c687cb355f714d514a4324afea3b3f1","verifierVersion":"0.1.0+ead9012e"},{"checks":[{"durationMs":1525,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.41s\nCompiler run successful!\n","passed":true},{"durationMs":1806,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 28 tests for test/MADToken.t.sol:MADTokenTest\n[PASS] testFuzz_InsufficientAllowanceLeavesStateIntact(uint256,uint256) (runs: 1024, μ: 133171, ~: 133674)\nLogs:\n  Bound result 6\n  Bound result 8\n\n[PASS] testFuzz_InsufficientBalanceRestoresAllowance(uint256,uint256) (runs: 1024, μ: 195811, ~: 196660)\nLogs:\n  Bound result 329413713372842583945007249\n  Bound result 54332935295522557311919645162069987660447689267377885015272005299242231\n\n[PASS] testFuzz_InsufficientBalanceTransferLeavesStateIntact(uint256) (runs: 1024, μ: 69146, ~: 69478)\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639564039507584007913129639935\n\n[PASS] testFuzz_SelfTransferConservesBalance(uint256) (runs: 1024, μ: 55128, ~: 54879)\nLogs:\n  Bound result 1017965441405514090619949\n\n[PASS] testFuzz_TransferConservesSupply(address,uint256) (runs: 1024, μ: 92907, ~: 93778)\nLogs:\n  Bound result 966616713871479862605638001\n\n[PASS] testFuzz_TransferFromDeliversExactAmount(uint256,uint256) (runs: 1024, μ: 162486, ~: 164869)\nLogs:\n  Bound result 730\n  Bound result 8\n\n[PASS] test_ApprovalCanBeReplacedAndRevoked() (gas: 181246)\n[PASS] test_ApprovalEmitsEventAndOnlyChangesAllowance() (gas: 99109)\n[PASS] test_ApproveZeroSpenderReverts() (gas: 37618)\n[PASS] test_ConstructorEmitsExactlyOneMint() (gas: 9692)\n[PASS] test_ContractRecipientIsNotCalled() (gas: 172185)\n[PASS] test_Create2MintsToImmediateFactoryDeployer() (gas: 302196)\n[PASS] test_EntireSupplyCanBeTransferredAndReturned() (gas: 188455)\n[PASS] test_InfiniteAllowanceIsPreserved() (gas: 214763)\n[PASS] test_LaunchDistributionClaimsAndPoolTransferLegsAreExact() (gas: 711194)\n[PASS] test_MetadataAndEntireInitialSupply() (gas: 107600)\n[PASS] test_NoMintBurnOrAdministrativeEntrypoints() (gas: 1159836)\n[PASS] test_RejectsNativeEther() (gas: 36831)\n[PASS] test_TransferEmitsEventAndDeliversExactAmount() (gas: 91573)\n[PASS] test_TransferFromEmitsEventAndConsumesFiniteAllowance() (gas: 242106)\n[PASS] test_TransferFromRequiresAllowanceEvenForHolder() (gas: 35773)\n[PASS] test_TransferFromToSelfConsumesAllowanceWithoutChangingBalance() (gas: 115624)\n[PASS] test_TransferFromToZeroRollsBackAllowance() (gas: 114181)\n[PASS] test_TransferFromZeroSourceReverts() (gas: 64724)\n[PASS] test_TransferToZeroRevertsEvenForZeroAmount() (gas: 71882)\n[PASS] test_UnapprovedSpenderCannotUseAnotherSpendersAllowance() (gas: 117808)\n[PASS] test_ZeroTransferFromEmptyAccountEmitsEvent() (gas: 73366)\n[PASS] test_ZeroTransferFromNeedsNoAllowance() (gas: 81460)\nSuite result: ok. 28 passed; 0 failed; 0 skipped; finished in 58.72ms (332.58ms CPU time)\n\nRan 1 test for test/MADToken.invariant.t.sol:MADTokenInvariantTest\n[PASS] invariant_EntireSupplyIsConservedAcrossCallSequences() (runs: 256, calls: 16384, reverts: 0)\n\n╭-----------------+--------------+-------+---------+----------╮\n| Contract        | Selector     | Calls | Reverts | Discards |\n+=============================================================+\n| MADTokenHandler | approve      | 5483  | 0       | 0        |\n|-----------------+--------------+-------+---------+----------|\n| MADTokenHandler | transfer     | 5472  | 0       | 0        |\n|-----------------+--------------+-------+---------+----------|\n| MADTokenHandler | transferFrom | 5429  | 0       | 0        |\n╰-----------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 999999999999999999999999998\n  Bound result 0\n  Bound result 0\n  Bound result 75000000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 409\n  Bound result 0\n  Bound result 0\n  Bound result 5878\n  Bound result 0\n  Bound result 4\n  Bound result 0\n  Bound result 0\n  Bound result 3\n  Bound result 6\n  Bound result 4773\n  Bound result 4397\n  Bound result 8602\n  Bound result 1\n  Bound result 0\n  Bound result 0\n  Bound result 4\n  Bound result 509\n  Bound result 0\n  Bound result 0\n  Bound result 3\n  Bound result 436\n  Bound result 1142\n  Bound result 0\n  Bound result 3334\n  Bound result 0\n  Bound result 5038\n  Bound result 1396203853056746985290\n  Bound result 11118443331878628\n  Bound result 2777\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.68s (1.67s CPU time)\n\nRan 2 test suites in 1.68s (1.74s CPU time): 29 tests passed, 0 failed, 0 skipped (29 total tests)\n","passed":true},{"durationMs":89,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"MADToken.approve(address,uint256)\",\"MADToken.transfer(address,uint256)\",\"MADToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":5,\"README.md\":131,\"foundry.toml\":23,\"src/MADToken.sol\":17,\"test/MADToken.invariant.t.sol\":92,\"test/MADToken.t.sol\":387},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":885,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":442,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/MADToken.sol:10: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"eabadd7a97e88344c515de088eef9c905388b373f686aed64fb3f6ff2d07f1d0","verifiedTreeHash":"56df063a3a8ffb125aba486f77c5511815bf32bc","verifierVersion":"0.1.0+ead9012e"},{"checks":[{"durationMs":1264,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.17s\nCompiler run successful!\n","passed":true},{"durationMs":1561,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 28 tests for test/MADToken.t.sol:MADTokenTest\n[PASS] testFuzz_InsufficientAllowanceLeavesStateIntact(uint256,uint256) (runs: 1024, μ: 133171, ~: 133674)\nLogs:\n  Bound result 999999999999999999999999998\n  Bound result 1000000000000000000000000000\n\n[PASS] testFuzz_InsufficientBalanceRestoresAllowance(uint256,uint256) (runs: 1024, μ: 195811, ~: 196660)\nLogs:\n  Bound result 11\n  Bound result 362335735724931355726049551073432287807647657906853339574968\n\n[PASS] testFuzz_InsufficientBalanceTransferLeavesStateIntact(uint256) (runs: 1024, μ: 69146, ~: 69478)\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639564039482584007913129639935\n\n[PASS] testFuzz_SelfTransferConservesBalance(uint256) (runs: 1024, μ: 55128, ~: 54879)\nLogs:\n  Bound result 169657626265913472603056921\n\n[PASS] testFuzz_TransferConservesSupply(address,uint256) (runs: 1024, μ: 92907, ~: 93778)\nLogs:\n  Bound result 283348939741375469\n\n[PASS] testFuzz_TransferFromDeliversExactAmount(uint256,uint256) (runs: 1024, μ: 162486, ~: 164869)\nLogs:\n  Bound result 75000000000000000000\n  Bound result 1000000000\n\n[PASS] test_ApprovalCanBeReplacedAndRevoked() (gas: 181246)\n[PASS] test_ApprovalEmitsEventAndOnlyChangesAllowance() (gas: 99109)\n[PASS] test_ApproveZeroSpenderReverts() (gas: 37618)\n[PASS] test_ConstructorEmitsExactlyOneMint() (gas: 9692)\n[PASS] test_ContractRecipientIsNotCalled() (gas: 172185)\n[PASS] test_Create2MintsToImmediateFactoryDeployer() (gas: 302196)\n[PASS] test_EntireSupplyCanBeTransferredAndReturned() (gas: 188455)\n[PASS] test_InfiniteAllowanceIsPreserved() (gas: 214763)\n[PASS] test_LaunchDistributionClaimsAndPoolTransferLegsAreExact() (gas: 711194)\n[PASS] test_MetadataAndEntireInitialSupply() (gas: 107600)\n[PASS] test_NoMintBurnOrAdministrativeEntrypoints() (gas: 1159836)\n[PASS] test_RejectsNativeEther() (gas: 36831)\n[PASS] test_TransferEmitsEventAndDeliversExactAmount() (gas: 91573)\n[PASS] test_TransferFromEmitsEventAndConsumesFiniteAllowance() (gas: 242106)\n[PASS] test_TransferFromRequiresAllowanceEvenForHolder() (gas: 35773)\n[PASS] test_TransferFromToSelfConsumesAllowanceWithoutChangingBalance() (gas: 115624)\n[PASS] test_TransferFromToZeroRollsBackAllowance() (gas: 114181)\n[PASS] test_TransferFromZeroSourceReverts() (gas: 64724)\n[PASS] test_TransferToZeroRevertsEvenForZeroAmount() (gas: 71882)\n[PASS] test_UnapprovedSpenderCannotUseAnotherSpendersAllowance() (gas: 117808)\n[PASS] test_ZeroTransferFromEmptyAccountEmitsEvent() (gas: 73366)\n[PASS] test_ZeroTransferFromNeedsNoAllowance() (gas: 81460)\nSuite result: ok. 28 passed; 0 failed; 0 skipped; finished in 41.80ms (242.51ms CPU time)\n\nRan 1 test for test/MADToken.invariant.t.sol:MADTokenInvariantTest\n[PASS] invariant_EntireSupplyIsConservedAcrossCallSequences() (runs: 256, calls: 16384, reverts: 0)\n\n╭-----------------+--------------+-------+---------+----------╮\n| Contract        | Selector     | Calls | Reverts | Discards |\n+=============================================================+\n| MADTokenHandler | approve      | 5483  | 0       | 0        |\n|-----------------+--------------+-------+---------+----------|\n| MADTokenHandler | transfer     | 5472  | 0       | 0        |\n|-----------------+--------------+-------+---------+----------|\n| MADTokenHandler | transferFrom | 5429  | 0       | 0        |\n╰-----------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 999999999999999999999999998\n  Bound result 0\n  Bound result 0\n  Bound result 75000000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 409\n  Bound result 0\n  Bound result 0\n  Bound result 5878\n  Bound result 0\n  Bound result 4\n  Bound result 0\n  Bound result 0\n  Bound result 3\n  Bound result 6\n  Bound result 4773\n  Bound result 4397\n  Bound result 8602\n  Bound result 1\n  Bound result 0\n  Bound result 0\n  Bound result 4\n  Bound result 509\n  Bound result 0\n  Bound result 0\n  Bound result 3\n  Bound result 436\n  Bound result 1142\n  Bound result 0\n  Bound result 3334\n  Bound result 0\n  Bound result 5038\n  Bound result 1396203853056746985290\n  Bound result 11118443331878628\n  Bound result 2777\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.47s (1.47s CPU time)\n\nRan 2 test suites in 1.47s (1.51s CPU time): 29 tests passed, 0 failed, 0 skipped (29 total tests)\n","passed":true},{"durationMs":39,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"MADToken.approve(address,uint256)\",\"MADToken.transfer(address,uint256)\",\"MADToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":5,\"README.md\":131,\"foundry.toml\":23,\"launch.json\":24,\"src/MADToken.sol\":17,\"test/MADToken.invariant.t.sol\":92,\"test/MADToken.t.sol\":387},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"fb4ada080aae7a361a467a60b9f086cde7ce8ec999887439a6773744fa45eae2","verifiedTreeHash":"681019a293007462ff87a024274c35184e5e3da2","verifierVersion":"0.1.0+ead9012e"}]}