{"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":"76853d07-9b49-4713-b7e4-107688f5df2d","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"823087b965197656c0a93133c9ae3f616e848dfa0e210de43bb0fdde57178b1d","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":"5830786e874012584122d694cb0400b5f1de21f2fd419f74c7cf857fa881e5bc","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":"189aed8b73350a4d031e5c95a957190350e748838bbc59ae6d49b7c1ed504300","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":"e8b65b731d36c49d869eeae1612717513eebb95bb3e38e83ccf80addb1228c04","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":"7fb34321505b3437e874dd164a01ecd35ac930a169f494f1ca70d6c723e9b632","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":"da71ab7aa157135355c69d8149a14e57eb54e1f3cb1c161cbe3eb72866d669c9","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":"1be87cbb72c00fad99267e8023fbb31c94a321363bb636817c3c3b610d0ca443","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"0839870be49dcc1684e22513a61a860afacfcca1a86b52686dffe94d3d527fa3","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: Linked Avatar Register Protocol (LARP).\nToken name: Linked Avatar Register Protocol\nToken symbol: LARP\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.","parentJobId":null,"planHash":"0064d5112b309a4c2290199d7a36870bed8554caf3f911e56e0b89d1678ebedc","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"76853d07-9b49-4713-b7e4-107688f5df2d","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-1604-linked-avatar-register-protocol"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51239","feedbackHash":"95474c07169b6c549d404ac1b085274546d8c601b9a681b99f0fa8b3f913b63f","nodeKey":"audit_economics","submissionHash":"823087b965197656c0a93133c9ae3f616e848dfa0e210de43bb0fdde57178b1d","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52706","feedbackHash":"b74e4c99789c27f079040ea467d2299c9767d4af4a97ca04dac4a0014b811d78","nodeKey":"audit_flow","submissionHash":"5830786e874012584122d694cb0400b5f1de21f2fd419f74c7cf857fa881e5bc","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52188","feedbackHash":"57ecd9410ebdc451c19df155dffbba133640bf3cc77b1ed1d5e6cbc4e7ba96ed","nodeKey":"audit_judge","submissionHash":"189aed8b73350a4d031e5c95a957190350e748838bbc59ae6d49b7c1ed504300","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51401","feedbackHash":"8bc043d4e328357e824130fa9d9ea33b74d6b29cbef11f834585291956da6498","nodeKey":"audit_math","submissionHash":"e8b65b731d36c49d869eeae1612717513eebb95bb3e38e83ccf80addb1228c04","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52182","feedbackHash":"e24eb7d07e141f14203aca4d16d8fcfe17276db4359bfcaa8a1b5ccdf630204b","nodeKey":"audit_permissions","submissionHash":"7fb34321505b3437e874dd164a01ecd35ac930a169f494f1ca70d6c723e9b632","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52647","feedbackHash":"da3e95116543673a9f8ca354ea23d578fcd84dcfeb901782047693688e092f29","nodeKey":"build_contract_project","submissionHash":"da71ab7aa157135355c69d8149a14e57eb54e1f3cb1c161cbe3eb72866d669c9","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52644","feedbackHash":"f685be0b47a284149311509f7a0ca9965d16988654ba4284a7f64b59487fe6ea","nodeKey":"manifest","submissionHash":"1be87cbb72c00fad99267e8023fbb31c94a321363bb636817c3c3b610d0ca443","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52335","feedbackHash":"686c58917d0981863758652a8ea05985a7434069250394425381ff31f5448e86","nodeKey":"write_foundry_tests","submissionHash":"0839870be49dcc1684e22513a61a860afacfcca1a86b52686dffe94d3d527fa3","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"2b557ccb95ddca14df47eeefecdc47a7dfd8f4bb1d14417e11a5a9029188ae16","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"bdbe855250d00423dff9fdbcc3ca2680aa9093833321c62a45b7e6810ca424d3","device":"4da6f73105193824","findings":[],"hash":"0839870be49dcc1684e22513a61a860afacfcca1a86b52686dffe94d3d527fa3","nodeId":"102497eb-478b-4677-88ea-fda7c2d38b61","outcome":"completed","summary":"Added 17 adversarial tests and strengthened invariants with independent balance tracking and randomized failure paths.\n\n- Offline `forge build` passed.\n- Offline `forge test`: 50 passed, zero failures.\n- Invariants passed 24,576 calls.\n- No contract defects found.\n\nAll changes are under `test/`.","treeHash":"63202f1cd70b9a6b7a211ccb2a476884f0014824","usage":{"cachedInputTokens":1280256,"inputTokens":91370,"model":"gpt-6-astra","outputTokens":13035,"runtime":"codex","turns":6,"wallClockMs":481239}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"d4b53d656a3fbe07","findings":[{"citation":"resolved","description":"Merged from audit_economics (low) and audit_math (info): same root cause, one finding. README.md lines 70-71 direct the deployer to lib/DEPENDENCIES.json for 'upstream release URLs, archive hashes, and individual file hashes' when confirming the artifact before release. The forge-std section records the per-file SHA-256 of the upstream v1.9.7 archive, but seven of the vendored files were reformatted (forge fmt style re-wrapping) in the same commit that added the record (419ce69), so the recorded hashes no longer describe the files in the tree: src/StdAssertions.sol, src/StdJson.sol, src/StdToml.sol, src/Vm.sol, src/console.sol, src/interfaces/IERC7540.sol, src/interfaces/IMulticall3.sol. I reproduced this: the forge-std archive hash (45157353ab49...ee94) matches the upstream tarball, and with all whitespace stripped each of the seven vendored files is identical to its upstream v1.9.7 counterpart, so the test library is semantically the upstream release. All five OpenZeppelin v5.0.2 source files and the LICENSE match both the recorded hashes and the upstream tag byte for byte, so the token's compiled dependency chain is intact. Impact: the provenance check the README prescribes fails for the test dependency, so a reviewer following the documented procedure sees seven mismatches and cannot tell a benign reformat from a tampered test library without re-deriving the comparison. forge-std is test-only and never part of LARPToken's creation or runtime bytecode; no on-chain effect, no effect on launch economics. Fix: regenerate the seven forge-std file hashes from the files as vendored, or restore the upstream formatting of those seven files so the recorded hashes hold.","line":58,"path":"lib/DEPENDENCIES.json","reproduction":"From the repository root run: python3 -I -c \"import json,hashlib,os; d=json.load(open('lib/DEPENDENCIES.json')); [print('MISMATCH',p) for dep in d for f in dep['files'] for p in [os.path.join('lib',dep['name'],f['path'])] if hashlib.sha256(open(p,'rb').read()).hexdigest()!=f['sha256']]\". Expected (per README.md:70-71): no output. Actual: seven MISMATCH lines, all under lib/forge-std/src/. Concrete instance: sha256sum lib/forge-std/src/StdAssertions.sol = 3fbf4a025b4fc94eaca4c38c1f3dacb37bee10f12ee81994cfaf365ac1ce7384 while lib/DEPENDENCIES.json:58 records d4c89eec70d267dec6188461fbc74d3dc8c47e518d176a23417533a232ed9780; sha256sum lib/forge-std/src/Vm.sol = a1b1c82924aecf0f38b53192fd1e801cccc1e1fd2ecd6b2301e4f4c4ab102a15 while line 110 records 9068805b59ac1d0ea03a8fa1f15ae49c094e0c6c852a2500e0dd112f264b2cb1. Downloading https://codeload.github.com/foundry-rs/forge-std/tar.gz/refs/tags/v1.9.7 (archive sha256 45157353ab49eab01d294565866731e599b32401757229689ee459aa26b7ee94, matching the record) and comparing each of the seven files with `tr -d ' \\t\\n\\r'` applied to both sides gives identical output, so the difference is formatting only. The OpenZeppelin files compare byte-identical to raw.githubusercontent.com/OpenZeppelin/openzeppelin-contracts/v5.0.2/contracts/<path>.","severity":"low","snippet":"        \"sha256\": \"d4c89eec70d267dec6188461fbc74d3dc8c47e518d176a23417533a232ed9780\"","title":"lib/DEPENDENCIES.json records forge-std v1.9.7 file hashes that do not match seven vendored files (whitespace-only reformat after vendoring)"}],"hash":"189aed8b73350a4d031e5c95a957190350e748838bbc59ae6d49b7c1ed504300","nodeId":"4be90a03-7682-41fd-aaeb-e23d796790b0","outcome":"completed","summary":"Review complete. The findings file is written at `.imd-findings.json` and the working tree is otherwise unchanged.\n\n**Outcome.** The token itself is clean. One low-severity documentation defect survives, merged from the two specialists who reported it.\n\n**What I verified**\n\n- The token is a bare OpenZeppelin v5.0.2 ERC-20 with a zero-argument constructor that mints the full supply once to the deployer. It adds no functions, no owner, no fees, no hooks and no prohibited opcodes. Creation code is 2,658 bytes and runtime is 1,752 bytes.\n- All five vendored OpenZeppelin source files and the LICENSE are byte-identical to the upstream v5.0.2 tag, so the compiled dependency chain is intact.\n- The project builds, formatting checks pass, and all 50 tests pass, including the fuzz and stateful invariant suites.\n- The manifest is schema-consistent with the source: empty constructor arguments, matching supply, decimals, name and symbol, lowercase addresses, and no extra keys.\n\n**The one finding kept (low)**\n\nThe dependency provenance record in lib/DEPENDENCIES.json lists per-file hashes for forge-std v1.9.7 that do not match seven vendored files. I reproduced it with the specialists' script, downloaded the upstream v1.9.7 archive, confirmed the archive hash matches the record, and confirmed each of the seven files is identical to upstream once whitespace is stripped. The reformat and the hash record were both introduced in the builder's own first commit. The README tells the deployer to use that record for pre-release verification, so a reviewer following it sees seven mismatches on a test-only library. No on-chain or economic effect. The fix is to regenerate the seven hashes or restore upstream formatting.\n\n**Coverage.** All three listed entry points hold. I also recorded rows for the constructor, the fixed-supply invariant, the manifest and the dependency record.","treeHash":null,"usage":{"cachedInputTokens":403649,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":8326,"runtime":"claude","turns":15,"wallClockMs":128281}},{"artifacts":[],"attempt":1,"bundleHash":"294408f9ef826ddfa867dbd0e9f9120ae8cbcf98c2b9c04fd203c4b032d87cec","device":"fd858f647b25d72d","findings":[],"hash":"1be87cbb72c00fad99267e8023fbb31c94a321363bb636817c3c3b610d0ca443","nodeId":"5581e19e-856f-4f8c-b976-4bc548b7207d","outcome":"completed","summary":"Created [launch.json](/home/seat/.identitymd/work/76853d07-9b49-4713-b7e4-107688f5df2d/5581e19e-856f-4f8c-b976-4bc548b7207d/launch.json) matching `LARPToken`’s constructor, metadata, supply, and the exact requested pool and economics.\n\nManifest checks and `forge build` passed. `forge test`: 33 passed, 0 failed.\n\nOnly `launch.json` is changed for submission.","treeHash":"08f148fcecd544bfaa9d22ea94baa44d5cef9704","usage":{"cachedInputTokens":186752,"inputTokens":26268,"model":"gpt-6-astra","outputTokens":2364,"runtime":"codex","turns":3,"wallClockMs":85834}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"f3b611cf8afb513f","findings":[],"hash":"5830786e874012584122d694cb0400b5f1de21f2fd419f74c7cf857fa881e5bc","nodeId":"c983801b-b523-49d5-ba44-bb3b05e37f2c","outcome":"completed","summary":"The review is complete and the findings file is written. No source file was changed.\n\n**Result: no defects found.** The token at `src/LARPToken.sol` is an unmodified OpenZeppelin v5.0.2 ERC-20 whose constructor mints the full supply once to the deploying address. Nothing in my area (Execution Trace, Periphery, First Principles) produced a reproducible failure, so the findings list is empty and the coverage record answers every entry point.\n\nWhat I verified:\n\n- **Execution trace.** Traced `approve`, `transfer` and `transferFrom` through the inherited base. Zero-address sender, receiver and spender revert, insufficient balance or allowance reverts before any write, a max allowance is left unchanged, and the factory has no allowance bypass. No fee, hook, callback or external call exists on any path.\n- **Periphery.** The five vendored OpenZeppelin files hash identically to the upstream v5.0.2 release fetched from GitHub and to the project's own dependency manifest. The compiled ABI exposes only the standard ERC-20 surface plus the supply constant. Storage layout is stock.\n- **First principles.** The supply constant evaluates to exactly 1e27, so the manifest value and the harness check line up. The constructor takes no arguments, so no launch address is baked in and no exemption list is needed because no transfer rule exists. Mint and burn are internal and unreachable after construction.\n- **Tooling.** All 33 unit and fuzz tests and the stateful invariant suite pass. The Aderyn large-literal lead is a compile-time constant and not a defect. Slither reported nothing.\n\nCoverage rows are `holds` for all three listed entry points, plus four invariant rows covering the fixed supply, the exact launch flows, the upstream match of the base contracts, and the forbidden-opcode scan. Nothing was left unreached.","treeHash":null,"usage":{"cachedInputTokens":456206,"inputTokens":194,"model":"claude-fable-5-1","outputTokens":8607,"runtime":"claude","turns":19,"wallClockMs":145177}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"d11ea2b5e05fa7a8","findings":[],"hash":"7fb34321505b3437e874dd164a01ecd35ac930a169f494f1ca70d6c723e9b632","nodeId":"3ca6efc3-3d82-4638-bb72-06bcc65fc917","outcome":"completed","summary":"The review is complete. The findings file is valid, and the working tree has no tracked changes.\n\n**Result: no defects found in the assigned area.** The Linked Avatar Register Protocol token is a 17-line contract that inherits the unmodified OpenZeppelin v5.0.2 ERC20 and mints one billion tokens with 18 decimals to the deployer in its constructor. There is nothing else to it.\n\nWhat I checked, against the Access Control, Asymmetry and Trust Gap guides and the custom-token launch floor:\n\n- **Permission model.** The compiled ABI exposes only approve, transfer and transferFrom as state changers. There is no owner, role, modifier, initializer, proxy, delegatecall, receive or fallback. Fourteen common admin selectors revert from both the deployer and an outsider.\n- **Each entry point.** All three act only on the caller's own balance or allowance. The deployer cannot pull a holder's tokens without an allowance. Zero-address paths revert, so the mint and burn branches are unreachable after construction.\n- **Asymmetry.** Both transfer paths funnel into the same internal update. Approve and allowance spending write the same slot with the same checks. No branch does different work for different caller classes.\n- **Trust gap.** With no privileged setter, fee, oracle or pricing inside the token, there is no seam where an authorized actor extracts value asymmetrically. The only trust assumption is the launch design itself: the factory holds the supply at deployment and distributes it.\n- **Launch floor.** Supply is exactly 10^27, decimals are 18, there is no fee or hook, so every launch flow moves exactly what it says. The existing opcode scan for forbidden instructions passes.\n- **Dependency integrity.** All six vendored OpenZeppelin files match the recorded hashes and the upstream v5.0.2 tag byte for byte.\n\nEvidence: the existing suite of 33 tests passed, including the stateful invariant run. My own scratch probe of six unauthorized paths passed and was removed afterwards. Slither reported nothing. The aderyn large-literal lead is stylistic and evaluates to the correct supply.\n\nThe coverage record has eight rows: `holds` for all three entry points plus five invariant rows. Two documented design properties, the standard ERC-20 approve race and the missing Approval event on transferFrom, are noted but not reported as defects since the README already discloses them and they are inherent to the requested plain token.","treeHash":null,"usage":{"cachedInputTokens":807183,"inputTokens":386,"model":"claude-fable-5-1","outputTokens":11137,"runtime":"claude","turns":18,"wallClockMs":221298}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"20e8e883cb88740a","findings":[{"citation":"resolved","description":"README.md (lines 70-71) tells the deployer to use lib/DEPENDENCIES.json for 'upstream release URLs, archive hashes, and individual file hashes' when confirming the artifact before release. The recorded per-file hashes for forge-std v1.9.7 are the upstream archive's hashes, but seven of the vendored files were reformatted after vendoring (whitespace/line-wrapping only, confirmed by comparing against the upstream v1.9.7 tarball with whitespace stripped), so their recorded hashes no longer match the files in the tree: src/StdAssertions.sol, src/StdJson.sol, src/StdToml.sol, src/Vm.sol, src/console.sol, src/interfaces/IERC7540.sol, src/interfaces/IMulticall3.sol. All six OpenZeppelin v5.0.2 files match both the recorded hashes and the upstream tarball byte-for-byte, and the forge-std archive hash matches upstream, so the token's own dependency chain is intact. Impact: the provenance check the README prescribes fails for the test library, so a reviewer following it cannot distinguish this benign reformat from a tampered test dependency without re-deriving the comparison themselves. Test-only code; no effect on LARPToken runtime bytecode or on the launch economics. Fix: regenerate the file hashes from the files as vendored (or restore the upstream formatting of those seven files so the recorded hashes hold).","line":58,"path":"lib/DEPENDENCIES.json","reproduction":"From the repository root run: python3 -I -c \"import json,hashlib,os; d=json.load(open('lib/DEPENDENCIES.json')); [print('MISMATCH',p) for dep in d for f in dep['files'] for p in [os.path.join('lib',dep['name'],f['path'])] if hashlib.sha256(open(p,'rb').read()).hexdigest()!=f['sha256']]\". Expected: no output (every recorded hash matches its file, as README.md:70-71 promises). Actual: seven MISMATCH lines, all under lib/forge-std/src/. Concrete instance: sha256sum lib/forge-std/src/StdAssertions.sol = 3fbf4a025b4fc94eaca4c38c1f3dacb37bee10f12ee81994cfaf365ac1ce7384, while lib/DEPENDENCIES.json:58 records d4c89eec70d267dec6188461fbc74d3dc8c47e518d176a23417533a232ed9780 (the upstream v1.9.7 file). diff of the two with all whitespace removed is empty, so the difference is formatting only.","severity":"low","snippet":"        \"sha256\": \"d4c89eec70d267dec6188461fbc74d3dc8c47e518d176a23417533a232ed9780\"","title":"Dependency provenance record lists SHA-256 hashes that do not match seven vendored forge-std files"}],"hash":"823087b965197656c0a93133c9ae3f616e848dfa0e210de43bb0fdde57178b1d","nodeId":"6d26a745-881f-4284-ab48-c8466e579864","outcome":"completed","summary":"The review is complete. The findings file is valid, the cited line matches the tree, the scratch directory is removed, and no tracked file changed.\n\n**Result: the LARP token's economics hold. One low-severity provenance defect, no code defects.**\n\nThe token is a 17-line contract that inherits the vendored OpenZeppelin v5.0.2 ERC-20 unchanged and mints the whole supply to msg.sender once in the constructor. Against the three guides:\n\n- **Economic Security.** The token has no external dependencies, oracles, callbacks, hooks, owner, pause, blacklist or upgrade path, so there are no privileged trust assumptions to document and nothing an actor with unlimited capital can lever. Zero-address receiver and spender revert. ERC-20 compliance matches the standard, including the approve race the README already documents.\n- **Invariant.** The sum of balances equals totalSupply, fixed at one billion tokens. Only the constructor's mint writes supply upward, there is no burn or mint selector and no fallback, and transfers to the zero address revert so the library's burn branch is unreachable. The repo's stateful invariant suite and my own fuzz run both confirm conservation.\n- **Flow Gap.** Every launch leg moves exactly the stated amount: factory to distributor, distributor to claimant, factory to pool, and trader buy and sell. The 10/80/10 split of the supply leaves no rounding dust. A CREATE2 factory deployment receives the full supply with no constructor arguments, as the protected harness expects.\n\n**The one finding (low):** lib/DEPENDENCIES.json records per-file SHA-256 hashes that the README directs the deployer to use for provenance checks, but seven forge-std files were reformatted after vendoring and no longer match. I confirmed the difference is whitespace only against the upstream v1.9.7 tarball, and all six OpenZeppelin files match upstream byte-for-byte. Test-only impact, no effect on runtime bytecode or economics. The fix is to regenerate the hashes from the files as vendored.\n\nVerification that ran: forge build, the full 33-test suite including the 128-run invariant campaign, forge fmt check, a scratch test of the launch legs and supply paths (3 tests, 1024 fuzz runs), and upstream tarball comparisons for both vendored libraries. Slither and Mythril were not run beyond the supplied static-analysis lines; the one aderyn lead, a large numeric literal, is the supply constant and is not a defect.\n\nCoverage: all three entry points marked holds, plus six invariant and supply-chain rows, one of which carries the finding. Nothing was left unreached.","treeHash":null,"usage":{"cachedInputTokens":758259,"inputTokens":322,"model":"claude-fable-5-1","outputTokens":12859,"runtime":"claude","turns":26,"wallClockMs":218765}},{"artifacts":[],"attempt":1,"bundleHash":"662289eeb41d10f79609a7c3e1c1e3c1f170816ec3ecd90bc688a43a552a8057","device":"db7554a772b3fbf3","findings":[],"hash":"da71ab7aa157135355c69d8149a14e57eb54e1f3cb1c161cbe3eb72866d669c9","nodeId":"6f9150bd-a184-475b-a924-8d88a0588fba","outcome":"completed","summary":"Implemented `LARPToken` with the requested name, symbol, 18 decimals, and 1,000,000,000 tokens minted once to the deployer.\n\nDependencies are vendored. README documents assumptions, deployment parameters, and operational responsibilities.\n\nVerified with Solidity 0.8.26:\n\n- `forge build` — passed\n- `forge test` — 33 passed, including failure, fuzz, and invariant tests\n- `forge fmt --check` — passed\n\nA fresh offline build and parallel test run also passed with only HOME/PATH retained for Foundry.","treeHash":"373143730a3d5ca3f01396cd8cd2124b5c04b069","usage":{"cachedInputTokens":667264,"inputTokens":54075,"model":"gpt-6-astra","outputTokens":14855,"runtime":"codex","turns":5,"wallClockMs":455824}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"2ab0b432477fde6c","findings":[{"citation":"resolved","description":"README.md points readers to lib/DEPENDENCIES.json for 'individual file hashes' of the vendored dependencies. All six OpenZeppelin v5.0.2 files match both the recorded hashes and the upstream v5.0.2 tag byte for byte, so the token's compiled code is unaffected. Seven forge-std v1.9.7 files do not match their recorded sha256: src/StdAssertions.sol, src/StdJson.sol, src/StdToml.sol, src/Vm.sol, src/console.sol, src/interfaces/IERC7540.sol, src/interfaces/IMulticall3.sol. Diffing against upstream v1.9.7 shows the vendored copies were re-wrapped (forge fmt style line breaks); with all whitespace stripped they are identical to upstream, so the test tooling is semantically the upstream release. The defect is only that the provenance record is stale: anyone verifying provenance as the README instructs gets seven mismatches. forge-std is test-only and never part of deployed bytecode, so there is no on-chain impact. Outside the assigned math area; reported because it was found while checking the vendored-library boundary.","line":109,"path":"lib/DEPENDENCIES.json","reproduction":"From the repository root run: python3 -I -c \"import json,hashlib; d=json.load(open('lib/DEPENDENCIES.json')); [print(f['path'], hashlib.sha256(open('lib/'+dep['name']+'/'+f['path'],'rb').read()).hexdigest()==f['sha256']) for dep in d for f in dep['files']]\". Expected: every line prints True. Actual: the seven forge-std files above print False; e.g. sha256sum lib/forge-std/src/Vm.sol gives a1b1c82924aecf0f38b53192fd1e801cccc1e1fd2ecd6b2301e4f4c4ab102a15 while line 110 records 9068805b59ac1d0ea03a8fa1f15ae49c094e0c6c852a2500e0dd112f264b2cb1. Stripping whitespace from the vendored file and from upstream v1.9.7 src/Vm.sol yields identical content, so the fix is to re-record the hashes (or restore upstream formatting), not to change code.","severity":"info","snippet":"        \"path\": \"src/Vm.sol\",\n        \"sha256\": \"9068805b59ac1d0ea03a8fa1f15ae49c094e0c6c852a2500e0dd112f264b2cb1\"","title":"lib/DEPENDENCIES.json records forge-std file hashes that do not match the vendored files (7 files reformatted; whitespace-only)"}],"hash":"e8b65b731d36c49d869eeae1612717513eebb95bb3e38e83ccf80addb1228c04","nodeId":"469ee530-cf5e-40c2-b0ba-4e8af98c950b","outcome":"completed","summary":"The review is complete and the findings file is written. Nothing further is needed from the tree.\n\n**Outcome: no math, boundary or numerical-gap defect in the token.** The only reportable item is an informational provenance discrepancy in test tooling.\n\n**What was checked**\n\n- The token is 17 lines over stock OpenZeppelin v5.0.2 ERC-20 with no overrides. The vendored OpenZeppelin files are byte-identical to the upstream v5.0.2 tag and to the hashes recorded in the dependency manifest.\n- Math Precision: the supply constant evaluates to exactly 10^27 at compile time and is minted once with checked arithmetic. The token contains no division, scaling, casts, fee math or runtime multiplication, so there is nothing to round or truncate.\n- Boundary: no external calls, no payable function, no receive or fallback, no bytes decoding. ETH sends and unknown selectors revert. Transfers above balance, including the maximum uint256, revert with the typed ERC-6093 error rather than a panic. Zero-amount paths, self-transfers, exact-balance transfers and the max-allowance sentinel all behave per spec.\n- Numerical gap: the only seam candidate is the infinite-allowance sentinel, and it behaves correctly at max, max minus one, and zero.\n- Launch floor: every transfer moves exactly the requested amount, so the swarm, pool and remainder flows arrive whole.\n- The project's own 33 tests pass, including the stateful invariant suite, and a scratch suite of nine boundary tests I wrote also passed before I deleted it.\n\n**The one finding, informational**\n\nSeven vendored forge-std files do not match the sha256 values recorded in the dependency manifest. Diffing against upstream v1.9.7 shows the differences are line-wrapping only. With whitespace stripped the files are identical to upstream, so the test tooling is unmodified in substance. The README directs readers to that manifest for file hashes, so the record is stale. Test tooling never reaches deployed bytecode, so there is no on-chain impact.\n\n**Coverage** names all three listed entry points as holding, plus rows for the constructor, the supply invariant, the external-call boundary, the vendored-library identity, the numerical seams and the launch flows. No row is marked unreached.","treeHash":null,"usage":{"cachedInputTokens":685711,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":16078,"runtime":"claude","turns":28,"wallClockMs":232304}}],"verification":[{"checks":[{"durationMs":1612,"exitCode":0,"name":"build","output":"Compiling 29 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.50s\nCompiler run successful!\n","passed":true},{"durationMs":6037,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 5 tests for test/LARPLaunchFlow.t.sol:LARPLaunchFlowTest\n[PASS] test_create2MintsFullSupplyToFactory() (gas: 43964)\n[PASS] test_deployerCannotSpendHolderFundsWithoutApproval() (gas: 160999)\n[PASS] test_launchAllocationClaimsAndPoolTransfersAreExact() (gas: 445234)\n[PASS] test_noMintBurnOrAdministrativeEntryPoints() (gas: 2506977)\n[PASS] test_runtimeHasNoForbiddenOpcodesAndFitsDeploymentLimit() (gas: 2259326)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 28.04ms (10.71ms CPU time)\n\nRan 27 tests for test/LARPToken.t.sol:LARPTokenTest\n[PASS] testFuzz_finiteAllowanceSpending(uint256,uint256) (runs: 1024, μ: 163263, ~: 165334)\nLogs:\n  Bound result 9\n  Bound result 0\n\n[PASS] testFuzz_spendingAboveAllowanceReverts(uint256,uint256) (runs: 1024, μ: 123141, ~: 123395)\nLogs:\n  Bound result 973470866465569081153595763\n  Bound result 996445699566876127987365688\n\n[PASS] testFuzz_transferAboveBalanceReverts(uint256) (runs: 1024, μ: 69073, ~: 69391)\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129639952\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 1024, μ: 93295, ~: 93563)\nLogs:\n  Bound result 1\n  Bound result 24576\n\n[PASS] test_approveEmitsEventAndReplacesAllowance() (gas: 132049)\n[PASS] test_approveWithoutBalanceIsAllowed() (gas: 78304)\n[PASS] test_approveZeroSpenderReverts() (gas: 37640)\n[PASS] test_constructorEmitsExactlyOneMint() (gas: 9655)\n[PASS] test_directDeploymentMintsToCaller() (gas: 28247)\n[PASS] test_infiniteAllowanceIsNotReduced() (gas: 139332)\n[PASS] test_metadataAndInitialState() (gas: 107578)\n[PASS] test_nativeCurrencyAndUnknownCallsRevert() (gas: 67348)\n[PASS] test_oversizedSelfTransferReverts() (gas: 40189)\n[PASS] test_revokedAllowanceCannotBeSpent() (gas: 131243)\n[PASS] test_selfTransferPreservesBalance() (gas: 53916)\n[PASS] test_transferDeliversExactAmountAndEmitsEvent() (gas: 93527)\n[PASS] test_transferEntireSupply() (gas: 161687)\n[PASS] test_transferFromByHolderStillRequiresAllowance() (gas: 42639)\n[PASS] test_transferFromConsumesAllowanceAndEmitsTransfer() (gas: 254660)\n[PASS] test_transferFromInsufficientBalanceRollsBackAllowance() (gas: 126175)\n[PASS] test_transferFromToSelfConsumesAllowanceWithoutMovingBalance() (gas: 103357)\n[PASS] test_transferFromToZeroRollsBackAllowance() (gas: 114167)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 71904)\n[PASS] test_transferWithoutBalanceReverts() (gas: 57494)\n[PASS] test_unapprovedSpenderCannotUseAnotherSpendersAllowance() (gas: 117837)\n[PASS] test_zeroTransferFromEmptyAccountEmitsEvent() (gas: 73367)\n[PASS] test_zeroTransferFromNeedsNoAllowance() (gas: 81491)\nSuite result: ok. 27 passed; 0 failed; 0 skipped; finished in 106.01ms (415.39ms CPU time)\n\nRan 17 tests for test/LARPTokenAdversarial.t.sol:LARPTokenAdversarialTest\n[PASS] testFuzz_directTransferDoesNotConsumeAllowances(uint256,uint256) (runs: 1024, μ: 276185, ~: 276648)\nLogs:\n  Bound result 655226226798514358695466140\n\n[PASS] testFuzz_failedSpendCanBeRetriedAfterFunding(uint256,uint256) (runs: 1024, μ: 467423, ~: 467494)\nLogs:\n  Bound result 655226226798514358696715070\n  Bound result 2\n\n[PASS] testFuzz_replacingPartlySpentAllowanceResetsTheLimit(uint256,uint256,uint256) (runs: 1024, μ: 439271, ~: 440263)\nLogs:\n  Bound result 1\n  Bound result 0\n  Bound result 79892127\n\n[PASS] testFuzz_roundTripRestoresPreviouslyFundedBalances(uint256,uint256,uint256) (runs: 1024, μ: 357898, ~: 358649)\nLogs:\n  Bound result 414051600729886600613920452\n  Bound result 373274900512526049842895610\n  Bound result 837419231402\n\n[PASS] testFuzz_splittingDelegatedTransferHasSameEffect(uint256,uint256,uint256) (runs: 1024, μ: 445750, ~: 447446)\nLogs:\n  Bound result 999999999999999999999999999\n  Bound result 787990586093186971518311695\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129641493\n\n[PASS] test_approvalDoesNotAuthorizeADifferentOwnersFunds() (gas: 296041)\n[PASS] test_infiniteAllowanceCanBeReplacedWithFiniteAllowance() (gas: 261713)\n[PASS] test_infiniteAllowanceCanBeRevokedAfterSpending() (gas: 271933)\n[PASS] test_intermediateContractCannotUseTransactionOriginsApproval() (gas: 616766)\n[PASS] test_largestFiniteAllowanceIsNotTreatedAsInfinite() (gas: 256840)\n[PASS] test_maximumDirectTransferRevertsWithoutArithmeticPanic() (gas: 111485)\n[PASS] test_maximumTransferFailsEvenWithInfiniteAllowance() (gas: 175546)\n[PASS] test_oneBaseUnitAllowanceCannotBeReusedAfterRefill() (gas: 366223)\n[PASS] test_selfApprovalIsConsumedEvenWhenAllThreeRolesCoincide() (gas: 338110)\n[PASS] test_zeroAddressCannotBeUsedAsTransferFromSource() (gas: 151700)\n[PASS] test_zeroDelegatedTransferToZeroStillReverts() (gas: 170389)\n[PASS] test_zeroSpenderIsInvalidEvenWhenRevoking() (gas: 179386)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 109.09ms (530.17ms CPU time)\n\nRan 1 test for test/LARPInvariant.t.sol:LARPInvariantTest\n[PASS]\nLARPInvariantTest invariants:\n[PASS] invariant_allowancesMatchApprovalsAndSpending\n[PASS] invariant_eachBalanceMatchesAuthorizedTransfers\n[PASS] invariant_supplyIsConstantAndAllBalancesAreConserved\n LARPInvariantTest invariants (runs: 256, calls: 24576, reverts: 0)\n\n╭-------------+----------------------------------+-------+---------+----------╮\n| Contract    | Selector                         | Calls | Reverts | Discards |\n+=============================================================================+\n| LARPHandler | approve                          | 2273  | 0       | 0        |\n|-------------+----------------------------------+-------+---------+----------|\n| LARPHandler | approveInfinite                  | 2212  | 0       | 0        |\n|-------------+----------------------------------+-------+---------+----------|\n| LARPHandler | rejectTransferAboveBalance       | 2240  | 0       | 0        |\n|-------------+----------------------------------+-------+---------+----------|\n| LARPHandler | rejectTransferFromAboveAllowance | 2226  | 0       | 0        |\n|-------------+----------------------------------+-------+---------+----------|\n| LARPHandler | rejectTransferFromAboveBalance   | 2278  | 0       | 0        |\n|-------------+----------------------------------+-------+---------+----------|\n| LARPHandler | rejectZeroReceiver               | 2192  | 0       | 0        |\n|-------------+----------------------------------+-------+---------+----------|\n| LARPHandler | rejectZeroSpender                | 2246  | 0       | 0        |\n|-------------+----------------------------------+-------+---------+----------|\n| LARPHandler | revoke                           | 2206  | 0       | 0        |\n|-------------+----------------------------------+-------+---------+----------|\n| LARPHandler | transfer                         | 2233  | 0       | 0        |\n|-------------+----------------------------------+-------+---------+----------|\n| LARPHandler | transferFrom                     | 2248  | 0       | 0        |\n|-------------+----------------------------------+-------+---------+----------|\n| LARPHandler | transferFullBalance              | 2222  | 0       | 0        |\n╰-------------+----------------------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 1017\n  Bound result 249999999999999999999999001\n  Bound result 242255858\n  Bound result 115792089237316195423570985008687907853269984665640064039457584007914271471969\n  Bound result 115792089237316195423570985008687907853269984665640064039457584007913129650263\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640064039517584007913129639934\n  Bound result 2803\n  Bound result 115792089237316195423570985008687907853269984665640064039457584007913129644117\n  Bound result 115792089237316195423570985008687907853269984665640064039457584007913129637137\n  Bound result 1582\n  Bound result 123000000000000000000\n  Bound result 499999999999999999999997201\n  Bound result 115792089237316195423570985008687907853269984665640064039457584007913129645816\n  Bound result 255\n  Bound result 95\n  Bound result 317134017517480978199921219\n  Bound result 385262834211380820690398947\n  Bound result 14\n  Bound result 18\n  Bound result 9256\n  Bound result 21\n  Bound result 24576\n  Bound result 499999999999999999999978640\n  Bound result 7\n  Bound result 4010\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640064039457584007913129643646\n  Bound result 115792089237316195423570985008687907853269984665640064039457584007913129642699\n  Bound result 578081341258244974958414811891071187479793892375203352586479834609268\n  Bound result 115792089237316195423570985008687907853269984665640064039457584007913129643117\n  Bound result 115792089237316195423570985008687907853269984665640064039457584007913129642833\n  Bound result 1461501637330902918203684832716283019655932542975\n  Bound result 0\n  Bound result 6603\n  Bound result 499999999999999999999996210\n  Bound result 251186853147994318977301299\n  Bound result 265066184480783427602025030\n  Bound result 11\n  Bound result 127\n  Bound result 115792089237316195423570985008687907853269984665640064039457584007913129642760\n  Bound result 147860\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 5.95s (5.95s CPU time)\n\nRan 4 test suites in 5.95s (6.19s CPU time): 50 tests passed, 0 failed, 0 skipped (50 total tests)\n","passed":true},{"durationMs":29,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"LARPToken.approve(address,uint256)\",\"LARPToken.transfer(address,uint256)\",\"LARPToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"README.md\":105,\"foundry.toml\":21,\"remappings.txt\":2,\"src/LARPToken.sol\":17,\"test/LARPInvariant.t.sol\":252,\"test/LARPLaunchFlow.t.sol\":150,\"test/LARPToken.t.sol\":297,\"test/LARPTokenAdversarial.t.sol\":315,\"test/README.md\":38},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"0839870be49dcc1684e22513a61a860afacfcca1a86b52686dffe94d3d527fa3","verifiedTreeHash":"63202f1cd70b9a6b7a211ccb2a476884f0014824","verifierVersion":"0.1.0+327e1e9f"},{"checks":[{"durationMs":1280,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.18s\nCompiler run successful!\n","passed":true},{"durationMs":1804,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 5 tests for test/LARPLaunchFlow.t.sol:LARPLaunchFlowTest\n[PASS] test_create2MintsFullSupplyToFactory() (gas: 43964)\n[PASS] test_deployerCannotSpendHolderFundsWithoutApproval() (gas: 160999)\n[PASS] test_launchAllocationClaimsAndPoolTransfersAreExact() (gas: 445234)\n[PASS] test_noMintBurnOrAdministrativeEntryPoints() (gas: 2506977)\n[PASS] test_runtimeHasNoForbiddenOpcodesAndFitsDeploymentLimit() (gas: 2259326)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 23.43ms (9.83ms CPU time)\n\nRan 27 tests for test/LARPToken.t.sol:LARPTokenTest\n[PASS] testFuzz_finiteAllowanceSpending(uint256,uint256) (runs: 1024, μ: 163248, ~: 165334)\nLogs:\n  Bound result 1591250286083630977701598403161340091253170235734\n  Bound result 188082492861499593202\n\n[PASS] testFuzz_spendingAboveAllowanceReverts(uint256,uint256) (runs: 1024, μ: 123027, ~: 123371)\nLogs:\n  Bound result 592433609113111998259797678\n  Bound result 815132781773776003480404892\n\n[PASS] testFuzz_transferAboveBalanceReverts(uint256) (runs: 1024, μ: 69055, ~: 69391)\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129655639\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 1024, μ: 92822, ~: 93187)\nLogs:\n  Bound result 410614325816832008583343992\n\n[PASS] test_approveEmitsEventAndReplacesAllowance() (gas: 132049)\n[PASS] test_approveWithoutBalanceIsAllowed() (gas: 78304)\n[PASS] test_approveZeroSpenderReverts() (gas: 37640)\n[PASS] test_constructorEmitsExactlyOneMint() (gas: 9655)\n[PASS] test_directDeploymentMintsToCaller() (gas: 28247)\n[PASS] test_infiniteAllowanceIsNotReduced() (gas: 139332)\n[PASS] test_metadataAndInitialState() (gas: 107578)\n[PASS] test_nativeCurrencyAndUnknownCallsRevert() (gas: 67348)\n[PASS] test_oversizedSelfTransferReverts() (gas: 40189)\n[PASS] test_revokedAllowanceCannotBeSpent() (gas: 131243)\n[PASS] test_selfTransferPreservesBalance() (gas: 53916)\n[PASS] test_transferDeliversExactAmountAndEmitsEvent() (gas: 93527)\n[PASS] test_transferEntireSupply() (gas: 161687)\n[PASS] test_transferFromByHolderStillRequiresAllowance() (gas: 42639)\n[PASS] test_transferFromConsumesAllowanceAndEmitsTransfer() (gas: 254660)\n[PASS] test_transferFromInsufficientBalanceRollsBackAllowance() (gas: 126175)\n[PASS] test_transferFromToSelfConsumesAllowanceWithoutMovingBalance() (gas: 103357)\n[PASS] test_transferFromToZeroRollsBackAllowance() (gas: 114167)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 71904)\n[PASS] test_transferWithoutBalanceReverts() (gas: 57494)\n[PASS] test_unapprovedSpenderCannotUseAnotherSpendersAllowance() (gas: 117837)\n[PASS] test_zeroTransferFromEmptyAccountEmitsEvent() (gas: 73367)\n[PASS] test_zeroTransferFromNeedsNoAllowance() (gas: 81491)\nSuite result: ok. 27 passed; 0 failed; 0 skipped; finished in 27.17ms (109.14ms CPU time)\n\nRan 1 test for test/LARPInvariant.t.sol:LARPInvariantTest\n[PASS]\nLARPInvariantTest invariants:\n[PASS] invariant_allowancesMatchApprovalsAndSpending\n[PASS] invariant_supplyIsConstantAndAllBalancesAreConserved\n LARPInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭-------------+--------------+-------+---------+----------╮\n| Contract    | Selector     | Calls | Reverts | Discards |\n+=========================================================+\n| LARPHandler | approve      | 2636  | 0       | 0        |\n|-------------+--------------+-------+---------+----------|\n| LARPHandler | transfer     | 2853  | 0       | 0        |\n|-------------+--------------+-------+---------+----------|\n| LARPHandler | transferFrom | 2703  | 0       | 0        |\n╰-------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 2\n  Bound result 6081\n  Bound result 0\n  Bound result 0\n  Bound result 2886\n  Bound result 0\n  Bound result 6\n  Bound result 0\n  Bound result 0\n  Bound result 18\n  Bound result 213\n  Bound result 255\n  Bound result 0\n  Bound result 34243279850342752640172335\n  Bound result 337\n  Bound result 10\n  Bound result 1299\n  Bound result 5434\n  Bound result 4946\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 3862\n  Bound result 6398\n  Bound result 40000000000000000000\n  Bound result 929\n  Bound result 255\n  Bound result 19\n  Bound result 20\n  Bound result 8\n  Bound result 0\n  Bound result 575\n  Bound result 1000000000\n  Bound result 3714247998\n  Bound result 6\n  Bound result 1555\n  Bound result 9\n  Bound result 24576\n  Bound result 244\n  Bound result 22\n  Bound result 1242826417\n  Bound result 2096\n  Bound result 15883011621527952630427400\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.71s (1.71s CPU time)\n\nRan 3 test suites in 1.71s (1.76s CPU time): 33 tests passed, 0 failed, 0 skipped (33 total tests)\n","passed":true},{"durationMs":33,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"LARPToken.approve(address,uint256)\",\"LARPToken.transfer(address,uint256)\",\"LARPToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"README.md\":105,\"foundry.toml\":21,\"launch.json\":24,\"remappings.txt\":2,\"src/LARPToken.sol\":17,\"test/LARPInvariant.t.sol\":90,\"test/LARPLaunchFlow.t.sol\":150,\"test/LARPToken.t.sol\":296},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"1be87cbb72c00fad99267e8023fbb31c94a321363bb636817c3c3b610d0ca443","verifiedTreeHash":"08f148fcecd544bfaa9d22ea94baa44d5cef9704","verifierVersion":"0.1.0+327e1e9f"},{"checks":[{"durationMs":1256,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.14s\nCompiler run successful!\n","passed":true},{"durationMs":1924,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 5 tests for test/LARPLaunchFlow.t.sol:LARPLaunchFlowTest\n[PASS] test_create2MintsFullSupplyToFactory() (gas: 43964)\n[PASS] test_deployerCannotSpendHolderFundsWithoutApproval() (gas: 160999)\n[PASS] test_launchAllocationClaimsAndPoolTransfersAreExact() (gas: 445234)\n[PASS] test_noMintBurnOrAdministrativeEntryPoints() (gas: 2506977)\n[PASS] test_runtimeHasNoForbiddenOpcodesAndFitsDeploymentLimit() (gas: 2259326)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 26.48ms (11.39ms CPU time)\n\nRan 27 tests for test/LARPToken.t.sol:LARPTokenTest\n[PASS] testFuzz_finiteAllowanceSpending(uint256,uint256) (runs: 1024, μ: 163521, ~: 165334)\nLogs:\n  Bound result 24576\n  Bound result 21\n\n[PASS] testFuzz_spendingAboveAllowanceReverts(uint256,uint256) (runs: 1024, μ: 123106, ~: 123385)\nLogs:\n  Bound result 789\n  Bound result 6481\n\n[PASS] testFuzz_transferAboveBalanceReverts(uint256) (runs: 1024, μ: 69047, ~: 69391)\nLogs:\n  Bound result 1653270402071064867564316362502137057791637453467675084\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 1024, μ: 93006, ~: 93163)\nLogs:\n  Bound result 6\n\n[PASS] test_approveEmitsEventAndReplacesAllowance() (gas: 132049)\n[PASS] test_approveWithoutBalanceIsAllowed() (gas: 78304)\n[PASS] test_approveZeroSpenderReverts() (gas: 37640)\n[PASS] test_constructorEmitsExactlyOneMint() (gas: 9655)\n[PASS] test_directDeploymentMintsToCaller() (gas: 28247)\n[PASS] test_infiniteAllowanceIsNotReduced() (gas: 139332)\n[PASS] test_metadataAndInitialState() (gas: 107578)\n[PASS] test_nativeCurrencyAndUnknownCallsRevert() (gas: 67348)\n[PASS] test_oversizedSelfTransferReverts() (gas: 40189)\n[PASS] test_revokedAllowanceCannotBeSpent() (gas: 131243)\n[PASS] test_selfTransferPreservesBalance() (gas: 53916)\n[PASS] test_transferDeliversExactAmountAndEmitsEvent() (gas: 93527)\n[PASS] test_transferEntireSupply() (gas: 161687)\n[PASS] test_transferFromByHolderStillRequiresAllowance() (gas: 42639)\n[PASS] test_transferFromConsumesAllowanceAndEmitsTransfer() (gas: 254660)\n[PASS] test_transferFromInsufficientBalanceRollsBackAllowance() (gas: 126175)\n[PASS] test_transferFromToSelfConsumesAllowanceWithoutMovingBalance() (gas: 103357)\n[PASS] test_transferFromToZeroRollsBackAllowance() (gas: 114167)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 71904)\n[PASS] test_transferWithoutBalanceReverts() (gas: 57494)\n[PASS] test_unapprovedSpenderCannotUseAnotherSpendersAllowance() (gas: 117837)\n[PASS] test_zeroTransferFromEmptyAccountEmitsEvent() (gas: 73367)\n[PASS] test_zeroTransferFromNeedsNoAllowance() (gas: 81491)\nSuite result: ok. 27 passed; 0 failed; 0 skipped; finished in 26.63ms (115.39ms CPU time)\n\nRan 1 test for test/LARPInvariant.t.sol:LARPInvariantTest\n[PASS]\nLARPInvariantTest invariants:\n[PASS] invariant_allowancesMatchApprovalsAndSpending\n[PASS] invariant_supplyIsConstantAndAllBalancesAreConserved\n LARPInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭-------------+--------------+-------+---------+----------╮\n| Contract    | Selector     | Calls | Reverts | Discards |\n+=========================================================+\n| LARPHandler | approve      | 2713  | 0       | 0        |\n|-------------+--------------+-------+---------+----------|\n| LARPHandler | transfer     | 2767  | 0       | 0        |\n|-------------+--------------+-------+---------+----------|\n| LARPHandler | transferFrom | 2712  | 0       | 0        |\n╰-------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 6\n  Bound result 5948\n  Bound result 0\n  Bound result 0\n  Bound result 12544928582252011297723960\n  Bound result 244\n  Bound result 0\n  Bound result 20\n  Bound result 6\n  Bound result 20\n  Bound result 0\n  Bound result 298\n  Bound result 0\n  Bound result 0\n  Bound result 13\n  Bound result 0\n  Bound result 3144\n  Bound result 161184686967706903822519598\n  Bound result 12\n  Bound result 0\n  Bound result 773435945\n  Bound result 96\n  Bound result 0\n  Bound result 181392783403940848086357914\n  Bound result 0\n  Bound result 0\n  Bound result 2974\n  Bound result 14\n  Bound result 1707\n  Bound result 237455071417747988702281704\n  Bound result 250000000000000000773433553\n  Bound result 1\n  Bound result 22\n  Bound result 24\n  Bound result 11\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 1299\n  Bound result 16\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.82s (1.82s CPU time)\n\nRan 3 test suites in 1.83s (1.88s CPU time): 33 tests passed, 0 failed, 0 skipped (33 total tests)\n","passed":true},{"durationMs":24,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"LARPToken.approve(address,uint256)\",\"LARPToken.transfer(address,uint256)\",\"LARPToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"README.md\":105,\"foundry.toml\":21,\"remappings.txt\":2,\"src/LARPToken.sol\":17,\"test/LARPInvariant.t.sol\":90,\"test/LARPLaunchFlow.t.sol\":150,\"test/LARPToken.t.sol\":296},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":565,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":278,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/LARPToken.sol:10: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"da71ab7aa157135355c69d8149a14e57eb54e1f3cb1c161cbe3eb72866d669c9","verifiedTreeHash":"373143730a3d5ca3f01396cd8cd2124b5c04b069","verifierVersion":"0.1.0+327e1e9f"}]}