{"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":"d4892c90-b532-4975-b30d-4dfcc3b6da2c","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"0f205cc12f87c415e0155aec85e15f877debf764ea9c31dcf2d52841390a7e90","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":"b13cb34007b1ff34181b459a51e3a190d168a45e51bfca272ccaa8931ad2a47e","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":"f91b747fc6c388d29ab87a77d0e871e9504d1da4b28e0e43bd721c7e88907581","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":"002134c6843abccc72430bef9e3cf28e68bf9614ae83ec2659b0536254f02ce4","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":"6321aff06bb49fb8625dc31779296919c1048d4d95fcaeb9b6d297aa0faaa4ff","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":"396ee5a11948c8f2a19dfc9c7b457b7325424c53c00102f48c8c5ae962b8ddde","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":"3c99bd6857497b05db74e0448f4c89c30a460adf5734af3392032351778f2dcb","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"636d48df4b5505a1daaedc98d61a03f3d25b3c2d260913d8bed63951e8fac2c5","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: Gotchi Finance (GOTCHI).\nToken name: Gotchi Finance\nToken symbol: GOTCHI\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.","parentJobId":null,"planHash":"28f1c8dec9810298a5ef1b9885a3cadb5c5d7ca3fc325c1733626b6e0e1bba28","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"d4892c90-b532-4975-b30d-4dfcc3b6da2c","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-1891-gotchi-finance"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"52180","feedbackHash":"f3e68d5ef5eeac43808fa57cb83c6207678144775e9c97c64139223f6d6710f3","nodeKey":"audit_economics","submissionHash":"0f205cc12f87c415e0155aec85e15f877debf764ea9c31dcf2d52841390a7e90","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51018","feedbackHash":"1c4f1af70eb1ca38e5a1c9e92e3f53e8cbc7dd29ecd9176bf93c3a04c0177c2c","nodeKey":"audit_flow","submissionHash":"b13cb34007b1ff34181b459a51e3a190d168a45e51bfca272ccaa8931ad2a47e","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51227","feedbackHash":"ca9e2f49097f4d295c89c56e5062c0ebcf1e98b19edf56d402be4b9827a21a92","nodeKey":"audit_judge","submissionHash":"f91b747fc6c388d29ab87a77d0e871e9504d1da4b28e0e43bd721c7e88907581","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52420","feedbackHash":"e98e6a15ba0a43c65b2d336331d3d190b724111cae70912a2ec73277322abedd","nodeKey":"audit_math","submissionHash":"002134c6843abccc72430bef9e3cf28e68bf9614ae83ec2659b0536254f02ce4","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51425","feedbackHash":"55773a6f8294d700d9dc215b1bd804b094a3d3aac9089f3cfabd32806ad3d969","nodeKey":"audit_permissions","submissionHash":"6321aff06bb49fb8625dc31779296919c1048d4d95fcaeb9b6d297aa0faaa4ff","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51455","feedbackHash":"662d0aca51ebf4ebde797003830a10d3d2262ed9efbb317e66a85bd7dd6f44c7","nodeKey":"build_contract_project","submissionHash":"396ee5a11948c8f2a19dfc9c7b457b7325424c53c00102f48c8c5ae962b8ddde","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52173","feedbackHash":"b45cc67850e71a63c98b2b2e5e1720728751ac16074e54abab580dcc71d92eb9","nodeKey":"manifest","submissionHash":"3c99bd6857497b05db74e0448f4c89c30a460adf5734af3392032351778f2dcb","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51540","feedbackHash":"1718d165e5f9672e18efc77bd77c2a26a041caeeaec6983b52f4a01eb2e060e6","nodeKey":"write_foundry_tests","submissionHash":"636d48df4b5505a1daaedc98d61a03f3d25b3c2d260913d8bed63951e8fac2c5","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"d5799000f62576bc88aecc156ab3f0ffd6e1c0f2e77271496006ba5264f7664b","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"1559912e747bbcd4","findings":[],"hash":"002134c6843abccc72430bef9e3cf28e68bf9614ae83ec2659b0536254f02ce4","nodeId":"e63f7107-3258-4a4d-a58d-085017acac3d","outcome":"completed","summary":"The review is complete and `.imd-findings.json` holds the result: no defects, with seven coverage rows.\n\n**What the token is.** `src/GotchiToken.sol` is a 17-line contract inheriting the vendored OpenZeppelin v5.0.2 ERC20 unchanged. It has one compile-time constant for the supply and a constructor that mints it to the deployer. The five vendored OZ files match the SHA-256 hashes pinned in DEPENDENCIES.json, so the arithmetic under review is exactly upstream's.\n\n**Math Precision guide.** There is no division, multiplication at runtime, downcast, scale conversion, fee, or share formula anywhere in the token. The supply literal evaluates exactly to 10^27 and equals one billion times ten to the token's own decimals. The only checked addition is the single mint into total supply. The unchecked subtractions and additions in OZ's balance update are each preceded by the balance guard or bounded by the fixed supply, which I confirmed with max-uint, supply-plus-one, one-wei and zero inputs. The aderyn \"large numeric literal\" line is stylistic and does not change the value.\n\n**Boundary guide.** The token makes no external calls, has no payable function, receive or fallback, and decodes no bytes. The only sentinel branches are the zero-address rejections in transfer, approve and mint, and both sides of each behave as documented. The infinite-allowance sentinel is handled correctly: max-uint is never decremented, max-minus-one is finite and decremented exactly, and an allowance equal to the value spends to zero while value-plus-one reverts with the exact custom error.\n\n**Numerical Gap guide.** The invariant that balances sum to total supply has no rounding seam to drift through, since no operation truncates. A fuzzed eight-party random split and the repository's own invariant suite of 8,192 calls conserve supply exactly. Revert paths roll back allowance and balance together.\n\n**Checks that ran.** Forge build, the existing 35 tests, an 11-test scratch probe file I wrote and deleted afterwards, and `forge fmt --check` on the committed sources. All passed. The runtime bytecode contains no DELEGATECALL, CALLCODE, SELFDESTRUCT or CREATE. No launch.json exists in the tree yet, so there was no manifest to check.\n\n**Outside my area.** Nothing severe surfaced. The token has no privileged roles, so there are no trust assumptions to document. The working tree is unchanged apart from the findings file.","treeHash":null,"usage":{"cachedInputTokens":567588,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":10211,"runtime":"claude","turns":16,"wallClockMs":218389}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"c722c2e9ac9aa084","findings":[],"hash":"0f205cc12f87c415e0155aec85e15f877debf764ea9c31dcf2d52841390a7e90","nodeId":"8c305ee7-ffe1-4aeb-8cb3-ed1b47e8754e","outcome":"completed","summary":"The review is complete. No defects found in the economics area, and the coverage record is written to `.imd-findings.json` with an empty findings list.\n\n**What the token is.** `src/GotchiToken.sol` is a 17-line contract inheriting the vendored OpenZeppelin v5.0.2 ERC-20 unchanged. Its constructor mints the full supply to the deployer once. The compiled ABI exposes only the standard ERC-20 functions plus the supply constant.\n\n**What I checked against the Economic Security, Invariant and Flow Gap guides:**\n- **Conservation.** The only mint is in the constructor and nothing external reaches mint, burn or the update hook. The project's 128-run stateful suite and a 3650-day warp keep the balance sum at exactly 1e27.\n- **Launch flows.** Transfers to the distributor, pool manager and requester, a claim, a buy via a pool-manager payout, and a sell via both direct transfer and approve-then-pull all moved exact amounts in a scratch test I wrote and ran. No fee, hook, exemption, or pre-transfer amount that could diverge from what is delivered.\n- **External dependencies and sentinels.** No oracle, callback, receiver hook, ETH acceptance or proxy. Zero-address receiver and spender revert rather than silently succeeding. Vendored library file digests match the recorded dependency manifest.\n- **Privileged powers.** None exist. Eighteen common admin selectors and raw ETH revert from both the deployer and a stranger. The runtime has no DELEGATECALL, CALLCODE or SELFDESTRUCT.\n- **Static-analysis lead.** The aderyn large-numeric-literal note is `1_000_000_000 * 10 ** 18`, which the tests confirm equals the manifest supply. Not a defect.\n\n**Verification run.** The seeded project suite passed all 35 tests, format check passed, and my 5 scratch tests passed. The scratch directory was removed afterward.\n\n**Not reached.** A real Uniswap v4 seed and swap were not simulated locally because the protected harness and manifest inputs are not in this tree. Only the token side of those flows is verified, which is what this review area covers.","treeHash":null,"usage":{"cachedInputTokens":474919,"inputTokens":194,"model":"claude-fable-5-1","outputTokens":9114,"runtime":"claude","turns":18,"wallClockMs":153995}},{"artifacts":[],"attempt":1,"bundleHash":"badc7ec8d913c842448d82e2b0460891f4a88161339625c2aef4e59fc57616ee","device":"7989aa5d838d11d9","findings":[],"hash":"396ee5a11948c8f2a19dfc9c7b457b7325424c53c00102f48c8c5ae962b8ddde","nodeId":"f877c1ba-9d26-4a12-b542-269a0089522d","outcome":"completed","summary":"Implemented GOTCHI: 1 billion tokens, 18 decimals, minted once entirely to the deployer. Dependencies are vendored, with deployment and operational documentation in [README.md](/root/.identitymd/work/d4892c90-b532-4975-b30d-4dfcc3b6da2c/f877c1ba-9d26-4a12-b542-269a0089522d/README.md).\n\nPassed `forge build`, seeded `forge test` (35 reported tests), `forge fmt --check`, and an offline rebuild. Full protected launch integration checks remain for the verifier.","treeHash":"c182c98bd708218e88bbde5215320877960a5075","usage":{"cachedInputTokens":719616,"inputTokens":48926,"model":"gpt-6-astra","outputTokens":15324,"runtime":"codex","turns":5,"wallClockMs":719217}},{"artifacts":[],"attempt":1,"bundleHash":"4dbc0993b900320c526ea6cb16e388f39c3f2eed32a0861b072316262a559f76","device":"c2e167266d13dcf4","findings":[],"hash":"3c99bd6857497b05db74e0448f4c89c30a460adf5734af3392032351778f2dcb","nodeId":"9185363d-f6c9-4123-a8f2-2c6a96de9157","outcome":"completed","summary":"Done. I wrote `launch.json` for the Gotchi Finance launch and it is the only change in the tree.\n\n**What the manifest says**\n\n- Kind is custom_token. The token contract is GotchiToken with name Gotchi Finance, symbol GOTCHI, 18 decimals.\n- Constructor arguments are an empty list. The accepted constructor takes no parameters, confirmed from the compiled ABI.\n- Total supply is 1000000000000000000000000000 minor units, exactly the INITIAL_SUPPLY constant minted once to msg.sender.\n- Contracts is an empty list. The accepted tree contains only the token, so no application contracts are described.\n- Pool is IMD at 0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7, fee 12500, tick spacing 60, and the one-to-one provenance price from the reference.\n- Economics is the requester's object copied verbatim.\n- Notes describe the token's behavior in 1,293 characters, within the 4,000 limit.\n\n**Verification**\n\n- `forge build` compiled cleanly.\n- `forge test` with the verifier's fuzz seed passed all 35 tests across both suites.\n- A JSON check confirmed only the six schema keys are present and the supply string equals 10^27.\n- `git status` shows launch.json as the only new or changed file.","treeHash":"fd930b60515c25a125c5eeafc095957ee67606c3","usage":{"cachedInputTokens":185735,"inputTokens":130,"model":"claude-fable-5-1","outputTokens":2892,"runtime":"claude","turns":9,"wallClockMs":47293}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"bcb8a3f211778fd6","findings":[],"hash":"6321aff06bb49fb8625dc31779296919c1048d4d95fcaeb9b6d297aa0faaa4ff","nodeId":"bad53e6d-b6a0-4f53-b819-4c387b15c282","outcome":"completed","summary":"The review is complete and `.imd-findings.json` holds the result: no defects, with a coverage row for every entry point.\n\n**What I reviewed.** The token is a 17-line contract on the unmodified OpenZeppelin v5.0.2 ERC-20, with one constructor mint of the full supply to `msg.sender` and no constructor arguments. I checked it against the Access Control, Trust Gap and Asymmetry guides and the Senior Auditor's Mindset section. The vendored OpenZeppelin files match the digests in DEPENDENCIES.json, and Context.sol returns plain `msg.sender`, so there is no meta-transaction path.\n\n**What held, with evidence.**\n- **Access control.** The compiled ABI exposes only approve, transfer and transferFrom as state-changing calls. There is no owner, minter, pauser, blacklist, initializer, receive or fallback. A scratch probe confirmed the deployer contract, the deployment's `tx.origin` and a stranger all fail to pull a holder's balance, that a caller can only write their own allowance row, and that ETH or unknown selectors sent to the token revert.\n- **Asymmetry.** transfer and transferFrom route through the same `_update` and move identical amounts for identical inputs under fuzzing. Finite allowances decrement exactly and the max allowance stays unchanged. transferFrom does not emit Approval, which is OpenZeppelin v5 behavior and is documented in the README.\n- **Trust gap.** With no privileged actor, no fee recipient, no price formula and no caller-class branch, none of the four seams in the guide has an actor or primitive to exploit.\n- **Launch floor.** No transfer hook or exemption list exists, so the factory, distributor and PoolManager flows move exactly what they request. The creation bytecode carries no metadata hash, and the runtime has no DELEGATECALL, CALLCODE or SELFDESTRUCT.\n\n**Trust assumption to record.** Whoever deploys the token receives the entire supply. Under the factory's CREATE2 launch that is the factory, as intended. A direct EOA deployment would put the supply in that EOA instead.\n\n**Not run.** The protected Uniswap v4 seed-and-swap harness needs the factory and v4 sources, which are not in this repository. Since the token has no transfer rules, nothing in it can tax or block those flows, but that harness remains the launch process's check.\n\nThe project's own 35 tests pass with the verifier's fuzz seed. I removed my scratch probe file and changed nothing else in the tree.","treeHash":null,"usage":{"cachedInputTokens":518632,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":11876,"runtime":"claude","turns":24,"wallClockMs":176548}},{"artifacts":[],"attempt":1,"bundleHash":"f1f70a7705c7771701f5d8282c12b000f6999b17472c70159b8d62115c7fce03","device":"589ef002581a5371","findings":[],"hash":"636d48df4b5505a1daaedc98d61a03f3d25b3c2d260913d8bed63951e8fac2c5","nodeId":"b948db6e-a2ab-4479-938a-b4652b1633e2","outcome":"completed","summary":"Done. The full suite passes with the verifier's seed, and no defects were found in the token.\n\n| Suite | Tests | Result |\n| --- | --- | --- |\n| Existing unit and fuzz suite | 34 | pass |\n| New edge and failure-path suite | 35 | pass |\n| Existing fixed-actor invariants | 1 contract, 8,192 calls | pass |\n| New open-address invariants | 1 contract, 12,288 calls | pass |\n\n**What I added**, in two new files only, building on the prior contributor's work rather than rewriting it:\n\n- `test/GotchiToken.edges.t.sol` covers the failure paths the first suite skipped. The zero address as sender, approver, and spender, including the subtle case where a zero-amount pull from the zero address passes the allowance check and is refused only on the allowance write-back. ETH sent to the token, deployment with value attached, and unknown selectors are all rejected. It pins exact allowance boundaries one wei either side, infinite versus max-minus-one allowances, event discipline on every call including that transferFrom emits no Approval, a launch distribution performed inside one creation transaction, and independence between deployments.\n- `test/GotchiToken.open.invariant.t.sol` is a second invariant suite where the fuzzer picks the holders rather than a fixed cast. A handler keeps a ghost ledger of received and sent per address, an enumerable set of every holder, and an allowance book per pair. It drives full-amount, dust, and infinite-allowance stress variants, eight deliberate rejection paths that must revert with the exact error, time and block advancement, and privileged-call probes from both the deployer and a stranger. Run counts are set with inline config so foundry.toml is untouched.\n\n**Grounding the invariants.** Before trusting them I ran the same handler against three broken tokens in test/scratch: a one-wei burn on transfer, a public mint, and an infinite allowance treated as finite. The first two failed immediately. The third passed, which exposed a vacuous path: a random uint256 never lands on the maximum, so the unlimited-allowance branch was never exercised. I added an explicit infinite-approval handler and the mutation then failed on the allowance book. The scratch files are removed.\n\n**No findings to report.** The implementation is a plain OpenZeppelin v5.0.2 ERC-20 with one constructor mint, no admin surface, and no forbidden opcodes. Nothing I probed behaved incorrectly, so there is no .imd-findings.json. The two new files are left uncommitted in the working tree under the permitted test path for the submission step to pick up.","treeHash":"c1fe95b4f99cbb482494b19aa273de8a6edb25a4","usage":{"cachedInputTokens":1520251,"inputTokens":546,"model":"claude-fable-5-1","outputTokens":36162,"runtime":"claude","turns":35,"wallClockMs":548185}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"30a6c1a419ef4f9c","findings":[],"hash":"b13cb34007b1ff34181b459a51e3a190d168a45e51bfca272ccaa8931ad2a47e","nodeId":"f22f17b7-9e13-4803-bd2b-563269b83409","outcome":"completed","summary":"The review is complete and the result is clean. The findings record is written to `.imd-findings.json` with an empty findings list and seven coverage rows, and the working tree is otherwise unchanged.\n\n**What I reviewed.** The token is a 17-line contract inheriting the vendored OpenZeppelin v5.0.2 ERC20 with one constructor mint of 10^27 units to msg.sender. I applied the Senior Auditor's Mindset and the three assigned guides, plus the deployment-phase and token-behaviour items from the x-ray reference and the entry-point inventory from the Trail of Bits reference.\n\n**Execution Trace.** I traced all three state-changing entry points from caller to final state. Each path either moves exactly the stated amount or reverts atomically with no partial update. There are no external calls, callbacks, sentinel paths, value paths, or stale reads. The factory-style deploy-then-distribute in one call moves exactly ten, eighty and ten percent with nothing left behind.\n\n**Periphery.** Every vendored OpenZeppelin file hashes identically to the digest recorded in DEPENDENCIES.json and to the upstream raw file at tag v5.0.2 fetched during the review. The base contract is unmodified and its storage layout is standard.\n\n**First Principles.** The constructor's only assumption is that msg.sender is the intended recipient, which holds under CREATE2 from the factory and ignores tx.origin. The compiled ABI exposes ten functions: the three listed entry points and seven views. There is no receive, fallback, mint, burn, owner or admin selector, and the runtime contains no DELEGATECALL, CALLCODE, SELFDESTRUCT, CALL, STATICCALL, CREATE or CREATE2.\n\n**Checks run.** The project's own 35 tests pass under the verifier's fuzz seed, including the 8,192-call stateful suite. My scratch tests covering the edge cases the suite omits also pass and were removed afterward. The static-analysis lead about the large numeric literal is a style note on the supply constant and is not a defect.\n\n**Trust assumptions.** None. There are no privileged roles. The inherent ERC-20 approval race and unrecoverable tokens sent to the contract itself are standard-interface properties already documented in the README, not defects in this code.\n\n**Not reached.** The protected launch harness that seeds a real Uniswap v4 pool depends on infrastructure outside this tree and was not run; the token-side transfers it relies on were verified directly.","treeHash":null,"usage":{"cachedInputTokens":790351,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":13217,"runtime":"claude","turns":32,"wallClockMs":197108}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"11e4593175677f7e","findings":[{"citation":"resolved","description":"DEPENDENCIES.json records a SHA-256 digest for every vendored file and README.md line 165 states 'Vendored source files are unmodified.' All six OpenZeppelin v5.0.2 files match their recorded digests, but seven forge-std v1.9.7 files in lib/forge-std do not: src/StdAssertions.sol, src/StdJson.sol, src/StdToml.sol, src/Vm.sol, src/console.sol, src/interfaces/IERC7540.sol and src/interfaces/IMulticall3.sol. I downloaded the upstream v1.9.7 archive (its SHA-256 45157353ab49eab01d294565866731e599b32401757229689ee459aa26b7ee94 matches the recorded archiveSha256) and compared: the recorded digests are the genuine upstream ones, and the files on disk were reformatted (forge fmt line reflow) after vendoring. With all whitespace stripped the seven files are byte-identical to upstream, so the test dependency is semantically unchanged and this has no effect on the deployed token bytecode or on test behaviour. It is a provenance defect: the shipped digest record and the README claim both fail verification, and anyone checking dependency integrity as the README invites gets seven mismatches. Fix: restore the upstream bytes of the seven files (and add lib/ to the fmt ignore list so forge fmt does not rewrite them), or regenerate filesSha256 from the tree and drop the 'unmodified' claim.","line":41,"path":"DEPENDENCIES.json","reproduction":"From the repository root run: sha256sum lib/forge-std/src/Vm.sol. Expected (DEPENDENCIES.json line 41): 9068805b59ac1d0ea03a8fa1f15ae49c094e0c6c852a2500e0dd112f264b2cb1. Actual: a1b1c82924aecf0f38b53192fd1e801cccc1e1fd2ecd6b2301e4f4c4ab102a15. Likewise src/StdAssertions.sol (line 28) expected d4c89eec... actual 3fbf4a02...; src/console.sol (line 42) expected 896c5a5a... actual a2e632dc...; src/StdJson.sol, src/StdToml.sol, src/interfaces/IERC7540.sol, src/interfaces/IMulticall3.sol also differ. diff against the extracted upstream v1.9.7 archive shows only line wrapping differences (e.g. Vm.sol upstream lines 827-830 split 'function getDeployment(...) external view returns (address deployedAddress);' over four lines; the vendored copy has it on one line).","severity":"low","snippet":"      \"src/Vm.sol\": \"9068805b59ac1d0ea03a8fa1f15ae49c094e0c6c852a2500e0dd112f264b2cb1\",","title":"DEPENDENCIES.json per-file digests do not match seven vendored forge-std files (README claims vendored sources are unmodified)"}],"hash":"f91b747fc6c388d29ab87a77d0e871e9504d1da4b28e0e43bd721c7e88907581","nodeId":"25cd318d-5eae-43f0-92b5-88e789b52b81","outcome":"completed","summary":"The review is complete. The findings file is valid, the snippet anchors to the tree, and the working tree has no stray files.\n\n**Outcome:** the token is sound. All four specialists reported nothing, and I reproduced nothing against the contract itself. I found one low-severity provenance defect they missed, recorded in `.imd-findings.json` with full coverage of the three entry points.\n\n**What I verified**\n\n- **Token code.** `src/GotchiToken.sol` is a bare OpenZeppelin v5.0.2 ERC-20 whose constructor mints 10^27 units to msg.sender. The compiled ABI has only approve, transfer and transferFrom as state-changing functions, no receive or fallback, no mint, burn, owner, pause or upgrade path. All six vendored OpenZeppelin files match their recorded upstream digests, so the traced behaviour of the three entry points is the known library behaviour. Each is marked `holds`.\n- **Deployability.** Creation code is 2,645 bytes and runtime 1,752 bytes, well under the limits. A byte scan found no DELEGATECALL, CALLCODE or SELFDESTRUCT. The constructor takes no arguments and the manifest's constructorArgs is empty, so the factory's CREATE2 deployment works.\n- **Manifest.** launch.json uses only schema keys, lowercase addresses, strings for uint fields, numbers for fee, tickSpacing and decimals, a 1,293-character notes field, and a totalSupply that equals the constant minted.\n- **Tests and tooling.** The build is clean, the seeded suite passes all 71 tests, and the formatter check passes. The aderyn \"large numeric literal\" lead is a compile-time constant that tests confirm equals 10^27, so it is not a defect.\n\n**The one finding (low).** DEPENDENCIES.json records per-file SHA-256 digests and the README states the vendored sources are unmodified. Seven forge-std files on disk fail that check. I downloaded the upstream v1.9.7 archive, whose digest matches the recorded one, and compared: the files were reformatted after vendoring and are byte-identical to upstream once whitespace is stripped. This is test-only and does not affect the deployed bytecode, but the shipped provenance record is verifiably wrong. The fix is to restore the upstream bytes or regenerate the digests.\n\nNo proof test was written, since nothing at critical or high severity exists. Nothing under test/scratch was created and no repository file other than the findings output was touched.","treeHash":null,"usage":{"cachedInputTokens":573690,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":12053,"runtime":"claude","turns":19,"wallClockMs":178594}}],"verification":[{"checks":[{"durationMs":1191,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.12s\nCompiler run successful!\n","passed":true},{"durationMs":2145,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 34 tests for test/GotchiToken.t.sol:GotchiTokenTest\n[PASS] testFuzz_approveEmitsEventAndReplacesAllowance(uint256,uint256) (runs: 1024, μ: 119439, ~: 119571)\n[PASS] testFuzz_create2DeploymentCreditsFactory(bytes32) (runs: 1024, μ: 315005, ~: 315117)\n[PASS] testFuzz_finiteAllowanceCanBeSpentExactlyOnce(uint256) (runs: 1024, μ: 186301, ~: 186088)\nLogs:\n  Bound result 607043891711610406384714856\n\n[PASS] testFuzz_selfTransferPreservesBalance(uint256) (runs: 1024, μ: 55065, ~: 54811)\nLogs:\n  Bound result 1\n\n[PASS] testFuzz_transferAboveBalanceRevertsWithoutChangingBalances(uint256,uint256) (runs: 1024, μ: 137299, ~: 137582)\nLogs:\n  Bound result 95\n  Bound result 127\n\n[PASS] testFuzz_transferFromAboveAllowanceReverts(uint256) (runs: 1024, μ: 119334, ~: 119492)\nLogs:\n  Bound result 999999999999999999999999999\n\n[PASS] testFuzz_transferRoundTripConservesSupply(uint256) (runs: 1024, μ: 148504, ~: 148526)\nLogs:\n  Bound result 239306391377225378564377876\n\n[PASS] test_approvalCannotBeUsedByAnotherSpender() (gas: 105216)\n[PASS] test_approveDoesNotRequireTokens() (gas: 78302)\n[PASS] test_approveZeroAddressReverts() (gas: 30365)\n[PASS] test_constructorEmitsMintTransfer() (gas: 5580)\n[PASS] test_deployerCannotSpendHolderTokensWithoutApproval() (gas: 158080)\n[PASS] test_directDeploymentCreditsTheCreatingAccount() (gas: 28201)\n[PASS] test_factoryGetsAllSupplyWithoutCallingExternalContracts() (gas: 345297)\n[PASS] test_infiniteAllowanceRemainsUnchangedAcrossTransfers() (gas: 225052)\n[PASS] test_launchDistributionClaimsAndPoolTransfersAreExact() (gas: 685308)\n[PASS] test_metadataAndInitialSupply() (gas: 107561)\n[PASS] test_noMintBurnAdminOrUpgradeEntrypoints() (gas: 1631694)\n[PASS] test_revokedAllowanceCannotBeSpent() (gas: 142873)\n[PASS] test_runtimeHasNoForbiddenOpcodesAndFitsDeploymentLimit() (gas: 2259500)\n[PASS] test_selfTransferStillRequiresSufficientBalance() (gas: 35886)\n[PASS] test_supplyRemainsFixedOverTime() (gas: 142110)\n[PASS] test_transferEmitsEventAndDeliversExactAmount() (gas: 91550)\n[PASS] test_transferEntireSupply() (gas: 161663)\n[PASS] test_transferFromAboveBalanceRollsBackAllowance() (gas: 188845)\n[PASS] test_transferFromByHolderStillRequiresAllowance() (gas: 42595)\n[PASS] test_transferFromEmitsTransferAndConsumesFiniteAllowance() (gas: 162095)\n[PASS] test_transferFromToSameAccountConsumesAllowanceWithoutMovingBalance() (gas: 119961)\n[PASS] test_transferFromToZeroRollsBackAllowance() (gas: 124622)\n[PASS] test_transferToContractDoesNotCallReceiver() (gas: 171755)\n[PASS] test_transferToZeroReverts() (gas: 47653)\n[PASS] test_zeroTransferFromEmptyAccountSucceedsAndEmitsEvent() (gas: 73376)\n[PASS] test_zeroTransferFromWithoutAllowanceSucceeds() (gas: 81425)\n[PASS] test_zeroTransferToZeroReverts() (gas: 30456)\nSuite result: ok. 34 passed; 0 failed; 0 skipped; finished in 53.36ms (396.02ms CPU time)\n\nRan 1 test for test/GotchiToken.invariant.t.sol:GotchiTokenInvariantTest\n[PASS]\nGotchiTokenInvariantTest invariants:\n[PASS] invariant_allowancesAgreeWithIndependentLedger\n[PASS] invariant_noSupplyLeaksOutsideHolders\n[PASS] invariant_supplyAndBalancesAgreeWithIndependentLedger\n GotchiTokenInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------+-----------------------+-------+---------+----------╮\n| Contract      | Selector              | Calls | Reverts | Discards |\n+====================================================================+\n| GotchiHandler | approve               | 1677  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| GotchiHandler | insufficientAllowance | 1672  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| GotchiHandler | insufficientBalance   | 1604  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| GotchiHandler | transfer              | 1646  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| GotchiHandler | transferFrom          | 1593  | 0       | 0        |\n╰---------------+-----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 404098524\n  Bound result 0\n  Bound result 0\n  Bound result 3939\n  Bound result 442\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 0\n  Bound result 3196\n  Bound result 972\n  Bound result 0\n  Bound result 6459\n  Bound result 25000000000000000000\n  Bound result 0\n  Bound result 3000000000000000000\n  Bound result 1000000000000000000000000000\n  Bound result 521\n  Bound result 626\n  Bound result 3689\n  Bound result 40000000000000000000\n  Bound result 0\n  Bound result 6418\n  Bound result 1000000000000000000000000000\n  Bound result 0\n  Bound result 12\n  Bound result 2954\n  Bound result 0\n  Bound result 244\n  Bound result 0\n  Bound result 18\n  Bound result 0\n  Bound result 1000000000000000000000000000\n  Bound result 1\n  Bound result 18\n  Bound result 1000000000\n  Bound result 592\n  Bound result 10000000000000000000\n  Bound result 9999999999999996742\n  Bound result 244\n  Bound result 45\n  Bound result 4064226877056368933153\n  Bound result 3494\n  Bound result 165\n  Bound result 6634\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.04s (2.04s CPU time)\n\nRan 2 test suites in 2.05s (2.10s CPU time): 35 tests passed, 0 failed, 0 skipped (35 total tests)\n","passed":true},{"durationMs":44,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"GotchiToken.approve(address,uint256)\",\"GotchiToken.transfer(address,uint256)\",\"GotchiToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":5,\"DEPENDENCIES.json\":56,\"README.md\":165,\"foundry.toml\":20,\"remappings.txt\":3,\"src/GotchiToken.sol\":18,\"test/GotchiToken.invariant.t.sol\":125,\"test/GotchiToken.t.sol\":444},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":445,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":412,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/GotchiToken.sol:12: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"396ee5a11948c8f2a19dfc9c7b457b7325424c53c00102f48c8c5ae962b8ddde","verifiedTreeHash":"c182c98bd708218e88bbde5215320877960a5075","verifierVersion":"0.1.0+8fbf00a5"},{"checks":[{"durationMs":1051,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 981.42ms\nCompiler run successful!\n","passed":true},{"durationMs":1881,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 34 tests for test/GotchiToken.t.sol:GotchiTokenTest\n[PASS] testFuzz_approveEmitsEventAndReplacesAllowance(uint256,uint256) (runs: 1024, μ: 119439, ~: 119571)\n[PASS] testFuzz_create2DeploymentCreditsFactory(bytes32) (runs: 1024, μ: 315005, ~: 315117)\n[PASS] testFuzz_finiteAllowanceCanBeSpentExactlyOnce(uint256) (runs: 1024, μ: 186301, ~: 186088)\nLogs:\n  Bound result 1000000000000000000000000000\n\n[PASS] testFuzz_selfTransferPreservesBalance(uint256) (runs: 1024, μ: 55065, ~: 54811)\nLogs:\n  Bound result 1\n\n[PASS] testFuzz_transferAboveBalanceRevertsWithoutChangingBalances(uint256,uint256) (runs: 1024, μ: 137299, ~: 137582)\nLogs:\n  Bound result 14317\n  Bound result 1\n\n[PASS] testFuzz_transferFromAboveAllowanceReverts(uint256) (runs: 1024, μ: 119334, ~: 119492)\nLogs:\n  Bound result 15\n\n[PASS] testFuzz_transferRoundTripConservesSupply(uint256) (runs: 1024, μ: 148504, ~: 148526)\nLogs:\n  Bound result 1000000000000000000000000000\n\n[PASS] test_approvalCannotBeUsedByAnotherSpender() (gas: 105216)\n[PASS] test_approveDoesNotRequireTokens() (gas: 78302)\n[PASS] test_approveZeroAddressReverts() (gas: 30365)\n[PASS] test_constructorEmitsMintTransfer() (gas: 5580)\n[PASS] test_deployerCannotSpendHolderTokensWithoutApproval() (gas: 158080)\n[PASS] test_directDeploymentCreditsTheCreatingAccount() (gas: 28201)\n[PASS] test_factoryGetsAllSupplyWithoutCallingExternalContracts() (gas: 345297)\n[PASS] test_infiniteAllowanceRemainsUnchangedAcrossTransfers() (gas: 225052)\n[PASS] test_launchDistributionClaimsAndPoolTransfersAreExact() (gas: 685308)\n[PASS] test_metadataAndInitialSupply() (gas: 107561)\n[PASS] test_noMintBurnAdminOrUpgradeEntrypoints() (gas: 1631694)\n[PASS] test_revokedAllowanceCannotBeSpent() (gas: 142873)\n[PASS] test_runtimeHasNoForbiddenOpcodesAndFitsDeploymentLimit() (gas: 2259500)\n[PASS] test_selfTransferStillRequiresSufficientBalance() (gas: 35886)\n[PASS] test_supplyRemainsFixedOverTime() (gas: 142110)\n[PASS] test_transferEmitsEventAndDeliversExactAmount() (gas: 91550)\n[PASS] test_transferEntireSupply() (gas: 161663)\n[PASS] test_transferFromAboveBalanceRollsBackAllowance() (gas: 188845)\n[PASS] test_transferFromByHolderStillRequiresAllowance() (gas: 42595)\n[PASS] test_transferFromEmitsTransferAndConsumesFiniteAllowance() (gas: 162095)\n[PASS] test_transferFromToSameAccountConsumesAllowanceWithoutMovingBalance() (gas: 119961)\n[PASS] test_transferFromToZeroRollsBackAllowance() (gas: 124622)\n[PASS] test_transferToContractDoesNotCallReceiver() (gas: 171755)\n[PASS] test_transferToZeroReverts() (gas: 47653)\n[PASS] test_zeroTransferFromEmptyAccountSucceedsAndEmitsEvent() (gas: 73376)\n[PASS] test_zeroTransferFromWithoutAllowanceSucceeds() (gas: 81425)\n[PASS] test_zeroTransferToZeroReverts() (gas: 30456)\nSuite result: ok. 34 passed; 0 failed; 0 skipped; finished in 45.42ms (327.36ms CPU time)\n\nRan 1 test for test/GotchiToken.invariant.t.sol:GotchiTokenInvariantTest\n[PASS]\nGotchiTokenInvariantTest invariants:\n[PASS] invariant_allowancesAgreeWithIndependentLedger\n[PASS] invariant_noSupplyLeaksOutsideHolders\n[PASS] invariant_supplyAndBalancesAgreeWithIndependentLedger\n GotchiTokenInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------+-----------------------+-------+---------+----------╮\n| Contract      | Selector              | Calls | Reverts | Discards |\n+====================================================================+\n| GotchiHandler | approve               | 1677  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| GotchiHandler | insufficientAllowance | 1672  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| GotchiHandler | insufficientBalance   | 1604  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| GotchiHandler | transfer              | 1646  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| GotchiHandler | transferFrom          | 1593  | 0       | 0        |\n╰---------------+-----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 404098524\n  Bound result 0\n  Bound result 0\n  Bound result 3939\n  Bound result 442\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 0\n  Bound result 3196\n  Bound result 972\n  Bound result 0\n  Bound result 6459\n  Bound result 25000000000000000000\n  Bound result 0\n  Bound result 3000000000000000000\n  Bound result 1000000000000000000000000000\n  Bound result 521\n  Bound result 626\n  Bound result 3689\n  Bound result 40000000000000000000\n  Bound result 0\n  Bound result 6418\n  Bound result 1000000000000000000000000000\n  Bound result 0\n  Bound result 12\n  Bound result 2954\n  Bound result 0\n  Bound result 244\n  Bound result 0\n  Bound result 18\n  Bound result 0\n  Bound result 1000000000000000000000000000\n  Bound result 1\n  Bound result 18\n  Bound result 1000000000\n  Bound result 592\n  Bound result 10000000000000000000\n  Bound result 9999999999999996742\n  Bound result 244\n  Bound result 45\n  Bound result 4064226877056368933153\n  Bound result 3494\n  Bound result 165\n  Bound result 6634\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.80s (1.80s CPU time)\n\nRan 2 test suites in 1.81s (1.85s CPU time): 35 tests passed, 0 failed, 0 skipped (35 total tests)\n","passed":true},{"durationMs":27,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"GotchiToken.approve(address,uint256)\",\"GotchiToken.transfer(address,uint256)\",\"GotchiToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":5,\"DEPENDENCIES.json\":56,\"README.md\":165,\"foundry.toml\":20,\"launch.json\":24,\"remappings.txt\":3,\"src/GotchiToken.sol\":18,\"test/GotchiToken.invariant.t.sol\":125,\"test/GotchiToken.t.sol\":444},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"3c99bd6857497b05db74e0448f4c89c30a460adf5734af3392032351778f2dcb","verifiedTreeHash":"fd930b60515c25a125c5eeafc095957ee67606c3","verifierVersion":"0.1.0+8fbf00a5"},{"checks":[{"durationMs":1955,"exitCode":0,"name":"build","output":"Compiling 29 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.88s\nCompiler run successful!\n","passed":true},{"durationMs":3626,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 34 tests for test/GotchiToken.t.sol:GotchiTokenTest\n[PASS] testFuzz_approveEmitsEventAndReplacesAllowance(uint256,uint256) (runs: 1024, μ: 119485, ~: 119571)\n[PASS] testFuzz_create2DeploymentCreditsFactory(bytes32) (runs: 1024, μ: 315010, ~: 315117)\n[PASS] testFuzz_finiteAllowanceCanBeSpentExactlyOnce(uint256) (runs: 1024, μ: 186306, ~: 186112)\nLogs:\n  Bound result 999999999999999999999999999\n\n[PASS] testFuzz_selfTransferPreservesBalance(uint256) (runs: 1024, μ: 55072, ~: 54823)\nLogs:\n  Bound result 1\n\n[PASS] testFuzz_transferAboveBalanceRevertsWithoutChangingBalances(uint256,uint256) (runs: 1024, μ: 137451, ~: 137594)\nLogs:\n  Bound result 127\n  Bound result 127\n\n[PASS] testFuzz_transferFromAboveAllowanceReverts(uint256) (runs: 1024, μ: 119421, ~: 119498)\nLogs:\n  Bound result 1\n\n[PASS] testFuzz_transferRoundTripConservesSupply(uint256) (runs: 1024, μ: 148595, ~: 148550)\nLogs:\n  Bound result 2002530315\n\n[PASS] test_approvalCannotBeUsedByAnotherSpender() (gas: 105216)\n[PASS] test_approveDoesNotRequireTokens() (gas: 78302)\n[PASS] test_approveZeroAddressReverts() (gas: 30365)\n[PASS] test_constructorEmitsMintTransfer() (gas: 5580)\n[PASS] test_deployerCannotSpendHolderTokensWithoutApproval() (gas: 158080)\n[PASS] test_directDeploymentCreditsTheCreatingAccount() (gas: 28201)\n[PASS] test_factoryGetsAllSupplyWithoutCallingExternalContracts() (gas: 345297)\n[PASS] test_infiniteAllowanceRemainsUnchangedAcrossTransfers() (gas: 225052)\n[PASS] test_launchDistributionClaimsAndPoolTransfersAreExact() (gas: 685308)\n[PASS] test_metadataAndInitialSupply() (gas: 107561)\n[PASS] test_noMintBurnAdminOrUpgradeEntrypoints() (gas: 1631694)\n[PASS] test_revokedAllowanceCannotBeSpent() (gas: 142873)\n[PASS] test_runtimeHasNoForbiddenOpcodesAndFitsDeploymentLimit() (gas: 2259500)\n[PASS] test_selfTransferStillRequiresSufficientBalance() (gas: 35886)\n[PASS] test_supplyRemainsFixedOverTime() (gas: 142110)\n[PASS] test_transferEmitsEventAndDeliversExactAmount() (gas: 91550)\n[PASS] test_transferEntireSupply() (gas: 161663)\n[PASS] test_transferFromAboveBalanceRollsBackAllowance() (gas: 188845)\n[PASS] test_transferFromByHolderStillRequiresAllowance() (gas: 42595)\n[PASS] test_transferFromEmitsTransferAndConsumesFiniteAllowance() (gas: 162095)\n[PASS] test_transferFromToSameAccountConsumesAllowanceWithoutMovingBalance() (gas: 119961)\n[PASS] test_transferFromToZeroRollsBackAllowance() (gas: 124622)\n[PASS] test_transferToContractDoesNotCallReceiver() (gas: 171755)\n[PASS] test_transferToZeroReverts() (gas: 47653)\n[PASS] test_zeroTransferFromEmptyAccountSucceedsAndEmitsEvent() (gas: 73376)\n[PASS] test_zeroTransferFromWithoutAllowanceSucceeds() (gas: 81425)\n[PASS] test_zeroTransferToZeroReverts() (gas: 30456)\nSuite result: ok. 34 passed; 0 failed; 0 skipped; finished in 95.63ms (671.68ms CPU time)\n\nRan 35 tests for test/GotchiToken.edges.t.sol:GotchiTokenEdgesTest\n[PASS] testFuzz_approvalsOfDistinctPairsAreIndependent(address,address,address,address,uint256,uint256) (runs: 1024, μ: 141823, ~: 142492)\n[PASS] testFuzz_exactAllowanceAndExactBalanceSucceed(uint256) (runs: 1024, μ: 200197, ~: 200004)\nLogs:\n  Bound result 22304\n\n[PASS] testFuzz_infiniteAllowanceSurvivesAnySpend(uint256) (runs: 1024, μ: 147469, ~: 147594)\nLogs:\n  Bound result 999999999999999999999999999\n\n[PASS] testFuzz_oneWeiShortOfAllowanceFails(uint256) (runs: 1024, μ: 165553, ~: 166027)\nLogs:\n  Bound result 95\n\n[PASS] testFuzz_oneWeiShortOfBalanceFailsWithAllowanceIntact(uint256) (runs: 1024, μ: 183728, ~: 184241)\nLogs:\n  Bound result 999999999999999999999999999\n\n[PASS] testFuzz_splitAndMergeIsLossless(uint256,uint256) (runs: 1024, μ: 227520, ~: 229032)\nLogs:\n  Bound result 127\n  Bound result 127\n\n[PASS] testFuzz_strangerHoldsNothingAndCannotSend(address,uint256) (runs: 1024, μ: 50496, ~: 50364)\nLogs:\n  Bound result 244\n\n[PASS] testFuzz_transferSequenceIsOrderIndependentInTotals(uint256,uint256) (runs: 1024, μ: 306248, ~: 307778)\nLogs:\n  Bound result 31915\n  Bound result 10000000000000000000\n\n[PASS] testFuzz_transferToAnyNonZeroAddressIsExact(address,uint256) (runs: 1024, μ: 116268, ~: 116211)\nLogs:\n  Bound result 25000000000000000000\n\n[PASS] testFuzz_unknownSelectorReverts(bytes4,bytes) (runs: 1024, μ: 48061, ~: 47803)\n[PASS] test_approveEmitsExactlyOneApproval() (gas: 61797)\n[PASS] test_approveFromTheZeroAddressReverts() (gas: 40438)\n[PASS] test_creationCodeTakesNoArgumentsAndDeploysBare() (gas: 724104)\n[PASS] test_delegatedSpendFromTheZeroAddressRevertsOnAllowance() (gas: 55314)\n[PASS] test_delegatedZeroAmountSpendFromTheZeroAddressReverts() (gas: 55175)\n[PASS] test_deploymentWithValueFails() (gas: 275251)\n[PASS] test_failedTransferEmitsNothing() (gas: 39094)\n[PASS] test_independentDeploymentsDoNotShareState() (gas: 187655)\n[PASS] test_infiniteAllowanceStillCannotExceedBalance() (gas: 163031)\n[PASS] test_launchDistributionInsideOneCreationTransaction() (gas: 256067)\n[PASS] test_maxMinusOneAllowanceIsFiniteAndConsumed() (gas: 124424)\n[PASS] test_metadataIsStableAcrossDeploymentsAndTime() (gas: 70315)\n[PASS] test_selfApprovalLetsHolderPullOwnTokensAndIsConsumed() (gas: 159999)\n[PASS] test_supplyPlusOneCannotMoveEvenFromTheFullHolder() (gas: 42383)\n[PASS] test_tokenRejectsEtherOnTransfer() (gas: 42732)\n[PASS] test_tokenRejectsPlainEther() (gas: 40351)\n[PASS] test_tokensSentToTheTokenContractAreStrandedButCounted() (gas: 134510)\n[PASS] test_transferDoesNotTouchAllowances() (gas: 215230)\n[PASS] test_transferEmitsExactlyOneEvent() (gas: 67846)\n[PASS] test_transferFromEmitsOnlyTransferAndNoApproval() (gas: 129179)\n[PASS] test_transferFromTheZeroAddressRevertsBeforeReceiverCheck() (gas: 30783)\n[PASS] test_transferFromTheZeroAddressRevertsEvenForZeroAmount() (gas: 50337)\n[PASS] test_transferOfMaxUint256Reverts() (gas: 35641)\n[PASS] test_transferToPrecompileAddressSucceeds() (gas: 65476)\n[PASS] test_zeroAddressSpenderCannotPullEvenZero() (gas: 42925)\nSuite result: ok. 35 passed; 0 failed; 0 skipped; finished in 95.78ms (942.47ms CPU time)\n\nRan 1 test for test/GotchiToken.invariant.t.sol:GotchiTokenInvariantTest\n[PASS]\nGotchiTokenInvariantTest invariants:\n[PASS] invariant_allowancesAgreeWithIndependentLedger\n[PASS] invariant_noSupplyLeaksOutsideHolders\n[PASS] invariant_supplyAndBalancesAgreeWithIndependentLedger\n GotchiTokenInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------+-----------------------+-------+---------+----------╮\n| Contract      | Selector              | Calls | Reverts | Discards |\n+====================================================================+\n| GotchiHandler | approve               | 1677  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| GotchiHandler | insufficientAllowance | 1672  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| GotchiHandler | insufficientBalance   | 1604  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| GotchiHandler | transfer              | 1646  | 0       | 0        |\n|---------------+-----------------------+-------+---------+----------|\n| GotchiHandler | transferFrom          | 1593  | 0       | 0        |\n╰---------------+-----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 404098524\n  Bound result 0\n  Bound result 0\n  Bound result 3939\n  Bound result 442\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 0\n  Bound result 3196\n  Bound result 0\n  Bound result 13\n  Bound result 6638\n  Bound result 40000000000000000000\n  Bound result 0\n  Bound result 4\n  Bound result 1000000000\n  Bound result 728\n  Bound result 626\n  Bound result 3689\n  Bound result 9000000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 1000000000000000000000000000\n  Bound result 0\n  Bound result 7\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 8\n  Bound result 0\n  Bound result 0\n  Bound result 2\n  Bound result 0\n  Bound result 7370\n  Bound result 1000000000000000000\n  Bound result 4\n  Bound result 0\n  Bound result 0\n  Bound result 244\n  Bound result 6600\n  Bound result 4064226877056368933153\n  Bound result 3726\n  Bound result 76\n  Bound result 10\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.08s (2.08s CPU time)\n\nRan 1 test for test/GotchiToken.open.invariant.t.sol:GotchiTokenOpenInvariantTest\n[PASS]\nGotchiTokenOpenInvariantTest invariants:\n[PASS] invariant_everyAllowanceMatchesTheGhostBook\n[PASS] invariant_everyBalanceMatchesTheGhostLedger\n[PASS] invariant_supplyIsTheSumOverEveryHolder\n[PASS] invariant_volumeAccountingIsConsistent\n[PASS] invariant_zeroAddressHoldsNothingAndTokensOnlyArriveByTransfer\n GotchiTokenOpenInvariantTest invariants (runs: 256, calls: 12288, reverts: 0)\n\n╭-------------------+-------------------------------+-------+---------+----------╮\n| Contract          | Selector                      | Calls | Reverts | Discards |\n+================================================================================+\n| OpenGotchiHandler | advanceTime                   | 732   | 0       | 0        |\n|-------------------+-------------------------------+-------+---------+----------|\n| OpenGotchiHandler | approve                       | 755   | 0       | 0        |\n|-------------------+-------------------------------+-------+---------+----------|\n| OpenGotchiHandler | approveInfinite               | 751   | 0       | 0        |\n|-------------------+-------------------------------+-------+---------+----------|\n| OpenGotchiHandler | rejectApproveZeroSpender      | 796   | 0       | 0        |\n|-------------------+-------------------------------+-------+---------+----------|\n| OpenGotchiHandler | rejectOverAllowance           | 775   | 0       | 0        |\n|-------------------+-------------------------------+-------+---------+----------|\n| OpenGotchiHandler | rejectOverBalanceViaAllowance | 771   | 0       | 0        |\n|-------------------+-------------------------------+-------+---------+----------|\n| OpenGotchiHandler | rejectOverspend               | 823   | 0       | 0        |\n|-------------------+-------------------------------+-------+---------+----------|\n| OpenGotchiHandler | rejectPrivilegedCall          | 759   | 0       | 0        |\n|-------------------+-------------------------------+-------+---------+----------|\n| OpenGotchiHandler | rejectPullFromZeroOwner       | 745   | 0       | 0        |\n|-------------------+-------------------------------+-------+---------+----------|\n| OpenGotchiHandler | rejectTransferFromZeroSender  | 761   | 0       | 0        |\n|-------------------+-------------------------------+-------+---------+----------|\n| OpenGotchiHandler | rejectTransferToZero          | 768   | 0       | 0        |\n|-------------------+-------------------------------+-------+---------+----------|\n| OpenGotchiHandler | transfer                      | 741   | 0       | 0        |\n|-------------------+-------------------------------+-------+---------+----------|\n| OpenGotchiHandler | transferAll                   | 778   | 0       | 0        |\n|-------------------+-------------------------------+-------+---------+----------|\n| OpenGotchiHandler | transferDust                  | 795   | 0       | 0        |\n|-------------------+-------------------------------+-------+---------+----------|\n| OpenGotchiHandler | transferFrom                  | 801   | 0       | 0        |\n|-------------------+-------------------------------+-------+---------+----------|\n| OpenGotchiHandler | transferFromAll               | 737   | 0       | 0        |\n╰-------------------+-------------------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 1304686194950601738271430785658212001959386368710895\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639933\n  Bound result 6734\n  Bound result 0\n  Bound result 10510\n  Bound result 5\n  Bound result 0\n  Bound result 0\n  Bound result 18\n  Bound result 2445296403583223935\n  Bound result 937\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 123000000000000000000\n  Bound result 24\n  Bound result 2\n  Bound result 9038\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.53s (3.53s CPU time)\n\nRan 4 test suites in 3.53s (5.80s CPU time): 71 tests passed, 0 failed, 0 skipped (71 total tests)\n","passed":true},{"durationMs":43,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"GotchiToken.approve(address,uint256)\",\"GotchiToken.transfer(address,uint256)\",\"GotchiToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":5,\"DEPENDENCIES.json\":56,\"README.md\":165,\"foundry.toml\":20,\"remappings.txt\":3,\"src/GotchiToken.sol\":18,\"test/GotchiToken.edges.t.sol\":485,\"test/GotchiToken.invariant.t.sol\":125,\"test/GotchiToken.open.invariant.t.sol\":420,\"test/GotchiToken.t.sol\":444},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"636d48df4b5505a1daaedc98d61a03f3d25b3c2d260913d8bed63951e8fac2c5","verifiedTreeHash":"c1fe95b4f99cbb482494b19aa273de8a6edb25a4","verifierVersion":"0.1.0+8fbf00a5"}]}