{"assessments":[],"deployments":[{"attestationHash":"7579910ec2aa372557df34a98f593e7b7debdac493ab6ceba5dc6113edeb5014","chainId":1,"contracts":[{"address":"0x875ab0db598b2bd21cb510b5a9514e7cc814271c","blockNumber":26407403,"name":"GODSToken","role":"token","txHash":"0xbee9925fcfe8ab324be06dcb00d28f89a390219086e8c7490bf90e400a9a9a3f"},{"address":"0x863924715d098707bc6e9b7d1c835826f3426b5e","blockNumber":26407403,"name":"MerkleDistributor","role":"distributor","txHash":"0xbee9925fcfe8ab324be06dcb00d28f89a390219086e8c7490bf90e400a9a9a3f"},{"address":"0x784ff9a3ac5d88a30bfff6f7f2a270161fbe6000","blockNumber":26407403,"name":"PoolInitializationGuard","role":"hook","txHash":"0xbee9925fcfe8ab324be06dcb00d28f89a390219086e8c7490bf90e400a9a9a3f"}],"id":"b62f54aa-6ad0-42a7-8bd0-9b92ea40af54","manifestHash":"3d1960310ea04cac80692d04da722b8c88f7db44fc19a3997ceead9c8fdee5c2","status":"live"}],"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":"ada5793a-5c73-4471-8d72-85315c23c995","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"e160c749bbe1c4f5ba2ed93a23aaa8de1d8480b7736d9f25c2be595a5e170170","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","subagents":3,"tools":[]},"key":"audit_economics","kind":"code","role":"review","skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"4f81f42a342bd2eeb88f6d485ed94c7902da84191cb974257080693b17457b19","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","subagents":3,"tools":[]},"key":"audit_flow","kind":"code","role":"review","skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"a117e1a397cf4aa7fe5340600f61d2cda820cbed240a95f170668d943180525c","dependsOn":["build_contract_project","write_foundry_tests","manifest","audit_math","audit_permissions","audit_economics","audit_flow"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"b89279670f5a00f5d26286edee00c97dd158b997031350a01cafe6e0329ad227","skillId":"audit-judge","subagents":4,"tools":[]},"key":"audit_judge","kind":"code","role":"review","skillHash":"b89279670f5a00f5d26286edee00c97dd158b997031350a01cafe6e0329ad227","skillId":"audit-judge","state":"accepted"},{"acceptedSubmissionHash":"0a4ea01911398fe9d124ed1040b9934bfcaa993302fa542a8905c9e668a50e58","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","subagents":3,"tools":[]},"key":"audit_math","kind":"code","role":"review","skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"39acdbed5190993caa4e0b717a74d4e3324a785d1488fa1208f214161276adcd","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","subagents":3,"tools":[]},"key":"audit_permissions","kind":"code","role":"review","skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"e95d6c731fd54f08ce474452f53f4b84d53ab9343de54ce53003e350b15ce7fb","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"15b04fc8f60521936b9e2b37c09a804685ec689fc98cd5b04510d986d3106a15","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"15b04fc8f60521936b9e2b37c09a804685ec689fc98cd5b04510d986d3106a15","skillId":"build-contract-project","state":"accepted"},{"acceptedSubmissionHash":"4be03bc79dc4301b500c840e6a191fd676495e0e2f2a368696829c193a2a2352","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"b0a396072a2b7cbc77372ec4e5cbf99416cdab51f99394ad38c772bd5f4be292","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"1ddb4d02eb75e52d5f38cfd5c9bb54f332687b81929c68880cf1e8a6ab27254d","skillId":"write-foundry-tests","subagents":4,"tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"1ddb4d02eb75e52d5f38cfd5c9bb54f332687b81929c68880cf1e8a6ab27254d","skillId":"write-foundry-tests","state":"accepted"}],"objective":"A custom token: GODS OF IMD (GODS).\nToken name: GODS OF IMD\nToken symbol: GODS\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.","parentJobId":null,"planHash":"1af2cf047c21116c9f7c2450fd573100b057d5593cffcb28d59e13b4b718463f","previousHash":"1ed502431e8c626a997435deb94b8cd44eb8eb64c415996a25fb26ef3675ee6d","projectId":"ada5793a-5c73-4471-8d72-85315c23c995","publication":{"commit":"364e8336f7c8d240cd635887464c360cbdeb5f84","deliveredAt":"2026-11-13T17:00:44.004Z","repoUrl":"https://github.com/identity-md-launches/launch-3261-gods-of-imd"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[],"site":null,"snapshotHash":"6ef18ef436de257e68c6663babb144a53e9441945167d227397de34b0b272fef","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"7cb215928f3c9473","findings":[],"hash":"0a4ea01911398fe9d124ed1040b9934bfcaa993302fa542a8905c9e668a50e58","nodeId":"bf436cba-43a0-48f5-85e1-683a56765f99","outcome":"completed","summary":"I found no defects in the math area. `.imd-findings.json` has an empty findings list and five coverage rows, all `holds`.\n\n**What I reviewed:** `src/GODSToken.sol` plus the OpenZeppelin v5.1.0 ERC20 code it uses. I went through it against the Math Precision, Boundary and Numerical Gap guides. The existing test suite passed: 31 tests, including an invariant run of 8,192 calls with no reverts.\n\n- **Supply:** `INITIAL_SUPPLY = 1_000_000_000 * 10 ** 18` comes to exactly 1e27, minted once to `msg.sender` in the constructor. `decimals()` returns 18. Nothing can mint or burn after deployment. The aderyn \"large numeric literal\" warning is about style only, and the value is correct.\n- **`transfer` / `transferFrom`:** the balance check runs before the unchecked subtraction. The unchecked addition can't overflow because the supply is fixed at 1e27, far below the uint256 limit. I checked the edge cases: a transfer of 0, a transfer of the full balance, a transfer to yourself, and sending to the zero address (which reverts).\n- **Allowances:** the allowance is checked before the unchecked subtraction. An allowance of `type(uint256).max` is treated as unlimited and never goes down, which is the intended behaviour.\n- **Precision:** the token has no fees, divisions or rounding, so there is nothing to lose to precision. Tokens leave one balance and enter another in equal amounts, so the balances always add up to the total supply.\n\n**One thing outside my area:** 20 of the 27 vendored library files in `lib/` don't match the sha256 values recorded in `DEPENDENCIES.json`. That includes `ERC20.sol`, `Context.sol`, `draft-IERC6093.sol` and most of the forge-std files. I read the `ERC20.sol` logic and it behaves like upstream v5.1.0. The likely cause is whitespace normalisation when the files were installed, but I didn't confirm that. I didn't report it as a finding because I couldn't show it causes a defect. Whoever handles provenance should recompute the hashes.\n\nI changed no project files. `git status` shows nothing, so the findings file is probably gitignored.","treeHash":null,"usage":{"cachedInputTokens":168248,"cost":{"source":"runtime","usdMicros":296578},"inputTokens":12,"model":"claude-opus-5-5","outputTokens":2740,"runtime":"claude","turns":6,"wallClockMs":39408}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"1b657df861f7b08b","findings":[{"citation":"resolved","description":"DEPENDENCIES.json line 3 states that its hashes 'describe the delivered files', and README.md ('Dependencies') repeats that the file lists 'SHA-256 hashes of the delivered dependency files'. For 19 of the 24 listed files the recorded hash matches neither the delivered file nor the upstream raw file at the recorded source URL. Example: the entry for lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol records b6106804...0cb8; the delivered file hashes to 03c87583...80a6 and upstream v5.1.0 hashes to be0df7e4...cf64 (the delivered copy differs from upstream only by two removed blank lines). The entry for lib/openzeppelin-contracts/contracts/utils/Context.sol (line 38) records b6a6a7b3...e6dc while the delivered file is byte-identical to upstream and hashes to 847fda54...c5b6. The same holds for draft-IERC6093.sol and 16 forge-std files. Only LICENSE, IERC20.sol, IERC20Metadata.sol, StdMath.sol, Test.sol and console2.sol match. I verified separately (diff -w -B against raw.githubusercontent.com v5.1.0) that every vendored OpenZeppelin source is semantically identical to upstream, so this is a provenance/documentation defect with no effect on the token's permissions or bytecode. It does defeat the stated purpose of the file: anyone checking the vendored ERC20 base against the manifest of hashes gets a mismatch and cannot distinguish a whitespace change from a tampered base contract. Fix: regenerate every sha256 from the files actually present under lib/, or record the upstream hash and say so in the note.","line":23,"path":"DEPENDENCIES.json","reproduction":"From the repository root run: sha256sum lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol lib/openzeppelin-contracts/contracts/utils/Context.sol. Expected (DEPENDENCIES.json lines 23 and 38): b6106804cbde48aa6a1d47b11fb6aa5ffe41c8e7ece4bf37dad6aedda70d0cb8 and b6a6a7b3430d0669bd99a5278c5b98a485c85c2f087841e11630838b6a6fe6dc. Actual: 03c875832d7bf1d49fd890b7af06def9cf25eda8ec4d52f2a2d04b8c3b0c80a6 and 847fda5460fee70f56f4200f59b82ae622bb03c79c77e67af010e31b7e2cc5b6. A script iterating every {path, sha256} pair in the file reports 19 mismatches out of 24.","severity":"low","snippet":"          \"sha256\": \"b6106804cbde48aa6a1d47b11fb6aa5ffe41c8e7ece4bf37dad6aedda70d0cb8\"","title":"DEPENDENCIES.json SHA-256 hashes do not match the delivered dependency files (19 of 24 entries)"}],"hash":"39acdbed5190993caa4e0b717a74d4e3324a785d1488fa1208f214161276adcd","nodeId":"ab4321dc-a3b5-49ad-842d-71e6b55c3b87","outcome":"completed","summary":"The permissions review is complete and `.imd-findings.json` is written in the repository root with one low finding and twelve coverage rows.\n\n**Outcome.** The permission model of `GODSToken` has no defects. The contract is a plain OpenZeppelin v5.1.0 ERC20 with a constructor that mints the full supply once to msg.sender. There is no owner, role, initializer, proxy, fallback or receive function, and the compiled selector surface is exactly the nine standard ERC20 methods plus the supply constant.\n\n**What I verified in the Access Control, Trust Gap and Asymmetry passes:**\n- The deployer or factory keeps no power over a holder after distribution. A pull without allowance reverts and approve only binds the caller's own allowance.\n- All 22 plausible privileged selectors revert for both the factory and a stranger. Unknown selectors and plain ETH revert as well, and state is unchanged afterwards.\n- transfer and transferFrom produce identical balance deltas. Failed balance or allowance legs revert atomically with the allowance intact.\n- Zero-address owner and spender are rejected, and only the max-uint allowance skips decrementing.\n- A 256-run fuzz and the existing repo invariants keep totalSupply constant and the zero address empty.\n- The runtime bytecode contains no CALL, DELEGATECALL, CALLCODE, CREATE or SELFDESTRUCT opcodes.\n- The vendored OpenZeppelin sources are identical to upstream v5.1.0 apart from removed blank lines, so the base contract hides nothing.\n\n**The one finding, severity low.** DEPENDENCIES.json claims its SHA-256 hashes describe the delivered dependency files, yet 19 of the 24 recorded hashes match neither the delivered file nor the upstream raw file. For example the Context.sol entry records one hash while the delivered file is byte-identical to upstream and hashes to another value. This is a provenance defect only. Reproduction is a sha256sum of the named files compared against lines 23 and 38 of the manifest.\n\n**Coverage.** The three listed entry points are marked holds. I added rows for the constructor mint, the no-privileged-selector invariant, the constant-supply invariant, the opcode scan, the upstream equivalence check, the Owners floor, and the aderyn lead. The Token protected harness is marked unreached because it needs v4-core sources and launch environment variables not present in this tree. Its token-side assertions were reproduced locally and hold.\n\nMy scratch test lives under test/scratch/ and is not part of the submission. No repository files were changed.","treeHash":null,"usage":{"cachedInputTokens":683743,"cost":{"source":"runtime","usdMicros":2662471},"inputTokens":290,"model":"claude-fable-5-1","outputTokens":16680,"runtime":"claude","turns":19,"wallClockMs":352946}},{"artifacts":[],"attempt":1,"bundleHash":"d6509ba4867269ae6f44580e417b628796899b20d881055dfe423d09503dc7d2","device":"b0ab61c6f4146d8d","findings":[],"hash":"4be03bc79dc4301b500c840e6a191fd676495e0e2f2a368696829c193a2a2352","nodeId":"9aa3b9f3-8dc5-4924-af0b-5cb340b1e88a","outcome":"completed","summary":"Created [launch.json](/root/.identitymd/work/ada5793a-5c73-4471-8d72-85315c23c995/9aa3b9f3-8dc5-4924-af0b-5cb340b1e88a/launch.json) matching `GODSToken`’s constructor, exact supply, and required pool and economics.\n\nOnly the manifest changed. Validation passed; `forge build` succeeded and `forge test` passed all 31 tests with the supplied fuzz seed.","treeHash":"86ac18178736b579bc38342ca7cabf1842cf9010","usage":{"cachedInputTokens":215168,"cost":{"source":"estimated","usdMicros":724368},"inputTokens":38315,"model":"gpt-6-astra","outputTokens":2521,"runtime":"codex","turns":3,"wallClockMs":80804}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"809ae05b6282abad","findings":[{"citation":"resolved","description":"The file states that its SHA-256 entries describe the delivered files, and the README says it lists hashes of the delivered dependency files. In the current tree that is false: 19 of the 27 listed digests do not match their files. Three are in the production import closure of GODSToken: ERC20.sol (this line), draft-IERC6093.sol at line 18, and Context.sol at line 38. The rest are 16 forge-std test-only files. I compared all five production import-closure files (ERC20.sol, IERC20.sol, IERC20Metadata.sol, Context.sol, draft-IERC6093.sol) against OpenZeppelin v5.1.0 and with `diff -b` they differ only in blank lines, so no behavioral divergence was found and no exploit follows. The defect is that the integrity pin cannot validate the delivered tree: an independent verifier that checks DEPENDENCIES.json against lib/ gets 19 failures, and the artifact-linkage claim the file is meant to support is unverifiable. Fix: regenerate every sha256 from the delivered files in lib/.","line":23,"path":"DEPENDENCIES.json","reproduction":"sha256sum lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol prints 03c875832d7bf1d49fd890b7af06def9cf25eda8ec4d52f2a2d04b8c3b0c80a6, but the manifest at DEPENDENCIES.json:23 records b6106804cbde48aa6a1d47b11fb6aa5ffe41c8e7ece4bf37dad6aedda70d0cb8. The same holds at line 18 for lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol (declared 479e13f34ad228c5346e6f868fb36f55a59cf0988717c3228f7fbf663e677dcb, actual 97fbb54840e2e793dd97d3243e3670a03162ab333cc4a7b95ebde545895ff9bb) and at line 38 for lib/openzeppelin-contracts/contracts/utils/Context.sol (declared b6a6a7b3430d0669bd99a5278c5b98a485c85c2f087841e11630838b6a6fe6dc, actual 847fda5460fee70f56f4200f59b82ae622bb03c79c77e67af010e31b7e2cc5b6). Running sha256sum on every path listed in DEPENDENCIES.json and comparing to the recorded value yields 19 mismatches out of 27; extracting the recorded pairs and running sha256sum -c reports the same 19 failures. Expected: every recorded digest equals its delivered file's digest. Actual: 19 differ. The five production import-closure files were also compared against upstream OpenZeppelin v5.1.0 and differ only in blank lines, so the mismatch is stale bookkeeping, not modified code.","severity":"low","snippet":"\"sha256\": \"b6106804cbde48aa6a1d47b11fb6aa5ffe41c8e7ece4bf37dad6aedda70d0cb8\"","title":"DEPENDENCIES.json SHA-256 pins do not match the delivered dependency files"}],"hash":"4f81f42a342bd2eeb88f6d485ed94c7902da84191cb974257080693b17457b19","nodeId":"179d0080-9869-409b-814e-cd7f6f03346a","outcome":"completed","summary":"The review is complete. `.imd-findings.json` is written and validated: it parses, its citation matches `DEPENDENCIES.json:23` in the tree, and all three verifier-listed entry points have exact-name coverage rows.\n\nFindings: one low-severity defect, no defects in the token's control flow.\n\n- **One low finding:** 19 of the 27 SHA-256 digests recorded in `DEPENDENCIES.json` do not match the delivered files, including `ERC20.sol`, `Context.sol` and `draft-IERC6093.sol` in the production import closure. Reproduce with `sha256sum` on any listed path; for example `ERC20.sol` hashes to `03c87583...` but line 23 records `b6106804...`. I checked all five production dependency files against OpenZeppelin v5.1.0 and they differ only in blank lines, so this is stale integrity bookkeeping, not modified code.\n\nCoverage of the assigned area, Execution Trace, Periphery and First Principles:\n\n- `approve` holds: caller-only allowance write, zero-spender rejection, exact `Approval`.\n- `transfer` holds: balance checked and debited before credit, zero recipient and insufficient balance revert atomically, self/zero/full balance traced.\n- `transferFrom` holds: allowance checked and decremented before transfer, max-uint256 sentinel handled, revert restores allowance, zero sender/recipient rejected.\n- Invariants hold: supply stays at 10^27 (only the constructor mints, and the compiled ABI exposes no mint or burn), and balances sum to total supply across the 128-run, 8,192-call invariant suite.\n\nI verified `forge build`, the full test suite (31 passing), `forge fmt --check`, the 1,752-byte runtime size, and that no reachable DELEGATECALL, CALLCODE or SELFDESTRUCT opcodes exist. The protected launch harness itself could not run here because it imports launch sources and environment settings not present in this tree; the token-side flows it checks were traced and covered by the repo's own tests.\n\nNo files were modified; only `.imd-findings.json` was created, as the task requires.","treeHash":null,"usage":{"cachedInputTokens":422528,"cost":{"source":"runtime","usdMicros":2144852},"inputTokens":76752,"model":"claude-fable-5-1","outputTokens":25434,"runtime":"claude","turns":26,"wallClockMs":139837}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"6e1b900b310f8fb3","findings":[{"citation":"resolved","description":"Merged from audit_flow and audit_permissions (same root cause). DEPENDENCIES.json line 3 states that its hashes 'describe the delivered files' and README.md repeats that claim. Recomputing SHA-256 over every listed path shows 19 of the 27 recorded digests differ from the files actually present under lib/: three in the production import closure of GODSToken (ERC20.sol at this line, draft-IERC6093.sol at line 18, Context.sol at line 38) and 16 forge-std test-only files. I independently fetched the five OpenZeppelin v5.1.0 files from the recorded source URLs and compared with `diff -B -w`: each vendored file is identical to upstream apart from blank lines, so the token's compiled behaviour is unaffected and no exploit follows. The defect is bookkeeping: an independent verifier checking the manifest against the tree gets 19 failures and cannot distinguish a whitespace normalisation from a tampered base contract, which defeats the file's stated purpose. Minimal fix: regenerate every sha256 from the files under lib/ as delivered (or record the upstream digest and say so in the note).","line":23,"path":"DEPENDENCIES.json","reproduction":"From the repository root run `sha256sum lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol lib/openzeppelin-contracts/contracts/utils/Context.sol lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol`. Expected (DEPENDENCIES.json lines 23, 38, 18): b6106804cbde48aa6a1d47b11fb6aa5ffe41c8e7ece4bf37dad6aedda70d0cb8, b6a6a7b3430d0669bd99a5278c5b98a485c85c2f087841e11630838b6a6fe6dc, 479e13f34ad228c5346e6f868fb36f55a59cf0988717c3228f7fbf663e677dcb. Actual: 03c875832d7bf1d49fd890b7af06def9cf25eda8ec4d52f2a2d04b8c3b0c80a6, 847fda5460fee70f56f4200f59b82ae622bb03c79c77e67af010e31b7e2cc5b6, 97fbb54840e2e793dd97d3243e3670a03162ab333cc4a7b95ebde545895ff9bb. A script iterating every {path, sha256} pair in the file and hashing the path reports 19 mismatches out of 27 entries (only the three LICENSE files, IERC20.sol, IERC20Metadata.sol, StdMath.sol, Test.sol and console2.sol match).","severity":"low","snippet":"          \"sha256\": \"b6106804cbde48aa6a1d47b11fb6aa5ffe41c8e7ece4bf37dad6aedda70d0cb8\"","title":"DEPENDENCIES.json SHA-256 pins do not match the delivered dependency files (19 of 27 entries), so the integrity manifest cannot validate lib/"},{"citation":"resolved","description":"Kept from audit_economics as informational only. GODSToken inherits OpenZeppelin v5.1.0 ERC20 without overrides; approve(spender, value) overwrites the allowance in ERC20._approve, so a spender who front-runs an allowance reduction can spend the old and then the new allowance. This is the behaviour of every compliant ERC-20, is documented in README.md ('approve replaces the caller's existing allowance'), and OpenZeppelin v5 deliberately removed increaseAllowance/decreaseAllowance. It affects only holders who grant allowances, does not touch supply, balances of others, or any launch flow (factory to distributor, pool seed, remainder, claims, swaps). No code change is required; recorded so the design assumption is explicit.","line":8,"path":"src/GODSToken.sol","reproduction":"Deploy GODSToken from D (D holds 1e27). (1) vm.prank(D); token.approve(S, 100e18). (2) vm.prank(S); token.transferFrom(D, sink, 100e18) succeeds, allowance(D,S)==0. (3) vm.prank(D); token.approve(S, 50e18) (the intended reduction). (4) vm.prank(S); token.transferFrom(D, sink, 50e18) succeeds. D intended at most 50e18 to move; actual balanceOf(sink)==150e18. totalSupply remains 1e27 throughout.","severity":"info","snippet":"contract GODSToken is ERC20 {","title":"Standard ERC-20 approve race (allowance replacement) is inherited unchanged; not an implementation defect"}],"hash":"a117e1a397cf4aa7fe5340600f61d2cda820cbed240a95f170668d943180525c","nodeId":"6adcc7fb-f8f1-4c7f-929d-3cebae167bc9","outcome":"completed","summary":"Review complete. The findings file is written at `.imd-findings.json` and no repository file was changed.\n\n**Outcome**: the GODS token is a clean, parameterless, fixed-supply OpenZeppelin v5.1.0 ERC-20. No code defect was found by the specialists or by my own pass. One bookkeeping defect reproduces.\n\n**What I verified against the code**\n- Built with solc 0.8.26 and ran the project suite: 51 tests pass, including the stateful invariants.\n- Compared all five vendored OpenZeppelin files in the token's import closure with upstream v5.1.0. They differ only in blank lines, so the compiled behaviour is upstream's.\n- Scanned the compiled runtime for DELEGATECALL, CALLCODE and SELFDESTRUCT. None present. Runtime is well under the EIP-170 limit.\n- Checked launch.json against the constructor: empty constructorArgs, 18 decimals, totalSupply equal to the minted amount, contract name within 32 characters, no extra keys.\n- The protected harness could not run here because it imports v4-core and launch sources absent from this tree. I traced its assertions by hand instead. Supply, decimals, whole-amount transfers and absence of admin functions all hold.\n\n**Findings kept**\n1. **Low, merged from audit_flow and audit_permissions.** The SHA-256 pins in DEPENDENCIES.json do not match the delivered files for 19 of 27 entries, including ERC20.sol, Context.sol and draft-IERC6093.sol. I reproduced it by rehashing every listed path. The fix is to regenerate the digests from the files under lib/.\n2. **Info, from audit_economics.** The standard ERC-20 approve race is inherited unchanged. It reproduces trivially but is documented behaviour of every compliant token and not an implementation defect. Recorded so the design assumption is explicit, with no change required.\n\n**Coverage**: all three entry points answered as holds, with transfer, transferFrom and approve traced through the OpenZeppelin paths, plus rows for the constructor and supply invariant, manifest consistency, and the vendored-source comparison.","treeHash":null,"usage":{"cachedInputTokens":241330,"cost":{"source":"runtime","usdMicros":1244794},"inputTokens":162,"model":"claude-fable-5-1","outputTokens":7211,"runtime":"claude","turns":6,"wallClockMs":162788}},{"artifacts":[],"attempt":1,"bundleHash":"b12685bb88d418259bd23b5a8b265ef88c88fdd557a3a8ebe8ea0ac9e6d9cd7a","device":"87645bda72145989","findings":[],"hash":"b0a396072a2b7cbc77372ec4e5cbf99416cdab51f99394ad38c772bd5f4be292","nodeId":"868e7850-6f43-4cfa-a539-99ce02bba33a","outcome":"completed","summary":"Added 20 unit/fuzz tests and expanded stateful invariants to cover failure rollback, allowance changes, boundary values, and supply conservation.\n\n`forge build` and `forge test` pass with the required seed, including 32,768 invariant calls. Only `test/` changed. No implementation defects were found.","treeHash":"dbda8643d02c2cddfa373735bfeab492c2520675","usage":{"cachedInputTokens":676352,"cost":{"source":"estimated","usdMicros":2308762},"inputTokens":80276,"model":"gpt-6-astra","outputTokens":16593,"runtime":"codex","turns":5,"wallClockMs":472026}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"2ab0b432477fde6c","findings":[{"citation":"resolved","description":"GODSToken inherits OpenZeppelin v5.1 ERC20 unchanged. approve(spender, value) overwrites the allowance (ERC20._approve, lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol:285). A spender who sees an owner's allowance-lowering approve in the mempool can spend the old allowance first and then the new one. This is the well-known ERC-20 approve race; it is standard behaviour shared by every compliant token, the README documents 'approve replaces the caller's existing allowance', and OpenZeppelin v5 intentionally removed increaseAllowance/decreaseAllowance. No funds of holders who do not grant allowances are affected, the supply is unaffected, and launch flows (factory -> distributor, pool seed, remainder, claims, swaps) do not depend on allowance changes. Reported only so the judge sees the economics pass covered it; no code change is required. If the requester wants mitigation, documenting 'set allowance to 0 first, or use exact-amount approvals' for integrators is the minimal action that preserves the agreed design.","line":8,"path":"src/GODSToken.sol","reproduction":"Deploy GODSToken from account D (holds 1e27). (1) D.approve(S, 100e18). (2) S front-runs: S.transferFrom(D, sink, 100e18) succeeds; allowance is 0. (3) D's 'reduction' lands: D.approve(S, 50e18). (4) S.transferFrom(D, sink, 50e18) succeeds. Expected by D: at most 50e18 moved in total. Actual: balanceOf(sink) == 150e18. Verified in a scratch Foundry test (test_approveRaceStandardBehaviour) on this tree; totalSupply stays 1e27 and sum of balances is conserved throughout.","severity":"info","snippet":"contract GODSToken is ERC20 {","title":"Standard ERC-20 approve race: allowance replacement lets a spender consume old plus new allowance (inherent to ERC-20, not an implementation defect)"}],"hash":"e160c749bbe1c4f5ba2ed93a23aaa8de1d8480b7736d9f25c2be595a5e170170","nodeId":"39c08ac7-4d36-4254-9a75-40a5cf5a784d","outcome":"completed","summary":"The economics review is complete and written to `.imd-findings.json`. No defects found in the assigned area.\n\n**What I reviewed.** The token is a single contract, `GODSToken`, inheriting OpenZeppelin v5.1 ERC20 unchanged with one constructor mint. I applied the Economic Security, Invariant and Flow Gap guides to it and to the inherited `_update`, `_approve` and `_spendAllowance` paths.\n\n**Results per guide:**\n- **Economic Security.** No external dependencies, oracles, callbacks or sentinel-address special cases. Transfers to the zero address and approvals of a zero spender revert. Return values are standard booleans. No fee, rebase, pause or blacklist behaviour exists to exploit.\n- **Invariant.** Supply is minted once to the immediate deployer and equals exactly 10^27. There is no burn, receive, fallback or admin selector. A scratch test confirmed mint, burn, burnFrom and owner calls all revert. The project's own stateful invariant suite with an independent ledger passes, as do all 31 existing tests.\n- **Flow Gap.** Factory to distributor, pool seed, remainder, claims and both swap directions move exactly the requested amount, verified in a scratch test modelled on the protected launch harness.\n\n**Reported.** One informational note only: the inherent ERC-20 approve replacement race, reproduced concretely as a spender obtaining 150 tokens when the owner intended 50. It is standard behaviour, not an implementation defect, and requires no code change.\n\n**Coverage.** All three entry points are marked `holds`, plus four invariant and lead rows, including the aderyn large-literal lead, which is a correct compile-time constant. Scratch tests were removed; the tree is unchanged.","treeHash":null,"usage":{"cachedInputTokens":268044,"cost":{"source":"runtime","usdMicros":1447622},"inputTokens":194,"model":"claude-fable-5-1","outputTokens":8788,"runtime":"claude","turns":12,"wallClockMs":172263}},{"artifacts":[],"attempt":1,"bundleHash":"953f164772ef0900643c3f712a3ad1b8e7333474da5bf02e7180abc30a11ad51","device":"410d15d57eeec440","findings":[],"hash":"e95d6c731fd54f08ce474452f53f4b84d53ab9343de54ce53003e350b15ce7fb","nodeId":"eb5fc33a-44f4-43c8-a130-d51e78d67588","outcome":"completed","summary":"Implemented GODS OF IMD (GODS): 1 billion tokens with 18 decimals, minted once to the deployer.\n\nIncluded offline dependencies, success/failure tests, stateful invariants, and deployment/operations documentation.\n\nPassed `forge build`, `forge test` with the specified seed (31 tests), and `forge fmt --check`.","treeHash":"e838c2d0ae26e1214099e46967e22d678415d2b2","usage":{"cachedInputTokens":1361792,"cost":{"source":"estimated","usdMicros":3029792},"inputTokens":59030,"model":"gpt-6-astra","outputTokens":21554,"runtime":"codex","turns":8,"wallClockMs":598000}}],"verification":[{"checks":[{"durationMs":1125,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.04s\nCompiler run successful!\n","passed":true},{"durationMs":2634,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 30 tests for test/GODSToken.t.sol:GODSTokenTest\n[PASS] testApprovalEmitsEventAndOverwritesWithoutMovingFunds() (gas: 134180)\n[PASS] testApproveZeroSpenderReverts() (gas: 37553)\n[PASS] testConstructorEmitsExactlyOneMint() (gas: 579110)\n[PASS] testCreate2MintsEverythingToImmediateFactory() (gas: 752996)\n[PASS] testDelegatedSelfTransferConsumesAllowanceWithoutChangingBalance() (gas: 103380)\n[PASS] testDeployerCannotSpendHoldersTokensWithoutApproval() (gas: 158047)\n[PASS] testExactAllowanceCanOnlyBeSpentOnce() (gas: 161651)\n[PASS] testFullBalanceTransfer() (gas: 75743)\n[PASS] testFuzzInsufficientAllowanceRevertsAtomically(uint256,uint256) (runs: 256, μ: 123090, ~: 123373)\nLogs:\n  Bound result 4481884000392909836489\n  Bound result 877662845226673483127030466\n\n[PASS] testFuzzInsufficientBalanceReverts(uint256) (runs: 256, μ: 58831, ~: 59179)\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639564039557584007913129639935\n\n[PASS] testFuzzTransferConservesSupply(uint256) (runs: 256, μ: 91931, ~: 92235)\nLogs:\n  Bound result 999999999999999999999999998\n\n[PASS] testFuzzTransferFromUpdatesBalancesAndAllowance(uint256,uint256) (runs: 256, μ: 164177, ~: 165141)\nLogs:\n  Bound result 20022\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129636962\n\n[PASS] testInfiniteAllowanceIsNotDecremented() (gas: 214764)\n[PASS] testLaunchDistributionClaimsAndTradingTransfersAreExact() (gas: 1120295)\n[PASS] testMetadataAndEntireInitialSupply() (gas: 107649)\n[PASS] testNeitherDeployerNorStrangerHasAdminOrMintPowers() (gas: 854086)\n[PASS] testRejectsNativeCurrency() (gas: 36819)\n[PASS] testRevocationPreventsFurtherSpending() (gas: 129963)\n[PASS] testSelfTransferPreservesBalance() (gas: 51476)\n[PASS] testTransferAboveBalanceRevertsAtomically() (gas: 65204)\n[PASS] testTransferEmitsEventAndDeliversExactAmount() (gas: 91484)\n[PASS] testTransferFromAboveBalanceRestoresAllowance() (gas: 178456)\n[PASS] testTransferFromConsumesAllowanceAndEmitsTransfer() (gas: 160053)\n[PASS] testTransferFromToZeroRestoresAllowance() (gas: 114233)\n[PASS] testTransferFromZeroSenderRevertsEvenForZeroAmount() (gas: 35298)\n[PASS] testTransferToZeroRevertsWithoutBurning() (gas: 47662)\n[PASS] testUnapprovedCallerCannotSpendAnotherSpendersAllowance() (gas: 115823)\n[PASS] testZeroAmountTransferToZeroStillReverts() (gas: 30369)\n[PASS] testZeroTransferFromEmptyAccountEmitsEvent() (gas: 73377)\n[PASS] testZeroTransferFromNeedsNoAllowance() (gas: 81491)\nSuite result: ok. 30 passed; 0 failed; 0 skipped; finished in 9.13ms (35.40ms CPU time)\n\nRan 1 test for test/GODSToken.invariant.t.sol:GODSTokenInvariantTest\n[PASS]\nGODSTokenInvariantTest invariants:\n[PASS] invariantBalancesAndAllowancesMatchIndependentLedger\n[PASS] invariantTotalSupplyAndBalanceSumStayConstant\n GODSTokenInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭-------------+--------------+-------+---------+----------╮\n| Contract    | Selector     | Calls | Reverts | Discards |\n+=========================================================+\n| GODSHandler | approve      | 2758  | 0       | 0        |\n|-------------+--------------+-------+---------+----------|\n| GODSHandler | transfer     | 2795  | 0       | 0        |\n|-------------+--------------+-------+---------+----------|\n| GODSHandler | transferFrom | 2639  | 0       | 0        |\n╰-------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 250000000000000000000000000\n  Bound result 0\n  Bound result 826074471\n  Bound result 815\n  Bound result 168\n  Bound result 4\n  Bound result 0\n  Bound result 10000000000000000000\n  Bound result 1850\n  Bound result 2\n  Bound result 0\n  Bound result 0\n  Bound result 2\n  Bound result 2\n  Bound result 20000000000000000000\n  Bound result 699\n  Bound result 0\n  Bound result 3\n  Bound result 0\n  Bound result 3429\n  Bound result 373806655\n  Bound result 320\n  Bound result 71\n  Bound result 8957064\n  Bound result 8112\n  Bound result 421680760\n  Bound result 25000000000000000000\n  Bound result 17\n  Bound result 0\n  Bound result 111435071\n  Bound result 0\n  Bound result 256\n  Bound result 100\n  Bound result 40000000000000000000\n  Bound result 4\n  Bound result 8\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.54s (2.53s CPU time)\n\nRan 2 test suites in 2.54s (2.55s CPU time): 31 tests passed, 0 failed, 0 skipped (31 total tests)\n","passed":true},{"durationMs":52,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"GODSToken.approve(address,uint256)\",\"GODSToken.transfer(address,uint256)\",\"GODSToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.json\":155,\"README.md\":125,\"foundry.toml\":18,\"launch.json\":24,\"remappings.txt\":2,\"src/GODSToken.sol\":16,\"test/GODSToken.invariant.t.sol\":100,\"test/GODSToken.t.sol\":389},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"4be03bc79dc4301b500c840e6a191fd676495e0e2f2a368696829c193a2a2352","verifiedTreeHash":"86ac18178736b579bc38342ca7cabf1842cf9010","verifierVersion":"0.1.0+a490e3c0"},{"checks":[{"durationMs":1486,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.40s\nCompiler run successful!\n","passed":true},{"durationMs":10800,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 30 tests for test/GODSToken.t.sol:GODSTokenTest\n[PASS] testApprovalEmitsEventAndOverwritesWithoutMovingFunds() (gas: 134180)\n[PASS] testApproveZeroSpenderReverts() (gas: 37553)\n[PASS] testConstructorEmitsExactlyOneMint() (gas: 579110)\n[PASS] testCreate2MintsEverythingToImmediateFactory() (gas: 752996)\n[PASS] testDelegatedSelfTransferConsumesAllowanceWithoutChangingBalance() (gas: 103380)\n[PASS] testDeployerCannotSpendHoldersTokensWithoutApproval() (gas: 158047)\n[PASS] testExactAllowanceCanOnlyBeSpentOnce() (gas: 161651)\n[PASS] testFullBalanceTransfer() (gas: 75743)\n[PASS] testFuzzInsufficientAllowanceRevertsAtomically(uint256,uint256) (runs: 256, μ: 123053, ~: 123373)\nLogs:\n  Bound result 11359861514946782628552986\n  Bound result 378447244332714613439535285\n\n[PASS] testFuzzInsufficientBalanceReverts(uint256) (runs: 256, μ: 58808, ~: 58537)\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639933\n\n[PASS] testFuzzTransferConservesSupply(uint256) (runs: 256, μ: 91967, ~: 92247)\nLogs:\n  Bound result 999999999999999999999999998\n\n[PASS] testFuzzTransferFromUpdatesBalancesAndAllowance(uint256,uint256) (runs: 256, μ: 164342, ~: 165147)\nLogs:\n  Bound result 20022\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129636962\n\n[PASS] testInfiniteAllowanceIsNotDecremented() (gas: 214764)\n[PASS] testLaunchDistributionClaimsAndTradingTransfersAreExact() (gas: 1120295)\n[PASS] testMetadataAndEntireInitialSupply() (gas: 107649)\n[PASS] testNeitherDeployerNorStrangerHasAdminOrMintPowers() (gas: 854086)\n[PASS] testRejectsNativeCurrency() (gas: 36819)\n[PASS] testRevocationPreventsFurtherSpending() (gas: 129963)\n[PASS] testSelfTransferPreservesBalance() (gas: 51476)\n[PASS] testTransferAboveBalanceRevertsAtomically() (gas: 65204)\n[PASS] testTransferEmitsEventAndDeliversExactAmount() (gas: 91484)\n[PASS] testTransferFromAboveBalanceRestoresAllowance() (gas: 178456)\n[PASS] testTransferFromConsumesAllowanceAndEmitsTransfer() (gas: 160053)\n[PASS] testTransferFromToZeroRestoresAllowance() (gas: 114233)\n[PASS] testTransferFromZeroSenderRevertsEvenForZeroAmount() (gas: 35298)\n[PASS] testTransferToZeroRevertsWithoutBurning() (gas: 47662)\n[PASS] testUnapprovedCallerCannotSpendAnotherSpendersAllowance() (gas: 115823)\n[PASS] testZeroAmountTransferToZeroStillReverts() (gas: 30369)\n[PASS] testZeroTransferFromEmptyAccountEmitsEvent() (gas: 73377)\n[PASS] testZeroTransferFromNeedsNoAllowance() (gas: 81491)\nSuite result: ok. 30 passed; 0 failed; 0 skipped; finished in 107.86ms (365.37ms CPU time)\n\nRan 20 tests for test/GODSToken.properties.t.sol:GODSTokenPropertiesTest\n[PASS] testApprovalForOneOwnerCannotSpendAnotherOwnersBalance() (gas: 198002)\n[PASS] testApprovalFromEmptyHolderWorksOnceFunded() (gas: 274404)\n[PASS] testDelegatedSelfTransferStillRequiresEnoughBalance() (gas: 173999)\n[PASS] testFuzzApprovalReplacementIsIdempotentAndIsolated(uint256,uint256) (runs: 1000, μ: 324351, ~: 324423)\n[PASS] testFuzzArbitraryNonzeroRecipientGetsExactAmount(address,uint256) (runs: 1000, μ: 103619, ~: 103788)\nLogs:\n  Bound result 17762\n  Bound result 12\n\n[PASS] testFuzzBalanceFailurePreservesApprovalForLaterValidSpend(uint256,uint256,uint256) (runs: 1000, μ: 307751, ~: 307981)\nLogs:\n  Bound result 129861787520088929616421746\n  Bound result 7701068559177102618555931784330162942718321679236367847\n  Bound result 4764689981495689587897941320331077254535991469438075068464517394904\n\n[PASS] testFuzzDelegatedRoundTripConsumesOnlyFiniteAllowance(uint256,uint256,bool) (runs: 1000, μ: 366815, ~: 362769)\nLogs:\n  Bound result 321649546120163730191928927\n  Bound result 115792089237316195423570985008687907853269984665640242389911463844182937839472\n\n[PASS] testFuzzInvalidReceiverPreservesApprovalForLaterValidSpend(uint256,uint256) (runs: 1000, μ: 229054, ~: 229858)\nLogs:\n  Bound result 4372\n  Bound result 22982\n\n[PASS] testFuzzSplittingATransferDoesNotChangeItsResult(uint256,uint256) (runs: 1000, μ: 776259, ~: 777441)\nLogs:\n  Bound result 783948842534449364251647341\n  Bound result 557681325644759952\n\n[PASS] testFuzzTransferRoundTripRestoresBalances(uint256,uint256,uint256) (runs: 1000, μ: 329944, ~: 330889)\nLogs:\n  Bound result 690897104518743699191327471\n  Bound result 287506613944433052977487726\n  Bound result 47\n\n[PASS] testInfiniteApprovalCanBeReducedAndRevokedAfterUse() (gas: 371823)\n[PASS] testLargestFiniteApprovalIsDecremented() (gas: 147553)\n[PASS] testMaximumTransferFromDoesNotConsumeInfiniteApproval() (gas: 129019)\n[PASS] testMaximumTransferRevertsWithBalanceError() (gas: 65410)\n[PASS] testOneWeiRoundTripHasNoDustOrFee() (gas: 121979)\n[PASS] testOwnerUsingTransferFromNeedsItsOwnAllowance() (gas: 299729)\n[PASS] testRefundDoesNotRestoreSpentAllowance() (gas: 281380)\n[PASS] testSelfTransferStillRequiresEnoughBalance() (gas: 50556)\n[PASS] testTwoSpendersShareBalanceButNotAllowance() (gas: 442770)\n[PASS] testZeroValueDoesNotPermitZeroSpenderOrReceiver() (gas: 158877)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 125.98ms (713.70ms CPU time)\n\nRan 1 test for test/GODSToken.invariant.t.sol:GODSTokenInvariantTest\n[PASS]\nGODSTokenInvariantTest invariants:\n[PASS] invariantBalancesAndAllowancesMatchIndependentLedger\n[PASS] invariantMetadataNeverChanges\n[PASS] invariantTotalSupplyAndBalanceSumStayConstant\n GODSTokenInvariantTest invariants (runs: 256, calls: 32768, reverts: 0)\n\n╭-------------+---------------------------------+-------+---------+----------╮\n| Contract    | Selector                        | Calls | Reverts | Discards |\n+============================================================================+\n| GODSHandler | approve                         | 2714  | 0       | 0        |\n|-------------+---------------------------------+-------+---------+----------|\n| GODSHandler | approveAndSpend                 | 2647  | 0       | 0        |\n|-------------+---------------------------------+-------+---------+----------|\n| GODSHandler | approveBoundary                 | 2782  | 0       | 0        |\n|-------------+---------------------------------+-------+---------+----------|\n| GODSHandler | rejectTransfer                  | 2772  | 0       | 0        |\n|-------------+---------------------------------+-------+---------+----------|\n| GODSHandler | rejectTransferFromOverAllowance | 2708  | 0       | 0        |\n|-------------+---------------------------------+-------+---------+----------|\n| GODSHandler | rejectTransferFromOverBalance   | 2757  | 0       | 0        |\n|-------------+---------------------------------+-------+---------+----------|\n| GODSHandler | rejectTransferFromToZero        | 2787  | 0       | 0        |\n|-------------+---------------------------------+-------+---------+----------|\n| GODSHandler | rejectUnapprovedSpender         | 2745  | 0       | 0        |\n|-------------+---------------------------------+-------+---------+----------|\n| GODSHandler | rejectZeroSpender               | 2721  | 0       | 0        |\n|-------------+---------------------------------+-------+---------+----------|\n| GODSHandler | transfer                        | 2697  | 0       | 0        |\n|-------------+---------------------------------+-------+---------+----------|\n| GODSHandler | transferFrom                    | 2649  | 0       | 0        |\n|-------------+---------------------------------+-------+---------+----------|\n| GODSHandler | transferFullBalance             | 2789  | 0       | 0        |\n╰-------------+---------------------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665640314039468584007913129639935\n  Bound result 6962\n  Bound result 115792089237316195423570985008687907853269984665640314039557584007913129639935\n  Bound result 4345\n  Bound result 0\n  Bound result 496321534021899140424295868\n  Bound result 6507\n  Bound result 11\n  Bound result 10\n  Bound result 115792089237316195423570985008687907853269984665640560360991605907053553929439\n  Bound result 402729760845533932165860\n  Bound result 0\n  Bound result 0\n  Bound result 177362148\n  Bound result 6168\n  Bound result 7000000000000000000\n  Bound result 101\n  Bound result 1\n  Bound result 47620860365673692790076930\n  Bound result 37717930522851783435436585894247734182355026104997046655898314749780452009\n  Bound result 115792089237316195423570985008687907853269984665640563636720823162379197476657\n  Bound result 512\n  Bound result 2\n  Bound result 115792089237316195423570985008687907853269984665640361660324949681606683323877\n  Bound result 402736760845533932165859\n  Bound result 211720840036\n  Bound result 7000000000000000000\n  Bound result 0\n  Bound result 9931\n  Bound result 36853543778218735811723\n  Bound result 1400\n  Bound result 873\n  Bound result 3\n  Bound result 115792089237316195423570985008687907853269984665640563673575366940597933285801\n  Bound result 115792089237316195423570985008687907853269984665640563673586366940597933285801\n  Bound result 7\n  Bound result 2217277715817645560996\n  Bound result 3\n  Bound result 115792089237316195423570985008687907853269984665640560763721366752587486095578\n  Bound result 13004098395764833891555598590241782903954759489810129101\n  Bound result 115792089237316195423570985008687907853269984665640563673574366940597933294124\n  Bound result 40000000000000000000\n  Bound result 220995544908821535036286793080320481192592370008\n  Bound result 1701\n  Bound result 10000000000000000000\n  Bound result 0\n  Bound result 5\n  Bound result 1000000000000000000000000001\n  Bound result 1514\n  Bound result 365883217067315196354134\n  Bound result 35174131493496977636445\n  Bound result 4505\n  Bound result 5408\n  Bound result 1131\n  Bound result 1604\n  Bound result 610\n  Bound result 212\n  Bound result 18\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640563673574366940597933290561\n  Bound result 229482384\n  Bound result 184\n  Bound result 358318110265456931597267858\n  Bound result 524\n  Bound result 2883\n  Bound result 115792089237316195423570985008687907853269984665639922760304610310378659073657\n  Bound result 7436\n  Bound result 3712727141475842152838\n  Bound result 225010670773989443219441\n  Bound result 115792089237316195423570985008687907853269984665640564002629040229694393823707\n  Bound result 1\n  Bound result 115792089237316195423570985008687907853269984665640205721347318550981532372094\n  Bound result 45366023586519661622947737958662256793445008513300881510225701750571428159747\n  Bound result 3571\n  Bound result 4935503520915214353352386365387230176721047470353114642986069\n  Bound result 1000000000\n  Bound result 1\n  Bound result 5272\n  Bound result 115792089237316195423570985008687907853269984665639922760304610310378659073669\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639933\n  Bound result 754487026774155479045646558\n  Bound result 23\n  Bound result 12\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 10.69s (10.69s CPU time)\n\nRan 3 test suites in 10.70s (10.93s CPU time): 51 tests passed, 0 failed, 0 skipped (51 total tests)\n","passed":true},{"durationMs":36,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"GODSToken.approve(address,uint256)\",\"GODSToken.transfer(address,uint256)\",\"GODSToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.json\":155,\"README.md\":125,\"foundry.toml\":18,\"remappings.txt\":2,\"src/GODSToken.sol\":16,\"test/GODSToken.invariant.t.sol\":271,\"test/GODSToken.properties.t.sol\":367,\"test/GODSToken.t.sol\":389,\"test/PROPERTIES.md\":66},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"b0a396072a2b7cbc77372ec4e5cbf99416cdab51f99394ad38c772bd5f4be292","verifiedTreeHash":"dbda8643d02c2cddfa373735bfeab492c2520675","verifierVersion":"0.1.0+a490e3c0"},{"checks":[{"durationMs":1077,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.01s\nCompiler run successful!\n","passed":true},{"durationMs":2648,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 30 tests for test/GODSToken.t.sol:GODSTokenTest\n[PASS] testApprovalEmitsEventAndOverwritesWithoutMovingFunds() (gas: 134180)\n[PASS] testApproveZeroSpenderReverts() (gas: 37553)\n[PASS] testConstructorEmitsExactlyOneMint() (gas: 579110)\n[PASS] testCreate2MintsEverythingToImmediateFactory() (gas: 752996)\n[PASS] testDelegatedSelfTransferConsumesAllowanceWithoutChangingBalance() (gas: 103380)\n[PASS] testDeployerCannotSpendHoldersTokensWithoutApproval() (gas: 158047)\n[PASS] testExactAllowanceCanOnlyBeSpentOnce() (gas: 161651)\n[PASS] testFullBalanceTransfer() (gas: 75743)\n[PASS] testFuzzInsufficientAllowanceRevertsAtomically(uint256,uint256) (runs: 256, μ: 123090, ~: 123373)\nLogs:\n  Bound result 4481884000392909836489\n  Bound result 877662845226673483127030466\n\n[PASS] testFuzzInsufficientBalanceReverts(uint256) (runs: 256, μ: 58831, ~: 59179)\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639564039557584007913129639935\n\n[PASS] testFuzzTransferConservesSupply(uint256) (runs: 256, μ: 91931, ~: 92235)\nLogs:\n  Bound result 999999999999999999999999998\n\n[PASS] testFuzzTransferFromUpdatesBalancesAndAllowance(uint256,uint256) (runs: 256, μ: 164177, ~: 165141)\nLogs:\n  Bound result 595074528725296852297693448\n  Bound result 150846898011359861514946782628552986\n\n[PASS] testInfiniteAllowanceIsNotDecremented() (gas: 214764)\n[PASS] testLaunchDistributionClaimsAndTradingTransfersAreExact() (gas: 1120295)\n[PASS] testMetadataAndEntireInitialSupply() (gas: 107649)\n[PASS] testNeitherDeployerNorStrangerHasAdminOrMintPowers() (gas: 854086)\n[PASS] testRejectsNativeCurrency() (gas: 36819)\n[PASS] testRevocationPreventsFurtherSpending() (gas: 129963)\n[PASS] testSelfTransferPreservesBalance() (gas: 51476)\n[PASS] testTransferAboveBalanceRevertsAtomically() (gas: 65204)\n[PASS] testTransferEmitsEventAndDeliversExactAmount() (gas: 91484)\n[PASS] testTransferFromAboveBalanceRestoresAllowance() (gas: 178456)\n[PASS] testTransferFromConsumesAllowanceAndEmitsTransfer() (gas: 160053)\n[PASS] testTransferFromToZeroRestoresAllowance() (gas: 114233)\n[PASS] testTransferFromZeroSenderRevertsEvenForZeroAmount() (gas: 35298)\n[PASS] testTransferToZeroRevertsWithoutBurning() (gas: 47662)\n[PASS] testUnapprovedCallerCannotSpendAnotherSpendersAllowance() (gas: 115823)\n[PASS] testZeroAmountTransferToZeroStillReverts() (gas: 30369)\n[PASS] testZeroTransferFromEmptyAccountEmitsEvent() (gas: 73377)\n[PASS] testZeroTransferFromNeedsNoAllowance() (gas: 81491)\nSuite result: ok. 30 passed; 0 failed; 0 skipped; finished in 9.28ms (35.08ms CPU time)\n\nRan 1 test for test/GODSToken.invariant.t.sol:GODSTokenInvariantTest\n[PASS]\nGODSTokenInvariantTest invariants:\n[PASS] invariantBalancesAndAllowancesMatchIndependentLedger\n[PASS] invariantTotalSupplyAndBalanceSumStayConstant\n GODSTokenInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭-------------+--------------+-------+---------+----------╮\n| Contract    | Selector     | Calls | Reverts | Discards |\n+=========================================================+\n| GODSHandler | approve      | 2758  | 0       | 0        |\n|-------------+--------------+-------+---------+----------|\n| GODSHandler | transfer     | 2795  | 0       | 0        |\n|-------------+--------------+-------+---------+----------|\n| GODSHandler | transferFrom | 2639  | 0       | 0        |\n╰-------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 250000000000000000000000000\n  Bound result 0\n  Bound result 826074471\n  Bound result 815\n  Bound result 168\n  Bound result 4\n  Bound result 0\n  Bound result 10000000000000000000\n  Bound result 1850\n  Bound result 2\n  Bound result 0\n  Bound result 0\n  Bound result 2\n  Bound result 2\n  Bound result 20000000000000000000\n  Bound result 699\n  Bound result 0\n  Bound result 3\n  Bound result 0\n  Bound result 3429\n  Bound result 373806655\n  Bound result 320\n  Bound result 71\n  Bound result 8957064\n  Bound result 8112\n  Bound result 421680760\n  Bound result 25000000000000000000\n  Bound result 17\n  Bound result 0\n  Bound result 111435071\n  Bound result 0\n  Bound result 256\n  Bound result 100\n  Bound result 40000000000000000000\n  Bound result 4\n  Bound result 8\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.55s (2.55s CPU time)\n\nRan 2 test suites in 2.55s (2.56s CPU time): 31 tests passed, 0 failed, 0 skipped (31 total tests)\n","passed":true},{"durationMs":33,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"GODSToken.approve(address,uint256)\",\"GODSToken.transfer(address,uint256)\",\"GODSToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.json\":155,\"README.md\":125,\"foundry.toml\":18,\"remappings.txt\":2,\"src/GODSToken.sol\":16,\"test/GODSToken.invariant.t.sol\":100,\"test/GODSToken.t.sol\":389},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":414,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":201,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/GODSToken.sol:10: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"e95d6c731fd54f08ce474452f53f4b84d53ab9343de54ce53003e350b15ce7fb","verifiedTreeHash":"e838c2d0ae26e1214099e46967e22d678415d2b2","verifierVersion":"0.1.0+a490e3c0"}]}