{"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":"1dee29e7-7a99-48aa-8f54-a7520613a4a5","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"f7e61949ef6ae856f8282a3ffe8674c2d99ad70665dd8aaa5408520d811679c2","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":"c20ec93bddc8a6ee8cfbb0c5e66b286749fdb8c51c34992a51b1c1baf46bb08c","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":"a3cf491ae5c288d200b19ed7a203b5578f83b801e91465d7b38bcc6e35e629d3","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":"8d2f11c55507264a52c2a03ceae73a01a1a237516a489c0c9c7780b9660887c1","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":"ea33bebb76c691e2b90892d810815c93e747a006a9546a011879a98aef7a60b0","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":"19a2394357e23477d9f212ba92214b842f063e944093bba20767d4a7ff14028d","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"6b8d2c2ebd3301cff2be8edb1e1cc6ba65c858c02fe7247be81722b969842265","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"6b8d2c2ebd3301cff2be8edb1e1cc6ba65c858c02fe7247be81722b969842265","skillId":"build-contract-project","state":"accepted"},{"acceptedSubmissionHash":"7d93c53c80977913e82a4ca6e4a6ac15b1da2857db68934fdd0cc0c3626d9f1c","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"3575ed8086a37d95e85b9a1f646d647c29293a4255f6966269c195fbc08281d5","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: PONZIRAMID (PONZIRAM).\nToken name: PONZIRAMID\nToken symbol: PONZIRAM\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.","parentJobId":null,"planHash":"16c73beba35006a93878b3a9f91bb623e2699c64b824119efdea558fd36d1842","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"1dee29e7-7a99-48aa-8f54-a7520613a4a5","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-1700-ponziramid"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51020","feedbackHash":"e251a646b900867195c545ee20c56dadcbf76f8db1525b8a2b084a18963d36c9","nodeKey":"audit_economics","submissionHash":"f7e61949ef6ae856f8282a3ffe8674c2d99ad70665dd8aaa5408520d811679c2","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51317","feedbackHash":"3e1d504fe9bfa38d28da15dbb0568df40de9899a70f11a1850a9b346cb2ce642","nodeKey":"audit_flow","submissionHash":"c20ec93bddc8a6ee8cfbb0c5e66b286749fdb8c51c34992a51b1c1baf46bb08c","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52164","feedbackHash":"c2d8564a620d987ca54e089c24160e6cf5c7b5307ab73ad3475b7577c315fc32","nodeKey":"audit_judge","submissionHash":"a3cf491ae5c288d200b19ed7a203b5578f83b801e91465d7b38bcc6e35e629d3","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52166","feedbackHash":"6f4e3878e0f87619213bccb1721caa7557f15b155a60258db45f94d875d24f71","nodeKey":"audit_math","submissionHash":"8d2f11c55507264a52c2a03ceae73a01a1a237516a489c0c9c7780b9660887c1","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52232","feedbackHash":"456366eb694b2fd3219576c4500ff825e38cf1d316a5dbda40e69c2bf333609a","nodeKey":"audit_permissions","submissionHash":"ea33bebb76c691e2b90892d810815c93e747a006a9546a011879a98aef7a60b0","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52120","feedbackHash":"79daced7e4d29d624a0ad494ce0a33b025979d6575b677621cec112493d2ddef","nodeKey":"build_contract_project","submissionHash":"19a2394357e23477d9f212ba92214b842f063e944093bba20767d4a7ff14028d","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51332","feedbackHash":"c8f6a363b7fa9fee2c2001c7d74ee199c654b38d3ebdd23db35d8d93d339f0f0","nodeKey":"manifest","submissionHash":"7d93c53c80977913e82a4ca6e4a6ac15b1da2857db68934fdd0cc0c3626d9f1c","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"50970","feedbackHash":"8fdfa374161481784efe5d351099becc20149d17fcbbffe4518d3e4ced925376","nodeKey":"write_foundry_tests","submissionHash":"3575ed8086a37d95e85b9a1f646d647c29293a4255f6966269c195fbc08281d5","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"8219e545562e6c8d45b81c96d710d079c8692d259a476dd0a9b54f0f0e7b5ea3","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"9008a8bda0ccfb4f99357d39578f6f341cf0cf36143c1938799e380867364f34","device":"a5c5e95a2ed07117","findings":[],"hash":"19a2394357e23477d9f212ba92214b842f063e944093bba20767d4a7ff14028d","nodeId":"41c2759d-0834-4102-869a-34b2172be538","outcome":"completed","summary":"Done. The PONZIRAMID token is implemented, tested, documented and committed on `main`.\n\n**What was delivered**\n\n- `src/PonziramidToken.sol`: contract `PonziramidToken` (15-character launch identifier) returning name `PONZIRAMID`, symbol `PONZIRAM`, 18 decimals. The no-argument constructor mints the whole supply to `msg.sender` once and emits the mint event. Supply is a constant of one billion times ten to the eighteenth. There is no owner, mint, burn, pause, blocklist, fee, upgrade path, delegatecall or selfdestruct, so every launch flow moves exactly what it says with no exemption list.\n- `test/PonziramidToken.t.sol`: 31 tests covering metadata and supply, CREATE2 deployment from a factory-like contract, transfer and transferFrom success paths, every revert path with exact ERC-6093 errors, unlimited allowance, admin-selector probing in the style of the protected floor test, an opcode scan for forbidden instructions, and four fuzz tests for conservation and exactness.\n- `README.md`: behaviour, launch parameters as given by the brief, assumptions, an \"After launch\" section stating there is nothing to configure, remaining operational responsibilities, and security notes.\n- `foundry.toml` pins solc 0.8.26, sets `bytecode_hash = \"none\"`, disables ffi and filesystem access. forge-std v1.11.0 is vendored under `lib/forge-std` as plain files from the release tarball, with no nested git metadata and no submodule.\n\n**Checks run**\n\n| Check | Result |\n| --- | --- |\n| forge build | passes |\n| forge test with the verifier's fuzz seed | 31 passed, 0 failed |\n| forge test without a seed | 31 passed |\n| forge fmt --check | passes |\n| Rebuild after forge clean from committed files | passes |\n\nSlither and Mythril were not run because they are not on this machine. No values were left open by the brief, so nothing was chosen on the requester's behalf and no `.imd-blocked.json` was needed.","treeHash":"dd1735c54cc0a5ed3993f87a9140579be0142cfc","usage":{"cachedInputTokens":768136,"inputTokens":514,"model":"claude-fable-5-1","outputTokens":19293,"runtime":"claude","turns":25,"wallClockMs":261457}},{"artifacts":[],"attempt":1,"bundleHash":"2b6a38c74874b14a9240a491b48af624e8c1f06921e9afb9dd372a9d897e070d","device":"c2a0c6e1f08b5974","findings":[],"hash":"3575ed8086a37d95e85b9a1f646d647c29293a4255f6966269c195fbc08281d5","nodeId":"fb506e6a-d456-4b98-855e-0aae6865be72","outcome":"completed","summary":"Added 24 boundary/fuzz tests and a five-actor invariant suite covering supply conservation, balances, allowances, failure rollback, and transfer liveness.\n\n`forge build` and `forge test` pass with the required seed, including 32,768 invariant calls. Only `test/` changed. No defects found.","treeHash":"24b3f8e6c7078c8fe9e7de1221b7420d59c0dcde","usage":{"cachedInputTokens":432256,"inputTokens":72706,"model":"gpt-6-astra","outputTokens":12325,"runtime":"codex","turns":4,"wallClockMs":390483}},{"artifacts":[],"attempt":1,"bundleHash":"20de14a07e4eee5bb46a55686aad36c68107c275e2d3b8edc2c9530bc3e0bbd7","device":"c0e6ac7ffff8e2ca","findings":[],"hash":"7d93c53c80977913e82a4ca6e4a6ac15b1da2857db68934fdd0cc0c3626d9f1c","nodeId":"378205ce-dde2-4543-90ba-5afe98f12004","outcome":"completed","summary":"Created [launch.json](/root/.identitymd/work/1dee29e7-7a99-48aa-8f54-a7520613a4a5/378205ce-dde2-4543-90ba-5afe98f12004/launch.json) matching `PonziramidToken`, its exact supply, empty constructor arguments, and the required pool and economics.\n\n`forge build` succeeded. All 31 repository tests passed with the supplied fuzz seed. Manifest field and constructor ABI checks passed. Only `launch.json` is included in the deliverable.","treeHash":"9f5d0492f5de2b2630cb7513ee6910fc332ce5d1","usage":{"cachedInputTokens":168704,"inputTokens":38254,"model":"gpt-6-astra","outputTokens":2432,"runtime":"codex","turns":3,"wallClockMs":84477}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"7f1dec5ffcbde1d8","findings":[],"hash":"8d2f11c55507264a52c2a03ceae73a01a1a237516a489c0c9c7780b9660887c1","nodeId":"e73912a8-f4ac-4f24-a1fc-bbc0b6a32b43","outcome":"completed","summary":"Review complete. The math audit of PonziramidToken found no defects, and `.imd-findings.json` holds an empty finding list with eight coverage rows, one for each of the three listed entry points plus five invariant and boundary rows.\n\n**What I checked, against the Math Precision, Boundary and Numerical Gap guides**\n\n- **Arithmetic.** The contract has no division, no fixed-point scaling, no downcast and no external call. The supply constant is a compile-time literal equal to 1e27, and its decimal string matches the manifest's totalSupply. The two `unchecked` blocks are each guarded by the revert immediately above them, and the unchecked addition cannot wrap because the sum of balances is always the fixed supply.\n- **Boundaries.** Zero value, max value, max-minus-one allowance, exact-allowance and exact-balance edges, self-transfer of the whole balance, self-transferFrom, and transferFrom from the zero address with value zero all behave as the spec says. The max-allowance sentinel is an exact equality check, so it skips only the decrement, never the balance transfer. There are no payable, receive, fallback or bytes-decoding paths.\n- **Seams.** No fast path skips a check. Self-transfer reads the recipient balance after writing the sender balance, so it nets to zero. Allowance is spent before the balance check and both revert atomically, which the existing suite also asserts.\n- **Launch flows.** No fee, burn or exemption list, so the factory, distributor, PoolManager seed and swaps all move exactly what they request.\n\n**Evidence.** Existing suite passes with the verifier's fuzz seed. I ran a fourteen-test scratch suite covering the edges above, which all passed, then removed it along with the build output. Static analysis leads were a single cosmetic large-literal note, not a defect. The ERC-20 approve race is standard behaviour matching OpenZeppelin v5 and documented in the README, so I did not report it.\n\nOnly the findings file was created. No source, test or configuration file was modified.","treeHash":null,"usage":{"cachedInputTokens":414283,"inputTokens":194,"model":"claude-fable-5-1","outputTokens":10919,"runtime":"claude","turns":18,"wallClockMs":161446}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"63458a1bd2b2d376","findings":[{"citation":"resolved","description":"Merged from the audit_flow specialist's single finding; audit_permissions, audit_economics, audit_math and write_foundry_tests reported nothing. approve() writes the allowance unconditionally (src/PonziramidToken.sol:130 `_allowances[owner][spender] = value;`), so a holder lowering a non-zero allowance can be front-run by the spender, who spends the old value and then the new one. This is the behaviour of every ERC-20 approve including OpenZeppelin v5, which this token mirrors; the NatSpec on lines 94-95 and the README's 'Allowance hygiene' section already document the set-to-zero-first mitigation. The contract exposes no increaseAllowance/decreaseAllowance or EIP-2612 permit. Reproduced on this tree; recorded at info so the trace is on the record. It is not a defect in the agreed design and does not block the launch. If the author wants an in-contract mitigation, adding increaseAllowance/decreaseAllowance is the minimal one and changes neither supply nor transfer rules.","line":96,"path":"src/PonziramidToken.sol","reproduction":"State: deployer D holds 1e27 (constructor). 1) prank(D): token.approve(bob, 100 ether). 2) prank(bob): token.transferFrom(D, bob, 100 ether) -> succeeds (allowance 100 -> 0). 3) prank(D): token.approve(bob, 50 ether) lands (allowance 0 -> 50). 4) prank(bob): token.transferFrom(D, bob, 50 ether) -> succeeds. Actual: balanceOf(bob) == 150 ether. Expected by the holder: at most 100 ether. Verified with test/scratch/Judge.t.sol::test_approveRaceResidual on this tree (passes, i.e. bob ends with 150 ether).","severity":"info","snippet":"    function approve(address spender, uint256 value) external returns (bool) {\n        _approve(msg.sender, spender, value);\n        return true;\n    }","title":"Standard ERC-20 approve race: a spender can consume the old allowance before a holder's reduction lands (inherent to approve(); documented; no code change required)"}],"hash":"a3cf491ae5c288d200b19ed7a203b5578f83b801e91465d7b38bcc6e35e629d3","nodeId":"0088e103-2341-4f16-b5f8-1d7f3a409710","outcome":"completed","summary":"Review complete. The findings file is valid JSON, the quoted snippet matches lines 96 to 99 of the source exactly, the scratch directory is removed, and the working tree is clean apart from the untracked `.imd-findings.json` deliverable.\n\n**Outcome: no defects.** The PONZIRAMID token is a minimal, self-contained ERC-20 that behaves as the brief asks, and nothing blocks the launch.\n\nWhat I checked:\n- **Specialist findings.** Four of five areas reported nothing. The one audit_flow item, the ERC-20 approve overwrite race, reproduced on this tree in a scratch test. It is inherent to every standard approve, including the OpenZeppelin v5 behaviour the token mirrors, and is already documented in the NatSpec and README. I kept it at info with its reproduction stated. It requires no code change.\n- **Static analysis leads.** Slither reported nothing. The aderyn large-literal note is the supply constant, which evaluates to exactly the manifest's one billion tokens at 18 decimals. Not a defect.\n- **My own pass.** Self-transfer nets to zero because the second write reads the updated storage. Transfers from the zero address are unreachable. Unchecked arithmetic is guarded by the preceding balance and allowance checks. There is no owner, mint, burn, pause, blocklist, fee, delegatecall, selfdestruct, receive or fallback.\n- **Deployability.** Argument-free constructor, creation code well under the limits, no address-bit requirement. A CREATE2 deployment from a contract credits the whole supply to that contract, which is what the factory needs. The manifest uses only schema keys with lowercase addresses and a valid contract name.\n- **Tests.** All 57 project tests pass with the verifier's fuzz seed. Three scratch tests I wrote also passed and were deleted afterwards.\n\nCoverage: all three entry points marked `holds`, plus two invariant rows for supply fixity and factory deployability.","treeHash":null,"usage":{"cachedInputTokens":407143,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":7597,"runtime":"claude","turns":13,"wallClockMs":185247}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"0476c44a80aa9574","findings":[{"citation":"resolved","description":"Execution Trace guide, 'Approval residuals'. approve() overwrites the allowance unconditionally, so a holder lowering a non-zero allowance can be front-run by the spender, who spends the old value and then the new one. This is the behaviour of every ERC-20 approve, including OpenZeppelin v5 which this token mirrors; the NatSpec on lines 94-95 and README 'Allowance hygiene' already document the set-to-zero-first mitigation. The contract exposes no increaseAllowance/decreaseAllowance or EIP-2612 permit, so a holder's only tool is approve(spender, 0) then approve(spender, new). Reported at info so the judge has the trace; no change to the agreed design is required. If the author wants an in-contract mitigation, adding increaseAllowance/decreaseAllowance (OZ v4 style) is the minimal one and does not alter supply or transfer rules.","line":96,"path":"src/PonziramidToken.sol","reproduction":"State: deployer holds 1e27. 1) vm.prank(deployer); token.approve(bob, 100 ether). 2) deployer intends to lower to 50 ether; bob sees the pending approve and first calls vm.prank(bob); token.transferFrom(deployer, bob, 100 ether) -> succeeds. 3) vm.prank(deployer); token.approve(bob, 50 ether) lands. 4) vm.prank(bob); token.transferFrom(deployer, bob, 50 ether) -> succeeds. Actual: bob received 150 ether. Expected by the holder: at most 100 ether (the larger of the two intended limits). Verified with test/scratch/Probe.t.sol::test_approveRaceResidual on this tree.","severity":"info","snippet":"    function approve(address spender, uint256 value) external returns (bool) {\n        _approve(msg.sender, spender, value);\n        return true;\n    }","title":"Standard ERC-20 approve race: a spender can consume the old allowance before a holder's reduction lands (inherent to approve(), documented, not a code defect)"}],"hash":"c20ec93bddc8a6ee8cfbb0c5e66b286749fdb8c51c34992a51b1c1baf46bb08c","nodeId":"29a995aa-8401-4d1b-867b-768d48892dc3","outcome":"completed","summary":"The review is complete. The findings file is valid JSON and the quoted snippet matches lines 96 to 99 of the source. No tracked file was changed. The scratch test stays under test/scratch, which is reserved for the reviewer and is not kept.\n\n**Outcome: no defects found in the Execution Trace, Periphery and First Principles areas.** The file `.imd-findings.json` holds one info-level note and seven coverage rows.\n\n**What I checked**\n\n- Execution Trace: parameter relationships in transfer and transferFrom, sentinel paths for the zero address and the max-uint allowance, partial-update atomicity when the allowance is spent before a reverting transfer, stale reads, and approval residuals.\n- Periphery: there are no libraries, helpers or base contracts. The compiled ABI exposes only the ten ERC-20 functions plus the supply constant. Unknown selectors and ETH revert because there is no receive or fallback.\n- First Principles: the constructor mints exactly one billion tokens with 18 decimals to the deploying address once, with no arguments and no stored owner. The two unchecked blocks are guarded by the preceding balance and allowance checks. Self-transfers conserve balance. Transfers to the zero address are refused, so the sum of balances always equals the constant supply.\n- Launch flow: no fee, hook or exemption list exists, so the factory-to-distributor transfer, pool seed, claims and swaps in the protected test move exact amounts.\n- Bytecode: an opcode scan of the compiled runtime found no CALL, DELEGATECALL, CALLCODE, CREATE, SELFDESTRUCT or transient-storage opcodes.\n- Tests: the project suite passed, and a scratch probe of seven extra corner cases also passed. Both static-analysis leads were style only.\n\n**The one note** records the standard ERC-20 approve race, where a spender can consume an old allowance before the holder's reduction lands. It is inherent to the approve function, mirrors OpenZeppelin v5, and is already documented in the NatSpec and README, so it is filed at info severity with its reproduction and needs no design change.\n\nCoverage rows mark approve as finding 1 for that note, and transfer, transferFrom, the constructor, the supply-conservation invariant, the no-privileged-surface invariant and the launch flow as holding.","treeHash":null,"usage":{"cachedInputTokens":572003,"inputTokens":258,"model":"claude-fable-5-1","outputTokens":12182,"runtime":"claude","turns":23,"wallClockMs":184486}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"82692ab5f7f7e54e","findings":[],"hash":"ea33bebb76c691e2b90892d810815c93e747a006a9546a011879a98aef7a60b0","nodeId":"ebdaa1a0-0019-4077-be08-f02ca006c1c2","outcome":"completed","summary":"## Scope\nFiles read: `src/PonziramidToken.sol` (145 lines, whole file), `test/PonziramidToken.t.sol`, `README.md`, both protected floor tests, and the Pashov Mindset plus the Access Control, Asymmetry and Trust Gap guides. Build passes and the existing 31-test suite passes with the verifier's fuzz seed.\n\n**Severity counts:** 0 Critical · 0 High · 0 Medium · 0 Low\n\nNo defect was found in the assigned area. The findings file `.imd-findings.json` holds an empty list and a seven-row coverage record. The scratch probe I wrote under `test/scratch/` was removed after running, so the tree is unchanged apart from the findings file.\n\n## Observations (non-blocking)\n- **No privileged actor exists.** The constructor grants no role, and the compiled ABI exposes only approve, transfer and transferFrom beyond views. There is no receive, fallback, owner, mint, burn, pause, blocklist or upgrade path, and the runtime has no DELEGATECALL, CALLCODE or SELFDESTRUCT. The Trust Gap guide's seams all need a privileged or economically asymmetric actor, so none applies.\n- **Standard approve front-running** is present, as in every OpenZeppelin v5 ERC-20. The README and the approve NatSpec document it as intended. I recorded it as an observation, not a finding.\n- **The aderyn large-literal lead** at line 46 evaluates to exactly the manifest supply of 1e27, confirmed by test. Dismissed.\n\n## Coverage\n- **approve** writes only the caller's own allowance row, refuses a zero spender, and no other path can raise an allowance.\n- **transfer** fixes `from` to the caller, checks receiver and balance before the unchecked block, and a self-transfer re-reads the decremented slot so no double credit occurs. A random-actor fuzz kept the sum of balances at the supply.\n- **transferFrom** requires allowance at least the amount, or exactly the max sentinel, before any balance moves. Unlimited allowance stays bounded by the owner's balance, a reverted pull leaves the allowance intact, and the deployer has no implicit allowance over holders.\n- **constructor** takes no arguments and credits the whole supply once to whoever runs it. Under CREATE2 from a factory stub the factory holds all of it, which is what the protected floor requires.\n- **Writer symmetry** holds: balances have one write path, allowances have one setter and one guarded decrement, with no weaker writer anywhere.","treeHash":null,"usage":{"cachedInputTokens":426568,"inputTokens":162,"model":"claude-fable-5-1","outputTokens":9094,"runtime":"claude","turns":18,"wallClockMs":172415}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"a31e321b410aaa02","findings":[],"hash":"f7e61949ef6ae856f8282a3ffe8674c2d99ad70665dd8aaa5408520d811679c2","nodeId":"608b973a-8d2c-418d-8b2c-44f5a1e15fc0","outcome":"completed","summary":"The review is complete. The findings file holds an empty list and seven coverage rows, and no repository file was changed.\n\n**Result: no defects found** in the Economic Security, Invariant and Flow Gap areas for `src/PonziramidToken.sol`.\n\nWhat I checked and how:\n\n- **Build and tests.** The project compiles with solc 0.8.26 and all 31 existing tests pass with the verifier's fuzz seed. Formatting check passes.\n- **Entry points.** All three state-changing entry points (approve, transfer, transferFrom) hold. I traced each guard and state write and probed them with a scratch test covering self-transfer of the full balance, zero-value transferFrom without allowance, the max-minus-one allowance boundary, a from-zero-address transferFrom, and a conservation fuzz over four actors and both transfer paths.\n- **Invariants.** The sum of balances always equals the constant total supply of 1e27. There is no mint, burn, selfdestruct or other writer of balances. Storage holds only the two mappings and the ABI exposes only the ERC-20 surface plus the supply constant.\n- **Economic and flow seams.** The token has no fee, hook, callback, exemption list or external dependency, so the factory-to-distributor, pool seed and swap flows move exact amounts. The constructor mints the whole supply to msg.sender with no arguments, so a CREATE2 deployment from the factory lands it on the factory.\n- **Static analysis leads.** Slither reported nothing. The aderyn large-literal note on line 46 is a compile-time constant and harmless.\n\nTwo items I recorded as notes rather than defects:\n\n- The standard ERC-20 approve race is reproducible here. It is the semantics the brief asks for, matches OpenZeppelin v5, and the README documents it, so it is not a defect.\n- The protected Uniswap v4 harness could not run on this machine because v4-core and the launch liquidity helper are not vendored. The token exposes only the plain transfer and balanceOf calls that path needs, so I do not expect a failure there.\n\nNo launch.json exists in the tree yet, so there was no manifest to review at this stage.","treeHash":null,"usage":{"cachedInputTokens":471428,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":13286,"runtime":"claude","turns":21,"wallClockMs":246318}}],"verification":[{"checks":[{"durationMs":756,"exitCode":0,"name":"build","output":"Compiling 21 files with Solc 0.8.26\nSolc 0.8.26 finished in 672.10ms\nCompiler run successful!\n","passed":true},{"durationMs":88,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 31 tests for test/PonziramidToken.t.sol:PonziramidTokenTest\n[PASS] testFuzz_chainOfTransfersConservesSupply(uint256,uint256,uint256) (runs: 256, μ: 251970, ~: 255666)\nLogs:\n  Bound result 362851685736064852873904943\n  Bound result 31560558201972262877318135\n  Bound result 27557698564061507767715892\n\n[PASS] testFuzz_transferAboveBalanceReverts(uint256,uint256) (runs: 256, μ: 99394, ~: 100098)\nLogs:\n  Bound result 17086\n  Bound result 999999999999999999999997764\n\n[PASS] testFuzz_transferFromRespectsAllowance(uint256,uint256) (runs: 256, μ: 131860, ~: 121815)\nLogs:\n  Bound result 17086\n  Bound result 14850\n\n[PASS] testFuzz_transferIsExactAndConservesSupply(address,uint256) (runs: 256, μ: 105991, ~: 106364)\nLogs:\n  Bound result 1\n\n[PASS] test_allowanceIsPerSpender() (gas: 102471)\n[PASS] test_approveOverwritesPreviousAllowance() (gas: 92526)\n[PASS] test_approveSetsAllowanceAndEmits() (gas: 64815)\n[PASS] test_approveZeroSpenderReverts() (gas: 32897)\n[PASS] test_constructorEmitsMintTransfer() (gas: 8150)\n[PASS] test_constructorMintsWholeSupplyToDeployer() (gas: 17491)\n[PASS] test_create2DeploymentMintsToTheCreatingContract() (gas: 201200)\n[PASS] test_deployerHasNoSpecialPowerOverHolders() (gas: 95114)\n[PASS] test_etherIsRefused() (gas: 38720)\n[PASS] test_infiniteAllowanceIsNotDecremented() (gas: 129955)\n[PASS] test_metadata() (gas: 23879)\n[PASS] test_noAdminSelectorChangesSupplyOrBalances() (gas: 469798)\n[PASS] test_runtimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 728457)\n[PASS] test_supplyIsOneBillionWith18Decimals() (gas: 23195)\n[PASS] test_transferFromRevertsBeyondAllowance() (gas: 87858)\n[PASS] test_transferFromRevertsWhenOwnerBalanceTooLow() (gas: 152469)\n[PASS] test_transferFromSpendsAllowanceAndMovesTokens() (gas: 156696)\n[PASS] test_transferFromToZeroAddressReverts() (gas: 88513)\n[PASS] test_transferFromWithoutAllowanceReverts() (gas: 40372)\n[PASS] test_transferMovesExactAmountAndEmits() (gas: 85144)\n[PASS] test_transferRevertsFromEmptyAccount() (gas: 37698)\n[PASS] test_transferRevertsOnInsufficientBalance() (gas: 92378)\n[PASS] test_transferToSelfKeepsBalance() (gas: 40371)\n[PASS] test_transferToZeroAddressReverts() (gas: 32873)\n[PASS] test_transferWholeBalance() (gas: 71972)\n[PASS] test_transferZeroAmountSucceeds() (gas: 44383)\n[PASS] test_twoDeploymentsAreIndependent() (gas: 26092)\nSuite result: ok. 31 passed; 0 failed; 0 skipped; finished in 10.86ms (38.19ms CPU time)\n\nRan 1 test suite in 11.61ms (10.86ms CPU time): 31 tests passed, 0 failed, 0 skipped (31 total tests)\n","passed":true},{"durationMs":37,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"PonziramidToken.approve(address,uint256)\",\"PonziramidToken.transfer(address,uint256)\",\"PonziramidToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":11,\"README.md\":91,\"foundry.toml\":22,\"remappings.txt\":1,\"src/PonziramidToken.sol\":144,\"test/PonziramidToken.t.sol\":365},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":464,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":273,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/PonziramidToken.sol:46: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"19a2394357e23477d9f212ba92214b842f063e944093bba20767d4a7ff14028d","verifiedTreeHash":"dd1735c54cc0a5ed3993f87a9140579be0142cfc","verifierVersion":"0.1.0+67c588fa"},{"checks":[{"durationMs":1402,"exitCode":0,"name":"build","output":"Compiling 23 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.32s\nCompiler run successful!\n","passed":true},{"durationMs":10971,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 31 tests for test/PonziramidToken.t.sol:PonziramidTokenTest\n[PASS] testFuzz_chainOfTransfersConservesSupply(uint256,uint256,uint256) (runs: 256, μ: 251592, ~: 255662)\nLogs:\n  Bound result 1446\n  Bound result 1233\n  Bound result 1\n\n[PASS] testFuzz_transferAboveBalanceReverts(uint256,uint256) (runs: 256, μ: 99571, ~: 100099)\nLogs:\n  Bound result 17086\n  Bound result 999999999999999999999997764\n\n[PASS] testFuzz_transferFromRespectsAllowance(uint256,uint256) (runs: 256, μ: 132078, ~: 122159)\nLogs:\n  Bound result 17086\n  Bound result 14850\n\n[PASS] testFuzz_transferIsExactAndConservesSupply(address,uint256) (runs: 256, μ: 106126, ~: 106364)\nLogs:\n  Bound result 88797132341284139191816442\n\n[PASS] test_allowanceIsPerSpender() (gas: 102471)\n[PASS] test_approveOverwritesPreviousAllowance() (gas: 92526)\n[PASS] test_approveSetsAllowanceAndEmits() (gas: 64815)\n[PASS] test_approveZeroSpenderReverts() (gas: 32897)\n[PASS] test_constructorEmitsMintTransfer() (gas: 8150)\n[PASS] test_constructorMintsWholeSupplyToDeployer() (gas: 17491)\n[PASS] test_create2DeploymentMintsToTheCreatingContract() (gas: 201200)\n[PASS] test_deployerHasNoSpecialPowerOverHolders() (gas: 95114)\n[PASS] test_etherIsRefused() (gas: 38720)\n[PASS] test_infiniteAllowanceIsNotDecremented() (gas: 129955)\n[PASS] test_metadata() (gas: 23879)\n[PASS] test_noAdminSelectorChangesSupplyOrBalances() (gas: 469798)\n[PASS] test_runtimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 728457)\n[PASS] test_supplyIsOneBillionWith18Decimals() (gas: 23195)\n[PASS] test_transferFromRevertsBeyondAllowance() (gas: 87858)\n[PASS] test_transferFromRevertsWhenOwnerBalanceTooLow() (gas: 152469)\n[PASS] test_transferFromSpendsAllowanceAndMovesTokens() (gas: 156696)\n[PASS] test_transferFromToZeroAddressReverts() (gas: 88513)\n[PASS] test_transferFromWithoutAllowanceReverts() (gas: 40372)\n[PASS] test_transferMovesExactAmountAndEmits() (gas: 85144)\n[PASS] test_transferRevertsFromEmptyAccount() (gas: 37698)\n[PASS] test_transferRevertsOnInsufficientBalance() (gas: 92378)\n[PASS] test_transferToSelfKeepsBalance() (gas: 40371)\n[PASS] test_transferToZeroAddressReverts() (gas: 32873)\n[PASS] test_transferWholeBalance() (gas: 71972)\n[PASS] test_transferZeroAmountSucceeds() (gas: 44383)\n[PASS] test_twoDeploymentsAreIndependent() (gas: 26092)\nSuite result: ok. 31 passed; 0 failed; 0 skipped; finished in 112.03ms (344.71ms CPU time)\n\nRan 24 tests for test/PonziramidTokenProperties.t.sol:PonziramidTokenPropertiesTest\n[PASS] testFuzz_approvalReplacementAndDirectTransfersAreIndependent(uint256,uint256,uint256) (runs: 1000, μ: 250351, ~: 250791)\nLogs:\n  Bound result 3911\n\n[PASS] testFuzz_balanceFailureRestoresFiniteAllowance(uint256,uint256) (runs: 1000, μ: 212310, ~: 212964)\nLogs:\n  Bound result 15441\n  Bound result 16163\n\n[PASS] testFuzz_delegatedSelfTransferOnlyConsumesAllowance(uint256,uint256) (runs: 1000, μ: 146230, ~: 146560)\nLogs:\n  Bound result 170046230848826973466918400\n  Bound result 115792089237316195423570985008687907853269984665640393993226735180949137202555\n\n[PASS] testFuzz_splitDelegatedSpendsEqualOneSpend(uint256,uint256) (runs: 1000, μ: 356724, ~: 358468)\nLogs:\n  Bound result 3\n  Bound result 1\n\n[PASS] testFuzz_transferRoundTripRestoresBalances(uint256,uint256) (runs: 1000, μ: 820733, ~: 894430)\nLogs:\n  Bound result 417803193366691590532188863\n  Bound result 7\n\n[PASS] testFuzz_zeroReceiverFailureRestoresAllowance(uint256,uint256) (runs: 1000, μ: 260459, ~: 261233)\nLogs:\n  Bound result 14068\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129625964\n\n[PASS] test_allowancesAreIsolatedByBothOwnerAndSpender() (gas: 298921)\n[PASS] test_approvalWithoutBalanceWorksAfterFunding() (gas: 220262)\n[PASS] test_exhaustedAllowanceCannotBeSpentTwice() (gas: 281065)\n[PASS] test_finiteAndInfiniteApprovalsCanBeRevoked() (gas: 419277)\n[PASS] test_fullSupplySelfTransferAndDelegatedSelfTransfer() (gas: 210120)\n[PASS] test_infiniteApprovalCanBeReplacedWithFiniteApproval() (gas: 226150)\n[PASS] test_maximumAllowanceDoesNotPermitSpendingAboveSupply() (gas: 138001)\n[PASS] test_maximumMinusOneAllowanceIsFinite() (gas: 166069)\n[PASS] test_maximumTransferRevertsWithoutWrappingBalances() (gas: 75058)\n[PASS] test_oneWeiCanBeTransferredAndReturned() (gas: 154463)\n[PASS] test_ownerCallingTransferFromStillNeedsSelfApproval() (gas: 233692)\n[PASS] test_selfTransferCannotBypassBalanceCheck() (gas: 72911)\n[PASS] test_transferFromZeroOwnerRejectsZeroValue() (gas: 84978)\n[PASS] test_zeroApprovalEmitsAndIsIdempotent() (gas: 178083)\n[PASS] test_zeroApproverCannotApproveEvenZero() (gas: 37455)\n[PASS] test_zeroReceiverAndSpenderRejectZeroValue() (gas: 134955)\n[PASS] test_zeroSenderCannotTransferEvenZero() (gas: 71937)\n[PASS] test_zeroTransfersEmitAndNeedNoBalanceOrAllowance() (gas: 137418)\nSuite result: ok. 24 passed; 0 failed; 0 skipped; finished in 112.05ms (649.80ms CPU time)\n\nRan 2 tests for test/PonziramidTokenInvariant.t.sol:PonziramidTokenInvariantTest\n[PASS]\nPonziramidTokenInvariantTest invariants:\n[PASS] invariant_allAllowancesMatchApprovalAndSpendingHistory\n[PASS] invariant_eachBalanceMatchesAuthorizedTransfers\n[PASS] invariant_supplyEqualsSumOfAllReachableBalances\n PonziramidTokenInvariantTest invariants (runs: 256, calls: 32768, reverts: 0)\n\n╭-------------------+----------------------+-------+---------+----------╮\n| Contract          | Selector             | Calls | Reverts | Discards |\n+=======================================================================+\n| PonziramidHandler | approve              | 4045  | 0       | 0        |\n|-------------------+----------------------+-------+---------+----------|\n| PonziramidHandler | rejectAboveAllowance | 4077  | 0       | 0        |\n|-------------------+----------------------+-------+---------+----------|\n| PonziramidHandler | rejectAboveBalance   | 4098  | 0       | 0        |\n|-------------------+----------------------+-------+---------+----------|\n| PonziramidHandler | rejectZeroReceiver   | 4076  | 0       | 0        |\n|-------------------+----------------------+-------+---------+----------|\n| PonziramidHandler | revokeAndReject      | 4101  | 0       | 0        |\n|-------------------+----------------------+-------+---------+----------|\n| PonziramidHandler | transfer             | 4153  | 0       | 0        |\n|-------------------+----------------------+-------+---------+----------|\n| PonziramidHandler | transferFrom         | 4026  | 0       | 0        |\n|-------------------+----------------------+-------+---------+----------|\n| PonziramidHandler | transferFullBalance  | 4192  | 0       | 0        |\n╰-------------------+----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 200000000000000000000000000\n  Bound result 200000000000000000000000000\n  Bound result 200000000000000000000000000\n  Bound result 200000000000000000000000000\n  Bound result 200000000000000000000000000\n  Bound result 200000000000000000000000000\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640364039457584007913129639941\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639934\n  Bound result 115792089237316195423570985008687907853269984665640364039457584007913129640112\n  Bound result 10\n  Bound result 115792089237316195423570985008687907853269984665640364039457584036055271283033\n  Bound result 0\n  Bound result 200000000000000000000000004\n  Bound result 5786930195878527309\n  Bound result 0\n  Bound result 273\n  Bound result 4248\n  Bound result 100000000000000000000\n  Bound result 115792089237316195423570985008687907853269984665640364039468584007913129639935\n  Bound result 242\n  Bound result 6\n  Bound result 7502\n  Bound result 0\n  Bound result 1000000000000000000\n  Bound result 800000000000000000000000000\n  Bound result 0\n  Bound result 317959135346329416561931402\n  Bound result 0\n  Bound result 127\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665639964039457584007913129640183\n  Bound result 0\n  Bound result 0\n  Bound result 6793\n  Bound result 717\n  Bound result 115792089237316195423570985008687907853269984665640364039457584007913129640081\n  Bound result 241\n  Bound result 9740\n  Bound result 429\n  Bound result 6087\n  Bound result 0\n  Bound result 0\n  Bound result 11\n  Bound result 3\n  Bound result 752\n  Bound result 0\n  Bound result 15664561984534535085669\n  Bound result 0\n  Bound result 120052860420193125979772578915996326216071375518338489978085192077\n  Bound result 0\n  Bound result 0\n  Bound result 42\n  Bound result 3346033313229560979682927\n  Bound result 2\n  Bound result 7081\n  Bound result 0\n  Bound result 345\n  Bound result 115792089237316195423570985008687907853269984665639764039457584007913129639939\n  Bound result 0\n  Bound result 405876093215442558111529601\n  Bound result 24937012511142134410621985585231942208882185415305442244486350760167141335\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639857\n  Bound result 10477\n  Bound result 0\n  Bound result 0\n  Bound result 65533698262194228040\n  Bound result 2\n  Bound result 0\n  Bound result 255\n  Bound result 199999999999999999999999997\n  Bound result 0\n  Bound result 0\n  Bound result 1261\n  Bound result 115792089237316195423570985008687907853269984665639764039457584007913129639953\n  Bound result 199999999999999999999999999\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 183092\n  Bound result 2867\n  Bound result 0\n  Bound result 7254\n  Bound result 315\n\n[PASS] test_handlerExercisesValidAndRejectedTransitions() (gas: 3130345)\nLogs:\n  Bound result 200000000000000000000000000\n  Bound result 200000000000000000000000000\n  Bound result 200000000000000000000000000\n  Bound result 200000000000000000000000000\n  Bound result 200000000000000000000000000\n  Bound result 200000000000000000000000000\n  Bound result 1\n  Bound result 1\n  Bound result 1\n  Bound result 1\n  Bound result 1\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639935\n  Bound result 1000000000000000000000000000\n  Bound result 1\n  Bound result 1\n  Bound result 1\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 10.89s (10.89s CPU time)\n\nRan 3 test suites in 10.89s (11.11s CPU time): 57 tests passed, 0 failed, 0 skipped (57 total tests)\n","passed":true},{"durationMs":55,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"PonziramidToken.approve(address,uint256)\",\"PonziramidToken.transfer(address,uint256)\",\"PonziramidToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":11,\"README.md\":91,\"foundry.toml\":22,\"remappings.txt\":1,\"src/PonziramidToken.sol\":144,\"test/PonziramidToken.t.sol\":365,\"test/PonziramidTokenInvariant.t.sol\":247,\"test/PonziramidTokenProperties.t.sol\":330},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"3575ed8086a37d95e85b9a1f646d647c29293a4255f6966269c195fbc08281d5","verifiedTreeHash":"24b3f8e6c7078c8fe9e7de1221b7420d59c0dcde","verifierVersion":"0.1.0+67c588fa"},{"checks":[{"durationMs":797,"exitCode":0,"name":"build","output":"Compiling 21 files with Solc 0.8.26\nSolc 0.8.26 finished in 720.58ms\nCompiler run successful!\n","passed":true},{"durationMs":87,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 31 tests for test/PonziramidToken.t.sol:PonziramidTokenTest\n[PASS] testFuzz_chainOfTransfersConservesSupply(uint256,uint256,uint256) (runs: 256, μ: 251970, ~: 255666)\nLogs:\n  Bound result 362851685736064852873904943\n  Bound result 31560558201972262877318135\n  Bound result 27557698564061507767715892\n\n[PASS] testFuzz_transferAboveBalanceReverts(uint256,uint256) (runs: 256, μ: 99394, ~: 100098)\nLogs:\n  Bound result 4508223735022902756\n  Bound result 187373975415733242561039748\n\n[PASS] testFuzz_transferFromRespectsAllowance(uint256,uint256) (runs: 256, μ: 131860, ~: 121815)\nLogs:\n  Bound result 4508223735022902756\n  Bound result 187373975415733242561039748\n\n[PASS] testFuzz_transferIsExactAndConservesSupply(address,uint256) (runs: 256, μ: 105991, ~: 106364)\nLogs:\n  Bound result 88797132341284139191816442\n\n[PASS] test_allowanceIsPerSpender() (gas: 102471)\n[PASS] test_approveOverwritesPreviousAllowance() (gas: 92526)\n[PASS] test_approveSetsAllowanceAndEmits() (gas: 64815)\n[PASS] test_approveZeroSpenderReverts() (gas: 32897)\n[PASS] test_constructorEmitsMintTransfer() (gas: 8150)\n[PASS] test_constructorMintsWholeSupplyToDeployer() (gas: 17491)\n[PASS] test_create2DeploymentMintsToTheCreatingContract() (gas: 201200)\n[PASS] test_deployerHasNoSpecialPowerOverHolders() (gas: 95114)\n[PASS] test_etherIsRefused() (gas: 38720)\n[PASS] test_infiniteAllowanceIsNotDecremented() (gas: 129955)\n[PASS] test_metadata() (gas: 23879)\n[PASS] test_noAdminSelectorChangesSupplyOrBalances() (gas: 469798)\n[PASS] test_runtimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 728457)\n[PASS] test_supplyIsOneBillionWith18Decimals() (gas: 23195)\n[PASS] test_transferFromRevertsBeyondAllowance() (gas: 87858)\n[PASS] test_transferFromRevertsWhenOwnerBalanceTooLow() (gas: 152469)\n[PASS] test_transferFromSpendsAllowanceAndMovesTokens() (gas: 156696)\n[PASS] test_transferFromToZeroAddressReverts() (gas: 88513)\n[PASS] test_transferFromWithoutAllowanceReverts() (gas: 40372)\n[PASS] test_transferMovesExactAmountAndEmits() (gas: 85144)\n[PASS] test_transferRevertsFromEmptyAccount() (gas: 37698)\n[PASS] test_transferRevertsOnInsufficientBalance() (gas: 92378)\n[PASS] test_transferToSelfKeepsBalance() (gas: 40371)\n[PASS] test_transferToZeroAddressReverts() (gas: 32873)\n[PASS] test_transferWholeBalance() (gas: 71972)\n[PASS] test_transferZeroAmountSucceeds() (gas: 44383)\n[PASS] test_twoDeploymentsAreIndependent() (gas: 26092)\nSuite result: ok. 31 passed; 0 failed; 0 skipped; finished in 10.01ms (35.99ms CPU time)\n\nRan 1 test suite in 10.81ms (10.01ms 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\":[\"PonziramidToken.approve(address,uint256)\",\"PonziramidToken.transfer(address,uint256)\",\"PonziramidToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":11,\"README.md\":91,\"foundry.toml\":22,\"launch.json\":24,\"remappings.txt\":1,\"src/PonziramidToken.sol\":144,\"test/PonziramidToken.t.sol\":365},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"7d93c53c80977913e82a4ca6e4a6ac15b1da2857db68934fdd0cc0c3626d9f1c","verifiedTreeHash":"9f5d0492f5de2b2630cb7513ee6910fc332ce5d1","verifierVersion":"0.1.0+67c588fa"}]}