{"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":"5ad8548e-278e-4c25-92a0-e01385a4fbe4","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"da61059d5a6d7d06d98fc5fd20e183f5a1d003abf5bdcf0806a9215411cfd797","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":"63651acbd1e54cd84cc676a74b67b08fdb31c189101d9fe73e80d08ea3d2deda","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":"4286f2d1fbcac0812f9e86fca4071593ef3372da342b0aa489d0bf1de0d29983","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":"8507c146e09d0675cf55da20f54b0cd3608da95ce622d55f041286dfb90ab753","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":"a26ed3a73939ec1747b24712e5a9fe7f1b1edb6a57b2a8157bc04864c887ccef","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":"2606ae74feafb687a06afabfa8b083027166b2644992825fd3ebcf4f6baddbc6","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":"11fd7e20db7a890d1586912d49d93196765107f5f9be4bf2492e170e6238dd4c","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"efda3bc6cca33e41a4791c20798d442e6659f98d3f65d8c08353a8ca60eea88b","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"73431852439ad3a343f3d2b7db1c43cd363b9f48f9bb51497374a0cf6d50b223","skillId":"write-foundry-tests","tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"73431852439ad3a343f3d2b7db1c43cd363b9f48f9bb51497374a0cf6d50b223","skillId":"write-foundry-tests","state":"accepted"}],"objective":"A custom token: PLEA (PLEA).\nToken name: PLEA\nToken symbol: PLEA\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.\nWhat it does: A custom token: PLEA\nToken name: PLEA\nToken symbol: PLEA\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.\nwebsite：imdacc.fun","parentJobId":null,"planHash":"6a5299bc05089960059cdd56249619e80c8a282f6ec0418a1bd2efb7229ac1ea","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"5ad8548e-278e-4c25-92a0-e01385a4fbe4","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-1609-plea"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"52019","feedbackHash":"ab1f2ccff5ecb8927ffa4855ade37f55bb189e231de9dfba71895e5ab88ff49e","nodeKey":"audit_economics","submissionHash":"da61059d5a6d7d06d98fc5fd20e183f5a1d003abf5bdcf0806a9215411cfd797","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52626","feedbackHash":"8e3a602965d7d1c2b771ff7a8152826c6437bbbe32858d7014ad36bf3abd9d8f","nodeKey":"audit_flow","submissionHash":"63651acbd1e54cd84cc676a74b67b08fdb31c189101d9fe73e80d08ea3d2deda","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"53932","feedbackHash":"af04279ad7df75dac536d4e23750b94529719d609377251ad5b62b9a11d0c0a1","nodeKey":"audit_judge","submissionHash":"4286f2d1fbcac0812f9e86fca4071593ef3372da342b0aa489d0bf1de0d29983","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51515","feedbackHash":"09bec7e4838b63436e7bcc3ea4fd07cb3bb96aef5217e2eb0f13c03f0e05b3bf","nodeKey":"audit_math","submissionHash":"8507c146e09d0675cf55da20f54b0cd3608da95ce622d55f041286dfb90ab753","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52614","feedbackHash":"34531d81f58072a84630e3fbe227cf61c5dd943f54b1b3c1e0321e675f0198ad","nodeKey":"audit_permissions","submissionHash":"a26ed3a73939ec1747b24712e5a9fe7f1b1edb6a57b2a8157bc04864c887ccef","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52099","feedbackHash":"f059dd34db51a45b12fbccb591a94bd1fa4d37a41e1354be94198fa65d77b50d","nodeKey":"build_contract_project","submissionHash":"2606ae74feafb687a06afabfa8b083027166b2644992825fd3ebcf4f6baddbc6","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51305","feedbackHash":"989bd8a3e35d2115a175d7a3b741c3996f65e614fb5f1356a51578e4b9f31fe7","nodeKey":"manifest","submissionHash":"11fd7e20db7a890d1586912d49d93196765107f5f9be4bf2492e170e6238dd4c","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52653","feedbackHash":"2ed88ad92bf6a0928858ed5c3aa6200f6555ea8b0c08fe9eaa48daa18537ef98","nodeKey":"write_foundry_tests","submissionHash":"efda3bc6cca33e41a4791c20798d442e6659f98d3f65d8c08353a8ca60eea88b","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"969caf23cad1a08e2f965d23edaf0e6caa72853737d79641cb921c1f2f114151","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"db21ea9e1e78919771320f847947c120a915b0efcd6001fe6d9639bb53e3154c","device":"4576f670afa0131d","findings":[],"hash":"11fd7e20db7a890d1586912d49d93196765107f5f9be4bf2492e170e6238dd4c","nodeId":"3ac0e6c9-551f-4d70-a4e9-ee7fd391e9d6","outcome":"completed","summary":"`launch.json` is written and verified. The only new file in the tree is the manifest; the other untracked entries are the sandbox's device-node dotfiles, not my changes.\n\n**What the manifest says**\n\n- **Token:** contract `PLEA`, name PLEA, symbol PLEA, 18 decimals, empty `constructorArgs`, matching the accepted no-argument constructor in `src/PLEA.sol`.\n- **totalSupply:** the constructor mints `1_000_000_000 * 10**18` to msg.sender, so the manifest states the matching 27-zero decimal string.\n- **Contracts:** empty list. The accepted tree holds only the token, so no application contracts are named.\n- **pool:** IMD pair address, fee 12500, tick spacing 60, and the one-to-one sqrtPriceX96 from the reference.\n- **economics:** copied verbatim from the job.\n- **notes:** 1,383 characters describing the fixed supply, the factory mint, the absence of privileged or fee-on-transfer logic, and the pool terms.\n\n**Checks run**\n\n- JSON parses, top-level keys are exactly `kind`, `token`, `contracts`, `pool`, `economics`, `notes`, and no hex string has odd length.\n- `forge build --offline`, `forge test --offline` (33 tests across 2 suites, all passing, including the invariant suite), and `forge fmt --check` all succeed.\n\nNothing outside `launch.json` was modified.","treeHash":"a4fc8bf99bd8249932a267fac0c2ad1b2f4cceff","usage":{"cachedInputTokens":339372,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":3379,"runtime":"claude","turns":8,"wallClockMs":67446}},{"artifacts":[],"attempt":1,"bundleHash":"37e52e4396abb16492ca276798395777cb8486e7fe7992108cc9325c9e9c7444","device":"d3d81960929eb1a1","findings":[],"hash":"2606ae74feafb687a06afabfa8b083027166b2644992825fd3ebcf4f6baddbc6","nodeId":"ee09585e-5661-4841-961a-5ffe5738bcf2","outcome":"completed","summary":"Implemented PLEA with 18 decimals and exactly 1,000,000,000 tokens minted once to the deployer. No additional minting or admin controls.\n\nDependencies are vendored for offline builds; deployment assumptions and responsibilities are documented in README.md.\n\nVerified successfully:\n\n- `forge build`\n- `forge test` — 33 passing tests, including fuzz and stateful invariant tests\n- `forge fmt --check`","treeHash":"d0c2ee4221202f9a3a2dc61897423ba6ace06a39","usage":{"cachedInputTokens":397696,"inputTokens":47348,"model":"gpt-6-astra","outputTokens":13492,"runtime":"codex","turns":5,"wallClockMs":459712}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"8109087d965ddf6c","findings":[{"citation":"resolved","description":"Merged from audit_flow (low), audit_permissions (info) and audit_economics (low): all three report the same root cause. lib/README.md line 4 states that the vendored upstream files are unmodified and that `sha256sum --check lib/SHA256SUMS` (lib/README.md line 24, also pointed to by README.md line 42) verifies them. I ran that command from the repository root: 29 files verify and 7 fail, all under lib/forge-std/src/ (StdJson.sol, StdToml.sol, Vm.sol, console.sol, StdAssertions.sol, interfaces/IMulticall3.sol, interfaces/IERC7540.sol). I then downloaded the forge-std v1.9.7 release archive (its sha256 45157353ab49eab01d294565866731e599b32401757229689ee459aa26b7ee94 matches the value quoted in lib/README.md line 18) and compared each failing file to the archive copy: after stripping all spaces, tabs and newlines the seven pairs hash identically, and a plain diff shows only line re-wrapping (for example the four-line getDeployment signature at upstream Vm.sol lines 827-830 collapsed onto one line at the vendored Vm.sol line 827). So the committed files are the v1.9.7 sources reformatted by forge fmt, and SHA256SUMS records the pre-format hashes. All five OpenZeppelin v5.4.0 files that production code imports verify OK, forge-std is used only by tests, and the PLEA runtime contains no CALL, STATICCALL, DELEGATECALL, CALLCODE, CREATE or SELFDESTRUCT opcodes, so the token's creation and runtime bytecode are unaffected. Impact is limited to the repository's own provenance claim being false: a verifier following the README cannot confirm the vendored test library without re-deriving provenance as I did. Note that `forge fmt --check` currently passes because lib/ was formatted; restoring the pristine bytes would make it fail unless lib/ is excluded from formatting. Fix (author's choice, both in files outside the token source): regenerate lib/SHA256SUMS from the committed files and change the README wording from 'unmodified' to 'reformatted with forge fmt, semantically unmodified'; or restore the upstream bytes for the seven files and keep the formatter off lib/.","line":4,"path":"lib/README.md","reproduction":"From the repository root run: sha256sum --check lib/SHA256SUMS ; echo exit=$? . Expected (per lib/README.md lines 4 and 24): every line OK and exit 0. Actual: 'sha256sum: WARNING: 7 computed checksums did NOT match', exit 1, with FAILED for lib/forge-std/src/StdJson.sol, StdToml.sol, Vm.sol, console.sol, StdAssertions.sol, interfaces/IMulticall3.sol and interfaces/IERC7540.sol. Cross-check: sha256sum lib/forge-std/src/Vm.sol prints a1b1c82924aecf0f38b53192fd1e801cccc1e1fd2ecd6b2301e4f4c4ab102a15 while lib/SHA256SUMS line 21 records 9068805b59ac1d0ea03a8fa1f15ae49c094e0c6c852a2500e0dd112f264b2cb1, the hash of src/Vm.sol in the v1.9.7 archive. For each of the seven files, `tr -d ' \\t\\n\\r' < upstream | sha256sum` equals the same of the vendored file, proving the difference is whitespace only.","severity":"low","snippet":"needed. Upstream source files and licenses are unmodified; `SHA256SUMS` records their","title":"Seven vendored forge-std files do not match lib/SHA256SUMS, so the documented provenance check fails"}],"hash":"4286f2d1fbcac0812f9e86fca4071593ef3372da342b0aa489d0bf1de0d29983","nodeId":"4b1f2702-1809-43e6-b901-935ded6615e6","outcome":"completed","summary":"The review is complete and written to `.imd-findings.json`. No repository file was changed (git status is clean apart from the findings file, which is ignored).\n\n**Outcome:** the PLEA token is a plain OpenZeppelin v5.4.0 ERC-20 with a no-argument constructor that mints the full supply once to the deployer. I found no defect in the token itself. The only specialist finding, reported three times by the flow, permissions and economics areas, reproduces and is merged into one low finding.\n\n**The one finding (low):** seven vendored forge-std files fail the hash check that the dependency README tells a verifier to run.\n\n- Running the check from the repository root reports 29 OK and 7 FAILED, exit status 1, all under the forge-std sources.\n- I downloaded the forge-std v1.9.7 archive, whose hash matches the value the README quotes, and compared each failing file. With all whitespace stripped the pairs hash identically, so the committed files are the upstream sources re-wrapped by the formatter.\n- All five OpenZeppelin files the token imports verify, forge-std is test-only, and the compiled runtime has no CALL, DELEGATECALL, CREATE or SELFDESTRUCT opcodes, so the deployed bytecode is unaffected. The defect is a false provenance claim, nothing more.\n\n**Coverage:** all three entry points hold. Each is the unmodified OpenZeppelin implementation, traced through the allowance, balance and zero-address failure paths. I also recorded the supply invariant, the manifest (schema keys only, empty constructor arguments matching the constructor, supply and decimals exact, sizes far below the limits) and the opcode floor as holding. The build succeeds and the existing 50 tests pass.\n\n**Leads dropped:** the aderyn \"large numeric literal\" line points at the underscore-separated supply constant and is not a defect.","treeHash":null,"usage":{"cachedInputTokens":578583,"inputTokens":354,"model":"claude-fable-5-1","outputTokens":8113,"runtime":"claude","turns":12,"wallClockMs":155522}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"790f4e545968ee92","findings":[{"citation":"resolved","description":"lib/README.md states that every vendored upstream file is unmodified and that `sha256sum --check lib/SHA256SUMS` verifies them, and the root README.md (line 42) points reviewers to that claim. Seven forge-std v1.9.7 files in the committed tree (src/StdJson.sol, src/StdToml.sol, src/Vm.sol, src/console.sol, src/StdAssertions.sol, src/interfaces/IMulticall3.sol, src/interfaces/IERC7540.sol) were reformatted (forge fmt line-wrapping) after the hash list was written, so the recorded hashes are for the upstream bytes and the committed bytes differ. I downloaded the v1.9.7 release archive (sha256 45157353ab49...ee94, matching lib/README.md) and confirmed the differences are whitespace-only; the five OpenZeppelin v5.4.0 files used by production code are byte-identical to upstream and their hashes verify. There is no effect on the token's bytecode or behaviour: forge-std is test-only. The defect is that the repository's own verification instruction is false, which defeats the purpose of shipping SHA256SUMS and forces anyone auditing the vendored tests to re-derive provenance as I did. Note also that `forge fmt --check` (which README.md instructs) passes only because lib/ was reformatted; restoring the pristine upstream bytes would make the hashes verify but `forge fmt --check` fail unless lib/ is excluded from formatting. Fix: either regenerate lib/SHA256SUMS from the committed files and amend the 'unmodified' wording to say 'reformatted with forge fmt, semantically unmodified', or restore the upstream bytes and add `ignore = [\"lib/**\"]` under [fmt] in foundry.toml (a configuration change that belongs to whoever owns that file).","line":4,"path":"lib/README.md","reproduction":"From the repository root run `sha256sum --check lib/SHA256SUMS`. Expected (per lib/README.md line 4 and line 24): every line reports OK and exit status 0. Actual: 'sha256sum: WARNING: 7 computed checksums did NOT match', exit status 1, with FAILED reported for lib/forge-std/src/StdJson.sol, src/StdToml.sol, src/Vm.sol, src/console.sol, src/StdAssertions.sol, src/interfaces/IMulticall3.sol and src/interfaces/IERC7540.sol. Comparing each against the v1.9.7 archive with `diff` shows only line-wrapping differences (e.g. Vm.sol line 827: the four-line `getDeployment(...)` signature collapsed onto one line).","severity":"low","snippet":"needed. Upstream source files and licenses are unmodified; `SHA256SUMS` records their","title":"Vendored forge-std files do not match lib/SHA256SUMS, so the documented provenance check fails"}],"hash":"63651acbd1e54cd84cc676a74b67b08fdb31c189101d9fe73e80d08ea3d2deda","nodeId":"05b2f178-36f4-4212-b1ad-d0466238464a","outcome":"completed","summary":"Review complete. The findings file is written at `.imd-findings.json` and the working tree is otherwise unchanged apart from that file.\n\n**Outcome:** the PLEA token itself is clean across my area. I found one low-severity provenance defect in the vendored test library, and nothing in the production contract.\n\n**What I traced (Execution Trace, Periphery, First Principles):**\n- `src/PLEA.sol` is a plain OpenZeppelin v5.4.0 ERC-20 with a constructor-only mint of one billion tokens at 18 decimals to the deployer. No constructor arguments, no owner, no hooks, no external calls.\n- All three entry points hold. Approve, transfer and transferFrom go through the unmodified OpenZeppelin paths, revert atomically on bad input, and move exactly the requested amount. The factory cannot pull a holder's tokens without approval.\n- The five vendored OpenZeppelin files are byte-identical to the upstream v5.4.0 release archive.\n- The compiled runtime contains no CALL, DELEGATECALL, CALLCODE, CREATE or SELFDESTRUCT opcodes, checked with the same PUSH-aware scan the protected harness uses.\n- A scratch replica of the protected harness flows (CREATE2 deploy by a factory, swarm share to distributor and claimant, pool transfers both ways, privileged selectors from the factory, ETH rejection) passed. The project's own 33 tests also pass. The scratch file has been removed.\n\n**The one finding (low):** the vendored-library README claims every upstream file is unmodified and verifiable with the recorded checksums, but seven forge-std files were reformatted after the hash list was written. Running the documented command fails:\n\n```\nsha256sum --check lib/SHA256SUMS\n# sha256sum: WARNING: 7 computed checksums did NOT match\n```\n\nI confirmed against the upstream v1.9.7 archive that the differences are whitespace only, so there is no behavioural impact and forge-std is test-only. The fix is to regenerate the hash list and soften the \"unmodified\" wording, or restore the upstream bytes and exclude `lib/` from formatting in the configuration.\n\n**Coverage record:** eight rows, all three listed entry points marked `holds`, plus rows for the constructor and supply invariant, runtime opcodes, OpenZeppelin provenance, forge-std provenance (finding 1) and the launch flows. Nothing was left unreached.","treeHash":null,"usage":{"cachedInputTokens":659478,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":15247,"runtime":"claude","turns":27,"wallClockMs":218968}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"ea89e16822824c6f","findings":[],"hash":"8507c146e09d0675cf55da20f54b0cd3608da95ce622d55f041286dfb90ab753","nodeId":"075b161b-5bf2-4d5b-82c9-b39d72c71237","outcome":"completed","summary":"The review is complete. The findings file is written and the tree is otherwise untouched.\n\n**Result: no defects found in the math, boundary or numerical-gap area.** The file `.imd-findings.json` holds an empty findings list and eight coverage rows.\n\n**What the token is.** PLEA is a 17-line contract that inherits the vendored OpenZeppelin v5.4.0 ERC20 unchanged and mints a constant supply to the deployer in the constructor. There is no override, no mint or burn path, no owner, and no arithmetic of its own beyond the supply constant.\n\n**What I checked, with concrete inputs run in a scratch Foundry suite:**\n- The supply constant evaluates exactly to 10^27 and equals totalSupply. It fits in uint128 and int128, which Uniswap v4 needs for liquidity and deltas.\n- Transfer of uint256 max and of supply plus one revert with the insufficient-balance error before the unchecked subtraction. Transfer of the full balance, of 1 wei, of zero, and self-transfer all conserve balances exactly.\n- Allowance edges: an allowance equal to the value drains to zero, one wei more reverts, max minus one decreases normally, max is treated as infinite and left unchanged. With infinite allowance and a max-value transfer, the balance check still fires.\n- Zero-address sender, receiver and spender all revert. A zero-value transferFrom from the zero address reverts with the InvalidApprover error rather than InvalidSender, which is upstream library behaviour and still a revert with no state change.\n- Launch-share arithmetic has no truncation: 10^27 divides evenly by 10,000 for every basis-point value from 1 to 10,000, and by 1,000.\n- A 512-run fuzz plus the project's own invariant suite show totalSupply stays at 10^27 and equals the sum of balances.\n\n**The aderyn lead** about the large numeric literal is not a defect. The literal is a compile-time constant that evaluates exactly.\n\n**Unreached.** The pool seeding and price derivation could not be exercised because no launch.json exists yet and v4-core is not vendored in this tree. Only the supply's fit in the relevant integer types was verified.\n\nCoverage rows mark all three entry points as holds, with the manifest and pool-math row marked unreached.","treeHash":null,"usage":{"cachedInputTokens":462626,"inputTokens":258,"model":"claude-fable-5-1","outputTokens":10024,"runtime":"claude","turns":15,"wallClockMs":186271}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"9506ecec995bdbf9","findings":[{"citation":"resolved","description":"Outside the assigned area (access control / trust gap / asymmetry); reported because it is concrete and reproducible. lib/README.md tells a verifier to run `sha256sum --check lib/SHA256SUMS` to confirm the vendored files are the unmodified upstream releases. In the committed tree (HEAD 9a02317, which added both lib/SHA256SUMS and the forge-std files) seven forge-std files hash differently from what SHA256SUMS records: src/StdJson.sol, src/interfaces/IMulticall3.sol, src/console.sol, src/Vm.sol, src/interfaces/IERC7540.sol, src/StdAssertions.sol, src/StdToml.sol. All 5 OpenZeppelin files match their recorded hashes, and the OpenZeppelin ERC20.sol, Context.sol, IERC20.sol, IERC20Metadata.sol and draft-IERC6093.sol were read line by line and are the published v5.4.0 text, so production code is unaffected. forge-std is test-only and is not part of the token's creation or runtime bytecode (the runtime contains no CALL/STATICCALL/DELEGATECALL/CREATE/SELFDESTRUCT opcodes and its dispatch table holds exactly the ten ABI selectors). Impact is limited to the provenance claim: either the forge-std files are not the v1.9.7 release the README names, or SHA256SUMS was generated from different files. The author should regenerate lib/SHA256SUMS from the files actually vendored (or re-vendor forge-std v1.9.7) so the documented verification step passes.","line":21,"path":"lib/SHA256SUMS","reproduction":"From the repository root run `sha256sum --check lib/SHA256SUMS`. Expected: every line reports OK (README: 'Upstream source files and licenses are unmodified; SHA256SUMS records their individual hashes'). Actual: 'sha256sum: WARNING: 7 computed checksums did NOT match' for lib/forge-std/src/StdJson.sol, interfaces/IMulticall3.sol, console.sol, Vm.sol, interfaces/IERC7540.sol, StdAssertions.sol, StdToml.sol. Example: SHA256SUMS line 21 records 9068805b...b2cb1 for lib/forge-std/src/Vm.sol while `sha256sum lib/forge-std/src/Vm.sol` gives a1b1c82924aecf0f38b53192fd1e801cccc1e1fd2ecd6b2301e4f4c4ab102a15.","severity":"info","snippet":"9068805b59ac1d0ea03a8fa1f15ae49c094e0c6c852a2500e0dd112f264b2cb1  lib/forge-std/src/Vm.sol","title":"Recorded vendored-dependency hashes do not match seven committed forge-std files, so the README's provenance check fails"}],"hash":"a26ed3a73939ec1747b24712e5a9fe7f1b1edb6a57b2a8157bc04864c887ccef","nodeId":"9c40dacb-e503-41ec-9904-7cb3b3be3c39","outcome":"completed","summary":"The review is complete and the findings file is written.\n\n**Outcome:** The PLEA token's permission model holds. No access control, trust gap or asymmetry defect was found, and nothing in it needs a Foundry proof.\n\n**What was checked**\n\n- The token is the unmodified OpenZeppelin v5.4.0 ERC20 with a constructor-only mint to the deploying account. All five vendored OpenZeppelin files were read line by line and match the published release.\n- The compiled runtime's dispatch table holds exactly the ten ABI selectors. There is no fallback, receive, owner, minter, pauser or initializer, and the runtime contains no call, create, delegatecall or selfdestruct opcodes.\n- A scratch Foundry test exercised the boundaries with concrete actors: the factory that deploys the token receives the whole supply and its caller nothing; neither the deployer, a stranger nor the holder itself can move a holder's balance through transferFrom without an allowance; an allowance is usable only by its spender and only once; unknown selectors and any ETH revert. All five tests passed and the scratch file was removed.\n- The existing suite of 33 tests, including the stateful invariant, passes.\n\n**One informational finding, outside the assigned area:** running `sha256sum --check lib/SHA256SUMS` fails for seven forge-std files, so the provenance check the README documents does not pass. This touches test-only code and cannot affect the token's bytecode. The author should regenerate the hash file or re-vendor forge-std v1.9.7.\n\n**Coverage record:** all three listed entry points are marked `holds`, with five additional rows for the constructor's role handout, hidden entry points, the fixed-supply invariant, launch-flow exactness and the paired-function symmetry checks. No launch.json exists yet, so there was no manifest to review. The protected harness could not be run locally because it depends on v4-core and launch libraries that are not in this tree.","treeHash":null,"usage":{"cachedInputTokens":686306,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":15837,"runtime":"claude","turns":25,"wallClockMs":266472}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"be3be4cc237417f9","findings":[{"citation":"resolved","description":"lib/README.md states that the vendored dependencies are unmodified upstream files and that `sha256sum --check lib/SHA256SUMS` (lib/README.md:24) verifies them. Running that command from the repository root fails for seven forge-std files: lib/forge-std/src/StdJson.sol, src/interfaces/IMulticall3.sol, src/console.sol, src/Vm.sol, src/interfaces/IERC7540.sol, src/StdAssertions.sol and src/StdToml.sol (SHA256SUMS lines 2, 13, 20, 21, 27, 30, 31). The recorded hashes are the real forge-std v1.9.7 hashes (e.g. Vm.sol 9068805b... equals the file in the v1.9.7 release archive whose sha256 45157353... is quoted at lib/README.md:18), but the vendored files have been re-wrapped by a formatter: with all whitespace stripped the seven files are identical to v1.9.7, with whitespace they are not. The five OpenZeppelin v5.4.0 files used by production code are byte-identical to upstream and pass, so this does not affect src/PLEA.sol or the deployed bytecode; it only affects test tooling and the offline provenance step the README tells a verifier to run. Fix: re-vendor the pristine v1.9.7 src/ files (or regenerate SHA256SUMS from the files as shipped and drop the 'unmodified' claim), and keep the formatter from touching lib/. This is outside the assigned economics area and is reported because it is reproducible, not because it affects the token.","line":4,"path":"lib/README.md","reproduction":"From the repository root run: sha256sum --check lib/SHA256SUMS\nExpected (per lib/README.md:4 and :24): every line OK.\nActual: 29 OK, 7 FAILED: lib/forge-std/src/StdJson.sol, lib/forge-std/src/interfaces/IMulticall3.sol, lib/forge-std/src/console.sol, lib/forge-std/src/Vm.sol, lib/forge-std/src/interfaces/IERC7540.sol, lib/forge-std/src/StdAssertions.sol, lib/forge-std/src/StdToml.sol; 'sha256sum: WARNING: 7 computed checksums did NOT match'.\nCross-check: sha256sum lib/forge-std/src/Vm.sol prints a1b1c82924aecf0f38b53192fd1e801cccc1e1fd2ecd6b2301e4f4c4ab102a15, while SHA256SUMS line 21 records 9068805b59ac1d0ea03a8fa1f15ae49c094e0c6c852a2500e0dd112f264b2cb1, which is the hash of src/Vm.sol inside the forge-std v1.9.7 archive (archive sha256 45157353ab49eab01d294565866731e599b32401757229689ee459aa26b7ee94 as quoted in lib/README.md:18). `diff` of each failing file against the v1.9.7 copy shows only line re-wrapping; `tr -d ' \\t\\n\\r'` of both sides hashes identically for all seven files.","severity":"low","snippet":"needed. Upstream source files and licenses are unmodified; `SHA256SUMS` records their","title":"Vendored forge-std files do not match lib/SHA256SUMS; the documented provenance check fails on 7 files"}],"hash":"da61059d5a6d7d06d98fc5fd20e183f5a1d003abf5bdcf0806a9215411cfd797","nodeId":"a2aaed61-051d-4a7a-b921-cf3a39728127","outcome":"completed","summary":"The review is complete and `.imd-findings.json` holds the result: one low-severity finding and fourteen coverage rows, all three ABI entry points answered.\n\n**Outcome.** The PLEA token has no defect in the assigned area. It is the unmodified OpenZeppelin v5.4.0 ERC-20 with a constructor-only mint of exactly 1e27 units to msg.sender, no owner, no hooks, no fee, and no exemption list to get wrong.\n\n**What I verified**\n\n- **Economic Security.** No external calls, oracles, fee formulas or sentinel branches exist. Transfers to the zero address and approvals of the zero spender revert, whole-balance transfers and max-uint approvals behave per ERC-20, and the vendored OpenZeppelin files are byte-identical to the upstream v5.4.0 tag.\n- **Invariants.** Supply equals the manifest string forever, since `_mint` is reachable only from the constructor and ten admin-style selectors revert from both a stranger and the factory. Sum of balances equals supply across the project's 16,384-call invariant run and my own fuzz.\n- **Flow Gap.** I built a scratch lab outside the repository with the real Uniswap v4 PoolManager and ran the launch as the factory performs it: CREATE2 deploy, 10% to a distributor and onward to a claimant, single-sided seed at the 2,500-unit opening cap with fee 12500 and spacing 60, then a buy and a full sell-back by an ordinary trader. It passed with ETH as the pair and with an ERC-20 pair in both currency orders. A replica of the protected opcode scan finds no DELEGATECALL, CALLCODE or SELFDESTRUCT.\n- **Documentation claims.** The README's Ethereum chain claim is consistent with the paired currency, which resolves to the IMD token with 18 decimals on mainnet, and `forge fmt --check` passes on the project files.\n\n**The one finding, low severity.** Seven vendored forge-std files are whitespace-reformatted copies of v1.9.7, so the provenance check that lib/README.md tells a verifier to run fails:\n\n```\nsha256sum --check lib/SHA256SUMS   # 29 OK, 7 FAILED\n```\n\nIt is outside my area and test-only. Production bytecode is unaffected. The fix is to re-vendor the pristine files or regenerate the checksums and drop the \"unmodified\" claim.\n\n**Not reached.** The network's own protected harness could not be run here because it depends on the factory's LaunchLiquidity and hook-guard sources that are not in this tree. My lab reproduces its token-facing flows but not its hook or address-prediction steps.","treeHash":null,"usage":{"cachedInputTokens":1750695,"inputTokens":418,"model":"claude-fable-5-1","outputTokens":55836,"runtime":"claude","turns":56,"wallClockMs":799620}},{"artifacts":[],"attempt":1,"bundleHash":"49bd47f8309c1a417e946d6b7f7e97c0b42cd28d3310bb31beb456723c2c02e9","device":"0bb52b557875d32e","findings":[],"hash":"efda3bc6cca33e41a4791c20798d442e6659f98d3f65d8c08353a8ca60eea88b","nodeId":"e5f5209f-26ac-4078-adda-017c845a4b78","outcome":"completed","summary":"Added 17 tests and expanded stateful invariants covering allowance failures, rollback, boundary values, and transfer liveness.\n\nOffline `forge build` and `forge test` pass: **50 tests, 9,000 fuzz cases, and 32,768 invariant calls**.\n\nOnly `test/` changed. No defects found. The external protected launch integration was not run; its required configuration is absent locally.","treeHash":"08f15fb8de23549cdf352a5abd901ace01588c94","usage":{"cachedInputTokens":1106048,"inputTokens":94065,"model":"gpt-6-astra","outputTokens":17115,"runtime":"codex","turns":6,"wallClockMs":587766}}],"verification":[{"checks":[{"durationMs":1139,"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":4307,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 32 tests for test/PLEA.t.sol:PLEATest\n[PASS] testFuzz_DelegatedTransferTracksBalanceAndAllowance(uint256,uint256) (runs: 512, μ: 164302, ~: 165190)\nLogs:\n  Bound result 356619927782266135014807800\n  Bound result 115792089237316195423570985008687907853269984665640207419529801742055306965193\n\n[PASS] testFuzz_RevertWhenAmountExceedsAllowance(uint256,uint256) (runs: 512, μ: 123280, ~: 123535)\nLogs:\n  Bound result 999999999999999999999999999\n  Bound result 1000000000000000000000000000\n\n[PASS] testFuzz_RevertWhenAmountExceedsBalance(uint256) (runs: 512, μ: 58908, ~: 59247)\nLogs:\n  Bound result 168927009270134003651979802273137161033195330879\n\n[PASS] testFuzz_TransferConservesSupply(address,uint256) (runs: 512, μ: 93024, ~: 93240)\nLogs:\n  Bound result 254722066404785209182123313\n\n[PASS] test_ApprovalDoesNotRequireBalance() (gas: 78324)\n[PASS] test_ApprovalEmitsEventAndCanBeReplacedAndRevoked() (gas: 157853)\n[PASS] test_ConstructorEmitsSingleMint() (gas: 9713)\n[PASS] test_Create2FactoryReceivesWholeSupplyAndDistributesExactAmounts() (gas: 666806)\n[PASS] test_DeployerCannotTakeHolderTokensWithoutApproval() (gas: 151905)\n[PASS] test_MetadataAndInitialSupply() (gas: 107584)\n[PASS] test_NoMintBurnOrAdministrativeEntrypoints() (gas: 1040830)\n[PASS] test_RejectsEther() (gas: 36897)\n[PASS] test_RevertWhenAllowanceRevoked() (gas: 110534)\n[PASS] test_RevertWhenApproveZeroSpender() (gas: 37550)\n[PASS] test_RevertWhenEmptyHolderTransfers() (gas: 37865)\n[PASS] test_RevertWhenOwnerUsesTransferFromWithoutSelfApproval() (gas: 35706)\n[PASS] test_RevertWhenSelfTransferExceedsBalance() (gas: 33449)\n[PASS] test_RevertWhenSpenderIsUnapproved() (gas: 57749)\n[PASS] test_RevertWhenTransferExceedsBalance() (gas: 54958)\n[PASS] test_RevertWhenTransferFromExceedsAllowance() (gas: 115767)\n[PASS] test_RevertWhenTransferFromExceedsBalanceRestoresAllowance() (gas: 121690)\n[PASS] test_RevertWhenTransferFromToZeroRestoresAllowance() (gas: 114049)\n[PASS] test_RevertWhenTransferFromZeroAddressEvenForZeroAmount() (gas: 35322)\n[PASS] test_RevertWhenTransferToZeroAddress() (gas: 71948)\n[PASS] test_SelfTransferFromConsumesAllowanceWithoutChangingBalance() (gas: 103325)\n[PASS] test_SelfTransferPreservesBalance() (gas: 51442)\n[PASS] test_TransferEmitsEventAndMovesExactAmount() (gas: 93540)\n[PASS] test_TransferFromMovesTokensAndConsumesFiniteAllowance() (gas: 242105)\n[PASS] test_TransferFromPreservesInfiniteAllowance() (gas: 207145)\n[PASS] test_WholeBalanceCanBeTransferred() (gas: 138866)\n[PASS] test_ZeroTransferFromEmptyAccountEmitsEvent() (gas: 73387)\n[PASS] test_ZeroTransferFromNeedsNoAllowance() (gas: 81504)\nSuite result: ok. 32 passed; 0 failed; 0 skipped; finished in 17.19ms (60.15ms CPU time)\n\nRan 1 test for test/PLEAInvariant.t.sol:PLEAInvariantTest\n[PASS] invariant_FixedSupplyAndExactAccounting() (runs: 256, calls: 16384, reverts: 0)\n\n╭-------------+-----------------+-------+---------+----------╮\n| Contract    | Selector        | Calls | Reverts | Discards |\n+============================================================+\n| PLEAHandler | approve         | 4164  | 0       | 0        |\n|-------------+-----------------+-------+---------+----------|\n| PLEAHandler | transfer        | 4082  | 0       | 0        |\n|-------------+-----------------+-------+---------+----------|\n| PLEAHandler | transferFrom    | 3980  | 0       | 0        |\n|-------------+-----------------+-------+---------+----------|\n| PLEAHandler | transferTooMuch | 4158  | 0       | 0        |\n╰-------------+-----------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 2\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 389\n  Bound result 5141\n  Bound result 524\n  Bound result 0\n  Bound result 3562036167\n  Bound result 1053\n  Bound result 2\n  Bound result 0\n  Bound result 0\n  Bound result 360\n  Bound result 463\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 5077\n  Bound result 605\n  Bound result 1413\n  Bound result 635\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 4.22s (4.22s CPU time)\n\nRan 2 test suites in 4.23s (4.24s CPU time): 33 tests passed, 0 failed, 0 skipped (33 total tests)\n","passed":true},{"durationMs":48,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"PLEA.approve(address,uint256)\",\"PLEA.transfer(address,uint256)\",\"PLEA.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":3,\"README.md\":117,\"foundry.toml\":18,\"launch.json\":24,\"remappings.txt\":2,\"src/PLEA.sol\":18,\"test/PLEA.t.sol\":388,\"test/PLEAInvariant.t.sol\":106},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"11fd7e20db7a890d1586912d49d93196765107f5f9be4bf2492e170e6238dd4c","verifiedTreeHash":"a4fc8bf99bd8249932a267fac0c2ad1b2f4cceff","verifierVersion":"0.1.0+327e1e9f"},{"checks":[{"durationMs":1187,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.08s\nCompiler run successful!\n","passed":true},{"durationMs":4512,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 32 tests for test/PLEA.t.sol:PLEATest\n[PASS] testFuzz_DelegatedTransferTracksBalanceAndAllowance(uint256,uint256) (runs: 512, μ: 164297, ~: 165250)\nLogs:\n  Bound result 965923052115859711892081116\n  Bound result 115792089237316195423570985008687907853269984665639598116405468148201244770591\n\n[PASS] testFuzz_RevertWhenAmountExceedsAllowance(uint256,uint256) (runs: 512, μ: 122916, ~: 123521)\nLogs:\n  Bound result 172194244073598304453752699\n  Bound result 911805358027828421257936141\n\n[PASS] testFuzz_RevertWhenAmountExceedsBalance(uint256) (runs: 512, μ: 58936, ~: 59247)\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007978720426474\n\n[PASS] testFuzz_TransferConservesSupply(address,uint256) (runs: 512, μ: 93114, ~: 93228)\nLogs:\n  Bound result 7\n\n[PASS] test_ApprovalDoesNotRequireBalance() (gas: 78324)\n[PASS] test_ApprovalEmitsEventAndCanBeReplacedAndRevoked() (gas: 157853)\n[PASS] test_ConstructorEmitsSingleMint() (gas: 9713)\n[PASS] test_Create2FactoryReceivesWholeSupplyAndDistributesExactAmounts() (gas: 666806)\n[PASS] test_DeployerCannotTakeHolderTokensWithoutApproval() (gas: 151905)\n[PASS] test_MetadataAndInitialSupply() (gas: 107584)\n[PASS] test_NoMintBurnOrAdministrativeEntrypoints() (gas: 1040830)\n[PASS] test_RejectsEther() (gas: 36897)\n[PASS] test_RevertWhenAllowanceRevoked() (gas: 110534)\n[PASS] test_RevertWhenApproveZeroSpender() (gas: 37550)\n[PASS] test_RevertWhenEmptyHolderTransfers() (gas: 37865)\n[PASS] test_RevertWhenOwnerUsesTransferFromWithoutSelfApproval() (gas: 35706)\n[PASS] test_RevertWhenSelfTransferExceedsBalance() (gas: 33449)\n[PASS] test_RevertWhenSpenderIsUnapproved() (gas: 57749)\n[PASS] test_RevertWhenTransferExceedsBalance() (gas: 54958)\n[PASS] test_RevertWhenTransferFromExceedsAllowance() (gas: 115767)\n[PASS] test_RevertWhenTransferFromExceedsBalanceRestoresAllowance() (gas: 121690)\n[PASS] test_RevertWhenTransferFromToZeroRestoresAllowance() (gas: 114049)\n[PASS] test_RevertWhenTransferFromZeroAddressEvenForZeroAmount() (gas: 35322)\n[PASS] test_RevertWhenTransferToZeroAddress() (gas: 71948)\n[PASS] test_SelfTransferFromConsumesAllowanceWithoutChangingBalance() (gas: 103325)\n[PASS] test_SelfTransferPreservesBalance() (gas: 51442)\n[PASS] test_TransferEmitsEventAndMovesExactAmount() (gas: 93540)\n[PASS] test_TransferFromMovesTokensAndConsumesFiniteAllowance() (gas: 242105)\n[PASS] test_TransferFromPreservesInfiniteAllowance() (gas: 207145)\n[PASS] test_WholeBalanceCanBeTransferred() (gas: 138866)\n[PASS] test_ZeroTransferFromEmptyAccountEmitsEvent() (gas: 73387)\n[PASS] test_ZeroTransferFromNeedsNoAllowance() (gas: 81504)\nSuite result: ok. 32 passed; 0 failed; 0 skipped; finished in 14.08ms (56.55ms CPU time)\n\nRan 1 test for test/PLEAInvariant.t.sol:PLEAInvariantTest\n[PASS] invariant_FixedSupplyAndExactAccounting() (runs: 256, calls: 16384, reverts: 0)\n\n╭-------------+-----------------+-------+---------+----------╮\n| Contract    | Selector        | Calls | Reverts | Discards |\n+============================================================+\n| PLEAHandler | approve         | 4072  | 0       | 0        |\n|-------------+-----------------+-------+---------+----------|\n| PLEAHandler | transfer        | 4081  | 0       | 0        |\n|-------------+-----------------+-------+---------+----------|\n| PLEAHandler | transferFrom    | 4116  | 0       | 0        |\n|-------------+-----------------+-------+---------+----------|\n| PLEAHandler | transferTooMuch | 4115  | 0       | 0        |\n╰-------------+-----------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 3352\n  Bound result 0\n  Bound result 0\n  Bound result 843444763000049365894203159\n  Bound result 0\n  Bound result 0\n  Bound result 5515\n  Bound result 10000000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 85151120944315531120694769\n  Bound result 3281\n  Bound result 4640\n  Bound result 10\n  Bound result 0\n  Bound result 0\n  Bound result 1\n  Bound result 115765765216715\n  Bound result 27603509609890913283678166\n  Bound result 3730\n  Bound result 3904342025310495784899075\n  Bound result 0\n  Bound result 0\n  Bound result 2158\n  Bound result 3\n  Bound result 18\n  Bound result 0\n  Bound result 1745\n  Bound result 8\n  Bound result 18\n  Bound result 3124842407\n  Bound result 1024\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 4.44s (4.43s CPU time)\n\nRan 2 test suites in 4.44s (4.45s CPU time): 33 tests passed, 0 failed, 0 skipped (33 total tests)\n","passed":true},{"durationMs":36,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"PLEA.approve(address,uint256)\",\"PLEA.transfer(address,uint256)\",\"PLEA.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":3,\"README.md\":117,\"foundry.toml\":18,\"remappings.txt\":2,\"src/PLEA.sol\":18,\"test/PLEA.t.sol\":388,\"test/PLEAInvariant.t.sol\":106},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":550,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":295,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/PLEA.sol:12: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"2606ae74feafb687a06afabfa8b083027166b2644992825fd3ebcf4f6baddbc6","verifiedTreeHash":"d0c2ee4221202f9a3a2dc61897423ba6ace06a39","verifierVersion":"0.1.0+327e1e9f"},{"checks":[{"durationMs":1946,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.80s\nCompiler run successful!\n","passed":true},{"durationMs":10097,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 32 tests for test/PLEA.t.sol:PLEATest\n[PASS] testFuzz_DelegatedTransferTracksBalanceAndAllowance(uint256,uint256) (runs: 1000, μ: 164362, ~: 165242)\nLogs:\n  Bound result 63174031475469238231615921\n  Bound result 3246897100548847976457470476423911451465\n\n[PASS] testFuzz_RevertWhenAmountExceedsAllowance(uint256,uint256) (runs: 1000, μ: 123317, ~: 123545)\nLogs:\n  Bound result 1189616508565426\n  Bound result 999999999998810384191230861\n\n[PASS] testFuzz_RevertWhenAmountExceedsBalance(uint256) (runs: 1000, μ: 58906, ~: 59247)\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639564039578569197190263602612\n\n[PASS] testFuzz_TransferConservesSupply(address,uint256) (runs: 1000, μ: 93458, ~: 93636)\nLogs:\n  Bound result 7042\n  Bound result 999999999999999999999999999\n\n[PASS] test_ApprovalDoesNotRequireBalance() (gas: 78324)\n[PASS] test_ApprovalEmitsEventAndCanBeReplacedAndRevoked() (gas: 157853)\n[PASS] test_ConstructorEmitsSingleMint() (gas: 9713)\n[PASS] test_Create2FactoryReceivesWholeSupplyAndDistributesExactAmounts() (gas: 666806)\n[PASS] test_DeployerCannotTakeHolderTokensWithoutApproval() (gas: 151905)\n[PASS] test_MetadataAndInitialSupply() (gas: 107584)\n[PASS] test_NoMintBurnOrAdministrativeEntrypoints() (gas: 1040830)\n[PASS] test_RejectsEther() (gas: 36897)\n[PASS] test_RevertWhenAllowanceRevoked() (gas: 110534)\n[PASS] test_RevertWhenApproveZeroSpender() (gas: 37550)\n[PASS] test_RevertWhenEmptyHolderTransfers() (gas: 37865)\n[PASS] test_RevertWhenOwnerUsesTransferFromWithoutSelfApproval() (gas: 35706)\n[PASS] test_RevertWhenSelfTransferExceedsBalance() (gas: 33449)\n[PASS] test_RevertWhenSpenderIsUnapproved() (gas: 57749)\n[PASS] test_RevertWhenTransferExceedsBalance() (gas: 54958)\n[PASS] test_RevertWhenTransferFromExceedsAllowance() (gas: 115767)\n[PASS] test_RevertWhenTransferFromExceedsBalanceRestoresAllowance() (gas: 121690)\n[PASS] test_RevertWhenTransferFromToZeroRestoresAllowance() (gas: 114049)\n[PASS] test_RevertWhenTransferFromZeroAddressEvenForZeroAmount() (gas: 35322)\n[PASS] test_RevertWhenTransferToZeroAddress() (gas: 71948)\n[PASS] test_SelfTransferFromConsumesAllowanceWithoutChangingBalance() (gas: 103325)\n[PASS] test_SelfTransferPreservesBalance() (gas: 51442)\n[PASS] test_TransferEmitsEventAndMovesExactAmount() (gas: 93540)\n[PASS] test_TransferFromMovesTokensAndConsumesFiniteAllowance() (gas: 242105)\n[PASS] test_TransferFromPreservesInfiniteAllowance() (gas: 207145)\n[PASS] test_WholeBalanceCanBeTransferred() (gas: 138866)\n[PASS] test_ZeroTransferFromEmptyAccountEmitsEvent() (gas: 73387)\n[PASS] test_ZeroTransferFromNeedsNoAllowance() (gas: 81504)\nSuite result: ok. 32 passed; 0 failed; 0 skipped; finished in 89.81ms (365.63ms CPU time)\n\nRan 17 tests for test/PLEAAdversarial.t.sol:PLEAAdversarialTest\n[PASS] testFuzz_ApprovalReplacementOnlyChangesChosenPair(uint256,uint256) (runs: 1000, μ: 426870, ~: 426960)\n[PASS] testFuzz_DelegatedTransferSupportsAliasedRoles(uint256,uint8,bool) (runs: 1000, μ: 202782, ~: 218087)\nLogs:\n  Bound result 823471397812199280825493345\n\n[PASS] testFuzz_DirectRoundTripPreservesBalancesAndApproval(uint256,uint256,uint256) (runs: 1000, μ: 303122, ~: 302800)\nLogs:\n  Bound result 10\n  Bound result 1\n\n[PASS] testFuzz_FailedSpendCanBeRetriedAfterFunding(uint256,uint256,bool) (runs: 1000, μ: 344873, ~: 345314)\nLogs:\n  Bound result 999999999999999999999999999\n  Bound result 323894646953434863539713548\n\n[PASS] testFuzz_SplitAndSingleDelegatedTransfersAgree(uint256,uint256) (runs: 1000, μ: 358383, ~: 359004)\nLogs:\n  Bound result 1189616508565426\n  Bound result 699796287\n\n[PASS] test_ApprovalIsScopedToBothOwnerAndSpender() (gas: 572362)\n[PASS] test_BurnFromIsUnavailableEvenToAnApprovedSpender() (gas: 257858)\n[PASS] test_ContractHolderCanReceiveAndForwardWithoutCallbacks() (gas: 334398)\n[PASS] test_DelegatedSelfTransferCannotBypassBalanceCheck() (gas: 204671)\n[PASS] test_InfiniteAllowanceCanBeReducedAndRevokedAfterSpending() (gas: 343672)\n[PASS] test_LargestFiniteAllowanceIsConsumed() (gas: 271869)\n[PASS] test_MaximumTransferAmountRevertsWithoutOverflowOrAllowanceLoss() (gas: 156698)\n[PASS] test_NonpayableMutationsRejectEtherWithoutChangingState() (gas: 405190)\n[PASS] test_OneMinorUnitAllowanceCannotBeReusedAfterBalanceIsReplenished() (gas: 326263)\n[PASS] test_ZeroApprovalStillRejectsZeroSpender() (gas: 48086)\n[PASS] test_ZeroDelegatedTransferToZeroRevertsForFiniteAndInfiniteAllowances() (gas: 325269)\n[PASS] test_ZeroSenderGuardsCannotReachMintOrApprovalLogic() (gas: 126514)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 90.68ms (446.23ms CPU time)\n\nRan 1 test for test/PLEAInvariant.t.sol:PLEAInvariantTest\n[PASS] invariant_FixedSupplyAndExactAccounting() (runs: 256, calls: 32768, reverts: 0)\n\n╭-------------+---------------------------+-------+---------+----------╮\n| Contract    | Selector                  | Calls | Reverts | Discards |\n+======================================================================+\n| PLEAHandler | approve                   | 3320  | 0       | 0        |\n|-------------+---------------------------+-------+---------+----------|\n| PLEAHandler | approveAndSpend           | 3364  | 0       | 0        |\n|-------------+---------------------------+-------+---------+----------|\n| PLEAHandler | approveEdge               | 3239  | 0       | 0        |\n|-------------+---------------------------+-------+---------+----------|\n| PLEAHandler | rejectZeroAddress         | 3195  | 0       | 0        |\n|-------------+---------------------------+-------+---------+----------|\n| PLEAHandler | roundTrip                 | 3247  | 0       | 0        |\n|-------------+---------------------------+-------+---------+----------|\n| PLEAHandler | transfer                  | 3272  | 0       | 0        |\n|-------------+---------------------------+-------+---------+----------|\n| PLEAHandler | transferFrom              | 3261  | 0       | 0        |\n|-------------+---------------------------+-------+---------+----------|\n| PLEAHandler | transferFromOverAllowance | 3304  | 0       | 0        |\n|-------------+---------------------------+-------+---------+----------|\n| PLEAHandler | transferFromOverBalance   | 3285  | 0       | 0        |\n|-------------+---------------------------+-------+---------+----------|\n| PLEAHandler | transferTooMuch           | 3281  | 0       | 0        |\n╰-------------+---------------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 7346\n  Bound result 3\n  Bound result 0\n  Bound result 1761649582\n  Bound result 3\n  Bound result 2784888106\n  Bound result 0\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 100000000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 895\n  Bound result 3\n  Bound result 1000000000\n  Bound result 2\n  Bound result 0\n  Bound result 1\n  Bound result 1\n  Bound result 0\n  Bound result 0\n  Bound result 100000000000000000000\n  Bound result 0\n  Bound result 2809\n  Bound result 60000000000000000000\n  Bound result 60\n  Bound result 100\n  Bound result 4001\n  Bound result 60000000000000000000\n  Bound result 17\n  Bound result 21525827340696500784\n  Bound result 672\n  Bound result 127\n  Bound result 2010\n  Bound result 1000000000000000000\n  Bound result 37\n  Bound result 362965664079313148997277137\n  Bound result 33\n  Bound result 2009\n  Bound result 2\n  Bound result 40000000000000000000\n  Bound result 1000000000000002235\n  Bound result 4\n  Bound result 242259834274595251\n  Bound result 1394\n  Bound result 1441\n  Bound result 0\n  Bound result 10000\n  Bound result 1\n  Bound result 180\n  Bound result 20\n  Bound result 1208\n  Bound result 80\n  Bound result 4925\n  Bound result 28\n  Bound result 15\n  Bound result 60\n  Bound result 6\n  Bound result 0\n  Bound result 60\n  Bound result 5432\n  Bound result 5934787434\n  Bound result 934\n  Bound result 6\n  Bound result 1000\n  Bound result 2586\n  Bound result 5\n  Bound result 886\n  Bound result 0\n  Bound result 9552\n  Bound result 5811\n  Bound result 652224196516951921228129755\n  Bound result 4383\n  Bound result 9\n  Bound result 456236284939879421\n  Bound result 11012\n  Bound result 557375255358909894854749170828915\n  Bound result 5261\n  Bound result 2688\n  Bound result 104451254825200670\n  Bound result 12983\n  Bound result 60\n  Bound result 10000000000000000000\n  Bound result 1515\n  Bound result 8224\n  Bound result 9072\n  Bound result 999999999999988468\n  Bound result 652224196516951921228156665\n  Bound result 9986\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 10.00s (10.00s CPU time)\n\nRan 3 test suites in 10.00s (10.18s CPU time): 50 tests passed, 0 failed, 0 skipped (50 total tests)\n","passed":true},{"durationMs":44,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"PLEA.approve(address,uint256)\",\"PLEA.transfer(address,uint256)\",\"PLEA.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":3,\"README.md\":117,\"foundry.toml\":18,\"remappings.txt\":2,\"src/PLEA.sol\":18,\"test/PLEA.t.sol\":390,\"test/PLEAAdversarial.t.sol\":373,\"test/PLEAInvariant.t.sol\":240,\"test/README.md\":63},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"efda3bc6cca33e41a4791c20798d442e6659f98d3f65d8c08353a8ca60eea88b","verifiedTreeHash":"08f15fb8de23549cdf352a5abd901ace01588c94","verifierVersion":"0.1.0+327e1e9f"}]}