{"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":"28fb6fdc-d628-4413-9b18-d4a10128433b","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"b0410293cb5a3692929272279bd639d83e0325006a5a7c606f1a57e250d3654a","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":"5013f15c4bad78a0bfe26b53c9b4cb5af4e2ebd93fd64b27e27f2b67e23ffa5c","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":"f0316bdba43d379772bd022cfe7df10494a264d4b9de129ade3edb9e387a69da","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":"292ab2cca3e31b4882e7c822516ebc692ffe809dcc1b33c28116d894e9f24655","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":"bd87085d417f89d887fea49dff94d14d4205afd574ecf21b9ccc826a7ae68096","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":"e052016fab1f84a4bb9664dd93b4d6beda99e94de26a1babc0076e6d51748db7","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"d59561da3b378461b7c749f6bd5084477d44993aa94972ddea90f542535751df","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"d59561da3b378461b7c749f6bd5084477d44993aa94972ddea90f542535751df","skillId":"build-contract-project","state":"accepted"},{"acceptedSubmissionHash":"f9b88c6ed8db47ff40d2b43be01b33bb9952939d179ea0cd398cfb356ed656bd","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"1ea2f7f2fac3888d8d437a5263d3cb833cd9e763ae0b3b1c7b999f15e5daef9f","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"4c76766b00591dfe982fe85d3de589fdb2f810e5137c301155d1c5e36a1d3b23","skillId":"write-foundry-tests","tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"4c76766b00591dfe982fe85d3de589fdb2f810e5137c301155d1c5e36a1d3b23","skillId":"write-foundry-tests","state":"accepted"}],"objective":"A custom token: SwarmPeg (SWARMPEG).\nToken name: SwarmPeg\nToken symbol: SWARMPEG\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.","parentJobId":null,"planHash":"58ed1f9216d1b2e4b73bf1f114bd3c5aed703f28de1a69de6a3e5818a354dec3","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"28fb6fdc-d628-4413-9b18-d4a10128433b","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-2111-swarmpeg"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"52272","feedbackHash":"beee8736eacc891a0a88a5f9da5b3b97979661e098146947bfa32af188673108","nodeKey":"audit_economics","submissionHash":"b0410293cb5a3692929272279bd639d83e0325006a5a7c606f1a57e250d3654a","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52021","feedbackHash":"797114a741659a4ab9e03da9f24d791a36d68be8a176ccca5c93f05ee10416ed","nodeKey":"audit_flow","submissionHash":"5013f15c4bad78a0bfe26b53c9b4cb5af4e2ebd93fd64b27e27f2b67e23ffa5c","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52256","feedbackHash":"fc49a35346fe5d470eb7f4146c58e69d2479bbadf1ecc7911da7b3ce29ce1a7b","nodeKey":"audit_judge","submissionHash":"f0316bdba43d379772bd022cfe7df10494a264d4b9de129ade3edb9e387a69da","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"53932","feedbackHash":"a923031fe4e4dd74c6e0c6af67e902d29d9df87d19f4a6dc33480eb177bdd499","nodeKey":"audit_math","submissionHash":"292ab2cca3e31b4882e7c822516ebc692ffe809dcc1b33c28116d894e9f24655","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52585","feedbackHash":"618553291ed3b8841362ccf774965d53b823857321aeb77935527e7848134388","nodeKey":"audit_permissions","submissionHash":"bd87085d417f89d887fea49dff94d14d4205afd574ecf21b9ccc826a7ae68096","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"50996","feedbackHash":"7c19a8ee8b9cff1765291bb44abdbc79427689dae206befe363e18d85192a964","nodeKey":"build_contract_project","submissionHash":"e052016fab1f84a4bb9664dd93b4d6beda99e94de26a1babc0076e6d51748db7","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51001","feedbackHash":"276d968761f7def2905ba87db4c58bb056c9ffc2977e07dc111cab9c7f57ad9b","nodeKey":"manifest","submissionHash":"f9b88c6ed8db47ff40d2b43be01b33bb9952939d179ea0cd398cfb356ed656bd","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52082","feedbackHash":"6a348afab9221595cf0f42ddd28cf9f886258c9a7b3279a55797c3f9169be316","nodeKey":"write_foundry_tests","submissionHash":"1ea2f7f2fac3888d8d437a5263d3cb833cd9e763ae0b3b1c7b999f15e5daef9f","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"2d3069b802fcb6c49deb70c36622c71a57e844ded59406c0b12f1bb53b70a03e","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"5a71d7c316f56a3531f4bbfadb61281887231f35c668385f9f037768be94d961","device":"401c4383398af47c","findings":[],"hash":"1ea2f7f2fac3888d8d437a5263d3cb833cd9e763ae0b3b1c7b999f15e5daef9f","nodeId":"3c80c618-5952-4794-b092-62ab39b21258","outcome":"completed","summary":"I added `test/SwarmPeg.open.t.sol`. It builds on the suite that was already here and doesn't change it. I found no defect in `src/SwarmPeg.sol`, so I wrote no `.imd-findings.json`.\n\n**Check:** `forge build` and `forge test` pass with the verifier's seed `0x1605…5756`: 51 tests in 5 suites, none failing. During the invariant runs every handler function was called about 2,700–3,300 times with 0 reverts, and `fail_on_revert` is on. So none of the properties passes vacuously.\n\n**About the contract:** it is OpenZeppelin v5.1.0's ERC20 with nothing added except a constructor. That constructor mints exactly 1,000,000,000 × 10¹⁸ to whoever deploys it. There are no admin, mint, burn, pause or ownership functions. The existing tests already covered the basic happy paths and failure paths, so the new file goes after what they left open:\n\n- **Open-ended invariant test:** the existing invariant test only uses four fixed holders. This handler sends to addresses the fuzzer picks, including the token contract and the handler itself. It also tries transfers above the balance, `transferFrom` above the allowance, and transfers to the zero address, all of which must revert. After every random sequence it checks:\n  - every holder's balance equals a separately kept expected balance;\n  - all balances add up to the full supply, and `totalSupply` never changes;\n  - the zero address holds nothing;\n  - no balance is larger than the supply;\n  - name, symbol and decimals never change.\n- **Launch invariant test:** a copy of the token deployed by a factory hands out shares in random order: to a distributor, a pool, a remainder address, claimants and traders. Checks:\n  - all the launch accounts add up to the supply;\n  - the distributor's balance is exactly what it received minus what it paid out, and claimants receive exactly what was claimed (never more than the 10% swarm share);\n  - the factory holds the whole supply before launch and nothing after it.\n- **Fuzz and edge tests:**\n  - a random caller can't move another holder's tokens without an allowance;\n  - a holder approving itself gives nobody else access;\n  - a new `approve` replaces the old allowance rather than adding to it, and repeating it changes nothing;\n  - sending tokens away and back restores both balances, and two transfers add up to the same as one;\n  - spending an allowance emits only a `Transfer` event, no `Approval`;\n  - the zero address can't approve or send;\n  - one-wei edges;\n  - the supply is exactly one billion whole tokens.\n\n**Expected behaviour, not a defect:** tokens sent to the token's own address are accepted and then stuck for good, because there is no rescue function. That is normal for a token with no admin powers. I wrote a test that pins this behaviour so any change to it gets noticed, rather than reporting it as a finding.\n\n**Not done:**\n- I didn't change the existing tests, `src/`, or any configuration.\n- I didn't commit; the file is left in the working tree.\n- The protected launch-floor tests need the real factory and Uniswap v4 setup, which isn't in this repo, so I didn't run them.","treeHash":"2c73bdb13f6ddb626c83a4d0028dbd33eec34596","usage":{"cachedInputTokens":418147,"inputTokens":16,"model":"claude-opus-5-5","outputTokens":11554,"runtime":"claude","turns":8,"wallClockMs":138985}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"8109087d965ddf6c","findings":[],"hash":"292ab2cca3e31b4882e7c822516ebc692ffe809dcc1b33c28116d894e9f24655","nodeId":"3a007bca-f594-404f-9947-d7c1df7f768d","outcome":"completed","summary":"The review is complete. The findings file at `.imd-findings.json` holds zero findings and eight coverage rows, and the working tree is otherwise untouched.\n\n**Outcome: no math, boundary, or numerical-gap defect in SwarmPeg.** The token is a 17-line wrapper over OpenZeppelin v5.1.0 ERC20 with one constructor mint and no overrides.\n\nWhat I verified:\n- **Supply constant.** The literal `1_000_000_000 * 10 ** 18` is folded at compile time to exactly 10^27, matches the manifest string, and fits in uint128 so Uniswap v4 delta math never sees it overflow. The aderyn large-literal line is style only.\n- **Transfer arithmetic.** Both unchecked blocks in OpenZeppelin's `_update` are guarded: the subtraction by the insufficient-balance revert, the addition by the sum-of-balances invariant, which cannot break because there is no post-constructor mint path.\n- **Allowance arithmetic.** The unchecked decrement in `_spendAllowance` is guarded by the insufficient-allowance revert. Only exactly max is infinite. Max-minus-one decrements normally, and an allowance above balance is bounded by the balance check and rolls back atomically.\n- **Launch split.** The 1000 and 8000 basis-point legs divide 10^27 with no dust. With no fee or burn, every launch leg and claim arrives whole.\n- **Boundary enumeration.** No external calls, no payable or receive functions, no bytes decoding, and only address-zero sentinel branches, all of which revert.\n- **Library integrity.** All six vendored OpenZeppelin files are byte-identical to the upstream v5.1.0 archive, whose hash matches DEPENDENCIES.md.\n\nI ran the shipped suite of 38 tests plus seven reviewer probes under `test/scratch/`, all passing, and removed the probes afterward. Coverage rows mark all three entry points as `holds` with the reasons above.","treeHash":null,"usage":{"cachedInputTokens":607887,"inputTokens":258,"model":"claude-fable-5-1","outputTokens":10466,"runtime":"claude","turns":22,"wallClockMs":161927}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"229c8cb0d9067fbe","findings":[],"hash":"5013f15c4bad78a0bfe26b53c9b4cb5af4e2ebd93fd64b27e27f2b67e23ffa5c","nodeId":"acd2b797-96fc-45a1-9610-9e47c23c8e52","outcome":"completed","summary":"The review is complete and `.imd-findings.json` holds an empty findings list with nine coverage rows. Git status shows no tracked changes beyond that output file.\n\n**Outcome: no defects found.** SwarmPeg is a 17-line contract that inherits OpenZeppelin ERC20 and mints the full supply to the constructor caller. There is no custom transfer logic, no roles, no external calls and no fallback, so every failure mode in the Execution Trace, Periphery and First Principles guides collapses to the behaviour of the vendored base contract.\n\nWhat I verified, by reading and by running a scratch Foundry test that I removed afterwards:\n\n- **Constructor**: mints exactly 10^27 units once to the caller. Deployed through a CREATE2 factory stand-in, the factory holds the whole supply. The constructor is nonpayable and makes no external calls. The aderyn \"large numeric literal\" lead resolves to the exact intended value.\n- **approve, transfer, transferFrom**: traced through the OpenZeppelin v5.1.0 implementation. Amounts move exactly, zero recipient and zero spender revert, insufficient balance and allowance revert before any state write, infinite allowance stays unchanged, and a self-transfer preserves balances.\n- **Launch flows**: factory to distributor, distributor to claimant, factory to pool and a buy/sell through approve plus transferFrom all deliver the exact amounts, and total supply stays fixed.\n- **Periphery**: all six vendored OpenZeppelin files are byte-identical to the upstream v5.1.0 archive, whose checksum matches the one recorded in DEPENDENCIES.md.\n- **Runtime**: no DELEGATECALL, CALLCODE, SELFDESTRUCT, CALL or STATICCALL opcodes. Unknown selectors such as mint, burn, pause and blacklist revert. Plain ETH transfers revert.\n- **Project tests**: the existing 38 unit, fuzz and invariant tests pass with the README's seed.\n\nOne note rather than a finding: approvals replace rather than increment, which is the standard ERC-20 race and is documented in the README. I did not run the protected pool-manager swap test here because v4-core is not vendored in this tree; its pass is implied by the token having no transfer hooks, but the verifier's harness is where that is proven.","treeHash":null,"usage":{"cachedInputTokens":516160,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":9784,"runtime":"claude","turns":15,"wallClockMs":149988}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"ef31844bb462de78","findings":[],"hash":"b0410293cb5a3692929272279bd639d83e0325006a5a7c606f1a57e250d3654a","nodeId":"b19b8b48-5d6e-40d3-bdc2-3a1b54d21357","outcome":"completed","summary":"The review is complete and clean. The findings file is written with an empty list and full coverage, and the working tree holds no other changes.\n\n**Result:** no defects in the Economic Security, Invariant or Flow Gap areas for SwarmPeg. The token at `src/SwarmPeg.sol` is a fixed-supply OpenZeppelin ERC-20 with no owner, fee, hook, mint or burn path after the constructor.\n\n**What I verified**\n\n- **Supply and allocation.** The constructor mints exactly 10^27 minor units once to the caller, which is the factory under launchCustom. Decimals are the OpenZeppelin default of 18. The aderyn literal lead evaluates correctly.\n- **Conservation invariant.** The only writers of balances are the constructor mint and plain transfers, which reject the zero address on either side. Supply cannot grow or shrink after deployment. The project's stateful invariant suite and a 16-actor, 200-step scratch fuzz both pass.\n- **Launch flows.** Factory to distributor, distributor to claimants, factory to pool, pool to trader and sell-back all move the exact amount. A fuzzed scratch test over claimant counts and trade sizes confirms every leg arrives whole and the pool returns to its seeded balance.\n- **Economic dependencies.** No oracle, callback, reentrancy surface or external call exists. The compiled ABI exposes only the nine ERC-20 functions and the supply constant, with no link references, DELEGATECALL, CALLCODE or SELFDESTRUCT.\n- **Library provenance.** All six vendored OpenZeppelin files are byte-identical to upstream v5.1.0.\n\n**Coverage record.** All three listed entry points are marked holds, plus the constructor, two invariants, the pool flow and the static-analysis lead, eight rows total.\n\n**Not reached.** The real ProjectFactory, MerkleDistributor and pool seeding contracts are not in this tree, so the Uniswap v4 seed and swap were reasoned from the token's behaviour rather than executed against the protected harness. The manifest does not exist yet in this tree; it should list constructorArgs as an empty array and totalSupply as 1000000000000000000000000000.","treeHash":null,"usage":{"cachedInputTokens":528296,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":10195,"runtime":"claude","turns":24,"wallClockMs":145815}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"3c1226d190150ef0","findings":[],"hash":"bd87085d417f89d887fea49dff94d14d4205afd574ecf21b9ccc826a7ae68096","nodeId":"99a43e83-1ae8-42aa-a146-8a7448c44459","outcome":"completed","summary":"I found no defects in SwarmPeg's permissions. `.imd-findings.json` has an empty findings list and 9 coverage rows, all `holds`: the 3 listed entry points plus 6 invariant and seam rows.\n\n**What the code is.** `src/SwarmPeg.sol` is a 17-line contract built on OpenZeppelin's ERC20. Its constructor takes no arguments and mints 1e27 base units (1 billion tokens with 18 decimals) to `msg.sender`. Its only addition to the standard is a read-only `INITIAL_SUPPLY` getter. I downloaded OpenZeppelin v5.1.0 and compared it with the copy in `lib/`: the archive's SHA-256 matches `DEPENDENCIES.md`, and all six vendored files are byte-identical to the release. So nothing in the library has been altered.\n\n**Access Control guide**\n- **Roles:** there are none. No owner, role, or initializer exists, and the constructor grants nothing beyond the one mint.\n- **Inconsistent guards:** each writable value has exactly one way in. Balances change only through `transfer` and `transferFrom`, and allowances only through `approve` and the allowance check inside `transferFrom`.\n- **Supply:** `_mint` runs only in the constructor. Sending from the zero address can't be used as a hidden mint, because it always reverts.\n- **Proxies and raw ETH:** there is no delegatecall, proxy, or catch-all function. An unknown function call such as `mint(address,uint256)` reverts, and so does sending ETH.\n\n**Asymmetry guide**\n- `transfer` and `transferFrom` move tokens the same way; the only difference is the allowance check, as the ERC-20 standard requires.\n- Two quirks of OpenZeppelin v5 are deliberate and covered in the README, so I did not report them. A maximum allowance is never reduced, and spending an allowance emits no `Approval` event.\n- The known front-running risk when changing a nonzero allowance is a property of ERC-20 itself, and the README already tells holders how to handle it.\n\n**Trust Gap guide**\n- No behaviour depends on who the caller is: there are no fees, exemptions, or admin setters. The factory, pool manager, distributor and traders are all treated the same.\n- Every launch transfer moves exactly the amount requested, so no group of users can gain or lose relative to another.\n\n**Checks I ran**\n- `forge build` succeeded, and the compiled ABI is only the ERC-20 functions plus `INITIAL_SUPPLY`.\n- The existing suite passed: 38 tests with the README's fuzz seed.\n- I wrote a 7-test scratch probe, all passing, which included a 512-run fuzz test. It confirmed four things:\n  - The deployer has no power over a holder's balance.\n  - A spender can never take more than their allowance.\n  - A holder needs an allowance to call `transferFrom` on their own balance, and revoking an allowance takes effect.\n  - Zero-address and ETH calls are rejected.\n- I deleted the probe afterwards and changed no tracked files.\n- I could not run the two protected checks, because they need a launch harness, pool code and environment variables that aren't in this repository. I only traced them by reading, and none of them should fail on this token.\n\nSeveral untracked entries now show in `git status`, such as `.bashrc`, `.gitconfig` and `.claude/*`. I didn't create them: they are empty device-file placeholders created by the sandbox, so I left them alone.","treeHash":null,"usage":{"cachedInputTokens":473243,"inputTokens":20,"model":"claude-opus-5-5","outputTokens":7306,"runtime":"claude","turns":11,"wallClockMs":86935}},{"artifacts":[],"attempt":1,"bundleHash":"bafe27e88ebb2e676906e7f9e2681c7370cc56b20e38063d447955214ce2f6d8","device":"aba9962b432e532c","findings":[],"hash":"e052016fab1f84a4bb9664dd93b4d6beda99e94de26a1babc0076e6d51748db7","nodeId":"a0db582d-21a9-4aa1-ba87-0251e464c6ea","outcome":"completed","summary":"Implemented SwarmPeg (SWARMPEG) with 18 decimals and exactly 1,000,000,000 tokens minted once to the deployer.\n\nIncluded vendored dependencies, success/failure tests, fuzz and invariant tests, and deployment documentation.\n\nVerified successfully:\n\n- `forge build`, including forced offline compilation\n- `forge test` with the supplied seed: 38 passed\n- `forge fmt --check`\n\nNo transactions were broadcast.","treeHash":"f95eea83a5baab819e2bf065f60d4861cdc145e6","usage":{"cachedInputTokens":643584,"inputTokens":52025,"model":"gpt-6-astra","outputTokens":15170,"runtime":"codex","turns":5,"wallClockMs":332251}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"72f49cf84b9ab056","findings":[],"hash":"f0316bdba43d379772bd022cfe7df10494a264d4b9de129ade3edb9e387a69da","nodeId":"3d410e34-885c-4b06-a902-2df362687ec6","outcome":"completed","summary":"The review is complete and the findings file is written. No tracked file was changed.\n\n**Outcome: no defects found.** All five specialists reported nothing, and my own pass against the Pashov, x-ray, Trail of Bits and ethskills checklists reproduced nothing to report. The findings file holds an empty list and a coverage record with all three entry points marked `holds`.\n\n**What I verified against the code**\n\n- **Token source.** `src/SwarmPeg.sol` is a 16-line contract that inherits OpenZeppelin ERC20 and has a parameterless constructor minting the whole supply to msg.sender. It has no owner, mint, burn, pause or hook, and no receive or fallback. The compiled ABI exposes only the standard ERC-20 functions.\n- **Dependency integrity.** I downloaded the OpenZeppelin v5.1.0 archive. Its SHA-256 matches DEPENDENCIES.md, and all five vendored contract files plus the licence are byte-identical to upstream.\n- **Entry points.** A scratch Foundry test traced approve, transfer and transferFrom through their success and revert paths: zero-address rejections, insufficient balance, insufficient allowance, finite allowance decrement, infinite allowance left untouched, and a stranger with no allowance refused. The launch flow (factory to distributor to claimant) moves exactly the amount sent and leaves the supply unchanged.\n- **Deployment model.** Deploying through CREATE2 from a factory contract mints exactly the manifest's supply to that factory, and the address matches the prediction. Runtime is 1752 bytes and creation code 2641 bytes, far under the limits. An opcode scan found no DELEGATECALL, CALLCODE or SELFDESTRUCT. Metadata confirms solc 0.8.26, cancun, and bytecode hash none.\n- **Manifest.** launch.json uses only schema keys, an empty constructorArgs list matching the zero-parameter constructor, the exact supply, 18 decimals, matching name and symbol, and lowercase addresses.\n- **Static-analysis lead.** The aderyn \"large numeric literal\" line refers to the supply constant, which evaluates to exactly 1e27 at compile time. It is a style note, not a defect, so it was left out.\n\nThe project's own 51 tests, including the invariant suites, pass. The scratch test directory was removed after use, so nothing outside the findings file was left behind.","treeHash":null,"usage":{"cachedInputTokens":512530,"inputTokens":322,"model":"claude-fable-5-1","outputTokens":8856,"runtime":"claude","turns":11,"wallClockMs":115678}},{"artifacts":[],"attempt":1,"bundleHash":"3ab73d991a0d8956b8f27aa1cf94d81abd0ab0cb2767c642c5ac9d9af536d347","device":"6156e0902980b6f9","findings":[],"hash":"f9b88c6ed8db47ff40d2b43be01b33bb9952939d179ea0cd398cfb356ed656bd","nodeId":"9f48a2dd-4d84-4fe0-8227-f1236d35407c","outcome":"completed","summary":"Created `launch.json` matching SwarmPeg’s constructor, supply, pool settings, and exact economics. Only the manifest changed; local JSON and consistency checks passed.\n\n`forge build` and `forge test` were attempted with the supplied fuzz seed. Both stopped because Solc 0.8.26 returned `Permission denied`.","treeHash":"cce3b4f77e769ddac601c505c79a40ba7f7084ea","usage":{"cachedInputTokens":184960,"inputTokens":24239,"model":"gpt-6.1-sol","outputTokens":3325,"runtime":"codex","turns":4,"wallClockMs":67595}}],"verification":[{"checks":[{"durationMs":3597,"exitCode":0,"name":"build","output":"Compiling 29 files with Solc 0.8.26\nSolc 0.8.26 finished in 3.46s\nCompiler run successful!\n","passed":true},{"durationMs":4490,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 11 tests for test/SwarmPeg.open.t.sol:SwarmPegEdgeTest\n[PASS] testFuzz_ApproveOverwritesRatherThanAccumulates(address,uint256,uint256) (runs: 1000, μ: 130015, ~: 130320)\n[PASS] testFuzz_ArbitraryCallerCannotMoveAnotherHoldersTokens(address,address,uint256) (runs: 1000, μ: 47640, ~: 47430)\nLogs:\n  Bound result 122\n\n[PASS] testFuzz_CannotReachOtherAccountsViaFromEqualsSpender(address,uint256) (runs: 1000, μ: 147491, ~: 147567)\nLogs:\n  Bound result 804448731\n\n[PASS] testFuzz_RoundTripRestoresBalances(address,uint256) (runs: 1000, μ: 113946, ~: 113837)\nLogs:\n  Bound result 1000000000000000000000000000\n\n[PASS] testFuzz_SplitTransfersEqualOneTransfer(address,uint256,uint256) (runs: 1000, μ: 121937, ~: 122666)\nLogs:\n  Bound result 20000000000000000000\n  Bound result 1719639409\n\n[PASS] test_ApproveRejectsZeroOwnerCaller() (gas: 30825)\n[PASS] test_OneWeiEdges() (gas: 171787)\n[PASS] test_SpendingAllowanceEmitsOnlyTransferAndNoApproval() (gas: 122898)\n[PASS] test_SupplyIsExactlyOneBillionWholeTokens() (gas: 32065)\n[PASS] test_TokensSentToTokenAddressAreStuckButSupplyIsUnchanged() (gas: 106875)\n[PASS] test_ZeroAddressCallerCannotTransfer() (gas: 30762)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 63.38ms (309.65ms CPU time)\n\nRan 37 tests for test/SwarmPeg.t.sol:SwarmPegTest\n[PASS] testFuzz_OverAllowanceTransferIsAtomic(uint256,uint256) (runs: 512, μ: 123528, ~: 123895)\nLogs:\n  Bound result 53584117543783251852714891\n  Bound result 53584117543783251852714895\n\n[PASS] testFuzz_OverBalanceTransferIsAtomic(uint256) (runs: 512, μ: 66825, ~: 66772)\nLogs:\n  Bound result 14782010460428521016574991045\n\n[PASS] testFuzz_SelfTransferCannotInflateSupply(uint256) (runs: 512, μ: 55114, ~: 54872)\nLogs:\n  Bound result 3612\n\n[PASS] testFuzz_TransferConservesBalances(address,uint256) (runs: 512, μ: 92839, ~: 93175)\nLogs:\n  Bound result 11\n\n[PASS] testFuzz_TransferFromTracksBalanceAndAllowance(uint256,uint256) (runs: 512, μ: 159894, ~: 162023)\nLogs:\n  Bound result 51597096034693\n\n[PASS] test_ApprovalCanBeReplacedAndRevoked() (gas: 177048)\n[PASS] test_ApprovalCannotBeUsedByAnotherSpender() (gas: 105725)\n[PASS] test_ApprovalDoesNotRequireExistingBalance() (gas: 78366)\n[PASS] test_ApproveEmitsEventAndDoesNotMoveTokens() (gas: 88777)\n[PASS] test_ApproveZeroSpenderReverts() (gas: 37677)\n[PASS] test_ConstructorEmitsExactlyOneMintEvent() (gas: 9698)\n[PASS] test_ConstructorSetsMetadataAndMintsWholeSupplyToDeployer() (gas: 107671)\n[PASS] test_Create2MintsToFactoryAndNotItsCaller() (gas: 287347)\n[PASS] test_DeployerCannotSpendHolderTokensWithoutApproval() (gas: 158499)\n[PASS] test_HolderAlsoNeedsAllowanceForTransferFrom() (gas: 35683)\n[PASS] test_LaunchTransferLegsAndClaimsArriveWhole() (gas: 710780)\n[PASS] test_MaximumTransferCannotOverflowBalances() (gas: 54896)\n[PASS] test_NoPostDeploymentMintBurnOrAdministrativeEntryPoints() (gas: 716886)\n[PASS] test_RejectsDirectEtherAndUnknownCalls() (gas: 64667)\n[PASS] test_RuntimeHasNoForbiddenInstructions() (gas: 2259478)\n[PASS] test_SelfTransferFromConsumesAllowanceWithoutMovingBalance() (gas: 103797)\n[PASS] test_SelfTransferPreservesBalanceAndEmitsEvent() (gas: 54035)\n[PASS] test_TransferEntireSupply() (gas: 149213)\n[PASS] test_TransferFromConsumesFiniteAllowanceAndEmitsTransfer() (gas: 225299)\n[PASS] test_TransferFromOverAllowanceRevertsWithoutChangingState() (gas: 116116)\n[PASS] test_TransferFromOverBalanceRollsBackAllowance() (gas: 122123)\n[PASS] test_TransferFromPreservesInfiniteAllowance() (gas: 139829)\n[PASS] test_TransferFromToZeroRollsBackAllowance() (gas: 114485)\n[PASS] test_TransferFromWithoutApprovalReverts() (gas: 57779)\n[PASS] test_TransferMovesExactAmountAndEmitsEvent() (gas: 91560)\n[PASS] test_TransferOverBalanceReverts() (gas: 54925)\n[PASS] test_TransferToZeroReverts() (gas: 47620)\n[PASS] test_UnfundedAccountCannotTransfer() (gas: 37906)\n[PASS] test_ZeroApprovalToZeroSpenderReverts() (gas: 30420)\n[PASS] test_ZeroTransferFromEmptyAccountEmitsEvent() (gas: 73332)\n[PASS] test_ZeroTransferFromNeedsNoAllowance() (gas: 79161)\n[PASS] test_ZeroTransferToZeroReverts() (gas: 30456)\nSuite result: ok. 37 passed; 0 failed; 0 skipped; finished in 63.73ms (303.30ms CPU time)\n\nRan 1 test for test/SwarmPeg.invariant.t.sol:SwarmPegInvariantTest\n[PASS]\nSwarmPegInvariantTest invariants:\n[PASS] invariant_AllowancesMatchApprovalsAndSpending\n[PASS] invariant_SupplyAndHolderBalancesAreConserved\n SwarmPegInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭-----------------+---------------------+-------+---------+----------╮\n| Contract        | Selector            | Calls | Reverts | Discards |\n+====================================================================+\n| SwarmPegHandler | approve             | 1352  | 0       | 0        |\n|-----------------+---------------------+-------+---------+----------|\n| SwarmPegHandler | overdraw            | 1396  | 0       | 0        |\n|-----------------+---------------------+-------+---------+----------|\n| SwarmPegHandler | overspend           | 1370  | 0       | 0        |\n|-----------------+---------------------+-------+---------+----------|\n| SwarmPegHandler | rejectZeroRecipient | 1346  | 0       | 0        |\n|-----------------+---------------------+-------+---------+----------|\n| SwarmPegHandler | spend               | 1384  | 0       | 0        |\n|-----------------+---------------------+-------+---------+----------|\n| SwarmPegHandler | transfer            | 1344  | 0       | 0        |\n╰-----------------+---------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 3236\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 6051\n  Bound result 107230518247064197357004564\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 2222\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 1223\n  Bound result 392\n  Bound result 4\n  Bound result 1656\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 1039\n  Bound result 242\n  Bound result 100000000000000000000\n  Bound result 12\n  Bound result 6\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.23s (3.23s CPU time)\n\nRan 1 test for test/SwarmPeg.open.t.sol:SwarmPegLaunchInvariantTest\n[PASS]\nSwarmPegLaunchInvariantTest invariants:\n[PASS] invariant_DistributorPaysExactlyWhatItReceived\n[PASS] invariant_FactoryHoldsAllUntilLaunchThenNothing\n[PASS] invariant_LaunchAccountsSumToSupply\n SwarmPegLaunchInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭-----------------------+-----------+-------+---------+----------╮\n| Contract              | Selector  | Calls | Reverts | Discards |\n+================================================================+\n| SwarmPegLaunchHandler | buy       | 3320  | 0       | 0        |\n|-----------------------+-----------+-------+---------+----------|\n| SwarmPegLaunchHandler | claim     | 3267  | 0       | 0        |\n|-----------------------+-----------+-------+---------+----------|\n| SwarmPegLaunchHandler | launch    | 3328  | 0       | 0        |\n|-----------------------+-----------+-------+---------+----------|\n| SwarmPegLaunchHandler | overclaim | 3236  | 0       | 0        |\n|-----------------------+-----------+-------+---------+----------|\n| SwarmPegLaunchHandler | sell      | 3233  | 0       | 0        |\n╰-----------------------+-----------+-------+---------+----------╯\n\nLogs:\n  Bound result 6592\n  Bound result 132836492315704249822362805\n  Bound result 121189864619161\n  Bound result 120793515068329333234946312\n  Bound result 17504834249915674258911107\n  Bound result 75203613515196987440097687\n  Bound result 30000000000000000000\n  Bound result 2691187280\n  Bound result 120738722697217\n  Bound result 5\n  Bound result 96\n  Bound result 7763\n  Bound result 10\n  Bound result 6\n  Bound result 2\n  Bound result 1583327360759955800133779\n  Bound result 62\n  Bound result 3322993659162397119845580\n  Bound result 451141921944\n  Bound result 0\n  Bound result 9\n  Bound result 511\n  Bound result 6797\n  Bound result 0\n  Bound result 2827\n  Bound result 255\n  Bound result 6652\n  Bound result 18\n  Bound result 4132500557120082901537826\n  Bound result 12\n  Bound result 1308858516212363740142240\n  Bound result 20000000000000000000\n  Bound result 1000000000000000000\n  Bound result 43\n  Bound result 7\n  Bound result 397\n  Bound result 1532\n  Bound result 9\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.85s (3.85s CPU time)\n\nRan 1 test for test/SwarmPeg.open.t.sol:SwarmPegOpenInvariantTest\n[PASS]\nSwarmPegOpenInvariantTest invariants:\n[PASS] invariant_MetadataNeverChanges\n[PASS] invariant_NoHolderExceedsSupply\n[PASS] invariant_SumOfEveryHolderEqualsFixedSupply\n SwarmPegOpenInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭---------------------+---------------------+-------+---------+----------╮\n| Contract            | Selector            | Calls | Reverts | Discards |\n+========================================================================+\n| SwarmPegOpenHandler | approve             | 2737  | 0       | 0        |\n|---------------------+---------------------+-------+---------+----------|\n| SwarmPegOpenHandler | sendToZero          | 2719  | 0       | 0        |\n|---------------------+---------------------+-------+---------+----------|\n| SwarmPegOpenHandler | transfer            | 2791  | 0       | 0        |\n|---------------------+---------------------+-------+---------+----------|\n| SwarmPegOpenHandler | transferFrom        | 2746  | 0       | 0        |\n|---------------------+---------------------+-------+---------+----------|\n| SwarmPegOpenHandler | transferFromTooMuch | 2695  | 0       | 0        |\n|---------------------+---------------------+-------+---------+----------|\n| SwarmPegOpenHandler | transferTooMuch     | 2696  | 0       | 0        |\n╰---------------------+---------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 24576\n  Bound result 0\n  Bound result 0\n  Bound result 4919\n  Bound result 693038427130701072361238504676665180371859673718\n  Bound result 24576\n  Bound result 846435056036661077312\n  Bound result 5872\n  Bound result 0\n  Bound result 35602802962295\n  Bound result 2\n  Bound result 0\n  Bound result 9\n  Bound result 7\n  Bound result 6934\n  Bound result 659918\n  Bound result 11\n  Bound result 1000000000000000000\n  Bound result 5\n  Bound result 1\n  Bound result 11\n  Bound result 2238\n  Bound result 60355012354860725500397872\n  Bound result 0\n  Bound result 242\n  Bound result 254\n  Bound result 331686408972735921993129119\n  Bound result 2\n  Bound result 0\n  Bound result 1\n  Bound result 275355619588573581697263866\n  Bound result 0\n  Bound result 0\n  Bound result 1000000000\n  Bound result 20000000000000000000\n  Bound result 87\n  Bound result 1771\n  Bound result 21\n  Bound result 84\n  Bound result 6\n  Bound result 6445\n  Bound result 10000\n  Bound result 50000000000000000000\n  Bound result 18\n  Bound result 518094106368444480341510987\n  Bound result 1\n  Bound result 54\n  Bound result 0\n  Bound result 0\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 4.33s (4.33s CPU time)\n\nRan 5 test suites in 4.34s (11.54s CPU time): 51 tests passed, 0 failed, 0 skipped (51 total tests)\n","passed":true},{"durationMs":80,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SwarmPeg.approve(address,uint256)\",\"SwarmPeg.transfer(address,uint256)\",\"SwarmPeg.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":20,\"README.md\":130,\"foundry.toml\":21,\"remappings.txt\":2,\"src/SwarmPeg.sol\":17,\"test/SwarmPeg.invariant.t.sol\":137,\"test/SwarmPeg.open.t.sol\":406,\"test/SwarmPeg.t.sol\":449,\"test/helpers/TokenFactoryHarness.sol\":15},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"1ea2f7f2fac3888d8d437a5263d3cb833cd9e763ae0b3b1c7b999f15e5daef9f","verifiedTreeHash":"2c73bdb13f6ddb626c83a4d0028dbd33eec34596","verifierVersion":"0.1.0+c3fba9eb"},{"checks":[{"durationMs":1167,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.09s\nCompiler run successful!\n","passed":true},{"durationMs":2005,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 37 tests for test/SwarmPeg.t.sol:SwarmPegTest\n[PASS] testFuzz_OverAllowanceTransferIsAtomic(uint256,uint256) (runs: 512, μ: 123517, ~: 123895)\nLogs:\n  Bound result 17142\n  Bound result 999999999999999999999982863\n\n[PASS] testFuzz_OverBalanceTransferIsAtomic(uint256) (runs: 512, μ: 66825, ~: 66772)\nLogs:\n  Bound result 3570168185982072873729022609132993489114270497927802926152749056882334029957\n\n[PASS] testFuzz_SelfTransferCannotInflateSupply(uint256) (runs: 512, μ: 55115, ~: 54872)\nLogs:\n  Bound result 1000000000000000000000000000\n\n[PASS] testFuzz_TransferConservesBalances(address,uint256) (runs: 512, μ: 92868, ~: 93223)\nLogs:\n  Bound result 837940305814267336558513196\n\n[PASS] testFuzz_TransferFromTracksBalanceAndAllowance(uint256,uint256) (runs: 512, μ: 159922, ~: 162023)\nLogs:\n  Bound result 199\n\n[PASS] test_ApprovalCanBeReplacedAndRevoked() (gas: 177048)\n[PASS] test_ApprovalCannotBeUsedByAnotherSpender() (gas: 105725)\n[PASS] test_ApprovalDoesNotRequireExistingBalance() (gas: 78366)\n[PASS] test_ApproveEmitsEventAndDoesNotMoveTokens() (gas: 88777)\n[PASS] test_ApproveZeroSpenderReverts() (gas: 37677)\n[PASS] test_ConstructorEmitsExactlyOneMintEvent() (gas: 9698)\n[PASS] test_ConstructorSetsMetadataAndMintsWholeSupplyToDeployer() (gas: 107671)\n[PASS] test_Create2MintsToFactoryAndNotItsCaller() (gas: 287347)\n[PASS] test_DeployerCannotSpendHolderTokensWithoutApproval() (gas: 158499)\n[PASS] test_HolderAlsoNeedsAllowanceForTransferFrom() (gas: 35683)\n[PASS] test_LaunchTransferLegsAndClaimsArriveWhole() (gas: 710780)\n[PASS] test_MaximumTransferCannotOverflowBalances() (gas: 54896)\n[PASS] test_NoPostDeploymentMintBurnOrAdministrativeEntryPoints() (gas: 716886)\n[PASS] test_RejectsDirectEtherAndUnknownCalls() (gas: 64667)\n[PASS] test_RuntimeHasNoForbiddenInstructions() (gas: 2259478)\n[PASS] test_SelfTransferFromConsumesAllowanceWithoutMovingBalance() (gas: 103797)\n[PASS] test_SelfTransferPreservesBalanceAndEmitsEvent() (gas: 54035)\n[PASS] test_TransferEntireSupply() (gas: 149213)\n[PASS] test_TransferFromConsumesFiniteAllowanceAndEmitsTransfer() (gas: 225299)\n[PASS] test_TransferFromOverAllowanceRevertsWithoutChangingState() (gas: 116116)\n[PASS] test_TransferFromOverBalanceRollsBackAllowance() (gas: 122123)\n[PASS] test_TransferFromPreservesInfiniteAllowance() (gas: 139829)\n[PASS] test_TransferFromToZeroRollsBackAllowance() (gas: 114485)\n[PASS] test_TransferFromWithoutApprovalReverts() (gas: 57779)\n[PASS] test_TransferMovesExactAmountAndEmitsEvent() (gas: 91560)\n[PASS] test_TransferOverBalanceReverts() (gas: 54925)\n[PASS] test_TransferToZeroReverts() (gas: 47620)\n[PASS] test_UnfundedAccountCannotTransfer() (gas: 37906)\n[PASS] test_ZeroApprovalToZeroSpenderReverts() (gas: 30420)\n[PASS] test_ZeroTransferFromEmptyAccountEmitsEvent() (gas: 73332)\n[PASS] test_ZeroTransferFromNeedsNoAllowance() (gas: 79161)\n[PASS] test_ZeroTransferToZeroReverts() (gas: 30456)\nSuite result: ok. 37 passed; 0 failed; 0 skipped; finished in 30.85ms (124.73ms CPU time)\n\nRan 1 test for test/SwarmPeg.invariant.t.sol:SwarmPegInvariantTest\n[PASS]\nSwarmPegInvariantTest invariants:\n[PASS] invariant_AllowancesMatchApprovalsAndSpending\n[PASS] invariant_SupplyAndHolderBalancesAreConserved\n SwarmPegInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭-----------------+---------------------+-------+---------+----------╮\n| Contract        | Selector            | Calls | Reverts | Discards |\n+====================================================================+\n| SwarmPegHandler | approve             | 1352  | 0       | 0        |\n|-----------------+---------------------+-------+---------+----------|\n| SwarmPegHandler | overdraw            | 1396  | 0       | 0        |\n|-----------------+---------------------+-------+---------+----------|\n| SwarmPegHandler | overspend           | 1370  | 0       | 0        |\n|-----------------+---------------------+-------+---------+----------|\n| SwarmPegHandler | rejectZeroRecipient | 1346  | 0       | 0        |\n|-----------------+---------------------+-------+---------+----------|\n| SwarmPegHandler | spend               | 1384  | 0       | 0        |\n|-----------------+---------------------+-------+---------+----------|\n| SwarmPegHandler | transfer            | 1344  | 0       | 0        |\n╰-----------------+---------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 3235\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 6051\n  Bound result 107230518247003538975718769\n  Bound result 10\n  Bound result 0\n  Bound result 0\n  Bound result 2023\n  Bound result 0\n  Bound result 0\n  Bound result 2221\n  Bound result 2\n  Bound result 127\n  Bound result 20000000000000000000\n  Bound result 0\n  Bound result 379\n  Bound result 4157036903623929842\n  Bound result 2392\n  Bound result 18\n  Bound result 0\n  Bound result 0\n  Bound result 5765\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 242\n  Bound result 12\n  Bound result 7\n  Bound result 1\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.92s (1.92s CPU time)\n\nRan 2 test suites in 1.92s (1.95s CPU time): 38 tests passed, 0 failed, 0 skipped (38 total tests)\n","passed":true},{"durationMs":42,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SwarmPeg.approve(address,uint256)\",\"SwarmPeg.transfer(address,uint256)\",\"SwarmPeg.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":20,\"README.md\":130,\"foundry.toml\":21,\"remappings.txt\":2,\"src/SwarmPeg.sol\":17,\"test/SwarmPeg.invariant.t.sol\":137,\"test/SwarmPeg.t.sol\":449,\"test/helpers/TokenFactoryHarness.sol\":15},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":450,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":223,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/SwarmPeg.sol:12: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"e052016fab1f84a4bb9664dd93b4d6beda99e94de26a1babc0076e6d51748db7","verifiedTreeHash":"f95eea83a5baab819e2bf065f60d4861cdc145e6","verifierVersion":"0.1.0+c3fba9eb"},{"checks":[{"durationMs":1210,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.13s\nCompiler run successful!\n","passed":true},{"durationMs":1999,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 37 tests for test/SwarmPeg.t.sol:SwarmPegTest\n[PASS] testFuzz_OverAllowanceTransferIsAtomic(uint256,uint256) (runs: 512, μ: 123517, ~: 123895)\nLogs:\n  Bound result 23777\n  Bound result 23779\n\n[PASS] testFuzz_OverBalanceTransferIsAtomic(uint256) (runs: 512, μ: 66825, ~: 66772)\nLogs:\n  Bound result 3612\n\n[PASS] testFuzz_SelfTransferCannotInflateSupply(uint256) (runs: 512, μ: 55115, ~: 54872)\nLogs:\n  Bound result 780320589923753750136405759\n\n[PASS] testFuzz_TransferConservesBalances(address,uint256) (runs: 512, μ: 92868, ~: 93223)\nLogs:\n  Bound result 634523908527975083156861119\n\n[PASS] testFuzz_TransferFromTracksBalanceAndAllowance(uint256,uint256) (runs: 512, μ: 159922, ~: 162023)\nLogs:\n  Bound result 5\n\n[PASS] test_ApprovalCanBeReplacedAndRevoked() (gas: 177048)\n[PASS] test_ApprovalCannotBeUsedByAnotherSpender() (gas: 105725)\n[PASS] test_ApprovalDoesNotRequireExistingBalance() (gas: 78366)\n[PASS] test_ApproveEmitsEventAndDoesNotMoveTokens() (gas: 88777)\n[PASS] test_ApproveZeroSpenderReverts() (gas: 37677)\n[PASS] test_ConstructorEmitsExactlyOneMintEvent() (gas: 9698)\n[PASS] test_ConstructorSetsMetadataAndMintsWholeSupplyToDeployer() (gas: 107671)\n[PASS] test_Create2MintsToFactoryAndNotItsCaller() (gas: 287347)\n[PASS] test_DeployerCannotSpendHolderTokensWithoutApproval() (gas: 158499)\n[PASS] test_HolderAlsoNeedsAllowanceForTransferFrom() (gas: 35683)\n[PASS] test_LaunchTransferLegsAndClaimsArriveWhole() (gas: 710780)\n[PASS] test_MaximumTransferCannotOverflowBalances() (gas: 54896)\n[PASS] test_NoPostDeploymentMintBurnOrAdministrativeEntryPoints() (gas: 716886)\n[PASS] test_RejectsDirectEtherAndUnknownCalls() (gas: 64667)\n[PASS] test_RuntimeHasNoForbiddenInstructions() (gas: 2259478)\n[PASS] test_SelfTransferFromConsumesAllowanceWithoutMovingBalance() (gas: 103797)\n[PASS] test_SelfTransferPreservesBalanceAndEmitsEvent() (gas: 54035)\n[PASS] test_TransferEntireSupply() (gas: 149213)\n[PASS] test_TransferFromConsumesFiniteAllowanceAndEmitsTransfer() (gas: 225299)\n[PASS] test_TransferFromOverAllowanceRevertsWithoutChangingState() (gas: 116116)\n[PASS] test_TransferFromOverBalanceRollsBackAllowance() (gas: 122123)\n[PASS] test_TransferFromPreservesInfiniteAllowance() (gas: 139829)\n[PASS] test_TransferFromToZeroRollsBackAllowance() (gas: 114485)\n[PASS] test_TransferFromWithoutApprovalReverts() (gas: 57779)\n[PASS] test_TransferMovesExactAmountAndEmitsEvent() (gas: 91560)\n[PASS] test_TransferOverBalanceReverts() (gas: 54925)\n[PASS] test_TransferToZeroReverts() (gas: 47620)\n[PASS] test_UnfundedAccountCannotTransfer() (gas: 37906)\n[PASS] test_ZeroApprovalToZeroSpenderReverts() (gas: 30420)\n[PASS] test_ZeroTransferFromEmptyAccountEmitsEvent() (gas: 73332)\n[PASS] test_ZeroTransferFromNeedsNoAllowance() (gas: 79161)\n[PASS] test_ZeroTransferToZeroReverts() (gas: 30456)\nSuite result: ok. 37 passed; 0 failed; 0 skipped; finished in 22.93ms (110.80ms CPU time)\n\nRan 1 test for test/SwarmPeg.invariant.t.sol:SwarmPegInvariantTest\n[PASS]\nSwarmPegInvariantTest invariants:\n[PASS] invariant_AllowancesMatchApprovalsAndSpending\n[PASS] invariant_SupplyAndHolderBalancesAreConserved\n SwarmPegInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭-----------------+---------------------+-------+---------+----------╮\n| Contract        | Selector            | Calls | Reverts | Discards |\n+====================================================================+\n| SwarmPegHandler | approve             | 1352  | 0       | 0        |\n|-----------------+---------------------+-------+---------+----------|\n| SwarmPegHandler | overdraw            | 1396  | 0       | 0        |\n|-----------------+---------------------+-------+---------+----------|\n| SwarmPegHandler | overspend           | 1370  | 0       | 0        |\n|-----------------+---------------------+-------+---------+----------|\n| SwarmPegHandler | rejectZeroRecipient | 1346  | 0       | 0        |\n|-----------------+---------------------+-------+---------+----------|\n| SwarmPegHandler | spend               | 1384  | 0       | 0        |\n|-----------------+---------------------+-------+---------+----------|\n| SwarmPegHandler | transfer            | 1344  | 0       | 0        |\n╰-----------------+---------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 3235\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 6051\n  Bound result 107230518247003538975718769\n  Bound result 10\n  Bound result 0\n  Bound result 0\n  Bound result 2023\n  Bound result 0\n  Bound result 0\n  Bound result 2221\n  Bound result 2\n  Bound result 127\n  Bound result 20000000000000000000\n  Bound result 0\n  Bound result 379\n  Bound result 4157036903623929842\n  Bound result 2392\n  Bound result 18\n  Bound result 0\n  Bound result 0\n  Bound result 5765\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 242\n  Bound result 12\n  Bound result 7\n  Bound result 1\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.92s (1.91s CPU time)\n\nRan 2 test suites in 1.92s (1.94s CPU time): 38 tests passed, 0 failed, 0 skipped (38 total tests)\n","passed":true},{"durationMs":41,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SwarmPeg.approve(address,uint256)\",\"SwarmPeg.transfer(address,uint256)\",\"SwarmPeg.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":20,\"README.md\":130,\"foundry.toml\":21,\"launch.json\":24,\"remappings.txt\":2,\"src/SwarmPeg.sol\":17,\"test/SwarmPeg.invariant.t.sol\":137,\"test/SwarmPeg.t.sol\":449,\"test/helpers/TokenFactoryHarness.sol\":15},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"f9b88c6ed8db47ff40d2b43be01b33bb9952939d179ea0cd398cfb356ed656bd","verifiedTreeHash":"cce3b4f77e769ddac601c505c79a40ba7f7084ea","verifierVersion":"0.1.0+c3fba9eb"}]}