{"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":"e0ec8ee1-ad07-4980-9b73-98b73fa2161b","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"7acbfa840dc857e2fb4fe0f83a1168f5f8b72d742124fd30156a526251d934ba","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":"1fc97ddd0c00a215a09d50752601a6713e823888b821698f1b6b88444de5a4ce","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":"a4ac865e15330a5f7952b5f553678d24700cc08b23dd954df856ac03d2255c9e","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":"dd41c917408699990d83f14fe5b10571a3f665baf28ee0e7422c8679f255da04","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":"a8af40e9717f832bd06c6f7cb17a79b14d39877087e5df3d51d494480a0b62c7","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":"64141a7ad1d0524f6e7968044aa3902b8c481eb0be88dc34c26db8164ac8936b","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":"e731560ae314ebb2e015aa7f637df784ef3e26ecf93e338a95e259d7115a7d18","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"cb065d1be59eaa7cc86c28d3f06591bff1db29c0df58bebd46b716f81dfefb69","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: SwarmCoreIMD (SWARMCORE).\nToken name: SwarmCoreIMD\nToken symbol: SWARMCORE\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.","parentJobId":null,"planHash":"e1d90805b5abe3f23c596c704fb1d1eae272cc81c24b8b3706ba710c446d07d1","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"e0ec8ee1-ad07-4980-9b73-98b73fa2161b","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-1361-swarmcoreimd"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51021","feedbackHash":"3c373eeaae86208c2938a5e4574658bd45390ba220364ad4a8b48d361b656bbb","nodeKey":"audit_economics","submissionHash":"7acbfa840dc857e2fb4fe0f83a1168f5f8b72d742124fd30156a526251d934ba","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52548","feedbackHash":"5abb9c418e73bf7050550c8b4dbeb797c493456fe85130fd7eae88e5483f3040","nodeKey":"audit_flow","submissionHash":"1fc97ddd0c00a215a09d50752601a6713e823888b821698f1b6b88444de5a4ce","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52586","feedbackHash":"0bfbd109307a857cd96fecd6bf2d325f0558a90c5b85ba8a4782f9f120630efc","nodeKey":"audit_judge","submissionHash":"a4ac865e15330a5f7952b5f553678d24700cc08b23dd954df856ac03d2255c9e","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52585","feedbackHash":"6830cfe81c4af7f110738060833c671db42a4d9bbffd4d9c34a6b01b4d6dbf9d","nodeKey":"audit_math","submissionHash":"dd41c917408699990d83f14fe5b10571a3f665baf28ee0e7422c8679f255da04","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52584","feedbackHash":"40fae210f17f797b0ccd0577bcba74e109a2d93f1f42e6decad737a9a4f5f730","nodeKey":"audit_permissions","submissionHash":"a8af40e9717f832bd06c6f7cb17a79b14d39877087e5df3d51d494480a0b62c7","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52667","feedbackHash":"d0026c8a81dbdf8938dc2788965ffa039400928ca8917e7ea19efc630e9461cb","nodeKey":"build_contract_project","submissionHash":"64141a7ad1d0524f6e7968044aa3902b8c481eb0be88dc34c26db8164ac8936b","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51162","feedbackHash":"8101d9c90bcfc36d494ac27b8361360af0138a8477780550112228feea4439a1","nodeKey":"manifest","submissionHash":"e731560ae314ebb2e015aa7f637df784ef3e26ecf93e338a95e259d7115a7d18","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52668","feedbackHash":"b7e99866a80aa58723b005496004c44795ca323ea8fedf63d2c6ea1f36416e60","nodeKey":"write_foundry_tests","submissionHash":"cb065d1be59eaa7cc86c28d3f06591bff1db29c0df58bebd46b716f81dfefb69","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"ad3edaa0a0ca9145918e2a619e5817439f8806f6ef69cc936af1350ad727b138","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"9b657b3675e34ec5","findings":[{"citation":"resolved","description":"The constructor stores msg.sender into an immutable (src/SwarmCoreIMD.sol:47 `INITIAL_HOLDER = msg.sender;`). Solidity writes immutables into the returned runtime code, so the 20-byte deployer address is embedded in the contract's code and the runtime hash varies with whoever deploys. Two consequences, neither a behavioural defect: (1) `forge inspect SwarmCoreIMD deployedBytecode` (keccak 0x858c569bfe718f8d4e546b4818e6df43446d6aff0e0ec48afee64cc06816c265 with the pinned foundry.toml) contains zero bytes at the immutable slot and never matches `extcodehash` of any deployed instance, so any reviewer, attestation step or script that derives a runtime hash from a local compile instead of from a deployment at the factory address will see a mismatch; (2) `type(SwarmCoreIMD).runtimeCode` is unavailable to any contract (compiler error 9274), which only matters to integrators. The creation bytecode is deterministic and the protected harness deploys from the factory address, so a verifier that derives the runtime hash that way gets the same bytes the launch produces. The value is also redundant: it duplicates the `SupplyMinted` and `Transfer(0x0, deployer, supply)` events. Minimal fix if the launch's runtime comparison is compile-based: drop the immutable (keep the event) or make it a plain storage variable; both keep every other behaviour identical. If the comparison is deployment-based, no change is needed and this is a documentation note.","line":36,"path":"src/SwarmCoreIMD.sol","reproduction":"Foundry test: `vm.prank(address(0xA11CE)); SwarmCoreIMD a = new SwarmCoreIMD(); vm.prank(address(0xB0B)); SwarmCoreIMD b = new SwarmCoreIMD();` then `keccak256(address(a).code)` = 0x56d9bf0b1837ae2a8ecc1f764aa5fe76f21affa1f2eecb96c96e7ede7de6ff7d and `keccak256(address(b).code)` = 0x48bd7016a881cef9d0cdbdd2361ef3038a764a15a5f7c201949a999782f427a4 (runtime length 2287 bytes), and neither equals keccak256 of `forge inspect src/SwarmCoreIMD.sol:SwarmCoreIMD deployedBytecode` = 0x858c569b... Expected by a compile-based comparison: one runtime hash for the artifact. Actual: one hash per deployer address, none equal to the artifact's.","severity":"info","snippet":"    address public immutable INITIAL_HOLDER;","title":"INITIAL_HOLDER immutable makes the runtime bytecode depend on the deployer, so compiler deployedBytecode never equals on-chain code"}],"hash":"1fc97ddd0c00a215a09d50752601a6713e823888b821698f1b6b88444de5a4ce","nodeId":"3065afb7-9329-4c4a-999e-5e899ba8d36e","outcome":"completed","summary":"The findings file is in place at the repository root and is excluded from git by the harness's own exclude file, as intended. No source files were changed, and the scratch directory was removed.\n\n**Result: no exploitable defect found.** The token is an unmodified OpenZeppelin v5.4.0 ERC20 with a single constructor mint, and every entry point behaves as the brief requires. One informational note was recorded.\n\nWhat I covered in the assigned area:\n\n- **Execution Trace.** Traced approve, transfer and transferFrom from entry to storage through the vendored base. Zero-address, overdraft, insufficient-allowance, infinite-allowance, self-transfer and zero-value paths all behave as documented. No sentinel bypass, no stale read, no partial update, no external call anywhere.\n- **Periphery.** Hashed the five OpenZeppelin files the token depends on against upstream v5.4.0 fetched from GitHub. All five match byte for byte. The vendored tree has no nested git directory or submodule, and all 371 library files are tracked as plain files.\n- **First Principles.** Checked the supply constant arithmetic, the deployer identity assumption under CREATE2 from the factory, the absence of any privileged surface in the ABI, and the launch flows. Nothing taxes or burns, so the swarm share, pool seed, claims and swaps move exact amounts.\n- **Static analysis lead.** The aderyn large-literal note on line 30 is a style remark only. The constant equals exactly 1,000,000,000 and the derived supply is correct.\n\nThe informational finding is that `INITIAL_HOLDER` is an immutable, so the deployer address is embedded in the runtime bytecode. A scratch test showed two deployers produce two different runtime hashes, and neither equals the compiler's deployed bytecode. This only matters if any attestation step derives the runtime hash from a local compile rather than from a deployment at the factory address. It is not a behavioural defect and needs no change unless that comparison is compile-based.\n\nThe coverage record answers all three listed entry points as holds, plus rows for the constructor, decimals, three invariants, the vendored base and the deploy script. Existing tests pass, 32 of 32.","treeHash":null,"usage":{"cachedInputTokens":846835,"inputTokens":322,"model":"claude-fable-5-1","outputTokens":15030,"runtime":"claude","turns":25,"wallClockMs":221787}},{"artifacts":[],"attempt":1,"bundleHash":"860b26dfd880415cab3d5b37bcf323f525c5069bb1dcd7c94a4a3b2d41d463da","device":"b38bea3c04869138","findings":[],"hash":"64141a7ad1d0524f6e7968044aa3902b8c481eb0be88dc34c26db8164ac8936b","nodeId":"371dea02-13e8-407c-8da5-078b3ea1738e","outcome":"completed","summary":"The SwarmCoreIMD token project is complete and verified. Build, tests, and format check all pass with the pinned compiler.\n\n**What was delivered**\n\n- `src/SwarmCoreIMD.sol` is a fixed-supply ERC-20 on unmodified OpenZeppelin v5.4.0. The constructor takes no arguments and mints the full 1,000,000,000 tokens with 18 decimals to the deployer, which on the launch is the factory. There is no owner, mint, burn, pause, blacklist, fee, or any other privileged function.\n- `test/SwarmCoreIMD.t.sol` holds 32 tests: metadata and supply constants, constructor events, CREATE2 deployment with no arguments, standard transfer and allowance success paths, revert paths for overdraft, missing allowance, zero-address receiver and zero spender, the whole admin-selector list from the protected floor test rejected from both stranger and deployer, the three launch flows arriving whole, three fuzz tests for supply conservation, and a runtime scan for DELEGATECALL, CALLCODE and SELFDESTRUCT.\n- `script/DeploySwarmCoreIMD.s.sol` exposes a `deploy()` function the tests call directly. It reads no environment variables.\n- `foundry.toml` pins solc 0.8.26, sets `bytecode_hash = \"none\"`, disables ffi and filesystem access, and defines the remappings.\n- `README.md` documents behaviour, assumptions, deployment parameters, an empty \"After launch\" section, and operational responsibilities including audit status.\n\n**Dependencies** are vendored as plain files under `lib/`, with no nested git metadata or `.gitmodules`. A clean rebuild with `--offline` succeeds, and the artifact has empty link references and no metadata hash.\n\n**Results**\n\n| Check | Result |\n| --- | --- |\n| forge build | success |\n| forge test | 32 passed, 0 failed |\n| forge fmt --check | clean |\n| runtime size | 2287 bytes |\n\nI did not run `git commit`, since `.git/` is off limits and the harness handles the commit and upload. A dry-run `git add` confirms all project files and the 371 vendored library files would be included.","treeHash":"e18b45003fd1a6a021846a4c92ea6dfc84c9ddaf","usage":{"cachedInputTokens":520057,"inputTokens":322,"model":"claude-fable-5-1","outputTokens":21527,"runtime":"claude","turns":17,"wallClockMs":317965}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"72ae9b5bbd1a54b6","findings":[{"citation":"resolved","description":"SwarmCoreIMD inherits OpenZeppelin v5.4.0 ERC20 unmodified, so approve(spender, value) overwrites the allowance in place (ERC20._approve). OpenZeppelin v5 also removed increaseAllowance/decreaseAllowance, so the token offers no atomic way to adjust an allowance. This is the well-known ERC-20 approve race (inherent to the standard, not a coding error) and the README already tells holders to approve exact amounts to trusted spenders. It is recorded here as a trust note for integrators, not as a defect requiring a code change: a fix would mean deviating from plain ERC-20, which the brief did not ask for. Economic Security, Invariant and Flow Gap checks otherwise found nothing: no external dependencies, no oracle, no fee or rebase path, no callback, sum of balances always equals totalSupply (1e27, never changes after the constructor), and the three launch flows (10% to the distributor, pool seed through the PoolManager, remainder) move exactly the amount requested because no address is taxed or exempted.","line":19,"path":"src/SwarmCoreIMD.sol","reproduction":"State: holder has 1000e18 SWARMCORE. 1) holder: approve(spender, 100e18). 2) holder intends to reduce and submits approve(spender, 50e18); spender sees it in the mempool and front-runs with transferFrom(holder, sink, 100e18) (succeeds, allowance 100e18 -> 0). 3) holder's approve(spender, 50e18) lands (allowance 0 -> 50e18). 4) spender: transferFrom(holder, sink, 50e18) succeeds. Expected by the holder: at most 100e18 ever moved, and 50e18 after the reduction. Actual: sink receives 150e18 and the holder's allowance is 0. Verified in a Foundry test (test_approveRaceSpends150WhenHolderMeant50) run against the tree: balanceOf(sink) == 150e18. Mitigation available to holders without a code change: approve(spender, 0) first, wait for inclusion, then approve the new amount; or use infinite allowances only with audited spenders.","severity":"info","snippet":"contract SwarmCoreIMD is ERC20 {","title":"Standard ERC-20 approve race: lowering a non-zero allowance can be front-run so the spender moves old + new amount"}],"hash":"7acbfa840dc857e2fb4fe0f83a1168f5f8b72d742124fd30156a526251d934ba","nodeId":"6d6d3af6-bea0-4f85-bb94-dfa6616774e8","outcome":"completed","summary":"The review is complete. The findings file is written and validated, the scratch directory is removed, and the quoted snippet matches the tree.\n\n**Outcome:** SwarmCoreIMD has no economic, invariant or flow-gap defect. It is an unmodified OpenZeppelin v5.4.0 ERC20 with a single constructor mint of 1e27 units to the deployer, no owner, no hooks, no external calls, and no fallback surface. I recorded one informational note and nine coverage rows in `.imd-findings.json`.\n\n**What I checked, against the Economic Security, Invariant and Flow Gap guides:**\n- **Conservation.** Sum of balances always equals totalSupply, and totalSupply can only be written by the constructor. A fuzzed transfer and transferFrom sequence confirmed this.\n- **Supply growth.** No selector reaches a mint path. The protected test's admin selectors all revert because there is no fallback or receive.\n- **Launch flows.** Ten percent to the distributor, the pool seed, and the remainder each arrive whole, because no address is taxed or exempted. A trader can buy and sell without the token interfering.\n- **Dependencies and sentinels.** The token holds no other asset, makes no external calls, and reverts on zero-address approve or transfer and on any ETH sent to it.\n- **Vendored library.** The ERC20 body matches stock OpenZeppelin v5.4.0.\n\n**The one recorded item** is the inherent ERC-20 approve race, filed as info rather than as a defect. Lowering a non-zero allowance can be front-run so a spender moves the old amount plus the new one. I verified it with a test where the spender moved 150e18 when the holder meant at most 100e18 then 50e18. The README already advises exact approvals, and fixing it would mean departing from plain ERC-20, which the brief did not ask for.\n\n**Coverage.** All three entry points have rows: approve is marked finding with reference 1, transfer and transferFrom hold. Six additional rows record the invariants and flows I traced. Nothing in the assigned area was left unreached. The aderyn \"large numeric literal\" lead on line 30 is a style note with no behavioural effect, since the constant evaluates to exactly one billion and is covered by the existing supply tests.","treeHash":null,"usage":{"cachedInputTokens":995951,"inputTokens":386,"model":"claude-fable-5-1","outputTokens":9697,"runtime":"claude","turns":13,"wallClockMs":204685}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"66ceb1fcb4b0b455","findings":[],"hash":"a4ac865e15330a5f7952b5f553678d24700cc08b23dd954df856ac03d2255c9e","nodeId":"f20b15c8-a56e-4135-b2b6-70b08784ae1b","outcome":"completed","summary":"I found nothing to report: the review of SwarmCoreIMD (SWARMCORE) has no reproducible defects. `.imd-findings.json` has an empty findings list and a coverage record for all three entry points.\n\n**Code reviewed.** `src/SwarmCoreIMD.sol` is the OpenZeppelin v5.4.0 `ERC20`, unmodified. The only additions are the name/symbol/decimals constants, an `INITIAL_HOLDER` immutable, and a constructor that mints 1,000,000,000 × 10^18 to `msg.sender` once. I read the vendored `ERC20.sol` and `Context.sol` to make sure the library itself hadn't been altered. It hadn't.\n\n**Checks run.** The project builds, and all 57 existing tests pass. The deployed code is about 2.3 KB and the creation code about 3.5 KB, well under the size limits. The constructor needs no arguments, no particular address bits and no linked libraries, so the factory's CREATE2 deployment works.\n\n**Coverage, every row `holds`:**\n- **`approve`**: it overwrites the allowance, rejects the zero address and emits `Approval`.\n- **`transfer`**: it moves exactly the amount asked, with no fee, burn or exemptions. So the swarm's 10% to the distributor, the pool seed, the remainder and trader swaps all arrive in full.\n- **`transferFrom`**: it checks and reduces the allowance (except an unlimited one), then does the same exact-amount transfer. No privileged caller can move a holder's tokens.\n- **Supply**: it can't grow, because there's no mint function after the constructor. It equals `totalSupply` in `launch.json`, which correctly lists no constructor arguments.\n\n**Specialist findings dropped.** Both reproduce, but neither is a defect in this code:\n1. **Approve race (audit_economics, info).** Lowering an allowance can be front-run so the spender moves both the old and the new amount. That is how every ERC-20 works; the README already tells holders to approve exact amounts to trusted spenders. Changing it would mean departing from the standard, which the brief didn't ask for.\n2. **`INITIAL_HOLDER` makes the deployed bytes depend on the deployer (audit_flow, info).** True, but the launch always deploys from the same factory address, so the launch's deployed code is fixed and the factory-address harness gets the same bytes. The claimed failure needs a compile-only runtime-hash comparison, which the finding itself only hypothesised.\n\n**Static analysis.** The one aderyn line, a large numeric literal at line 30, is the supply constant written with digit separators. It isn't a defect.\n\nThe only file I wrote is `.imd-findings.json`; `git status` shows no changes to tracked files. That file appears in neither the `git status` output nor the repo's `.gitignore`, so a global ignore rule probably hides it. It is on disk and reads as valid JSON.","treeHash":null,"usage":{"cachedInputTokens":242344,"inputTokens":12,"model":"claude-opus-5-5","outputTokens":3845,"runtime":"claude","turns":6,"wallClockMs":73847}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"6f41bd9b44d3e708","findings":[],"hash":"a8af40e9717f832bd06c6f7cb17a79b14d39877087e5df3d51d494480a0b62c7","nodeId":"a1efbd94-7b19-40b3-b80c-6657fff4850b","outcome":"completed","summary":"I found no access-control, trust-gap or asymmetry defects in `SwarmCoreIMD`, so `.imd-findings.json` holds an empty findings list plus a coverage record. The file is valid JSON, and no source, test, script or config file was changed.\n\n**What I checked:**\n- **Source:** `src/SwarmCoreIMD.sol` builds on OpenZeppelin's standard `ERC20` (v5.4.0). I read the copy in `lib/` and it behaves as the stock contract should. The token adds only constants, an `INITIAL_HOLDER` value that nothing depends on, a fixed `decimals()` of 18, and a constructor. That constructor takes no arguments, makes no external calls and mints `1_000_000_000 * 10**18` once to `msg.sender` (the factory).\n- **Access control:** there is no owner, minter, pauser, blacklist, fee, burn or exemption list. No outside call can create or destroy tokens. The deployer has no special rights over other holders, and there is no function that receives ETH or catches unknown calls, so both revert.\n- **Trust gap and asymmetry:** `approve` only ever sets the caller's own allowance. `transferFrom` checks the allowance before moving anything, and no caller, the factory included, can skip that check. Every transfer moves exactly the requested amount, so the launch flows to the distributor and the pool manager arrive in full. The launch rules' ban on privileged moves, freezes and supply growth is met.\n- **Static-analysis leads:** the aderyn note at line 30 just flags a large written-out number (`1_000_000_000`), which is not a defect. Slither reported nothing.\n- **Tests:** the project's existing 32 Foundry tests pass. I wrote no proof tests, because there was no finding to prove.\n\n**Coverage record:** `approve`, `transfer` and `transferFrom` are each marked `holds`. Further `holds` rows cover four properties: no privileged role exists, the supply is fixed, decimals match the launch spec, and neither the constructor nor plain ETH sends hand anyone extra power.\n\n**Not covered:** I didn't work through the other nine specialty guides beyond what touches access control. The token's few functions leave little else to check.","treeHash":null,"usage":{"cachedInputTokens":297364,"inputTokens":14,"model":"claude-opus-5-5","outputTokens":3440,"runtime":"claude","turns":7,"wallClockMs":40510}},{"artifacts":[],"attempt":1,"bundleHash":"9cdac4e0467877f367de31fd750b7d77f2ec3da9ca1c5d7124dc198bf2c5b0a1","device":"ba7dd2832066bc23","findings":[],"hash":"cb065d1be59eaa7cc86c28d3f06591bff1db29c0df58bebd46b716f81dfefb69","nodeId":"3f53ddcb-57eb-4e49-a016-cac20bdc0e36","outcome":"completed","summary":"Added failure-path, boundary, fuzz, and stateful invariant tests under `test/`.\n\nOffline `forge build` and `forge test` passed: 57 tests, including 32,768 random handler calls checking supply, balances, and allowances.\n\nNo defects found. Only three files under `test/` were added.","treeHash":"da5b06840aed85864c1331f91df664c434a9799f","usage":{"cachedInputTokens":686592,"inputTokens":71676,"model":"gpt-6-astra","outputTokens":14808,"runtime":"codex","turns":6,"wallClockMs":395885}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"3c1226d190150ef0","findings":[],"hash":"dd41c917408699990d83f14fe5b10571a3f665baf28ee0e7422c8679f255da04","nodeId":"fc0c71e6-576c-4f25-9e6f-5f8582f27299","outcome":"completed","summary":"I found no defects in the math, boundary or numerical-gap areas for SwarmCoreIMD. `.imd-findings.json` has an empty findings list and a coverage row for each of the three entry points, all `holds`.\n\n**What there is to audit.** The token has almost no arithmetic of its own. `src/SwarmCoreIMD.sol` is a standard OpenZeppelin 5.4.0 ERC-20 that adds only:\n- the supply constant, `1_000_000_000 * 10**18` = 1e27, which is far too small to overflow;\n- `decimals()` fixed at 18;\n- a constructor that mints the whole supply once, to the deployer.\n\nI compared the vendored OpenZeppelin files the token uses against the npm `@openzeppelin/contracts@5.4.0` package, and they are identical. So the transfer and approval code is the standard library code, unmodified.\n\n**Checked against the three guides:**\n- **Math Precision:** there is no division, rounding, cast or scale conversion anywhere. The two places OpenZeppelin skips overflow checks are both safe: a balance is checked before it is reduced, and an allowance is checked before it is spent. No credit can exceed the fixed total of 1e27.\n- **Boundary:** the token makes no external calls and has no payable functions. Zero amounts, transferring a whole balance, transferring to yourself, the maximum (\"unlimited\") allowance, and the zero address as recipient or spender all behave as the ERC-20 standard says.\n- **Numerical Gap:** the sum of all balances always equals the total supply, every transfer moves exactly the amount requested, and nothing outside the constructor can create new tokens. There is also no burn function, so the supply never changes.\n\n**Coverage:** `approve`, `transfer` and `transferFrom` are all `holds`. I added two extra rows for the supply constant and for \"the supply can never grow.\"\n\n**Static analysis:** aderyn's one note (a large number at `src/SwarmCoreIMD.sol:30`) is just the supply value written out. It's correct and harmless, so I didn't report it.\n\nThe project's own 32 tests pass. I didn't run the protected launch test, because it needs launch environment variables and source files that aren't in this tree.\n\nI changed no project files. Some untracked dotfiles (`.bashrc`, `.claude/`, `.gitmodules` and others) appear in `git status`; they were already there and I didn't create them.","treeHash":null,"usage":{"cachedInputTokens":315647,"inputTokens":14,"model":"claude-opus-5-5","outputTokens":3465,"runtime":"claude","turns":7,"wallClockMs":41453}},{"artifacts":[],"attempt":1,"bundleHash":"bc7615b04a8afd856ff214a5cf30ff8532cf03f33ae08d608bdc83a178dc54de","device":"771f83f312eace21","findings":[],"hash":"e731560ae314ebb2e015aa7f637df784ef3e26ecf93e338a95e259d7115a7d18","nodeId":"d2d8cb15-33a3-42e7-b08d-b1a2fc04fb54","outcome":"completed","summary":"I wrote launch.json for the SwarmCoreIMD launch, and it is the only file changed in the tree.\n\n**What the manifest says**\n\n- Token: contract SwarmCoreIMD, name SwarmCoreIMD, symbol SWARMCORE, 18 decimals, empty constructorArgs. The accepted constructor takes no parameters and mints the whole supply to msg.sender.\n- totalSupply is \"1000000000000000000000000000\", the constant the constructor mints.\n- contracts is an empty list. The accepted tree has no application contracts, only the token, its reference deploy script and tests.\n- pool and economics are copied exactly from the launch reference. IMD pair address in lowercase, fee 12500, tick spacing 60, the one-to-one initialPrice, and the requester's verbatim economics object.\n- notes describe only what is in the accepted source: an unmodified OpenZeppelin ERC20 with no privileged surface, no tax or burn, so every launch flow arrives whole.\n\n**Verification**\n\n- A scratch test deployed the raw creation code with nothing appended, from a stand-in factory address, and confirmed the minted supply, recipient, decimals, name and symbol match the manifest.\n- A structural check confirmed the schema keys only, string types for uint256 and address fields, integer types for fee, tickSpacing and decimals, and economics equal to the job's object.\n- `forge build` succeeded and `forge test` passed all 33 tests, including the scratch test.\n- Git status shows launch.json as the only new file. The scratch test lives in test/scratch and is not part of the submission.","treeHash":"3dcc8b5792872060ca5ab40998c77cc248e967bc","usage":{"cachedInputTokens":306374,"inputTokens":162,"model":"claude-fable-5-1","outputTokens":4366,"runtime":"claude","turns":11,"wallClockMs":66426}}],"verification":[{"checks":[{"durationMs":892,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 785.36ms\nCompiler run successful!\n","passed":true},{"durationMs":85,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 32 tests for test/SwarmCoreIMD.t.sol:SwarmCoreIMDTest\n[PASS] testFuzz_overdraftAlwaysReverts(uint256,uint256) (runs: 256, μ: 99864, ~: 99860)\nLogs:\n  Bound result 41040679658355380973\n  Bound result 22283115748\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 256, μ: 107460, ~: 107553)\nLogs:\n  Bound result 735095134962759553575096509\n\n[PASS] testFuzz_transferFromConservesSupply(address,address,uint256,uint256) (runs: 256, μ: 135024, ~: 114557)\nLogs:\n  Bound result 99187366529274598\n  Bound result 0\n\n[PASS] test_RevertWhen_approveZeroSpender() (gas: 32993)\n[PASS] test_RevertWhen_transferExceedsBalance() (gas: 92802)\n[PASS] test_RevertWhen_transferFromEmptyAccount() (gas: 37791)\n[PASS] test_RevertWhen_transferFromExceedsAllowance() (gas: 88125)\n[PASS] test_RevertWhen_transferFromExceedsBalanceDespiteAllowance() (gas: 146525)\n[PASS] test_RevertWhen_transferFromWithoutAllowance() (gas: 45388)\n[PASS] test_RevertWhen_transferToZeroAddress() (gas: 32966)\n[PASS] test_approveAndTransferFrom() (gas: 169804)\n[PASS] test_approveOverwritesPreviousAllowance() (gas: 95586)\n[PASS] test_constructorEmitsMintEvents() (gas: 9356)\n[PASS] test_constructorMintsWholeSupplyToDeployer() (gas: 34501)\n[PASS] test_constructorTakesNoArgumentsAndRunsOnAnEmptyChain() (gas: 607919)\n[PASS] test_contractNameFitsTheManifest() (gas: 3266)\n[PASS] test_deployScriptMintsToItsCaller() (gas: 1606473)\n[PASS] test_deployerIsWhoeverCallsTheConstructor() (gas: 27779)\n[PASS] test_infiniteAllowanceIsNotDecremented() (gas: 123290)\n[PASS] test_launchDistributionArrivesWhole() (gas: 290496)\n[PASS] test_metadata() (gas: 58369)\n[PASS] test_noAdminCallIncreasesSupplyOrCreditsCaller() (gas: 759643)\n[PASS] test_noPrivilegedCallMovesOrFreezesAHolder() (gas: 457510)\n[PASS] test_runtimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 2869937)\n[PASS] test_secondaryTransfersAreUntaxed() (gas: 143635)\n[PASS] test_supplyConstantsAgree() (gas: 36353)\n[PASS] test_transferFromPartialAllowanceDecrements() (gas: 126234)\n[PASS] test_transferMovesExactAmountAndEmits() (gas: 96053)\n[PASS] test_transferToSelfKeepsBalance() (gas: 43917)\n[PASS] test_transferWholeBalance() (gas: 78534)\n[PASS] test_transferZeroAmountSucceeds() (gas: 47813)\n[PASS] test_unknownSelectorsAndPlainValueAreRejected() (gas: 62143)\nSuite result: ok. 32 passed; 0 failed; 0 skipped; finished in 9.33ms (33.81ms CPU time)\n\nRan 1 test suite in 9.91ms (9.33ms CPU time): 32 tests passed, 0 failed, 0 skipped (32 total tests)\n","passed":true},{"durationMs":33,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SwarmCoreIMD.approve(address,uint256)\",\"SwarmCoreIMD.transfer(address,uint256)\",\"SwarmCoreIMD.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":11,\"README.md\":102,\"foundry.toml\":35,\"script/DeploySwarmCoreIMD.s.sol\":29,\"src/SwarmCoreIMD.sol\":56,\"test/SwarmCoreIMD.t.sol\":421},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":459,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":211,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/SwarmCoreIMD.sol:30: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"64141a7ad1d0524f6e7968044aa3902b8c481eb0be88dc34c26db8164ac8936b","verifiedTreeHash":"e18b45003fd1a6a021846a4c92ea6dfc84c9ddaf","verifierVersion":"0.1.0+fb8278c5"},{"checks":[{"durationMs":1471,"exitCode":0,"name":"build","output":"Compiling 31 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.37s\nCompiler run successful!\n","passed":true},{"durationMs":8267,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 32 tests for test/SwarmCoreIMD.t.sol:SwarmCoreIMDTest\n[PASS] testFuzz_overdraftAlwaysReverts(uint256,uint256) (runs: 256, μ: 99434, ~: 100374)\nLogs:\n  Bound result 3\n  Bound result 999999999999999999999999997\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 256, μ: 107232, ~: 108045)\nLogs:\n  Bound result 0\n\n[PASS] testFuzz_transferFromConservesSupply(address,address,uint256,uint256) (runs: 256, μ: 134622, ~: 114557)\nLogs:\n  Bound result 35\n  Bound result 52\n\n[PASS] test_RevertWhen_approveZeroSpender() (gas: 32993)\n[PASS] test_RevertWhen_transferExceedsBalance() (gas: 92802)\n[PASS] test_RevertWhen_transferFromEmptyAccount() (gas: 37791)\n[PASS] test_RevertWhen_transferFromExceedsAllowance() (gas: 88125)\n[PASS] test_RevertWhen_transferFromExceedsBalanceDespiteAllowance() (gas: 146525)\n[PASS] test_RevertWhen_transferFromWithoutAllowance() (gas: 45388)\n[PASS] test_RevertWhen_transferToZeroAddress() (gas: 32966)\n[PASS] test_approveAndTransferFrom() (gas: 169804)\n[PASS] test_approveOverwritesPreviousAllowance() (gas: 95586)\n[PASS] test_constructorEmitsMintEvents() (gas: 9356)\n[PASS] test_constructorMintsWholeSupplyToDeployer() (gas: 34501)\n[PASS] test_constructorTakesNoArgumentsAndRunsOnAnEmptyChain() (gas: 607919)\n[PASS] test_contractNameFitsTheManifest() (gas: 3266)\n[PASS] test_deployScriptMintsToItsCaller() (gas: 1606473)\n[PASS] test_deployerIsWhoeverCallsTheConstructor() (gas: 27779)\n[PASS] test_infiniteAllowanceIsNotDecremented() (gas: 123290)\n[PASS] test_launchDistributionArrivesWhole() (gas: 290496)\n[PASS] test_metadata() (gas: 58369)\n[PASS] test_noAdminCallIncreasesSupplyOrCreditsCaller() (gas: 759643)\n[PASS] test_noPrivilegedCallMovesOrFreezesAHolder() (gas: 457510)\n[PASS] test_runtimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 2869937)\n[PASS] test_secondaryTransfersAreUntaxed() (gas: 143635)\n[PASS] test_supplyConstantsAgree() (gas: 36353)\n[PASS] test_transferFromPartialAllowanceDecrements() (gas: 126234)\n[PASS] test_transferMovesExactAmountAndEmits() (gas: 96053)\n[PASS] test_transferToSelfKeepsBalance() (gas: 43917)\n[PASS] test_transferWholeBalance() (gas: 78534)\n[PASS] test_transferZeroAmountSucceeds() (gas: 47813)\n[PASS] test_unknownSelectorsAndPlainValueAreRejected() (gas: 62143)\nSuite result: ok. 32 passed; 0 failed; 0 skipped; finished in 82.09ms (189.98ms CPU time)\n\nRan 22 tests for test/SwarmCoreIMD.EdgeCases.t.sol:SwarmCoreIMDEdgeCasesTest\n[PASS] testFuzz_delegatedSelfTransferPreservesBalance(uint256,bool) (runs: 1000, μ: 172047, ~: 172481)\nLogs:\n  Bound result 691037695897240966378949801\n\n[PASS] testFuzz_failedTransferFromRestoresFiniteAllowance(uint256,uint256) (runs: 1000, μ: 212158, ~: 212938)\nLogs:\n  Bound result 278829118414409275281241986\n  Bound result 115792089237316195423570985008687907853269984665640285210339169598637848397971\n\n[PASS] testFuzz_finiteApprovalCannotBeSpentTwice(uint256,uint256) (runs: 1000, μ: 251747, ~: 252445)\nLogs:\n  Bound result 10497\n  Bound result 10497\n\n[PASS] testFuzz_replacingApprovalIsExactAndIsolated(uint256,uint256) (runs: 1000, μ: 356647, ~: 356691)\n[PASS] testFuzz_transferFromToZeroRestoresAllowance(uint256,bool) (runs: 1000, μ: 170324, ~: 169512)\nLogs:\n  Bound result 691037695897240966378949801\n\n[PASS] testFuzz_transferRoundTripRestoresBothHolders(uint256) (runs: 1000, μ: 191670, ~: 191623)\nLogs:\n  Bound result 723962923455565407612490666\n\n[PASS] test_approvalDoesNotReserveTokensOrAuthorizeAnotherSpender() (gas: 220833)\n[PASS] test_delegatedSelfTransferConsumesFiniteAllowance() (gas: 269177)\n[PASS] test_factoryReceivesSupplyInsteadOfCallerOrTransactionOrigin() (gas: 384156)\n[PASS] test_fullBalanceSelfTransferEmitsWithoutChangingBalances() (gas: 105390)\n[PASS] test_holderCannotUseTransferFromWithoutSelfApproval() (gas: 247094)\n[PASS] test_infiniteAllowanceSurvivesFullBalanceSpendAndRefill() (gas: 413105)\n[PASS] test_maximumFiniteAllowanceIsDecremented() (gas: 153022)\n[PASS] test_maximumTransferFailsWithoutChangingBalances() (gas: 104043)\n[PASS] test_maximumTransferFromFailsWithInfiniteApprovalIntact() (gas: 170462)\n[PASS] test_oneWeiRoundTripIsExact() (gas: 188089)\n[PASS] test_revokingInfiniteApprovalBlocksFurtherSpending() (gas: 216812)\n[PASS] test_spenderCannotSpendAnotherSpendersApproval() (gas: 182456)\n[PASS] test_transferToTokenItselfDoesNotBurnSupply() (gas: 84593)\n[PASS] test_zeroTransferFromNeedsNoAllowanceAndEmitsTransfer() (gas: 127723)\n[PASS] test_zeroValueApprovalToZeroStillReverts() (gas: 176719)\n[PASS] test_zeroValueTransferToZeroStillReverts() (gas: 129082)\nSuite result: ok. 22 passed; 0 failed; 0 skipped; finished in 85.75ms (462.70ms CPU time)\n\nRan 3 tests for test/SwarmCoreIMD.Invariant.t.sol:SwarmCoreIMDInvariantTest\n[PASS]\nSwarmCoreIMDInvariantTest invariants:\n[PASS] invariant_everyAllowanceMatchesApprovalsAndSuccessfulSpends\n[PASS] invariant_fixedSupplyAndEveryBalanceMatchTheLedger\n SwarmCoreIMDInvariantTest invariants (runs: 256, calls: 32768, reverts: 0)\n\n╭---------------------+---------------------------------+-------+---------+----------╮\n| Contract            | Selector                        | Calls | Reverts | Discards |\n+====================================================================================+\n| SwarmCoreIMDHandler | approve                         | 2866  | 0       | 0        |\n|---------------------+---------------------------------+-------+---------+----------|\n| SwarmCoreIMDHandler | approveInfinite                 | 2958  | 0       | 0        |\n|---------------------+---------------------------------+-------+---------+----------|\n| SwarmCoreIMDHandler | rejectTransferFromOverAllowance | 2969  | 0       | 0        |\n|---------------------+---------------------------------+-------+---------+----------|\n| SwarmCoreIMDHandler | rejectTransferFromOverBalance   | 3023  | 0       | 0        |\n|---------------------+---------------------------------+-------+---------+----------|\n| SwarmCoreIMDHandler | rejectTransferOverBalance       | 3013  | 0       | 0        |\n|---------------------+---------------------------------+-------+---------+----------|\n| SwarmCoreIMDHandler | rejectZeroReceiver              | 2964  | 0       | 0        |\n|---------------------+---------------------------------+-------+---------+----------|\n| SwarmCoreIMDHandler | rejectZeroSpender               | 3006  | 0       | 0        |\n|---------------------+---------------------------------+-------+---------+----------|\n| SwarmCoreIMDHandler | revoke                          | 2910  | 0       | 0        |\n|---------------------+---------------------------------+-------+---------+----------|\n| SwarmCoreIMDHandler | transfer                        | 2973  | 0       | 0        |\n|---------------------+---------------------------------+-------+---------+----------|\n| SwarmCoreIMDHandler | transferAll                     | 3094  | 0       | 0        |\n|---------------------+---------------------------------+-------+---------+----------|\n| SwarmCoreIMDHandler | transferFrom                    | 2992  | 0       | 0        |\n╰---------------------+---------------------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 250000000000000000000000000\n  Bound result 250000000000000000000000000\n  Bound result 1981\n  Bound result 11460\n  Bound result 870\n  Bound result 1671\n  Bound result 385172709008266641182771690676153\n  Bound result 64\n  Bound result 783\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640314039457584007913129661885\n  Bound result 0\n  Bound result 9\n  Bound result 1148\n  Bound result 115792089237316195423570985008687907853269984665640064039457584007913129648924\n  Bound result 17\n  Bound result 115792089237316195423570985008687907853269984665640314039457584007913129641256\n  Bound result 100\n  Bound result 115792089237316195423570985008687907853269984665640064039457584007913129647273\n  Bound result 7100\n  Bound result 5490\n  Bound result 115792089237316195423570985008687907853269984665640314039457584007913129635601\n  Bound result 115792089237316195423570985008687907853269984665640314039457584007913129650415\n  Bound result 124165008926906791372687804\n  Bound result 10\n  Bound result 115792089237316195423570985008687907853269984665640439039457584007913129639939\n  Bound result 0\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640314039457584007913129640004\n  Bound result 0\n  Bound result 1000000000000000000000000000\n  Bound result 115792089237316195423570985008687907853269984665640064039457584007913129653091\n  Bound result 0\n  Bound result 2\n  Bound result 0\n  Bound result 2235\n  Bound result 858\n  Bound result 115792089237316195423570985008687907853269984665640314039457584007913129634469\n  Bound result 941\n  Bound result 605\n  Bound result 0\n  Bound result 17796077403779435367622109315848714844707318868906709720000915969811893643\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640064039457584007913130602381\n  Bound result 500000000000000000000004731\n  Bound result 3587\n  Bound result 499999999999999999999995270\n  Bound result 0\n  Bound result 5000000000000000000\n  Bound result 125483432767091\n  Bound result 0\n  Bound result 55361408875748788520054702959043332902528171123836479485596892026713680117761\n  Bound result 0\n  Bound result 0\n  Bound result 3\n  Bound result 10548\n  Bound result 1149\n  Bound result 0\n  Bound result 0\n  Bound result 5956\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640564039457583882429696883845\n  Bound result 242\n  Bound result 56867318892991159697844840\n  Bound result 621\n  Bound result 1\n  Bound result 687703326553432493004127532071\n  Bound result 350\n  Bound result 242\n  Bound result 255\n  Bound result 115792089237316195423570985008687907853269984665640564039457583882429696881873\n  Bound result 115792089237316195423570985008687907853269984665639564162913584133396562407996\n  Bound result 0\n  Bound result 456\n  Bound result 115792089237316195423570985008687907853269984665640564039457583882429696874609\n  Bound result 0\n  Bound result 945\n  Bound result 115792089237316195423570985008687907853269984665639564039457584133396564134320\n  Bound result 1000000000000000001\n  Bound result 0\n\n[PASS] test_handlerExercisesInfiniteSelfTransfersAndFullBalanceRoundTrip() (gas: 1147427)\nLogs:\n  Bound result 250000000000000000000000000\n  Bound result 250000000000000000000000000\n  Bound result 500000000000000000000000000\n  Bound result 500000000000000000000000000\n  Bound result 1\n\n[PASS] test_handlerExercisesPartialSpendingRevocationAndRollback() (gas: 1456511)\nLogs:\n  Bound result 250000000000000000000000000\n  Bound result 250000000000000000000000000\n  Bound result 100\n  Bound result 25\n  Bound result 76\n  Bound result 16\n  Bound result 10\n  Bound result 10\n  Bound result 1\n  Bound result 76\n  Bound result 75\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 8.17s (8.17s CPU time)\n\nRan 3 test suites in 8.17s (8.33s CPU time): 57 tests passed, 0 failed, 0 skipped (57 total tests)\n","passed":true},{"durationMs":31,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SwarmCoreIMD.approve(address,uint256)\",\"SwarmCoreIMD.transfer(address,uint256)\",\"SwarmCoreIMD.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":11,\"README.md\":102,\"foundry.toml\":35,\"script/DeploySwarmCoreIMD.s.sol\":29,\"src/SwarmCoreIMD.sol\":56,\"test/SwarmCoreIMD.EdgeCases.t.sol\":312,\"test/SwarmCoreIMD.Invariant.t.sol\":124,\"test/SwarmCoreIMD.t.sol\":421,\"test/handlers/SwarmCoreIMDHandler.sol\":160},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"cb065d1be59eaa7cc86c28d3f06591bff1db29c0df58bebd46b716f81dfefb69","verifiedTreeHash":"da5b06840aed85864c1331f91df664c434a9799f","verifierVersion":"0.1.0+fb8278c5"},{"checks":[{"durationMs":2242,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.97s\nCompiler run successful!\n","passed":true},{"durationMs":244,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 32 tests for test/SwarmCoreIMD.t.sol:SwarmCoreIMDTest\n[PASS] testFuzz_overdraftAlwaysReverts(uint256,uint256) (runs: 256, μ: 99650, ~: 100484)\nLogs:\n  Bound result 15584376134908629255\n  Bound result 139174784254714225605143168\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 256, μ: 107086, ~: 107553)\nLogs:\n  Bound result 5097\n\n[PASS] testFuzz_transferFromConservesSupply(address,address,uint256,uint256) (runs: 256, μ: 137195, ~: 156767)\nLogs:\n  Bound result 645833382157947266770796767\n  Bound result 96940967671485615241625154\n\n[PASS] test_RevertWhen_approveZeroSpender() (gas: 32993)\n[PASS] test_RevertWhen_transferExceedsBalance() (gas: 92802)\n[PASS] test_RevertWhen_transferFromEmptyAccount() (gas: 37791)\n[PASS] test_RevertWhen_transferFromExceedsAllowance() (gas: 88125)\n[PASS] test_RevertWhen_transferFromExceedsBalanceDespiteAllowance() (gas: 146525)\n[PASS] test_RevertWhen_transferFromWithoutAllowance() (gas: 45388)\n[PASS] test_RevertWhen_transferToZeroAddress() (gas: 32966)\n[PASS] test_approveAndTransferFrom() (gas: 169804)\n[PASS] test_approveOverwritesPreviousAllowance() (gas: 95586)\n[PASS] test_constructorEmitsMintEvents() (gas: 9356)\n[PASS] test_constructorMintsWholeSupplyToDeployer() (gas: 34501)\n[PASS] test_constructorTakesNoArgumentsAndRunsOnAnEmptyChain() (gas: 607919)\n[PASS] test_contractNameFitsTheManifest() (gas: 3266)\n[PASS] test_deployScriptMintsToItsCaller() (gas: 1606473)\n[PASS] test_deployerIsWhoeverCallsTheConstructor() (gas: 27779)\n[PASS] test_infiniteAllowanceIsNotDecremented() (gas: 123290)\n[PASS] test_launchDistributionArrivesWhole() (gas: 290496)\n[PASS] test_metadata() (gas: 58369)\n[PASS] test_noAdminCallIncreasesSupplyOrCreditsCaller() (gas: 759643)\n[PASS] test_noPrivilegedCallMovesOrFreezesAHolder() (gas: 457510)\n[PASS] test_runtimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 2869937)\n[PASS] test_secondaryTransfersAreUntaxed() (gas: 143635)\n[PASS] test_supplyConstantsAgree() (gas: 36353)\n[PASS] test_transferFromPartialAllowanceDecrements() (gas: 126234)\n[PASS] test_transferMovesExactAmountAndEmits() (gas: 96053)\n[PASS] test_transferToSelfKeepsBalance() (gas: 43917)\n[PASS] test_transferWholeBalance() (gas: 78534)\n[PASS] test_transferZeroAmountSucceeds() (gas: 47813)\n[PASS] test_unknownSelectorsAndPlainValueAreRejected() (gas: 62143)\nSuite result: ok. 32 passed; 0 failed; 0 skipped; finished in 22.69ms (85.92ms CPU time)\n\nRan 1 test suite in 24.47ms (22.69ms CPU time): 32 tests passed, 0 failed, 0 skipped (32 total tests)\n","passed":true},{"durationMs":85,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SwarmCoreIMD.approve(address,uint256)\",\"SwarmCoreIMD.transfer(address,uint256)\",\"SwarmCoreIMD.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":11,\"README.md\":102,\"foundry.toml\":35,\"launch.json\":24,\"script/DeploySwarmCoreIMD.s.sol\":29,\"src/SwarmCoreIMD.sol\":56,\"test/SwarmCoreIMD.t.sol\":421},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"e731560ae314ebb2e015aa7f637df784ef3e26ecf93e338a95e259d7115a7d18","verifiedTreeHash":"3dcc8b5792872060ca5ab40998c77cc248e967bc","verifierVersion":"0.1.0+fb8278c5"}]}