{"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":"c163c6dd-5f08-482a-a844-f71b45ee67f2","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"2bcbb4a15fa0bb7b7a14acacb4d9e2da4c6e9719772206056a7060b9393ce8bb","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":"ee529aa066f222cf73490272eef803240e3cd26ff751051ca937b696ca2ce24b","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":"1e9a3be12ce528a9e51255c71265cea65808fa49fb622d49282f919f4f1d3958","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":"1caa217d16b3b57f33a1bed5b9ce0da69dd08f934ae38840d8b23b0a6efd0a32","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":"d94b520c3c1c79f53a8a2e4dfd763565bb55ad0e76312747d156e9da0e2cf8e2","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":"bc728f90607756f77b554c9afd6ea478a0d5c8a264243231bd25a2c9ffc64637","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":"c5c8f3c9018aedf9b1047907c0651fa27c59048874ef18caa9cfc26ba9b2b8aa","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"1abbb883aa1ed80d26505c9a2a557e52d3a8890501a6edcb8de02a6478960b74","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: IDM (IDM).\nToken name: IDM\nToken symbol: IDM\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.\nWhat it does: x：x.com/theidmfun","parentJobId":null,"planHash":"49310ac55804004e5551423efc2cc5c9318c9528dcd1e6b888c02d8f22436ecb","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"c163c6dd-5f08-482a-a844-f71b45ee67f2","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-2295-idm"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51162","feedbackHash":"c6addcb5b2b5f92018186caa47d987ecb7399e61cf1bfdba1432754241e37c38","nodeKey":"audit_economics","submissionHash":"2bcbb4a15fa0bb7b7a14acacb4d9e2da4c6e9719772206056a7060b9393ce8bb","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52216","feedbackHash":"7cc8b6b6883007bfaff02d6c5b148c182debd27dafdc63f17e700cd750f32975","nodeKey":"audit_flow","submissionHash":"ee529aa066f222cf73490272eef803240e3cd26ff751051ca937b696ca2ce24b","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52128","feedbackHash":"b4aea5208948f0d85cd9d8251124e4c92250ef1c913efa4ebf1587201ca31b03","nodeKey":"audit_judge","submissionHash":"1e9a3be12ce528a9e51255c71265cea65808fa49fb622d49282f919f4f1d3958","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52584","feedbackHash":"42bf19573a685d891459bb2203742b6615e635ad68098b7b994a709df7703546","nodeKey":"audit_math","submissionHash":"1caa217d16b3b57f33a1bed5b9ce0da69dd08f934ae38840d8b23b0a6efd0a32","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51494","feedbackHash":"9ccce3291f14a0a75644e4d5543baf747aa1c882166c16a5145530cd5ec3026b","nodeKey":"audit_permissions","submissionHash":"d94b520c3c1c79f53a8a2e4dfd763565bb55ad0e76312747d156e9da0e2cf8e2","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51088","feedbackHash":"377e2d3d314226e91ea648ba7c65e98eae48b375e92cae35ae7ffd8b3a3d05d9","nodeKey":"build_contract_project","submissionHash":"bc728f90607756f77b554c9afd6ea478a0d5c8a264243231bd25a2c9ffc64637","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51455","feedbackHash":"e5b7786cc7824bba0f417b2aca14d32053d120720b21f5d28fa8e82e6f9eb814","nodeKey":"manifest","submissionHash":"c5c8f3c9018aedf9b1047907c0651fa27c59048874ef18caa9cfc26ba9b2b8aa","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51078","feedbackHash":"81937f575588f84780d312fa311266679c0bdb3c26eb14745043fed1525a8cbf","nodeKey":"write_foundry_tests","submissionHash":"1abbb883aa1ed80d26505c9a2a557e52d3a8890501a6edcb8de02a6478960b74","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"de8d73b028708e38b23655ffe496aa17de354903e71171d5f9d0ec44c99f1ce0","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"3d95e35729452c1bbef15409fd94aa840eae3780a711ee591d135413e8962a88","device":"d2bae9a4a05e8265","findings":[],"hash":"1abbb883aa1ed80d26505c9a2a557e52d3a8890501a6edcb8de02a6478960b74","nodeId":"abc09f08-d242-4d48-b2c9-2f1eaf13ccd5","outcome":"completed","summary":"Added 15 edge-case and fuzz tests covering allowance limits, revocation, failed-call rollback, and exact transfers. Expanded stateful invariants to 10 randomized actions plus holder balance recovery.\n\n`forge build` and `forge test` pass with the required seed: 51 tests, 9,216 fuzz cases, and 32,768 invariant calls.\n\nOnly `test/` changed. No implementation defects found.","treeHash":"a3c7865376eeea7a59891b8feea7ae347a467d1d","usage":{"cachedInputTokens":538240,"inputTokens":78573,"model":"gpt-6-astra","outputTokens":10854,"runtime":"codex","turns":5,"wallClockMs":311829}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"6f41bd9b44d3e708","findings":[],"hash":"1caa217d16b3b57f33a1bed5b9ce0da69dd08f934ae38840d8b23b0a6efd0a32","nodeId":"1120bea0-896f-4b81-abe8-a070ce82e7c9","outcome":"completed","summary":"I found no math problems in the IDM token, so `.imd-findings.json` has an empty findings list. It also has a coverage row marked `holds` for each of the three entry points, plus three for the supply rules I checked.\n\n**What the code is:** `src/IDMToken.sol` is OpenZeppelin's standard ERC20 (v5.0.2) with one constant, `INITIAL_SUPPLY = 1_000_000_000 * 10 ** 18`. The constructor mints that once to the deployer. There is no fee, burn, owner or later minting, and the only arithmetic is OpenZeppelin's balance and allowance bookkeeping. The vendored ERC20 and Context files match the hashes pinned in `DEPENDENCIES.json`.\n\n**Checked against the three guides:**\n- **Math Precision:** the constant is exactly 10^27, which fits easily in a uint256, and is computed at compile time. There are no divisions, decimal conversions, narrowing casts or shifts anywhere. The subtractions that skip overflow checks are each guarded by a comparison first.\n- **Boundary:** I traced these edge cases:\n  - Transfers of 0 succeed.\n  - Transferring an account's full balance succeeds, and one unit more reverts.\n  - Sending to or approving the zero address reverts.\n  - An allowance equal to the amount drops to 0, and one unit short reverts.\n  - An allowance of the maximum value is never reduced, which is OpenZeppelin's documented behaviour.\n- **Numerical Gap:** with no rounding anywhere, nothing can drift. The supply only changes in the constructor, so the total always equals the sum of balances. Launch flows (seeding the pool, the distributor, swaps) move exactly the amounts they say.\n\n**Static-analysis lead:** aderyn flagged `src/IDMToken.sol:12` as a \"large numeric literal\". The value is correct; it's a style note, not a defect.\n\n**Tests:** `forge test` passes all 36 existing tests, including the invariant suite (256 runs, 16,384 calls, no reverts). I didn't run the protected launch tests: they need the factory harness and Uniswap v4 code, which aren't in this tree. I wrote no proof tests because there was nothing to reproduce. Every guide item that applies to this code is covered.","treeHash":null,"usage":{"cachedInputTokens":333231,"inputTokens":16,"model":"claude-opus-5-5","outputTokens":3881,"runtime":"claude","turns":9,"wallClockMs":55454}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"9c6767b941fcfedc","findings":[{"citation":"resolved","description":"Merged from audit_permissions and audit_economics (same root cause, same 19 files). DEPENDENCIES.json records a SHA-256 per vendored file so a reader can confirm the tree equals the pinned upstream, and README.md line 88 states 'All vendored file checksums matched their upstream bytes'. I re-fetched both pinned archives (codeload tar.gz of OpenZeppelin dbb6104 and forge-std 77041d2); each archive's SHA-256 equals the recorded archiveSha256, and every recorded per-file hash equals the hash of the corresponding upstream file, so the record itself is genuine. All 6 OpenZeppelin files and 11 of the 30 forge-std files in the tree are byte-identical to upstream. The other 19 forge-std files (StdAssertions, StdChains, StdCheats, StdConstants, StdInvariant, StdJson, StdMath, StdStorage, StdToml, StdUtils, Vm, console, IERC1155, IERC4626, IERC6909, IERC721, IERC7540, IERC7575, IMulticall3) differ from upstream only in whitespace: after stripping all whitespace from both copies they are identical, consistent with `forge fmt` at the project's line_length of 110 having been run over lib/. No token or logic changed; forge-std is test-only and is not imported by src/IDMToken.sol, so the deployed runtime (1,752 bytes, no DELEGATECALL/CALLCODE/SELFDESTRUCT, no link references) is unaffected. The defect is provenance-only: a verifier that follows the README's procedure gets 19 spurious mismatches, and the README sentence is false for the tree as delivered. Fix: restore the 19 upstream files (and exclude lib/ from forge fmt) or regenerate the hashes from the tree and correct README.md line 88.","line":41,"path":"DEPENDENCIES.json","reproduction":"State: the working tree at HEAD (cd856ae). Input: for each (path, sha256) in DEPENDENCIES.json compute sha256 of the file at path; command: python3 -I -c 'import json,hashlib; [print(f, hashlib.sha256(open(f,\"rb\").read()).hexdigest()==h) for d in json.load(open(\"DEPENDENCIES.json\")) for f,h in d[\"files\"].items()]'. Expected (README.md:88): every value True. Actual: 19 False, all under lib/forge-std/src; e.g. lib/forge-std/src/Vm.sol hashes to e83459505ce804ce24f6768c5675f7b57137eaae7237893ff5052b81a3aead52, not the recorded 9068805b59ac1d0ea03a8fa1f15ae49c094e0c6c852a2500e0dd112f264b2cb1. Confirmation that the difference is whitespace-only: extracting https://codeload.github.com/foundry-rs/forge-std/tar.gz/77041d2ce690e692d6e03cc812b57d1ddaa4d505 (archive sha256 a387f7c2a10387f889b0d18b999cfa667a5273ac11cc11e18923022eb8b24bc3, equal to the recorded archiveSha256) and comparing each of the 19 files with all whitespace removed yields zero differences; the 6 OpenZeppelin files and the other 11 forge-std files are byte-identical to upstream.","severity":"info","snippet":"      \"lib/forge-std/src/Vm.sol\": \"9068805b59ac1d0ea03a8fa1f15ae49c094e0c6c852a2500e0dd112f264b2cb1\",","title":"DEPENDENCIES.json hashes for 19 vendored forge-std files do not match the tree (whitespace-only reformat); README claims all checksums matched"},{"citation":"resolved","description":"The README was written by the build step before the manifest step ran. Commit 26fa6f9 added launch.json (merged at cd856ae), so the sentence at README.md lines 99-100 is now false for the tree as delivered. The manifest itself is consistent with the README's other claims: contract IDMToken, name/symbol IDM, decimals 18, constructorArgs [], totalSupply 1000000000000000000000000000, which equals the constructor's mint of 1_000_000_000 * 10**18 to msg.sender. Documentation only; no behavioural impact. Fix: replace the sentence with a pointer to launch.json.","line":99,"path":"README.md","reproduction":"State: the working tree at HEAD (cd856ae). Input: `test -f launch.json && echo present` and read README.md lines 99-100. Expected: the README's statement about launch.json agrees with the tree. Actual: launch.json exists (20 lines, kind custom_token, token.contract IDMToken) while README.md:99-100 says 'This repository deliberately does not provide a `launch.json`'.","severity":"info","snippet":"above, and empty constructor arguments. This repository deliberately does not\nprovide a `launch.json`. The network deployer handles attestation, factory","title":"README states the repository deliberately provides no launch.json, but launch.json is present in the tree"}],"hash":"1e9a3be12ce528a9e51255c71265cea65808fa49fb622d49282f919f4f1d3958","nodeId":"ca19384b-84d7-4af7-b4a7-1c1f458e6ff9","outcome":"completed","summary":"The review is complete. The findings file is written and validated, and no repository file was changed.\n\n**Outcome:** the IDM token has no defect that affects funds, supply or the launch flows. The two specialists who reported something both found the same provenance issue, which I reproduced and merged into one info finding. I added one more info finding of my own.\n\n**What I verified**\n\n- The token is an unmodified OpenZeppelin v5.0.2 ERC-20 with a parameterless constructor minting the full supply to msg.sender once. All six vendored OpenZeppelin files are byte-identical to the pinned upstream archive, which I re-fetched and hash-checked.\n- All three entry points hold: approve, transfer and transferFrom are the untouched library implementations, with no fee, burn, hook, owner or bypass. The compiled runtime contains no DELEGATECALL, CALLCODE or SELFDESTRUCT, and the ABI exposes no mint, pause or blacklist call.\n- The manifest is consistent with the code: contract name, metadata, empty constructor arguments and a supply equal to the constructor's mint.\n- The project's 51 tests, including fuzz and invariant suites, pass with the README's seed. Formatting check passes.\n\n**Findings reported, both info severity**\n\n1. Nineteen forge-std files do not match the hashes in DEPENDENCIES.json, so the README's \"all checksums matched\" claim is false. The recorded hashes are the genuine upstream values, and the differences are whitespace-only reformatting of test-only code. The specialists' duplicates were merged into this one.\n2. The README states the repository deliberately provides no launch.json, but the manifest step added one. Documentation only.\n\n**Dropped:** the aderyn large-numeric-literal line, which is cosmetic. The protected launch test could not be run locally because it depends on v4-core sources not in this tree. No critical or high finding exists, so no proof test was needed.","treeHash":null,"usage":{"cachedInputTokens":420080,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":9029,"runtime":"claude","turns":19,"wallClockMs":149183}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"771f83f312eace21","findings":[{"citation":"resolved","description":"DEPENDENCIES.json is the project's provenance record: it lists a SHA-256 for every vendored file so a reviewer can confirm the tree equals the pinned upstream. For the six OpenZeppelin v5.0.2 files the record is correct and the tree matches upstream commit dbb6104 byte for byte (independently re-fetched and compared), so the production ERC-20 is unmodified. For forge-std, the recorded hashes are the genuine v1.9.7 (commit 77041d2) hashes, but 19 of the 30 vendored files in lib/forge-std/src differ from them. The diff is whitespace only: the vendored copies were re-wrapped to the project's 110-column forge fmt style (e.g. multi-line function signatures in Vm.sol and StdAssertions.sol); no cheatcode, assertion or logic changed. README line 88 nevertheless states 'All vendored file checksums matched their upstream bytes', which is not true of the tree as delivered. Impact is documentation/provenance only: forge-std is a test-only dependency and contributes nothing to the deployed IDMToken bytecode, so no economic or launch-flow property is affected. The record should either be regenerated from the tree as shipped or the forge-std files restored to their upstream bytes, and the README sentence corrected, so that a downstream verifier running the checksum procedure does not get a spurious failure.","line":41,"path":"DEPENDENCIES.json","reproduction":"In the repository root run: sha256sum lib/forge-std/src/Vm.sol. Expected (DEPENDENCIES.json line 41 and upstream forge-std commit 77041d2ce690e692d6e03cc812b57d1ddaa4d505): 9068805b59ac1d0ea03a8fa1f15ae49c094e0c6c852a2500e0dd112f264b2cb1. Actual: e83459505ce804ce24f6768c5675f7b57137eaae7237893ff5052b81a3aead52. Same mismatch for StdAssertions.sol, StdChains.sol, StdCheats.sol, StdConstants.sol, StdInvariant.sol, StdJson.sol, StdMath.sol, StdStorage.sol, StdToml.sol, StdUtils.sol, console.sol and the IERC1155/IERC4626/IERC6909/IERC721/IERC7540/IERC7575/IMulticall3 interfaces (19 files). `diff <(curl upstream Vm.sol at 77041d2) lib/forge-std/src/Vm.sol` shows only line-wrapping differences. All six lib/openzeppelin-contracts files match their recorded and upstream hashes.","severity":"info","snippet":"      \"lib/forge-std/src/Vm.sol\": \"9068805b59ac1d0ea03a8fa1f15ae49c094e0c6c852a2500e0dd112f264b2cb1\",","title":"DEPENDENCIES.json records forge-std v1.9.7 hashes that 19 vendored files no longer match (reformatted copies); README's 'all checksums matched' claim is false for forge-std"}],"hash":"2bcbb4a15fa0bb7b7a14acacb4d9e2da4c6e9719772206056a7060b9393ce8bb","nodeId":"302e33c5-f825-47e2-b01a-1f1f0e02a05f","outcome":"completed","summary":"The review is complete. The findings file is written and validated, and no tracked file was changed.\n\n**Result: no economic, invariant or flow-gap defect in IDMToken.** The contract is an unmodified OpenZeppelin v5.0.2 ERC-20 with a single constructor mint of 1e27 units to the deployer and no owner, mint, burn, pause, fee or callback path. I verified the vendored OpenZeppelin sources byte for byte against the upstream commit, so the inherited transfer logic is exactly what it claims to be.\n\nWhat I checked, in the assigned order:\n- **Economic Security:** no external dependencies, no price-dependent operations, no sentinel-address paths beyond ERC-6093 reverts, no fee-on-transfer or exemption list that could short a launch flow. Nothing to extract.\n- **Invariant:** the sum of balances equals total supply equals the constant forever, since `_update` is the sole writer and `_mint` is reachable only from the constructor. Allowance coupling and rollback hold. The project's seeded suite passed, with 36 tests and 16,384 invariant calls.\n- **Flow Gap:** the factory to distributor to claimant flow, the pool seed, and a buy and sell through the PoolManager all move exact amounts with no callbacks. The manifest's only valid values are empty constructor arguments and the 1e27 supply, which the README documents.\n\nBuild, tests and `forge fmt --check` all pass.\n\n**One info-level note was recorded.** The provenance record in `DEPENDENCIES.json` lists genuine forge-std v1.9.7 hashes, but 19 vendored forge-std files were reformatted to the project's line width and no longer match them. The diff is whitespace only, forge-std is test-only, and the README sentence claiming all checksums matched is therefore inaccurate. The reproduction is a single `sha256sum` on `lib/forge-std/src/Vm.sol`.\n\nCoverage: all three listed entry points and five invariant or flow rows are answered, eight rows total. No high or critical findings, so no proof test was written.","treeHash":null,"usage":{"cachedInputTokens":726606,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":13972,"runtime":"claude","turns":30,"wallClockMs":218018}},{"artifacts":[],"attempt":1,"bundleHash":"2d6aa85e280c45bd8dc5c44428e704bebcece35ff88f34b22eed6f4665f3aa2c","device":"f801e761d7a1ec94","findings":[],"hash":"bc728f90607756f77b554c9afd6ea478a0d5c8a264243231bd25a2c9ffc64637","nodeId":"51c8e8a0-43e6-4256-927b-409682c1bb6e","outcome":"completed","summary":"Implemented IDM with 18 decimals and exactly 1,000,000,000 tokens minted once to the deployer. No admin powers or further minting.\n\nIncluded vendored dependencies, deployment documentation, and success/failure tests.\n\nPassed `forge build`, seeded `forge test` (36 tests), and `forge fmt --check` using Solidity 0.8.26.","treeHash":"61338e553f713cd449200c0a555227b3a82291f7","usage":{"cachedInputTokens":442752,"inputTokens":59421,"model":"gpt-6-astra","outputTokens":13559,"runtime":"codex","turns":5,"wallClockMs":358194}},{"artifacts":[],"attempt":1,"bundleHash":"401f96f2366c931d27abd693b3ebf3c4a6e3bcda97b7765e8d5f51b4d021e01c","device":"7989aa5d838d11d9","findings":[],"hash":"c5c8f3c9018aedf9b1047907c0651fa27c59048874ef18caa9cfc26ba9b2b8aa","nodeId":"420807d4-ab45-4f57-b9b1-7c9876025e7c","outcome":"completed","summary":"Created [launch.json](/root/.identitymd/work/c163c6dd-5f08-482a-a844-f71b45ee67f2/420807d4-ab45-4f57-b9b1-7c9876025e7c/launch.json) matching `IDMToken`, its exact supply, empty constructor arguments, and the required pool and economics.\n\nValidation passed: manifest and constructor ABI checks, `forge build`, and all 36 tests with the supplied fuzz seed. Only `launch.json` is changed for submission.","treeHash":"93084cc294f61c4b3aae3104b55aa7fb7ee0c179","usage":{"cachedInputTokens":244992,"inputTokens":37402,"model":"gpt-6-astra","outputTokens":2569,"runtime":"codex","turns":3,"wallClockMs":96969}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"3a40eaafbd83a6bc","findings":[{"citation":"resolved","description":"DEPENDENCIES.json records a SHA-256 per vendored file and README.md line 88 states 'All vendored file checksums matched their upstream bytes'. Recomputing the hashes over the tree, all six OpenZeppelin v5.0.2 files match, but 19 of the 30 forge-std v1.9.7 files do not (StdAssertions, StdChains, StdCheats, StdConstants, StdInvariant, StdJson, StdMath, StdStorage, StdToml, StdUtils, Vm, console, and the seven interfaces IERC1155/IERC4626/IERC6909/IERC721/IERC7540/IERC7575/IMulticall3). I downloaded the pinned archive (codeload tar.gz for commit 77041d2c; its SHA-256 a387f7c2... equals the recorded archiveSha256) and diffed each file: every difference is line re-wrapping consistent with `forge fmt` at the project's line_length of 110, with no token-level change (identical after stripping all whitespace). Impact on the token: none. forge-std is a test-only dependency, is not imported by src/IDMToken.sol, and does not reach the deployed runtime (1,752 bytes, no link references). The defect is provenance-only: a reviewer or tool that verifies DEPENDENCIES.json against the tree, as the README invites, will report 19 mismatches, and the README's claim is inaccurate as the tree stands. It is outside my assigned area (access control, trust gap, asymmetry) and is reported because it is concrete and reproducible, not because it affects the permission model. Fix: either restore the upstream bytes of the 19 forge-std files (exclude lib/ from forge fmt) or regenerate the recorded hashes from the formatted files and correct the README sentence.","line":41,"path":"DEPENDENCIES.json","reproduction":"State: the working tree at commit 547b283. Input: for each (path, sha256) in DEPENDENCIES.json compute sha256 of the file at path. Expected: every value equals the recorded one (README.md:88 'All vendored file checksums matched their upstream bytes'). Actual: lib/forge-std/src/Vm.sol hashes to e83459505ce804ce24f6768c5675f7b57137eaae7237893ff5052b81a3aead52, not the recorded 9068805b59ac1d0ea03a8fa1f15ae49c094e0c6c852a2500e0dd112f264b2cb1, and 18 further forge-std entries mismatch likewise; all six openzeppelin-contracts entries match. Command used: python3 -I -c 'import json,hashlib; [print(f, hashlib.sha256(open(f,\"rb\").read()).hexdigest()==h) for d in json.load(open(\"DEPENDENCIES.json\")) for f,h in d[\"files\"].items()]'. Confirmation that the difference is whitespace only: diff of each mismatched file against the extracted pinned archive shows only line re-wrapping; comparing the files with all spaces, tabs and newlines removed gives zero differences for all 19.","severity":"info","snippet":"      \"lib/forge-std/src/Vm.sol\": \"9068805b59ac1d0ea03a8fa1f15ae49c094e0c6c852a2500e0dd112f264b2cb1\",","title":"DEPENDENCIES.json SHA-256 values for 19 vendored forge-std files do not match the tree (whitespace-only reformat); README claims all checksums matched"}],"hash":"d94b520c3c1c79f53a8a2e4dfd763565bb55ad0e76312747d156e9da0e2cf8e2","nodeId":"3bbd6f59-432d-461f-a9d6-d359fc6ae7ac","outcome":"completed","summary":"The review is complete and `.imd-findings.json` is written with one informational finding and eleven coverage rows. No repository files were changed.\n\n**Outcome.** The permission model of `src/IDMToken.sol` holds across all three assigned guides. The contract is an unmodified OpenZeppelin v5.0.2 ERC-20 with a constructor that mints the full supply once to msg.sender and nothing else. There are no roles, owner, initializer, pause, blacklist, fee, exempt list or admin variant of any user function, so there is no guard gap, no escalation path, no asymmetric writer and no privileged actor whose action could redirect value between holder classes.\n\n**What I verified.**\n- All three ABI entry points plus the constructor, traced through the vendored library, which matches its upstream checksum.\n- Supply cannot grow after launch, the runtime has no DELEGATECALL, CALLCODE or SELFDESTRUCT, and launch flows move exactly the stated amount.\n- The existing 36-test suite passes with the README's seed, and `forge fmt --check` passes.\n- The aderyn large-literal lead is a compile-time constant equal to 1e27 and not a defect.\n\n**One informational finding, outside my area.** DEPENDENCIES.json records SHA-256 values that 19 vendored forge-std files no longer satisfy, and the README states all checksums matched. I fetched the pinned archive, whose hash equals the recorded one, and confirmed every difference is `forge fmt` line re-wrapping with no token-level change. forge-std is test-only and does not reach the deployed bytecode, so this is a provenance inaccuracy rather than a security issue. The fix is to restore the upstream bytes or regenerate the recorded hashes and correct the README sentence.\n\n**Not reported as defects.** The ERC-20 approve replacement race and the fact that whoever deploys receives the whole supply are both inherent to the requested standard token and the launch design. They are documented as trust assumptions in the coverage record.","treeHash":null,"usage":{"cachedInputTokens":452962,"inputTokens":194,"model":"claude-fable-5-1","outputTokens":11878,"runtime":"claude","turns":23,"wallClockMs":192406}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"47f3603854a893a3","findings":[],"hash":"ee529aa066f222cf73490272eef803240e3cd26ff751051ca937b696ca2ce24b","nodeId":"1daca050-337f-4b40-8463-ace8c12d0445","outcome":"completed","summary":"I found no defects in `src/IDMToken.sol`. The findings list in `.imd-findings.json` is empty, and every entry point has a coverage row.\n\n**What I checked (Execution Trace, Periphery and First Principles):**\n- **The contract itself:** `IDMToken` is a plain OpenZeppelin v5.0.2 `ERC20` that mints 1,000,000,000 × 10¹⁸ once, to `msg.sender`, in the constructor. It changes nothing in the library and adds no owner, mint, pause, fee, hook or external call.\n- **The library code:** the vendored `ERC20.sol`, `IERC20.sol`, `IERC20Metadata.sol`, `Context.sol` and `draft-IERC6093.sol` files match the sha256 hashes in `DEPENDENCIES.json`, so the library has not been altered.\n- **Transfers:** I traced `transfer` and `transferFrom` through `_update` and `_spendAllowance`. Zero addresses revert, a short balance or allowance reverts, the exact amount moves, and an unlimited allowance is not reduced. With no fee or burn, the launch's own transfers move exactly what they say: factory to distributor, distributor to claimants, the pool seed, and swaps.\n- **Approvals:** `approve` rejects zero addresses, sets the allowance exactly and emits the event.\n- **Supply:** nothing can mint or burn after deployment, and there is no `DELEGATECALL`, `CALLCODE` or `SELFDESTRUCT`. Decimals are 18, name and symbol are \"IDM\", and the contract name `IDMToken` fits the manifest's 32-character limit.\n- **Static analysis lead:** aderyn flagged the large number at line 12. It is `1_000_000_000 * 10 ** 18`, which is correct and readable, so it is not a defect.\n- **Tests:** `forge test` passed all 36 tests, including the invariant suite. I did not run the protected launch tests, because they need the factory environment variables and the floor harness.\n\n**Coverage rows:** `approve`, `transfer` and `transferFrom` are all `holds`, plus two invariant rows (fixed supply, and decimals/name/symbol), also `holds`. No files in the repository were changed.","treeHash":null,"usage":{"cachedInputTokens":231558,"inputTokens":10,"model":"claude-opus-5-5","outputTokens":2300,"runtime":"claude","turns":5,"wallClockMs":40978}}],"verification":[{"checks":[{"durationMs":1524,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.45s\nCompiler run successful!\n","passed":true},{"durationMs":9097,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 35 tests for test/IDMToken.t.sol:IDMTokenTest\n[PASS] testFuzz_TransferBeyondAllowanceReverts(uint256,uint256) (runs: 1024, μ: 138476, ~: 138768)\nLogs:\n  Bound result 4677578131453476052\n  Bound result 1025540\n\n[PASS] testFuzz_TransferBeyondBalanceReverts(uint256,uint256) (runs: 1024, μ: 129822, ~: 129784)\nLogs:\n  Bound result 1843971301939852\n  Bound result 56092901082277723792012500702421461770987293899791955867366233308765657\n\n[PASS] testFuzz_TransferConservesSupply(address,uint256) (runs: 1024, μ: 95326, ~: 95881)\nLogs:\n  Bound result 0\n\n[PASS] testFuzz_TransferFromHonorsAllowance(uint256,uint256) (runs: 1024, μ: 168121, ~: 169716)\nLogs:\n  Bound result 15399309\n  Bound result 651250\n\n[PASS] test_ApprovalReplacementAndRevocation() (gas: 179771)\n[PASS] test_ApproveEmitsEventAndDoesNotMoveTokens() (gas: 93590)\n[PASS] test_ConstructorEmitsSingleMintEvent() (gas: 12275)\n[PASS] test_Create2FactoryReceivesAllTokensAndLaunchTransfersAreExact() (gas: 664252)\n[PASS] test_DeployerCannotSpendHolderTokensWithoutApproval() (gas: 161287)\n[PASS] test_EmptyHolderCanApproveFutureBalance() (gas: 78267)\n[PASS] test_ExactAllowanceIsConsumedAndCannotBeReused() (gas: 166612)\n[PASS] test_InfiniteAllowanceIsNotDecreased() (gas: 149103)\n[PASS] test_MetadataAndExactInitialSupply() (gas: 122365)\n[PASS] test_NoMintBurnOrAdministrativeEntryPoints() (gas: 804797)\n[PASS] test_RevertWhenApproveZeroSpender() (gas: 40206)\n[PASS] test_RevertWhenDifferentSpenderUsesApproval() (gas: 110048)\n[PASS] test_RevertWhenEmptyAccountTransfers() (gas: 44886)\n[PASS] test_RevertWhenSendingEther() (gas: 40094)\n[PASS] test_RevertWhenTransferExceedsBalance() (gas: 57645)\n[PASS] test_RevertWhenTransferFromExceedsAllowance() (gas: 120572)\n[PASS] test_RevertWhenTransferFromExceedsBalanceRestoresAllowance() (gas: 126197)\n[PASS] test_RevertWhenTransferFromToZeroRestoresAllowance() (gas: 118873)\n[PASS] test_RevertWhenTransferFromWithoutAllowance() (gas: 60098)\n[PASS] test_RevertWhenTransferFromZeroSender() (gas: 55163)\n[PASS] test_RevertWhenTransferToZero() (gas: 50274)\n[PASS] test_RevertWhenZeroTransferToZero() (gas: 32953)\n[PASS] test_RuntimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 796433)\n[PASS] test_SelfTransferPreservesBalance() (gas: 54174)\n[PASS] test_TransferDeliversExactAmountAndEmitsEvent() (gas: 96208)\n[PASS] test_TransferEntireSupply() (gas: 88670)\n[PASS] test_TransferFromSpendsAllowanceAndEmitsTransfer() (gas: 177525)\n[PASS] test_TransferFromToSelfConsumesAllowanceWithoutChangingBalance() (gas: 110177)\n[PASS] test_TransferToContractDoesNotInvokeCallback() (gas: 174195)\n[PASS] test_ZeroTransferFromEmptyAccountEmitsEvent() (gas: 73453)\n[PASS] test_ZeroTransferFromNeedsNoAllowance() (gas: 78705)\nSuite result: ok. 35 passed; 0 failed; 0 skipped; finished in 94.29ms (190.84ms CPU time)\n\nRan 15 tests for test/IDMToken.edge.t.sol:IDMTokenEdgeTest\n[PASS] testFuzz_ApprovalsAreIsolatedByOwnerAndSpender(uint256,uint256,uint256) (runs: 1024, μ: 406277, ~: 406905)\nLogs:\n  Bound result 195306714583669434775746815\n\n[PASS] testFuzz_FailedDelegatedSpendPreservesAllowanceAndCanBeRetried(uint256,uint256,uint256,bool) (runs: 1024, μ: 359719, ~: 355974)\nLogs:\n  Bound result 208019206777554493932881261\n  Bound result 104458116272644225026732769\n  Bound result 122253429708709552002471424293192673384485673\n\n[PASS] testFuzz_ReplacingUnlimitedAllowanceEnforcesTheNewFiniteLimit(uint256,uint256) (runs: 1024, μ: 269562, ~: 269852)\nLogs:\n  Bound result 217533723388870620645842998\n  Bound result 1720\n\n[PASS] testFuzz_SplitDelegatedTransfersEqualOneTransfer(uint256,uint256,bool) (runs: 1024, μ: 436645, ~: 437207)\nLogs:\n  Bound result 3386\n  Bound result 284\n\n[PASS] testFuzz_ZeroRecipientFailurePreservesAnyApproval(uint256,uint256) (runs: 1024, μ: 233767, ~: 235705)\nLogs:\n  Bound result 1025540\n\n[PASS] test_MaximumDelegatedTransferStillRequiresBalance() (gas: 134425)\n[PASS] test_MaximumMinusOneAllowanceIsFinite() (gas: 217890)\n[PASS] test_MaximumTransferFailsWithoutArithmeticPanic() (gas: 68113)\n[PASS] test_OneBaseUnitRoundTripIsExact() (gas: 157269)\n[PASS] test_OwnerUsingTransferFromNeedsItsOwnAllowance() (gas: 238536)\n[PASS] test_SelfTransferCannotBypassBalanceCheck() (gas: 217846)\n[PASS] test_UnlimitedAllowanceSurvivesEmptyBalanceAndRefillThenCanBeRevoked() (gas: 427490)\n[PASS] test_ZeroApprovalToZeroSpenderIsRejected() (gas: 52782)\n[PASS] test_ZeroDelegatedTransferEmitsEventAndPreservesExistingAllowance() (gas: 369027)\n[PASS] test_ZeroDelegatedTransferToZeroRecipientIsRejected() (gas: 126933)\nSuite result: ok. 15 passed; 0 failed; 0 skipped; finished in 94.32ms (465.09ms CPU time)\n\nRan 1 test for test/IDMToken.invariant.t.sol:IDMTokenInvariantTest\n[PASS]\nIDMTokenInvariantTest invariants:\n[PASS] invariant_AllowancesMatchModel\n[PASS] invariant_BalancesMatchModelAndSupplyIsConserved\n[PASS] invariant_MetadataRemainsUnchanged\n IDMTokenInvariantTest invariants (runs: 256, calls: 32768, reverts: 0)\n\n╭-----------------+---------------------------------+-------+---------+----------╮\n| Contract        | Selector                        | Calls | Reverts | Discards |\n+================================================================================+\n| IDMTokenHandler | approve                         | 3265  | 0       | 0        |\n|-----------------+---------------------------------+-------+---------+----------|\n| IDMTokenHandler | approveAndSpend                 | 3378  | 0       | 0        |\n|-----------------+---------------------------------+-------+---------+----------|\n| IDMTokenHandler | rejectExcessAllowance           | 3291  | 0       | 0        |\n|-----------------+---------------------------------+-------+---------+----------|\n| IDMTokenHandler | rejectExcessTransfer            | 3269  | 0       | 0        |\n|-----------------+---------------------------------+-------+---------+----------|\n| IDMTokenHandler | rejectUnfundedDelegatedTransfer | 3338  | 0       | 0        |\n|-----------------+---------------------------------+-------+---------+----------|\n| IDMTokenHandler | rejectZeroRecipient             | 3348  | 0       | 0        |\n|-----------------+---------------------------------+-------+---------+----------|\n| IDMTokenHandler | rejectZeroSpender               | 3226  | 0       | 0        |\n|-----------------+---------------------------------+-------+---------+----------|\n| IDMTokenHandler | revoke                          | 3185  | 0       | 0        |\n|-----------------+---------------------------------+-------+---------+----------|\n| IDMTokenHandler | transfer                        | 3253  | 0       | 0        |\n|-----------------+---------------------------------+-------+---------+----------|\n| IDMTokenHandler | transferFrom                    | 3215  | 0       | 0        |\n╰-----------------+---------------------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 4236\n  Bound result 27823564574875\n  Bound result 0\n  Bound result 20199756115572\n  Bound result 244\n  Bound result 98\n  Bound result 13\n  Bound result 100\n  Bound result 0\n  Bound result 12\n  Bound result 0\n  Bound result 0\n  Bound result 4016\n  Bound result 5\n  Bound result 115792089237316195423570985008687907853269984665639564039457584035736694214724\n  Bound result 11374\n  Bound result 0\n  Bound result 4113\n  Bound result 9879\n  Bound result 1494\n  Bound result 6\n  Bound result 10978\n  Bound result 123000000000000000000\n  Bound result 0\n  Bound result 2722\n  Bound result 0\n  Bound result 5447601884044\n  Bound result 111306348434581831558054903595510778735838920366942817811\n  Bound result 7019589193396\n  Bound result 18\n  Bound result 0\n  Bound result 427\n  Bound result 24576\n  Bound result 24576\n  Bound result 127\n  Bound result 14\n  Bound result 4\n  Bound result 244\n  Bound result 16099574058\n  Bound result 4989\n  Bound result 1000000000000000000\n  Bound result 11569\n  Bound result 95\n  Bound result 11610713286786521693\n  Bound result 2293694869893\n  Bound result 4207956534945\n  Bound result 107477464\n  Bound result 14\n  Bound result 1621\n  Bound result 6389\n  Bound result 6846\n  Bound result 7623808457369\n  Bound result 9\n  Bound result 107616505039923604102704790649433520484749782\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 7\n  Bound result 2398\n  Bound result 1122157046143\n  Bound result 122000002293802347611\n  Bound result 1000020199756102725\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 9.01s (9.01s CPU time)\n\nRan 3 test suites in 9.01s (9.20s CPU time): 51 tests passed, 0 failed, 0 skipped (51 total tests)\n","passed":true},{"durationMs":35,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"IDMToken.approve(address,uint256)\",\"IDMToken.transfer(address,uint256)\",\"IDMToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.json\":56,\"README.md\":137,\"foundry.toml\":21,\"remappings.txt\":2,\"src/IDMToken.sol\":18,\"test/IDMToken.edge.t.sol\":369,\"test/IDMToken.invariant.t.sol\":265,\"test/IDMToken.t.sol\":476},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"1abbb883aa1ed80d26505c9a2a557e52d3a8890501a6edcb8de02a6478960b74","verifiedTreeHash":"a3c7865376eeea7a59891b8feea7ae347a467d1d","verifierVersion":"0.1.0+6a374fcd"},{"checks":[{"durationMs":1867,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.74s\nCompiler run successful!\n","passed":true},{"durationMs":6478,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 35 tests for test/IDMToken.t.sol:IDMTokenTest\n[PASS] testFuzz_TransferBeyondAllowanceReverts(uint256,uint256) (runs: 1024, μ: 138419, ~: 138756)\nLogs:\n  Bound result 18\n  Bound result 244\n\n[PASS] testFuzz_TransferBeyondBalanceReverts(uint256,uint256) (runs: 1024, μ: 129763, ~: 129748)\nLogs:\n  Bound result 450532060201200321195486664\n  Bound result 1327440713057084081747564087392244511133830339274991131306362258\n\n[PASS] testFuzz_TransferConservesSupply(address,uint256) (runs: 1024, μ: 95324, ~: 95881)\nLogs:\n  Bound result 946119776899329000330941276\n\n[PASS] testFuzz_TransferFromHonorsAllowance(uint256,uint256) (runs: 1024, μ: 168100, ~: 169716)\nLogs:\n  Bound result 18\n  Bound result 16\n\n[PASS] test_ApprovalReplacementAndRevocation() (gas: 179771)\n[PASS] test_ApproveEmitsEventAndDoesNotMoveTokens() (gas: 93590)\n[PASS] test_ConstructorEmitsSingleMintEvent() (gas: 12275)\n[PASS] test_Create2FactoryReceivesAllTokensAndLaunchTransfersAreExact() (gas: 664252)\n[PASS] test_DeployerCannotSpendHolderTokensWithoutApproval() (gas: 161287)\n[PASS] test_EmptyHolderCanApproveFutureBalance() (gas: 78267)\n[PASS] test_ExactAllowanceIsConsumedAndCannotBeReused() (gas: 166612)\n[PASS] test_InfiniteAllowanceIsNotDecreased() (gas: 149103)\n[PASS] test_MetadataAndExactInitialSupply() (gas: 122365)\n[PASS] test_NoMintBurnOrAdministrativeEntryPoints() (gas: 804797)\n[PASS] test_RevertWhenApproveZeroSpender() (gas: 40206)\n[PASS] test_RevertWhenDifferentSpenderUsesApproval() (gas: 110048)\n[PASS] test_RevertWhenEmptyAccountTransfers() (gas: 44886)\n[PASS] test_RevertWhenSendingEther() (gas: 40094)\n[PASS] test_RevertWhenTransferExceedsBalance() (gas: 57645)\n[PASS] test_RevertWhenTransferFromExceedsAllowance() (gas: 120572)\n[PASS] test_RevertWhenTransferFromExceedsBalanceRestoresAllowance() (gas: 126197)\n[PASS] test_RevertWhenTransferFromToZeroRestoresAllowance() (gas: 118873)\n[PASS] test_RevertWhenTransferFromWithoutAllowance() (gas: 60098)\n[PASS] test_RevertWhenTransferFromZeroSender() (gas: 55163)\n[PASS] test_RevertWhenTransferToZero() (gas: 50274)\n[PASS] test_RevertWhenZeroTransferToZero() (gas: 32953)\n[PASS] test_RuntimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 796433)\n[PASS] test_SelfTransferPreservesBalance() (gas: 54174)\n[PASS] test_TransferDeliversExactAmountAndEmitsEvent() (gas: 96208)\n[PASS] test_TransferEntireSupply() (gas: 88670)\n[PASS] test_TransferFromSpendsAllowanceAndEmitsTransfer() (gas: 177525)\n[PASS] test_TransferFromToSelfConsumesAllowanceWithoutChangingBalance() (gas: 110177)\n[PASS] test_TransferToContractDoesNotInvokeCallback() (gas: 174195)\n[PASS] test_ZeroTransferFromEmptyAccountEmitsEvent() (gas: 73453)\n[PASS] test_ZeroTransferFromNeedsNoAllowance() (gas: 78705)\nSuite result: ok. 35 passed; 0 failed; 0 skipped; finished in 56.66ms (238.77ms CPU time)\n\nRan 1 test for test/IDMToken.invariant.t.sol:IDMTokenInvariantTest\n[PASS]\nIDMTokenInvariantTest invariants:\n[PASS] invariant_AllowancesMatchModel\n[PASS] invariant_BalancesMatchModelAndSupplyIsConserved\n IDMTokenInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭-----------------+-----------------------+-------+---------+----------╮\n| Contract        | Selector              | Calls | Reverts | Discards |\n+======================================================================+\n| IDMTokenHandler | approve               | 3267  | 0       | 0        |\n|-----------------+-----------------------+-------+---------+----------|\n| IDMTokenHandler | rejectExcessAllowance | 3309  | 0       | 0        |\n|-----------------+-----------------------+-------+---------+----------|\n| IDMTokenHandler | rejectExcessTransfer  | 3209  | 0       | 0        |\n|-----------------+-----------------------+-------+---------+----------|\n| IDMTokenHandler | transfer              | 3302  | 0       | 0        |\n|-----------------+-----------------------+-------+---------+----------|\n| IDMTokenHandler | transferFrom          | 3297  | 0       | 0        |\n╰-----------------+-----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 14\n  Bound result 278\n  Bound result 0\n  Bound result 2737\n  Bound result 0\n  Bound result 505\n  Bound result 372\n  Bound result 0\n  Bound result 1084\n  Bound result 255\n  Bound result 95\n  Bound result 9\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 4\n  Bound result 18\n  Bound result 4\n  Bound result 0\n  Bound result 268826458188740451268144603\n  Bound result 18\n  Bound result 1\n  Bound result 445172244704474348945336743\n  Bound result 18\n  Bound result 29\n  Bound result 3995\n  Bound result 2\n  Bound result 1443\n  Bound result 4\n  Bound result 0\n  Bound result 3\n  Bound result 1\n  Bound result 2\n  Bound result 10\n  Bound result 244\n  Bound result 0\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 6.34s (6.34s CPU time)\n\nRan 2 test suites in 6.34s (6.40s CPU time): 36 tests passed, 0 failed, 0 skipped (36 total tests)\n","passed":true},{"durationMs":81,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"IDMToken.approve(address,uint256)\",\"IDMToken.transfer(address,uint256)\",\"IDMToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.json\":56,\"README.md\":137,\"foundry.toml\":21,\"remappings.txt\":2,\"src/IDMToken.sol\":18,\"test/IDMToken.invariant.t.sol\":128,\"test/IDMToken.t.sol\":476},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":1504,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":673,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/IDMToken.sol:12: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"bc728f90607756f77b554c9afd6ea478a0d5c8a264243231bd25a2c9ffc64637","verifiedTreeHash":"61338e553f713cd449200c0a555227b3a82291f7","verifierVersion":"0.1.0+6a374fcd"},{"checks":[{"durationMs":1329,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.23s\nCompiler run successful!\n","passed":true},{"durationMs":4418,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 35 tests for test/IDMToken.t.sol:IDMTokenTest\n[PASS] testFuzz_TransferBeyondAllowanceReverts(uint256,uint256) (runs: 1024, μ: 138419, ~: 138756)\nLogs:\n  Bound result 1843971301939852\n  Bound result 663206709826877880514415125\n\n[PASS] testFuzz_TransferBeyondBalanceReverts(uint256,uint256) (runs: 1024, μ: 129763, ~: 129748)\nLogs:\n  Bound result 1843971301939852\n  Bound result 56092901082277723792012500702421461770987293899791955867366233308765657\n\n[PASS] testFuzz_TransferConservesSupply(address,uint256) (runs: 1024, μ: 95324, ~: 95881)\nLogs:\n  Bound result 3\n\n[PASS] testFuzz_TransferFromHonorsAllowance(uint256,uint256) (runs: 1024, μ: 168100, ~: 169716)\nLogs:\n  Bound result 15399309\n  Bound result 651250\n\n[PASS] test_ApprovalReplacementAndRevocation() (gas: 179771)\n[PASS] test_ApproveEmitsEventAndDoesNotMoveTokens() (gas: 93590)\n[PASS] test_ConstructorEmitsSingleMintEvent() (gas: 12275)\n[PASS] test_Create2FactoryReceivesAllTokensAndLaunchTransfersAreExact() (gas: 664252)\n[PASS] test_DeployerCannotSpendHolderTokensWithoutApproval() (gas: 161287)\n[PASS] test_EmptyHolderCanApproveFutureBalance() (gas: 78267)\n[PASS] test_ExactAllowanceIsConsumedAndCannotBeReused() (gas: 166612)\n[PASS] test_InfiniteAllowanceIsNotDecreased() (gas: 149103)\n[PASS] test_MetadataAndExactInitialSupply() (gas: 122365)\n[PASS] test_NoMintBurnOrAdministrativeEntryPoints() (gas: 804797)\n[PASS] test_RevertWhenApproveZeroSpender() (gas: 40206)\n[PASS] test_RevertWhenDifferentSpenderUsesApproval() (gas: 110048)\n[PASS] test_RevertWhenEmptyAccountTransfers() (gas: 44886)\n[PASS] test_RevertWhenSendingEther() (gas: 40094)\n[PASS] test_RevertWhenTransferExceedsBalance() (gas: 57645)\n[PASS] test_RevertWhenTransferFromExceedsAllowance() (gas: 120572)\n[PASS] test_RevertWhenTransferFromExceedsBalanceRestoresAllowance() (gas: 126197)\n[PASS] test_RevertWhenTransferFromToZeroRestoresAllowance() (gas: 118873)\n[PASS] test_RevertWhenTransferFromWithoutAllowance() (gas: 60098)\n[PASS] test_RevertWhenTransferFromZeroSender() (gas: 55163)\n[PASS] test_RevertWhenTransferToZero() (gas: 50274)\n[PASS] test_RevertWhenZeroTransferToZero() (gas: 32953)\n[PASS] test_RuntimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 796433)\n[PASS] test_SelfTransferPreservesBalance() (gas: 54174)\n[PASS] test_TransferDeliversExactAmountAndEmitsEvent() (gas: 96208)\n[PASS] test_TransferEntireSupply() (gas: 88670)\n[PASS] test_TransferFromSpendsAllowanceAndEmitsTransfer() (gas: 177525)\n[PASS] test_TransferFromToSelfConsumesAllowanceWithoutChangingBalance() (gas: 110177)\n[PASS] test_TransferToContractDoesNotInvokeCallback() (gas: 174195)\n[PASS] test_ZeroTransferFromEmptyAccountEmitsEvent() (gas: 73453)\n[PASS] test_ZeroTransferFromNeedsNoAllowance() (gas: 78705)\nSuite result: ok. 35 passed; 0 failed; 0 skipped; finished in 33.94ms (155.21ms CPU time)\n\nRan 1 test for test/IDMToken.invariant.t.sol:IDMTokenInvariantTest\n[PASS]\nIDMTokenInvariantTest invariants:\n[PASS] invariant_AllowancesMatchModel\n[PASS] invariant_BalancesMatchModelAndSupplyIsConserved\n IDMTokenInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭-----------------+-----------------------+-------+---------+----------╮\n| Contract        | Selector              | Calls | Reverts | Discards |\n+======================================================================+\n| IDMTokenHandler | approve               | 3267  | 0       | 0        |\n|-----------------+-----------------------+-------+---------+----------|\n| IDMTokenHandler | rejectExcessAllowance | 3309  | 0       | 0        |\n|-----------------+-----------------------+-------+---------+----------|\n| IDMTokenHandler | rejectExcessTransfer  | 3209  | 0       | 0        |\n|-----------------+-----------------------+-------+---------+----------|\n| IDMTokenHandler | transfer              | 3302  | 0       | 0        |\n|-----------------+-----------------------+-------+---------+----------|\n| IDMTokenHandler | transferFrom          | 3297  | 0       | 0        |\n╰-----------------+-----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 14\n  Bound result 278\n  Bound result 0\n  Bound result 2737\n  Bound result 0\n  Bound result 505\n  Bound result 372\n  Bound result 0\n  Bound result 1084\n  Bound result 255\n  Bound result 95\n  Bound result 9\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 4\n  Bound result 18\n  Bound result 4\n  Bound result 0\n  Bound result 268826458188740451268144603\n  Bound result 18\n  Bound result 1\n  Bound result 445172244704474348945336743\n  Bound result 18\n  Bound result 29\n  Bound result 3995\n  Bound result 2\n  Bound result 1443\n  Bound result 4\n  Bound result 0\n  Bound result 3\n  Bound result 1\n  Bound result 5\n  Bound result 10\n  Bound result 244\n  Bound result 0\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 4.34s (4.34s CPU time)\n\nRan 2 test suites in 4.34s (4.38s CPU time): 36 tests passed, 0 failed, 0 skipped (36 total tests)\n","passed":true},{"durationMs":39,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"IDMToken.approve(address,uint256)\",\"IDMToken.transfer(address,uint256)\",\"IDMToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.json\":56,\"README.md\":137,\"foundry.toml\":21,\"launch.json\":20,\"remappings.txt\":2,\"src/IDMToken.sol\":18,\"test/IDMToken.invariant.t.sol\":128,\"test/IDMToken.t.sol\":476},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"c5c8f3c9018aedf9b1047907c0651fa27c59048874ef18caa9cfc26ba9b2b8aa","verifiedTreeHash":"93084cc294f61c4b3aae3104b55aa7fb7ee0c179","verifierVersion":"0.1.0+6a374fcd"}]}