{"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":"663e917d-9776-4cbb-bc6d-d0905e337064","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"22f7ab2743237ea7498a3c67938737a6923cbf7fd13ebf0ba63f1224d099c5b6","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":"b91e893249b13bc0d4a30ddb6b96ffb93e645204fa2ccf516e9cbe10990b77cb","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":"e6cc55e36a8e7864f0028c1eb9ef24a03583d31a9229c56eb86abc2bf3b448ca","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":"1e49d60f043b4996a8c22e77c4485f8a6c0ef3d5e736c31e05751092565e1530","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":"1bbd7ce9ff809cb0b84d52fe30b33df77e87b13af4963849318a6952240aff16","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":"ba120894bb9497d10af874bb8240c23798e79fdfff8bedacca339c3fb626ad73","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":"2dfd99004f7ffb6986266ef06b8fec7b078b50fc04f29005b9e5dc5d0501a0fa","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"e206150ba890c3a42e7996f348ada02493663d736c8ce2f5e7e51c0e639cbaab","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: Web Market Trade (WMT).\nToken name: Web Market Trade\nToken symbol: WMT\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.","parentJobId":null,"planHash":"0d362ce28bc7d0553ac18d4fe399158229c6334307647bd0350aae28481bfee1","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"663e917d-9776-4cbb-bc6d-d0905e337064","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-1777-web-market-trade"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51225","feedbackHash":"8a6295986d64cf780c8241aa87933f38b9c804a43f830d832f5fdd034dd7ebb0","nodeKey":"audit_economics","submissionHash":"22f7ab2743237ea7498a3c67938737a6923cbf7fd13ebf0ba63f1224d099c5b6","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51534","feedbackHash":"06ae4bb3dc55d78c913894807438ea5dac4337a5e490f84a758c9acc5ef48ac7","nodeKey":"audit_flow","submissionHash":"b91e893249b13bc0d4a30ddb6b96ffb93e645204fa2ccf516e9cbe10990b77cb","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52681","feedbackHash":"bddd644356319054c64a22fc33362abc680e9efdb6ebb020020264c7ea2fda04","nodeKey":"audit_judge","submissionHash":"e6cc55e36a8e7864f0028c1eb9ef24a03583d31a9229c56eb86abc2bf3b448ca","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52287","feedbackHash":"f3696c72e360724ab346b5c298d9fe58b1c61263cd1218c6b6955dc339950d88","nodeKey":"audit_math","submissionHash":"1e49d60f043b4996a8c22e77c4485f8a6c0ef3d5e736c31e05751092565e1530","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51081","feedbackHash":"3e179434d55588b99d341e8712ff9c9e4087cfcb5a9401f81a23951c80c4941b","nodeKey":"audit_permissions","submissionHash":"1bbd7ce9ff809cb0b84d52fe30b33df77e87b13af4963849318a6952240aff16","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52707","feedbackHash":"0779cf4fd37a06fb9dcd4327576b9677832547c18a25b9ceb364ca30840b3cd4","nodeKey":"build_contract_project","submissionHash":"ba120894bb9497d10af874bb8240c23798e79fdfff8bedacca339c3fb626ad73","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51328","feedbackHash":"0269bb4aaefdad06f989abf7d637ad3b9195ea51b5394fb8036033903c068672","nodeKey":"manifest","submissionHash":"2dfd99004f7ffb6986266ef06b8fec7b078b50fc04f29005b9e5dc5d0501a0fa","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52708","feedbackHash":"0130911bb147e8bc32650c03dad6f8407b9ebae393e1e343927eea4d8690fa80","nodeKey":"write_foundry_tests","submissionHash":"e206150ba890c3a42e7996f348ada02493663d736c8ce2f5e7e51c0e639cbaab","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"2612e852bd8ea658ebff299334eb75578a6e76c4a9bf0a18b6d95c5988c03d64","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"2c968e88904ec22b","findings":[{"citation":"resolved","description":"README.md line 66 states that DEPENDENCIES.json records 'hashes of every vendored file' and that 'Third-party sources are unmodified.' The recorded sha256 values are those of upstream forge-std v1.9.7 (I downloaded the tarball; its archive hash 45157353ab49... matches the recorded archive_sha256 and upstream src/Vm.sol hashes to 9068805b59ac...), but seven files in lib/forge-std/src in this tree do not hash to the recorded values: StdAssertions.sol, StdJson.sol, StdToml.sol, Vm.sol, console.sol, interfaces/IERC7540.sol and interfaces/IMulticall3.sol. A whitespace-stripped comparison shows every difference is line re-wrapping consistent with `forge fmt` at line_length 120; there is no semantic change, and all six OpenZeppelin files match exactly. This is a provenance/documentation inaccuracy only: the token's deployable bytecode does not depend on forge-std, and the OpenZeppelin ERC20 the token inherits is byte-identical to v5.2.0. It is outside my assigned area (access control / trust gap / asymmetry) and is reported because the repository's own integrity claim is checkable and fails. Fix: either re-vendor the seven files byte-for-byte from the v1.9.7 archive (and exclude lib/ from forge fmt), or regenerate the sha256 entries from the files actually in the tree and soften the 'unmodified' wording to 'reformatted only'.","line":110,"path":"DEPENDENCIES.json","reproduction":"From the repository root run: python3 -I -c 'import json,hashlib;[print(f[\"path\"],hashlib.sha256(open(f[\"path\"],\"rb\").read()).hexdigest()==f[\"sha256\"]) for r in json.load(open(\"DEPENDENCIES.json\")) for f in r[\"files\"]]'. Expected: every line prints True. Actual: lib/forge-std/src/Vm.sol prints False (tree hash differs from recorded 9068805b...), as do StdAssertions.sol, StdJson.sol, StdToml.sol, console.sol, interfaces/IERC7540.sol and interfaces/IMulticall3.sol; the 6 OpenZeppelin files and the other 23 forge-std files print True. `diff <(tr -d ' \\n\\t' < upstream/src/Vm.sol) <(tr -d ' \\n\\t' < lib/forge-std/src/Vm.sol)` is empty, confirming whitespace-only drift.","severity":"info","snippet":"        \"sha256\": \"9068805b59ac1d0ea03a8fa1f15ae49c094e0c6c852a2500e0dd112f264b2cb1\"","title":"DEPENDENCIES.json records upstream forge-std hashes that seven vendored files no longer match (reformatted copies)"}],"hash":"1bbd7ce9ff809cb0b84d52fe30b33df77e87b13af4963849318a6952240aff16","nodeId":"99e911ae-c0a1-4921-b8ec-0ae6f1e0b23d","outcome":"completed","summary":"Review complete. The findings file is written and validated, and the working tree contains only my scratch test and the findings file.\n\n**Outcome: the WMT token has no access-control, trust-gap or asymmetry defects.** The contract is a 17-line wrapper over the unmodified OpenZeppelin v5.2.0 ERC20 with a single constructor mint, and every failure mode in my three guides needs a privileged actor, a setter, a paired admin variant, or a second economic formula. None of these exist.\n\nWhat I verified, with concrete checks:\n\n- **Permission map is empty by construction.** The compiled ABI has only the constructor, the three listed state-changing functions, seven views, two events and six ERC-6093 errors. Storage is the five OpenZeppelin slots. There is no receive or fallback.\n- **Deployer and factory have no privilege.** A scratch suite under test/scratch/ replays the protected harness: CREATE2 deployment from a probe with a different origin gives the probe the whole supply, 22 admin, mint, pause, blacklist and upgrade selectors revert from the probe, the origin and a stranger, and the factory cannot pull a holder's balance without allowance.\n- **approve and transferFrom mirror exactly.** A fuzz test over allowance, amount and spender confirms the allowance decrement equals the amount moved, reverts leave the allowance intact, and no caller can set another owner's allowance.\n- **Supply is fixed.** The literal aderyn flagged evaluates to exactly the manifest's supply. No mint or burn path survives the constructor. The project's own 34 tests and the 16,384-call invariant run pass with the README's seed.\n- **Vendored OpenZeppelin is byte-identical to v5.2.0.** All six files match their recorded hashes.\n\nOne informational finding is recorded, outside my area. DEPENDENCIES.json records upstream forge-std v1.9.7 hashes, but seven vendored forge-std files were re-wrapped by the formatter and no longer match them, contradicting the README's \"unmodified\" claim. I confirmed against the downloaded upstream archive that every difference is whitespace only, so it does not affect the deployable bytecode. The reproduction is a one-line hash check given in the finding.\n\nCoverage: all three entry points plus the constructor are marked holds, with six invariant rows. Nothing was left unreached. The real PoolManager seed and swap path was not executed locally and is left to the protected suite, which I noted in the coverage row.","treeHash":null,"usage":{"cachedInputTokens":611026,"inputTokens":258,"model":"claude-fable-5-1","outputTokens":13947,"runtime":"claude","turns":25,"wallClockMs":244035}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"99c6d0bcc495ad61","findings":[],"hash":"1e49d60f043b4996a8c22e77c4485f8a6c0ef3d5e736c31e05751092565e1530","nodeId":"232a1fb1-9775-4e36-bf6c-e05013c9891e","outcome":"completed","summary":"The review is complete and the findings file is written. The git tree shows no changes other than the ignored review output.\n\n**Result: no defects found in the Math Precision, Boundary and Numerical Gap areas.** The findings file at `.imd-findings.json` holds an empty findings list and eight coverage rows, all marked `holds`.\n\n**What was reviewed**\n\n- The token is a 17-line contract inheriting unmodified OpenZeppelin ERC20 v5.2.0. The vendored files hash-match the dependency record and the ERC20 body matches upstream.\n- The supply constant evaluates at compile time to exactly 10^27, which equals the manifest value and fits in uint256. The aderyn large-literal lead is stylistic only.\n- All three entry points were traced through the inherited code. Balance subtraction is checked before the unchecked branch, recipient addition cannot wrap because balances sum to the fixed supply, and the allowance path treats max-uint as infinite while max-minus-one is finite and decremented.\n- The token has no external calls, no payable functions, no receive or fallback, and no bytes decoding, so the Boundary guide's call-site and payable cases do not apply. The only sentinel branches are the zero-address reverts, and both sides were walked.\n- The launch split of 10%, 88% and 2% of the supply is exact with no remainder and no overflow in the intermediate products.\n\n**Checks run**\n\n- The project's own suite: 34 tests passed, including the invariant suite at 256 runs of depth 64 with reverts treated as failures.\n- A scratch probe suite of 9 tests covering exact-balance, exact-allowance, max-uint, zero-value, zero-address, self-transfer of the whole supply, ETH rejection and a balance-add fuzz. All passed and the scratch directory was removed afterwards.\n\n**Not covered.** Nothing in my area was left unreached. The protected Uniswap v4 launch harness needs environment variables and the v4 sources, which are not in this tree, so the real pool seed and swap were not executed here. The project test only simulates pool accounts with plain transfers.","treeHash":null,"usage":{"cachedInputTokens":453076,"inputTokens":194,"model":"claude-fable-5-1","outputTokens":11122,"runtime":"claude","turns":24,"wallClockMs":166680}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"4dd74fd7c315da80","findings":[],"hash":"22f7ab2743237ea7498a3c67938737a6923cbf7fd13ebf0ba63f1224d099c5b6","nodeId":"2b753092-28ae-4223-bc4d-f0ab2761d843","outcome":"completed","summary":"The review is complete. The findings file is valid JSON, the working tree is clean, and no scratch files remain.\n\n**Result: no defects found in the Economic Security, Invariant and Flow Gap areas.** The findings list is empty and every entry point has a coverage row.\n\nWhat I checked:\n\n- **The token source.** `src/WMT.sol` is a 17-line contract that inherits the unmodified OpenZeppelin v5.2.0 ERC20 and mints one billion tokens with 18 decimals to the constructor caller. The vendored library files hash-match the recorded dependency manifest, and the compiled ABI exposes only approve, transfer and transferFrom as state-changing functions, with no receive, fallback, mint, burn or admin path.\n- **Economic Security guide.** No external dependencies, no fee or rebase behaviour, no sentinel-address special cases, no privileged powers. Transfers and approvals to the zero address revert. ETH sent to the token reverts.\n- **Invariant guide.** Total supply is fixed at deployment and cannot grow or shrink afterwards, and the sum of balances always equals it. The project's own invariant suite and fuzz tests pass under the pinned seed.\n- **Flow Gap guide.** The launch legs (factory to distributor, distributor to claimant, factory seed into the pool manager, trader buy and sell) all move exactly the stated amount. I ran a scratch test confirming the 10/88/2 split of the supply is dust-free and that a balance-delta settlement sees exactly what was sent. It passed and has been deleted.\n- **Static analysis lead.** The aderyn large-literal note is a style remark only. The constant evaluates to exactly the manifest supply.\n\nNot reached: nothing in my area. The protected launch suite against a real Uniswap v4 PoolManager depends on v4-core, which this repository does not vendor, so I did not execute it locally. The token's lack of any transfer customisation means there is no mechanism by which that path could behave differently from the local exact-transfer tests.","treeHash":null,"usage":{"cachedInputTokens":933403,"inputTokens":450,"model":"claude-fable-5-1","outputTokens":9991,"runtime":"claude","turns":18,"wallClockMs":173190}},{"artifacts":[],"attempt":1,"bundleHash":"b921aabf472faf2d5d8f343f34dbbcf4005612a0675198d2d9709d95f5f24919","device":"fc6af3255ecf3684","findings":[],"hash":"2dfd99004f7ffb6986266ef06b8fec7b078b50fc04f29005b9e5dc5d0501a0fa","nodeId":"c1a88c68-3236-4dd1-85d0-e81218502c74","outcome":"completed","summary":"Created [launch.json](/home/seat/.identitymd/work/663e917d-9776-4cbb-bc6d-d0905e337064/c1a88c68-3236-4dd1-85d0-e81218502c74/launch.json) matching WMT’s constructor, exact supply, and required pool and economics values.\n\nManifest and ABI checks passed. `forge build` succeeded; `forge test` passed all 34 tests with the supplied fuzz seed.\n\nOnly `launch.json` changed.","treeHash":"f384bcae3ff0005521ef54b18f9832e066e3163c","usage":{"cachedInputTokens":272896,"inputTokens":38678,"model":"gpt-6-astra","outputTokens":2999,"runtime":"codex","turns":3,"wallClockMs":88211}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"393ade31b99d5d5b","findings":[],"hash":"8def68013b54f4e3b499eeef990b93a8737c8773deef74f9bf3c42f09c5f2d03","nodeId":"15f7b261-a771-4e27-8478-d35763bbb31f","outcome":"failed","summary":"codex-devin wrapper: unhandled option --strict-config","treeHash":null,"usage":{"cachedInputTokens":0,"inputTokens":0,"model":"gpt-6-astra","outputTokens":0,"runtime":"codex","turns":0,"wallClockMs":76}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"739094f0e08668ee","findings":[],"hash":"b91e893249b13bc0d4a30ddb6b96ffb93e645204fa2ccf516e9cbe10990b77cb","nodeId":"c2fae914-757a-4759-a790-9e19c5e45006","outcome":"completed","summary":"I found no defects in WMT. `.imd-findings.json` has an empty findings list and a coverage row for each of the three entry points, all marked `holds`. I changed no other files.\n\n**What I reviewed:** `src/WMT.sol` is an unmodified OpenZeppelin v5.2.0 `ERC20` with no overrides. Its constructor mints `INITIAL_SUPPLY` (1e9 × 1e18) once to `msg.sender`, which is the factory in a launch. The vendored OpenZeppelin files' SHA-256 hashes match `DEPENDENCIES.json`. I didn't check them against the upstream v5.2.0 release because that needed a network download, but the code reads as the standard release.\n\n**The three guides:**\n- **Execution Trace:**\n  - `transfer` and `transferFrom` go straight to the unmodified `_update`. Zero addresses revert, the sender's balance is checked before the debit, and the recipient gets exactly the amount sent, with no fee or burn.\n  - That means the launch flows (factory to distributor, the pool seed through the PoolManager, and swaps) arrive whole.\n  - `transferFrom` takes the allowance before moving tokens and leaves an unlimited (`max`) allowance unchanged, which is standard. A failed call reverts entirely, so no partial state is left behind.\n- **Periphery:** The only dependencies are the vendored ERC20, `Context` and the error interfaces. There are no external calls, callbacks or hooks, so nothing can re-enter mid-transfer.\n- **First Principles:**\n  - The supply can't grow after launch, because the only mint is in the constructor and there is no owner, role, pause, blacklist or burn function.\n  - `decimals()` returns 18.\n  - I scanned the deployed bytecode for DELEGATECALL, CALLCODE and SELFDESTRUCT and found none.\n\n**Leads I dropped:**\n- Aderyn's \"large numeric literal\" flag at `src/WMT.sol:10` is just how the supply constant is written, not a defect.\n- The usual front-running risk when changing an `approve` amount is standard ERC20 behaviour, not something specific to this code.\n\n**Tests:** The existing suite passes (34 tests, including an invariant run of 16,384 calls with no reverts). I didn't run the protected launch tests: they import launch contracts (`src/LaunchLiquidity.sol` and two others) that aren't in this tree.","treeHash":null,"usage":{"cachedInputTokens":246057,"inputTokens":14,"model":"claude-opus-5-5","outputTokens":3304,"runtime":"claude","turns":7,"wallClockMs":51091}},{"artifacts":[],"attempt":1,"bundleHash":"1a160268cbfc3c893f5bc73111d5eaf79be2ba638ffeb15106b244db8beecd5a","device":"2293d6b19e81ef1a","findings":[],"hash":"ba120894bb9497d10af874bb8240c23798e79fdfff8bedacca339c3fb626ad73","nodeId":"e66e1501-f6a5-4280-a507-f8e210747e6b","outcome":"completed","summary":"Implemented [WMT](src/WMT.sol) with exactly 1,000,000,000 tokens, 18 decimals, minted once to the deployer.\n\nVendored dependencies and documented deployment assumptions and responsibilities in [README.md](README.md).\n\nValidation passed:\n\n- `forge build`\n- `forge test` — 34 passing with the supplied fuzz seed\n- `forge fmt --check`","treeHash":"23575b2ffed3cd187d2a15c0d47fb4949f2007c1","usage":{"cachedInputTokens":279808,"inputTokens":43684,"model":"gpt-6-astra","outputTokens":13041,"runtime":"codex","turns":5,"wallClockMs":262034}},{"artifacts":[],"attempt":2,"bundleHash":"8d2c1d95bbf36b3a70b8ecd02158eeecc12944b52fe04b7f55159d3af42e504f","device":"d021901979a78997","findings":[],"hash":"e206150ba890c3a42e7996f348ada02493663d736c8ce2f5e7e51c0e639cbaab","nodeId":"15f7b261-a771-4e27-8478-d35763bbb31f","outcome":"completed","summary":"Added 16 tests and expanded invariants for failure paths, allowance lifecycles, supply conservation, and continued transferability.\n\nVerified `forge build` and offline tests with the required seed: **50 passed**, including 16,384 invariant handler calls.\n\nChanges are confined to `test/`. No implementation defects found.","treeHash":"4572e1be2614fdea07c7747e5c8c6e4af9ead0dd","usage":{"cachedInputTokens":795392,"inputTokens":69541,"model":"gpt-6-astra","outputTokens":11451,"runtime":"codex","turns":5,"wallClockMs":272013}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"1a7606be97f168d4","findings":[{"citation":"resolved","description":"Merged from audit_permissions (its only finding; math, flow, economics and the test writer reported none). README.md line 66 states that DEPENDENCIES.json records 'hashes of every vendored file' and that 'Third-party sources are unmodified.' The recorded sha256 values are those of the upstream forge-std v1.9.7 archive (archive hash 45157353ab49eab01d294565866731e599b32401757229689ee459aa26b7ee94 matches the recorded archive_sha256), but seven files in lib/forge-std/src do not hash to the recorded values: StdAssertions.sol, StdJson.sol, StdToml.sol, Vm.sol, console.sol, interfaces/IERC7540.sol and interfaces/IMulticall3.sol. The tree's Vm.sol hashes to a1b1c82924aecf0f38b53192fd1e801cccc1e1fd2ecd6b2301e4f4c4ab102a15, not the recorded 9068805b.... I downloaded both upstream archives into a clean directory and compared: all six OpenZeppelin v5.2.0 files are byte-identical to upstream, and every forge-std difference disappears after stripping whitespace, so the drift is line re-wrapping (consistent with `forge fmt` at line_length 120) with no semantic change. Impact: documentation and provenance accuracy only. forge-std is a test-only dependency; the deployable WMT creation and runtime bytecode depend only on src/WMT.sol and the OpenZeppelin files, which are unmodified. No funds, supply, or launch flow is affected. Fix: either re-vendor the seven forge-std files byte-for-byte from the v1.9.7 archive (and exclude lib/ from forge fmt), or regenerate the seven sha256 entries from the files in the tree and change 'Third-party sources are unmodified' to say forge-std was reformatted only.","line":110,"path":"DEPENDENCIES.json","reproduction":"From the repository root run: python3 -I -c 'import json,hashlib;[print(f[\"path\"],hashlib.sha256(open(f[\"path\"],\"rb\").read()).hexdigest()==f[\"sha256\"]) for r in json.load(open(\"DEPENDENCIES.json\")) for f in r[\"files\"]]'. Expected: every line prints True. Actual: lib/forge-std/src/Vm.sol, StdAssertions.sol, StdJson.sol, StdToml.sol, console.sol, interfaces/IERC7540.sol and interfaces/IMulticall3.sol print False; the 6 OpenZeppelin files and the other forge-std files print True. Confirming whitespace-only drift: download https://codeload.github.com/foundry-rs/forge-std/tar.gz/refs/tags/v1.9.7 (sha256 45157353ab49...), extract, and run `diff <(tr -d ' \\n\\t\\r' < forge-std-1.9.7/src/Vm.sol) <(tr -d ' \\n\\t\\r' < lib/forge-std/src/Vm.sol)`; the output is empty for all seven files. `cmp` of each OpenZeppelin file against openzeppelin-contracts-5.2.0 reports identical.","severity":"info","snippet":"        \"sha256\": \"9068805b59ac1d0ea03a8fa1f15ae49c094e0c6c852a2500e0dd112f264b2cb1\"","title":"DEPENDENCIES.json hashes and the README's 'unmodified' claim do not match seven reformatted forge-std files"}],"hash":"e6cc55e36a8e7864f0028c1eb9ef24a03583d31a9229c56eb86abc2bf3b448ca","nodeId":"0c08f169-782c-4130-91b1-5d053f7dd5a5","outcome":"completed","summary":"The review is complete and `.imd-findings.json` is written. No repository file was changed.\n\n**Outcome:** the WMT token is sound. It is an unmodified OpenZeppelin v5.2.0 ERC-20 with a parameterless constructor that mints exactly the manifest supply to the factory. All three entry points hold, and the only finding is an info-level provenance inaccuracy.\n\n**What I verified**\n- Build and the project's 50 tests pass under the pinned fuzz seed, and `forge fmt --check` is clean.\n- The six vendored OpenZeppelin files are byte-identical to the upstream v5.2.0 archive, whose hash matches the one recorded in DEPENDENCIES.json.\n- The deployed bytecode contains no DELEGATECALL, CALLCODE, SELFDESTRUCT or any CALL-family opcode, has no payable or fallback paths, and is far below size limits. Deployment through the factory's CREATE2 needs no arguments or address bits.\n- launch.json uses only schema keys, matches the token's name, symbol, decimals and supply, and matches this launch's pool and economics values from the reference.\n- The protected suite could not run here because it imports v4-core and floor files not in this tree, but every check it makes was traced directly against the code and holds.\n\n**Specialist findings**\n- The permissions specialist's hash mismatch reproduces exactly. Seven forge-std files differ from the recorded upstream hashes, and I confirmed the differences are whitespace-only reformatting. Kept at info, since forge-std is test-only and the deployable bytecode does not depend on it. The fix is to re-vendor those files byte-for-byte or regenerate the hashes and soften the \"unmodified\" wording.\n- The aderyn large-numeric-literal lead is the correct supply constant and was dropped.\n- Math, flow, economics and the test writer reported nothing, and my own pass found nothing they missed.\n\n**Coverage:** all three entry points answered as holds, plus five invariant rows covering supply, deployability, opcodes, manifest validity and dependency provenance.","treeHash":null,"usage":{"cachedInputTokens":594235,"inputTokens":386,"model":"claude-fable-5-1","outputTokens":8875,"runtime":"claude","turns":13,"wallClockMs":209827}}],"verification":[{"checks":[{"durationMs":1139,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.07s\nCompiler run successful!\n","passed":true},{"durationMs":6995,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 33 tests for test/WMT.t.sol:WMTTest\n[PASS] testFuzz_insufficientAllowancePreservesState(uint256,uint256) (runs: 1000, μ: 123364, ~: 123889)\nLogs:\n  Bound result 242\n  Bound result 127\n\n[PASS] testFuzz_insufficientBalancePreservesState(uint256,uint256) (runs: 1000, μ: 127454, ~: 127679)\nLogs:\n  Bound result 1\n  Bound result 56325903447618329999090774535620451666910864111815146347648468173\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 1000, μ: 93029, ~: 93146)\nLogs:\n  Bound result 151602754375\n\n[PASS] testFuzz_transferFromAccountsForAllowance(uint256,uint256) (runs: 1000, μ: 159666, ~: 161992)\nLogs:\n  Bound result 1\n\n[PASS] test_approvalsAreIsolatedByOwnerAndSpender() (gas: 205309)\n[PASS] test_approveEmitsEventAndReplacesAllowance() (gas: 119334)\n[PASS] test_approveZeroSpenderReverts() (gas: 37640)\n[PASS] test_constructorEmitsExactlyOneMint() (gas: 9628)\n[PASS] test_create2FactoryReceivesSupplyAndLaunchTransfersAreExact() (gas: 739427)\n[PASS] test_deployerCannotSpendAnotherHoldersTokens() (gas: 160489)\n[PASS] test_emptyAccountCannotTransferOneUnit() (gas: 37952)\n[PASS] test_metadataAndEntireSupplyBelongToDeployer() (gas: 107584)\n[PASS] test_noMintBurnOrAdministrativeEntrypoints() (gas: 1429786)\n[PASS] test_rejectsNativeCurrencyAndUnknownCalls() (gas: 58840)\n[PASS] test_revokedApprovalCannotBeSpent() (gas: 133733)\n[PASS] test_runtimeSizeAndForbiddenOpcodes() (gas: 787371)\n[PASS] test_selfTransferPreservesBalance() (gas: 51410)\n[PASS] test_transferEmitsEventAndMovesExactAmount() (gas: 91461)\n[PASS] test_transferEntireSupplyThenSmallestUnit() (gas: 143614)\n[PASS] test_transferFromConsumesFiniteAllowanceAndEmitsTransfer() (gas: 225120)\n[PASS] test_transferFromInfiniteAllowanceIsNotDecreased() (gas: 139810)\n[PASS] test_transferFromInsufficientAllowanceRevertsAtomically() (gas: 116096)\n[PASS] test_transferFromInsufficientBalanceRestoresAllowance() (gas: 126510)\n[PASS] test_transferFromSelfStillNeedsAllowance() (gas: 35685)\n[PASS] test_transferFromToSameHolderConsumesAllowanceOnly() (gas: 109999)\n[PASS] test_transferFromZeroAmountNeedsNoAllowance() (gas: 78742)\n[PASS] test_transferFromZeroRecipientRestoresAllowance() (gas: 114521)\n[PASS] test_transferFromZeroSenderReverts() (gas: 37884)\n[PASS] test_transferMaxUintReverts() (gas: 35619)\n[PASS] test_transferMoreThanBalanceRevertsAtomically() (gas: 65290)\n[PASS] test_transferToContractDoesNotCallRecipient() (gas: 99023)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 71971)\n[PASS] test_zeroTransferFromEmptyAccountEmitsEvent() (gas: 73367)\nSuite result: ok. 33 passed; 0 failed; 0 skipped; finished in 28.58ms (119.03ms CPU time)\n\nRan 1 test for test/WMT.invariant.t.sol:WMTInvariantTest\n[PASS]\nWMTInvariantTest invariants:\n[PASS] invariant_balancesAndAllowancesMatchModel\n[PASS] invariant_supplyIsFixedAndAllBalancesAreAccountedFor\n WMTInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭------------+--------------+-------+---------+----------╮\n| Contract   | Selector     | Calls | Reverts | Discards |\n+========================================================+\n| WMTHandler | approve      | 5482  | 0       | 0        |\n|------------+--------------+-------+---------+----------|\n| WMTHandler | transfer     | 5468  | 0       | 0        |\n|------------+--------------+-------+---------+----------|\n| WMTHandler | transferFrom | 5434  | 0       | 0        |\n╰------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 6\n  Bound result 1000000000000000000\n  Bound result 24576\n  Bound result 0\n  Bound result 1000000000000000000000000000\n  Bound result 470\n  Bound result 242\n  Bound result 4\n  Bound result 0\n  Bound result 3022\n  Bound result 1000000000000000000\n  Bound result 144998791238357\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 21869380004282192836466097\n  Bound result 0\n  Bound result 0\n  Bound result 7\n  Bound result 573\n  Bound result 573\n  Bound result 5\n  Bound result 0\n  Bound result 0\n  Bound result 9\n  Bound result 2185\n  Bound result 0\n  Bound result 101233337701005917617997258\n  Bound result 0\n  Bound result 9\n  Bound result 0\n  Bound result 288\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 6.92s (6.92s CPU time)\n\nRan 2 test suites in 6.92s (6.95s CPU time): 34 tests passed, 0 failed, 0 skipped (34 total tests)\n","passed":true},{"durationMs":36,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"WMT.approve(address,uint256)\",\"WMT.transfer(address,uint256)\",\"WMT.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.json\":162,\"README.md\":66,\"foundry.toml\":21,\"launch.json\":24,\"remappings.txt\":2,\"src/WMT.sol\":17,\"test/WMT.invariant.t.sol\":133,\"test/WMT.t.sol\":414},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"2dfd99004f7ffb6986266ef06b8fec7b078b50fc04f29005b9e5dc5d0501a0fa","verifiedTreeHash":"f384bcae3ff0005521ef54b18f9832e066e3163c","verifierVersion":"0.1.0+aca6c688"},{"checks":[{"durationMs":1318,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.22s\nCompiler run successful!\n","passed":true},{"durationMs":7602,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 33 tests for test/WMT.t.sol:WMTTest\n[PASS] testFuzz_insufficientAllowancePreservesState(uint256,uint256) (runs: 1000, μ: 123364, ~: 123889)\nLogs:\n  Bound result 422499256682277178\n  Bound result 540302112896371256263466484\n\n[PASS] testFuzz_insufficientBalancePreservesState(uint256,uint256) (runs: 1000, μ: 127454, ~: 127679)\nLogs:\n  Bound result 979802104210151763061327228\n  Bound result 1000000000000000000\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 1000, μ: 93029, ~: 93146)\nLogs:\n  Bound result 258770263606437856565260255\n\n[PASS] testFuzz_transferFromAccountsForAllowance(uint256,uint256) (runs: 1000, μ: 159666, ~: 161992)\nLogs:\n  Bound result 999999999999999999999999998\n\n[PASS] test_approvalsAreIsolatedByOwnerAndSpender() (gas: 205309)\n[PASS] test_approveEmitsEventAndReplacesAllowance() (gas: 119334)\n[PASS] test_approveZeroSpenderReverts() (gas: 37640)\n[PASS] test_constructorEmitsExactlyOneMint() (gas: 9628)\n[PASS] test_create2FactoryReceivesSupplyAndLaunchTransfersAreExact() (gas: 739427)\n[PASS] test_deployerCannotSpendAnotherHoldersTokens() (gas: 160489)\n[PASS] test_emptyAccountCannotTransferOneUnit() (gas: 37952)\n[PASS] test_metadataAndEntireSupplyBelongToDeployer() (gas: 107584)\n[PASS] test_noMintBurnOrAdministrativeEntrypoints() (gas: 1429786)\n[PASS] test_rejectsNativeCurrencyAndUnknownCalls() (gas: 58840)\n[PASS] test_revokedApprovalCannotBeSpent() (gas: 133733)\n[PASS] test_runtimeSizeAndForbiddenOpcodes() (gas: 787371)\n[PASS] test_selfTransferPreservesBalance() (gas: 51410)\n[PASS] test_transferEmitsEventAndMovesExactAmount() (gas: 91461)\n[PASS] test_transferEntireSupplyThenSmallestUnit() (gas: 143614)\n[PASS] test_transferFromConsumesFiniteAllowanceAndEmitsTransfer() (gas: 225120)\n[PASS] test_transferFromInfiniteAllowanceIsNotDecreased() (gas: 139810)\n[PASS] test_transferFromInsufficientAllowanceRevertsAtomically() (gas: 116096)\n[PASS] test_transferFromInsufficientBalanceRestoresAllowance() (gas: 126510)\n[PASS] test_transferFromSelfStillNeedsAllowance() (gas: 35685)\n[PASS] test_transferFromToSameHolderConsumesAllowanceOnly() (gas: 109999)\n[PASS] test_transferFromZeroAmountNeedsNoAllowance() (gas: 78742)\n[PASS] test_transferFromZeroRecipientRestoresAllowance() (gas: 114521)\n[PASS] test_transferFromZeroSenderReverts() (gas: 37884)\n[PASS] test_transferMaxUintReverts() (gas: 35619)\n[PASS] test_transferMoreThanBalanceRevertsAtomically() (gas: 65290)\n[PASS] test_transferToContractDoesNotCallRecipient() (gas: 99023)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 71971)\n[PASS] test_zeroTransferFromEmptyAccountEmitsEvent() (gas: 73367)\nSuite result: ok. 33 passed; 0 failed; 0 skipped; finished in 30.64ms (131.13ms CPU time)\n\nRan 1 test for test/WMT.invariant.t.sol:WMTInvariantTest\n[PASS]\nWMTInvariantTest invariants:\n[PASS] invariant_balancesAndAllowancesMatchModel\n[PASS] invariant_supplyIsFixedAndAllBalancesAreAccountedFor\n WMTInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭------------+--------------+-------+---------+----------╮\n| Contract   | Selector     | Calls | Reverts | Discards |\n+========================================================+\n| WMTHandler | approve      | 5482  | 0       | 0        |\n|------------+--------------+-------+---------+----------|\n| WMTHandler | transfer     | 5468  | 0       | 0        |\n|------------+--------------+-------+---------+----------|\n| WMTHandler | transferFrom | 5434  | 0       | 0        |\n╰------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 6\n  Bound result 1000000000000000000\n  Bound result 24576\n  Bound result 0\n  Bound result 1000000000000000000000000000\n  Bound result 470\n  Bound result 242\n  Bound result 4\n  Bound result 0\n  Bound result 3022\n  Bound result 1000000000000000000\n  Bound result 144998791238357\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 21869380004282192836466097\n  Bound result 0\n  Bound result 0\n  Bound result 7\n  Bound result 573\n  Bound result 573\n  Bound result 5\n  Bound result 0\n  Bound result 0\n  Bound result 9\n  Bound result 2185\n  Bound result 0\n  Bound result 101233337701005917617997258\n  Bound result 0\n  Bound result 9\n  Bound result 0\n  Bound result 288\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 7.49s (7.49s CPU time)\n\nRan 2 test suites in 7.49s (7.52s CPU time): 34 tests passed, 0 failed, 0 skipped (34 total tests)\n","passed":true},{"durationMs":47,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"WMT.approve(address,uint256)\",\"WMT.transfer(address,uint256)\",\"WMT.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.json\":162,\"README.md\":66,\"foundry.toml\":21,\"remappings.txt\":2,\"src/WMT.sol\":17,\"test/WMT.invariant.t.sol\":133,\"test/WMT.t.sol\":414},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":495,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":266,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/WMT.sol:10: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"ba120894bb9497d10af874bb8240c23798e79fdfff8bedacca339c3fb626ad73","verifiedTreeHash":"23575b2ffed3cd187d2a15c0d47fb4949f2007c1","verifierVersion":"0.1.0+aca6c688"},{"checks":[{"durationMs":1462,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.39s\nCompiler run successful!\n","passed":true},{"durationMs":7975,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 33 tests for test/WMT.t.sol:WMTTest\n[PASS] testFuzz_insufficientAllowancePreservesState(uint256,uint256) (runs: 1000, μ: 123372, ~: 123889)\nLogs:\n  Bound result 979802273137161033195330879\n  Bound result 1000000000000000000\n\n[PASS] testFuzz_insufficientBalancePreservesState(uint256,uint256) (runs: 1000, μ: 127458, ~: 127691)\nLogs:\n  Bound result 1000000000\n  Bound result 127\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 1000, μ: 90494, ~: 90971)\nLogs:\n  Bound result 1034\n\n[PASS] testFuzz_transferFromAccountsForAllowance(uint256,uint256) (runs: 1000, μ: 159690, ~: 161992)\nLogs:\n  Bound result 127\n\n[PASS] test_approvalsAreIsolatedByOwnerAndSpender() (gas: 205309)\n[PASS] test_approveEmitsEventAndReplacesAllowance() (gas: 119334)\n[PASS] test_approveZeroSpenderReverts() (gas: 37640)\n[PASS] test_constructorEmitsExactlyOneMint() (gas: 9628)\n[PASS] test_create2FactoryReceivesSupplyAndLaunchTransfersAreExact() (gas: 739427)\n[PASS] test_deployerCannotSpendAnotherHoldersTokens() (gas: 160489)\n[PASS] test_emptyAccountCannotTransferOneUnit() (gas: 37952)\n[PASS] test_metadataAndEntireSupplyBelongToDeployer() (gas: 107584)\n[PASS] test_noMintBurnOrAdministrativeEntrypoints() (gas: 1429786)\n[PASS] test_rejectsNativeCurrencyAndUnknownCalls() (gas: 58840)\n[PASS] test_revokedApprovalCannotBeSpent() (gas: 133733)\n[PASS] test_runtimeSizeAndForbiddenOpcodes() (gas: 787371)\n[PASS] test_selfTransferPreservesBalance() (gas: 51410)\n[PASS] test_transferEmitsEventAndMovesExactAmount() (gas: 91461)\n[PASS] test_transferEntireSupplyThenSmallestUnit() (gas: 143614)\n[PASS] test_transferFromConsumesFiniteAllowanceAndEmitsTransfer() (gas: 225120)\n[PASS] test_transferFromInfiniteAllowanceIsNotDecreased() (gas: 139810)\n[PASS] test_transferFromInsufficientAllowanceRevertsAtomically() (gas: 116096)\n[PASS] test_transferFromInsufficientBalanceRestoresAllowance() (gas: 126510)\n[PASS] test_transferFromSelfStillNeedsAllowance() (gas: 35685)\n[PASS] test_transferFromToSameHolderConsumesAllowanceOnly() (gas: 109999)\n[PASS] test_transferFromZeroAmountNeedsNoAllowance() (gas: 78742)\n[PASS] test_transferFromZeroRecipientRestoresAllowance() (gas: 114521)\n[PASS] test_transferFromZeroSenderReverts() (gas: 37884)\n[PASS] test_transferMaxUintReverts() (gas: 35619)\n[PASS] test_transferMoreThanBalanceRevertsAtomically() (gas: 65290)\n[PASS] test_transferToContractDoesNotCallRecipient() (gas: 99023)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 71971)\n[PASS] test_zeroTransferFromEmptyAccountEmitsEvent() (gas: 73367)\nSuite result: ok. 33 passed; 0 failed; 0 skipped; finished in 80.25ms (315.24ms CPU time)\n\nRan 15 tests for test/WMT.properties.t.sol:WMTPropertiesTest\n[PASS] testFuzz_failedBalanceSpendCanBeRetried(uint256,uint256,bool) (runs: 1000, μ: 338720, ~: 338792)\nLogs:\n  Bound result 11298\n  Bound result 177362147\n\n[PASS] testFuzz_invalidRecipientDoesNotConsumeApproval(uint256,bool) (runs: 1000, μ: 222197, ~: 222708)\nLogs:\n  Bound result 95\n\n[PASS] testFuzz_reapprovalReplacesPartiallySpentAllowance(uint256,uint256,uint256) (runs: 1000, μ: 296005, ~: 295138)\nLogs:\n  Bound result 354436999925543110229277807\n  Bound result 462750341827041\n  Bound result 7730981\n\n[PASS] testFuzz_splitDelegatedTransfersMatchSingleSpend(uint256,uint256,uint256) (runs: 1000, μ: 377119, ~: 381858)\nLogs:\n  Bound result 20715\n  Bound result 7756\n\n[PASS] testFuzz_transferRoundTripRestoresExistingBalances(uint256,uint256,uint256) (runs: 1000, μ: 330997, ~: 332057)\nLogs:\n  Bound result 14\n  Bound result 10646\n  Bound result 9\n\n[PASS] test_approvalDoesNotReserveBalanceAndSurvivesDirectTransfers() (gas: 370451)\n[PASS] test_approvalGivenBeforeFundingWorksAfterFailureAndFunding() (gas: 251900)\n[PASS] test_maxMinusOneAllowanceIsFinite() (gas: 153495)\n[PASS] test_paidMutationsRevertWithoutChangingState() (gas: 203302)\n[PASS] test_returningTokensDoesNotRestoreSpentAllowance() (gas: 271791)\n[PASS] test_selfTransferFromCannotExceedBalance() (gas: 163739)\n[PASS] test_unapprovedSpenderCannotUseAnotherSpendersAllowance() (gas: 116528)\n[PASS] test_unlimitedAllowanceCanBeReducedAndRevoked() (gas: 359499)\n[PASS] test_zeroApprovalToZeroSpenderDoesNotDisturbExistingApproval() (gas: 110429)\n[PASS] test_zeroDelegatedTransferEmitsEventWithoutApproval() (gas: 91679)\nSuite result: ok. 15 passed; 0 failed; 0 skipped; finished in 80.72ms (397.44ms CPU time)\n\nRan 2 tests for test/WMT.invariant.t.sol:WMTInvariantTest\n[PASS]\nWMTInvariantTest invariants:\n[PASS] invariant_balancesAndAllowancesMatchModel\n[PASS] invariant_supplyIsFixedAndAllBalancesAreAccountedFor\n WMTInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭------------+-------------------+-------+---------+----------╮\n| Contract   | Selector          | Calls | Reverts | Discards |\n+=============================================================+\n| WMTHandler | approve           | 2706  | 0       | 0        |\n|------------+-------------------+-------+---------+----------|\n| WMTHandler | invalidAddress    | 2801  | 0       | 0        |\n|------------+-------------------+-------+---------+----------|\n| WMTHandler | transfer          | 2765  | 0       | 0        |\n|------------+-------------------+-------+---------+----------|\n| WMTHandler | transferAll       | 2715  | 0       | 0        |\n|------------+-------------------+-------+---------+----------|\n| WMTHandler | transferFrom      | 2715  | 0       | 0        |\n|------------+-------------------+-------+---------+----------|\n| WMTHandler | transferRoundTrip | 2682  | 0       | 0        |\n╰------------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 3130\n  Bound result 250000000000000000000000000\n  Bound result 2\n  Bound result 3840\n  Bound result 3840\n  Bound result 3840\n  Bound result 227538800604209539305178049\n  Bound result 250000000000000000000000000\n  Bound result 249999999999999999999999998\n  Bound result 249999999999999999999999998\n  Bound result 0\n  Bound result 335332034\n  Bound result 152654555659728799473697981\n  Bound result 152654555659728799473697981\n  Bound result 152654555659728799473697981\n  Bound result 8129\n  Bound result 1000000000000000000\n  Bound result 1000000000000000000\n  Bound result 1000000000000000000\n  Bound result 0\n  Bound result 88\n  Bound result 88\n  Bound result 88\n  Bound result 270885653317161235138638965\n  Bound result 270885653317161235138638965\n  Bound result 270885653317161235138638965\n  Bound result 0\n  Bound result 249999999999999999999991869\n  Bound result 0\n  Bound result 0\n  Bound result 5\n  Bound result 0\n  Bound result 500000000000000000000008136\n  Bound result 0\n  Bound result 2213\n  Bound result 0\n  Bound result 500000000000000000000008136\n  Bound result 2420713528776176234\n  Bound result 2420713528776176234\n  Bound result 2420713528776176234\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 1000000000000000000000000000\n  Bound result 1000000000000000000000000000\n  Bound result 21610733155177374105816429\n  Bound result 21610733155177374105816429\n  Bound result 21610733155177374105816429\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 14\n  Bound result 0\n  Bound result 1000000000000000000000000000\n  Bound result 999999999999999999999999997\n  Bound result 999999999999999999999999997\n  Bound result 999999999999999999999999997\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 1000000000000000000000000000\n  Bound result 0\n  Bound result 1000000000000000000000000000\n  Bound result 1000000000000000000000000000\n\n[PASS] test_handlerSequenceReachesAllowanceAndBalanceBoundaries() (gas: 4513459)\nLogs:\n  Bound result 250000000000000000000000000\n  Bound result 250000000000000000000000000\n  Bound result 7\n  Bound result 7\n  Bound result 7\n  Bound result 1\n  Bound result 250000000000000000000000001\n  Bound result 250000000000000000000000000\n  Bound result 250000000000000000000000000\n  Bound result 1000000000000000000000000000\n  Bound result 1000000000000000000000000000\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 7.89s (7.89s CPU time)\n\nRan 3 test suites in 7.89s (8.05s CPU time): 50 tests passed, 0 failed, 0 skipped (50 total tests)\n","passed":true},{"durationMs":45,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"WMT.approve(address,uint256)\",\"WMT.transfer(address,uint256)\",\"WMT.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.json\":162,\"README.md\":66,\"foundry.toml\":21,\"remappings.txt\":2,\"src/WMT.sol\":17,\"test/WMT.invariant.t.sol\":242,\"test/WMT.properties.t.sol\":302,\"test/WMT.t.sol\":416},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"e206150ba890c3a42e7996f348ada02493663d736c8ce2f5e7e51c0e639cbaab","verifiedTreeHash":"4572e1be2614fdea07c7747e5c8c6e4af9ead0dd","verifierVersion":"0.1.0+aca6c688"}]}