{"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":"e416db2a-4870-4028-a964-585448cf20c9","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"79ce61df63c6c2e4877ca880c9a70e48bcb7a505825870cd122ccd7634cf5fd4","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":"e198fcc327ca63eb60cab85f73993e2b0fbd98cb3db93bf74d009c3211f13d30","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":"0e490785d3ad58829cacb394431ed03cdfb780316f10aca605a7e2923b74230c","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":"d3203ba87ba4540787645621bb9540309401d8b01021d564a0b53babfdee82cd","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":"4e1523ab55abf45a99f89a5caf01e7e914c4e3356266f889905156c76acef4f0","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":"376930e5bdd9e4f5714bad4d9316d081127f5972e3750dc7a62757d05292355a","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":"9806f669bbffc74294c794d5d800918ce611f81f9598ba5d45b8d287155e8253","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"acc0f6545c037ae1f1c6adb4bc6f15fc8d443ef12c88e8561db0eda87c73c792","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: MirrorIMD (MIRROR).\nToken name: MirrorIMD\nToken symbol: MIRROR\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.","parentJobId":null,"planHash":"c70f2eb6784188f980338281d1ab461964d4558e6f1c522778e270f56aee662b","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"e416db2a-4870-4028-a964-585448cf20c9","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-2403-mirrorimd"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"52665","feedbackHash":"81b9729c2e683055482f817748952877c1cb114d596011388170df78b82be0a1","nodeKey":"audit_economics","submissionHash":"79ce61df63c6c2e4877ca880c9a70e48bcb7a505825870cd122ccd7634cf5fd4","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51166","feedbackHash":"916224bae5cab8e15d9584fb69316e686152a50c53f779e79ac322d6a5bcfd5e","nodeKey":"audit_flow","submissionHash":"e198fcc327ca63eb60cab85f73993e2b0fbd98cb3db93bf74d009c3211f13d30","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52131","feedbackHash":"e71f33f373b84782d3a6c681c2f9e400e0888bcd7de1dbc133f33b904d316df5","nodeKey":"audit_judge","submissionHash":"0e490785d3ad58829cacb394431ed03cdfb780316f10aca605a7e2923b74230c","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51345","feedbackHash":"9c8a91f3db772ce48121ccb5632a9a6bcf1ac67817e2efef4ac4366675549959","nodeKey":"audit_math","submissionHash":"d3203ba87ba4540787645621bb9540309401d8b01021d564a0b53babfdee82cd","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52606","feedbackHash":"d4dc6b61c9449b0dfbde093fef0716d309f727510988a2b97be41c7a468071f2","nodeKey":"audit_permissions","submissionHash":"4e1523ab55abf45a99f89a5caf01e7e914c4e3356266f889905156c76acef4f0","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51011","feedbackHash":"3b84a264896d9fac5f6da5aaca8c28fae6fa3b24b04497ec19f96ffe913fe504","nodeKey":"build_contract_project","submissionHash":"376930e5bdd9e4f5714bad4d9316d081127f5972e3750dc7a62757d05292355a","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51086","feedbackHash":"2b62583a996471a397020cb57a8bea080353a9b87b47c24c8900cb97e276be70","nodeKey":"manifest","submissionHash":"9806f669bbffc74294c794d5d800918ce611f81f9598ba5d45b8d287155e8253","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"50991","feedbackHash":"154bc495e59f96ce239ac85e0360b2e4ced78da7411ae4319cc7dab5c14ea725","nodeKey":"write_foundry_tests","submissionHash":"acc0f6545c037ae1f1c6adb4bc6f15fc8d443ef12c88e8561db0eda87c73c792","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"e7f1d3312c2538d0df741c2e3cf6b4064ba966920adbf9af5590427d2f842cf6","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"de319b702da6aa2e","findings":[],"hash":"0e490785d3ad58829cacb394431ed03cdfb780316f10aca605a7e2923b74230c","nodeId":"1c31efd5-b382-4054-b3ac-c7ff4966904d","outcome":"completed","summary":"I found no defects in MirrorIMD, and the four specialists reported none either, so there was nothing to reproduce or merge. I wrote `.imd-findings.json` with an empty findings list and a coverage record for the three entry points plus two properties I checked across the whole contract (invariants).\n\n**What I checked:**\n- **Token source (`src/MirrorIMD.sol`):** it is a plain OpenZeppelin ERC-20 with a constructor that takes no arguments. It mints `INITIAL_SUPPLY` (1,000,000,000 × 10^18) once to `msg.sender`, which is the factory. It adds no functions and overrides nothing: there is no external mint or burn, no owner or admin role, no transfer fee, and no DELEGATECALL or SELFDESTRUCT.\n- **Library code:** the vendored ERC20 and Context files match OpenZeppelin v5.0.2 as I know it. I didn't fetch upstream to compare hashes.\n- **Entry points (all `holds`):**\n  - `approve` sets the allowance, rejects a zero spender and emits `Approval`.\n  - `transfer` and `transferFrom` move exactly the amount asked, or revert on a zero receiver, too little balance or too little allowance. An unlimited allowance is not reduced.\n  - So the launch transfers to the distributor, the pool seed and swaps against the PoolManager all arrive in full.\n- **Deployment:** the deployed code is 2,640 bytes and the creation code 1,752 bytes, well under the 24,576 and 49,152 byte limits. `launch.json` lists no constructor arguments, which matches the constructor. Decimals (18), supply (`1000000000000000000000000000`), contract name, lowercase addresses and schema keys are all consistent with the code.\n- **Tests:** all 52 tests in the repo pass.\n- **Static analysis:** the only tool result was aderyn's low \"large numeric literal\" at line 10. It is the intended supply constant and not a defect.\n\nI couldn't check the economics block against the original job, since the job's own figures weren't given to me; it looks plausible. No files were changed apart from the findings file.","treeHash":null,"usage":{"cachedInputTokens":225347,"inputTokens":12,"model":"claude-opus-5-5","outputTokens":2691,"runtime":"claude","turns":6,"wallClockMs":64555}},{"artifacts":[],"attempt":1,"bundleHash":"cdb4a5978261ca84acd38421d6a8146d51c0abafee7cd898d40138f1cb0f2028","device":"20c10dbba93106ff","findings":[],"hash":"376930e5bdd9e4f5714bad4d9316d081127f5972e3750dc7a62757d05292355a","nodeId":"8fc78474-6dfe-420a-afa1-1baaba4f199d","outcome":"completed","summary":"Implemented MirrorIMD (MIRROR): 1 billion tokens with 18 decimals, minted once to the deployer. No later minting or administrative powers.\n\nIncluded vendored dependencies, success/failure tests, fuzz tests, stateful invariants, and deployment documentation.\n\nVerified with Solidity 0.8.26:\n\n- `forge build` passed.\n- `forge test` passed: 35 tests using the required fuzz seed.\n- `forge fmt --check` passed.","treeHash":"062c75a2853fe0b4574ce21f63222ad06eda41bd","usage":{"cachedInputTokens":592768,"inputTokens":37247,"model":"gpt-6.1-sol","outputTokens":13352,"runtime":"codex","turns":5,"wallClockMs":297562}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"829d84438fb3fdc8","findings":[],"hash":"4e1523ab55abf45a99f89a5caf01e7e914c4e3356266f889905156c76acef4f0","nodeId":"e5aed57f-a0ca-43b4-9d98-2da09a0b7ce0","outcome":"completed","summary":"The review is complete. The findings file holds an empty findings list and eight coverage rows, and the working tree is otherwise untouched.\n\n**Result: no defects found** in the Access Control, Trust Gap and Asymmetry areas for `src/MirrorIMD.sol`.\n\nWhat I verified, with concrete inputs:\n\n- **Permission model.** The token is OpenZeppelin v5.0.2 ERC20 with one constructor mint to msg.sender. No owner, minter, pauser, blacklist or initializer exists. Calls to mint, burn, burnFrom, owner, pause, blacklist, setFee, initialize and renounceOwnership all revert as unknown selectors.\n- **approve.** An attacker approving itself leaves the factory's allowance to them at zero. Only the caller's own allowances change.\n- **transfer.** Exact amounts move, supply stays at 1e27, zero recipient and insufficient balance revert. No fee or caller-class branch exists, so there is no asymmetry to exploit.\n- **transferFrom.** Pulling 1 unit from the factory with no allowance reverts. A 5-unit allowance is spent exactly to zero and a further 1-unit pull reverts.\n- **Trust gap.** No privileged actor and no economic formula, so no seam between access, economics and asymmetry exists.\n- **Vendored library.** The five OpenZeppelin files are byte-identical to the v5.0.2 release tag, ruling out a hidden path in inherited code.\n- **Bytecode.** No DELEGATECALL, CALLCODE or SELFDESTRUCT opcode. No receive or fallback, so ETH sent to the token reverts.\n- **Static-analysis lead.** The aderyn large-literal note on line 10 is the intended 1e27 supply, not a defect.\n\nScope notes: no launch.json is present yet, which the reference treats as expected before the manifest step. Every listed entry point has a coverage row marked holds. The existing 35-test suite passes.","treeHash":null,"usage":{"cachedInputTokens":635389,"inputTokens":354,"model":"claude-fable-5-1","outputTokens":9540,"runtime":"claude","turns":19,"wallClockMs":190022}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"0ef0cddb99617930","findings":[],"hash":"79ce61df63c6c2e4877ca880c9a70e48bcb7a505825870cd122ccd7634cf5fd4","nodeId":"7b91dc95-64c9-475d-bded-a24182f00908","outcome":"completed","summary":"The review is complete. The findings file is written at the repository root, the scratch tests are removed, and no project file was changed.\n\n**Result: no defects found in the Economic Security, Invariant or Flow Gap areas.**\n\nWhat I checked and how:\n\n- **The token is a 16-line wrapper over OpenZeppelin v5.0.2 ERC-20.** I diffed all five vendored library files against the upstream release and they are byte-identical. The only project code is a constructor that mints the supply constant to the deployer.\n- **Economics.** The compiled ABI has exactly three state-changing functions: approve, transfer and transferFrom. There is no receive or fallback, no mint, burn, pause, blacklist or upgrade path, and the reachable-opcode walk of the runtime finds no DELEGATECALL, CALLCODE or SELFDESTRUCT. Supply is exactly 10^27 base units with 18 decimals, so the manifest values and the opening-cap derivation have nothing in the token to trip over.\n- **Invariants.** Supply conservation holds because the only balance writer moves value between slots, mint is reachable only from the constructor, and burn is never reached. The project's own invariant suite passes, and my scratch fuzz covering self-transfers and delegated self-transfers also passes.\n- **Flow gaps.** The token makes no outbound calls and receives no callbacks, so there is no stale-state seam. A factory stand-in deploying by CREATE2 receives the whole supply, the swarm share and claims arrive whole, and a PoolManager-style balance-delta pull and return-value-checked push both see exactly the transferred amount.\n\nTwo documented standard behaviours were measured but not reported as defects: the ERC-20 allowance-replacement race, and the absence of an Approval event on transferFrom. Both are EIP-20-conformant and the README already states them.\n\nOne area was unreachable: the launch economics figures such as the opening market cap, pool share and paired currency are not in this tree because no launch.json exists yet. The coverage record says so explicitly. The findings file holds nine coverage rows, one for each listed entry point plus the invariants and flows I traced.","treeHash":null,"usage":{"cachedInputTokens":741089,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":15875,"runtime":"claude","turns":29,"wallClockMs":228802}},{"artifacts":[],"attempt":1,"bundleHash":"323932c11678d271568a55bf3f398e3210ceeb1ef0390b40771b993e8cbbe4b8","device":"080780b6898c2241","findings":[],"hash":"9806f669bbffc74294c794d5d800918ce611f81f9598ba5d45b8d287155e8253","nodeId":"94ef9559-a633-4b33-91bf-b67e6b53f181","outcome":"completed","summary":"Created `launch.json` with MirrorIMD’s exact supply, empty constructor arguments, no application contracts, and the required pool and economics values.\n\nVerified against the compiled constructor ABI. `forge build` succeeded; `forge test` passed all 35 tests with the supplied fuzz seed.\n\nOnly `launch.json` is changed for submission.","treeHash":"a59a100797b3b34b436b0bc26417ab790add095e","usage":{"cachedInputTokens":197760,"inputTokens":37382,"model":"gpt-6-astra","outputTokens":2358,"runtime":"codex","turns":3,"wallClockMs":64789}},{"artifacts":[],"attempt":1,"bundleHash":"bd89054949d290b61840af2392a3aeaa3944f9a8444a6bcfd84e30108979a180","device":"8d210756eb9ac4d7","findings":[],"hash":"acc0f6545c037ae1f1c6adb4bc6f15fc8d443ef12c88e8561db0eda87c73c792","nodeId":"10d85007-b991-4125-9576-56bf15a64aa4","outcome":"completed","summary":"Added 17 tests covering allowance boundaries, revocation, replay prevention, failed-call rollback, and transfer properties. Expanded stateful invariants to nine randomized operations.\n\n`forge build` and seeded `forge test` pass: **52 tests**, including **24,576 invariant calls**.\n\nNo implementation defects found. All changes are under `test/`.","treeHash":"6c839c558d91044c1978135b339881489d82ce98","usage":{"cachedInputTokens":438272,"inputTokens":54039,"model":"gpt-6-astra","outputTokens":10318,"runtime":"codex","turns":4,"wallClockMs":263939}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"fba19b641cdd6f27","findings":[],"hash":"d3203ba87ba4540787645621bb9540309401d8b01021d564a0b53babfdee82cd","nodeId":"f402df77-2ebc-4dc1-b5e8-43cf972e7052","outcome":"completed","summary":"The review is complete. The findings file holds an empty list and a nine-row coverage record, and the scratch test directory is removed so the tree is unchanged apart from `.imd-findings.json`.\n\n**Result: no defects in the Math Precision, Boundary or Numerical Gap areas.**\n\nWhat I checked and how:\n\n- **Supply constant.** `INITIAL_SUPPLY` evaluates to exactly 10^27, is divisible by 10^18 with zero remainder, and matches the README's base-unit string. The aderyn \"large numeric literal\" lead is this constant written readably, not a defect.\n- **Unchecked arithmetic in the inherited ERC20.** The balance subtract and allowance subtract are each preceded by a `>=` check, and the unchecked balance add cannot wrap because total supply is fixed at 10^27 with no reachable mint or burn after the constructor. Scratch tests exercised supply, supply plus one, max uint, zero, one, whole-balance self-transfer and delegated self-transfer.\n- **Allowance sentinel boundary.** Only exactly `type(uint256).max` is treated as infinite. An allowance of max minus one is finite and decrements. An infinite allowance is still bounded by the holder's balance, and a failed transfer rolls the allowance back.\n- **Launch flow arithmetic.** The 10 / 80 / 10 percent splits of 10^27 in basis points produce no dust, and there is no fee, tax or burn, so the distributor, pool seed and claim transfers arrive whole.\n- **Boundary surfaces.** No external calls, no payable path, no receive or fallback, no bytes decoding. Plain ETH and unknown selectors revert.\n- **Dependency integrity.** All five vendored OpenZeppelin files hash identically to upstream v5.0.2.\n- **Floor replica.** The compiled runtime has no reachable DELEGATECALL, CALLCODE or SELFDESTRUCT and fits EIP-170. The ABI exposes exactly the three state-changing entry points the verifier listed.\n\nTooling that ran: forge build, the project's 35 existing tests with the README's fuzz seed, 11 scratch boundary tests, and `forge fmt --check`. Slither and Mythril were not run by me; the supplied static output had no medium-or-higher lines.\n\nNot covered: there is no launch.json in the tree yet, so the manifest could not be reviewed. The remaining ERC-20 behaviours the README documents, such as tokens sent to the token's own address being unrecoverable and the approve replacement race, are standard and were not reported as defects.","treeHash":null,"usage":{"cachedInputTokens":555484,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":14088,"runtime":"claude","turns":27,"wallClockMs":213609}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"45aa937328087de3","findings":[],"hash":"e198fcc327ca63eb60cab85f73993e2b0fbd98cb3db93bf74d009c3211f13d30","nodeId":"c96e1253-edb5-4790-8ed6-7cb1995b3ca1","outcome":"completed","summary":"The review is complete. The findings file is written with an empty findings list and eight coverage rows, and no repository source was changed.\n\n**Result: no defects found in the assigned area.** MirrorIMD is a 16-line fixed-supply token that inherits unmodified OpenZeppelin ERC20 v5.0.2 and adds only a constructor minting the whole supply to the deployer.\n\nWhat I verified, against the Execution Trace, Periphery and First Principles guides:\n\n- **Entry points.** All three state-changing functions (approve, transfer, transferFrom) traced through the library to storage. Zero-address and balance checks precede every unchecked subtraction. A revert inside transferFrom rolls back the allowance write atomically. No external calls, stale reads, partial updates or sentinel bypasses exist.\n- **Constructor and supply.** The literal flagged by aderyn equals 10^27 exactly, matching the task's supply. CREATE2 deployment from a factory-address probe credits the factory, and 10 percent, 80 percent and remainder transfers plus a claim all arrive whole.\n- **Privileged surface.** The ABI exposes nothing beyond the three ERC-20 writers. All 22 admin and freeze selectors from the protected floor revert from both a stranger and the factory address.\n- **Bytecode.** A reachable-opcode scan of the compiled runtime and creation code finds no DELEGATECALL, CALLCODE, SELFDESTRUCT, CALL, STATICCALL or CREATE. The code uses PUSH0 and MCOPY, so the launch chain must support Cancun, which the README and foundry.toml already state.\n- **Periphery.** The six vendored OpenZeppelin files are byte-identical to the upstream v5.0.2 tag.\n- **Project checks.** Build, the 35-test suite with the README's fuzz seed, and formatting all pass.\n\nTwo behaviours I checked and deliberately did not report as defects, since they are inherent to ERC-20 and documented in the README: the approve replacement race, and third parties being able to emit zero-value transfers from any address.\n\nThe scratch test that reproduces these checks is at test/scratch/Floor.scratch.t.sol, which the harness discards. Nothing outside the assigned area was reached that needed reporting, and the launch manifest does not yet exist in this tree, so it was not reviewed.","treeHash":null,"usage":{"cachedInputTokens":547063,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":16115,"runtime":"claude","turns":24,"wallClockMs":208909}}],"verification":[{"checks":[{"durationMs":468,"exitCode":0,"name":"build","output":"Compiling 9 files with Solc 0.8.26\nSolc 0.8.26 finished in 411.72ms\nCompiler run successful!\n","passed":true},{"durationMs":2463,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 34 tests for test/MirrorIMD.t.sol:MirrorIMDTest\n[PASS] testFuzz_aboveAllowanceReverts(uint256,uint256) (runs: 1024, μ: 100078, ~: 100417)\n[PASS] testFuzz_aboveBalanceReverts(uint256,uint256) (runs: 1024, μ: 104381, ~: 104693)\n[PASS] testFuzz_delegatedTransferAccounting(uint256,uint256) (runs: 1024, μ: 137226, ~: 138872)\n[PASS] testFuzz_transferPreservesSupply(uint256) (runs: 1024, μ: 74837, ~: 75132)\n[PASS] test_approvalCanBeReplacedAndRevoked() (gas: 150796)\n[PASS] test_approvalIsScopedToOwnerAndSpender() (gas: 92678)\n[PASS] test_approveEmitsEventAndSetsAllowance() (gas: 67432)\n[PASS] test_approveFromZeroReverts() (gas: 30739)\n[PASS] test_approveZeroSpenderReverts() (gas: 30379)\n[PASS] test_constructorEmitsExactlyOneMint() (gas: 6945)\n[PASS] test_delegatedSelfTransferConsumesAllowanceWithoutChangingBalance() (gas: 94586)\n[PASS] test_factoryDistributionAndClaimTransfersArriveWhole() (gas: 484713)\n[PASS] test_factoryReceivesWholeSupply() (gas: 255265)\n[PASS] test_failedTransferFromRollsBackAllowance() (gas: 157721)\n[PASS] test_holderAlsoNeedsAllowanceForTransferFrom() (gas: 33339)\n[PASS] test_infiniteAllowanceIsNotReduced() (gas: 120552)\n[PASS] test_insufficientBalanceRevertsWithoutChangingState() (gas: 104266)\n[PASS] test_maximumTransferRevertsAsInsufficientBalance() (gas: 33131)\n[PASS] test_metadataAndInitialSupply() (gas: 66203)\n[PASS] test_noMintBurnOrAdminEntrypoints() (gas: 492103)\n[PASS] test_selfTransferPreservesBalance() (gas: 42707)\n[PASS] test_transferEmitsEventAndMovesExactAmount() (gas: 79817)\n[PASS] test_transferEntireSupply() (gas: 62733)\n[PASS] test_transferFromAboveAllowanceReverts() (gas: 99987)\n[PASS] test_transferFromEmitsEventAndConsumesFiniteAllowance() (gas: 205252)\n[PASS] test_transferFromToZeroRollsBackAllowance() (gas: 102898)\n[PASS] test_transferFromWithoutApprovalReverts() (gas: 45303)\n[PASS] test_transferFromZeroAddressRevertsEvenForZeroAmount() (gas: 32958)\n[PASS] test_transferFromZeroSenderReverts() (gas: 30729)\n[PASS] test_transferSingleBaseUnit() (gas: 67481)\n[PASS] test_transferToZeroRevertsWithoutChangingState() (gas: 41693)\n[PASS] test_zeroTransferFromEmptyAccountEmitsEvent() (gas: 57412)\n[PASS] test_zeroTransferFromNeedsNoAllowance() (gas: 58514)\n[PASS] test_zeroTransferToZeroAlsoReverts() (gas: 30382)\nSuite result: ok. 34 passed; 0 failed; 0 skipped; finished in 25.82ms (132.88ms CPU time)\n\nRan 1 test for test/MirrorIMD.invariant.t.sol:MirrorIMDInvariantTest\n[PASS]\nMirrorIMDInvariantTest invariants:\n[PASS] invariant_allowancesMatchApprovalsAndSpending\n[PASS] invariant_supplyAndBalancesAreConserved\n MirrorIMDInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭------------------+-------------------+-------+---------+----------╮\n| Contract         | Selector          | Calls | Reverts | Discards |\n+===================================================================+\n| MirrorIMDHandler | approve           | 2105  | 0       | 0        |\n|------------------+-------------------+-------+---------+----------|\n| MirrorIMDHandler | rejectedOverdraft | 1965  | 0       | 0        |\n|------------------+-------------------+-------+---------+----------|\n| MirrorIMDHandler | transfer          | 2039  | 0       | 0        |\n|------------------+-------------------+-------+---------+----------|\n| MirrorIMDHandler | transferFrom      | 2083  | 0       | 0        |\n╰------------------+-------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.40s (2.40s CPU time)\n\nRan 2 test suites in 2.40s (2.42s CPU time): 35 tests passed, 0 failed, 0 skipped (35 total tests)\n","passed":true},{"durationMs":33,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"MirrorIMD.approve(address,uint256)\",\"MirrorIMD.transfer(address,uint256)\",\"MirrorIMD.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":3,\"DEPENDENCIES.md\":23,\"LICENSE\":21,\"README.md\":123,\"foundry.toml\":19,\"src/MirrorIMD.sol\":16,\"test/MirrorIMD.invariant.t.sol\":122,\"test/MirrorIMD.t.sol\":371,\"test/utils/TestBase.sol\":41},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":587,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":321,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/MirrorIMD.sol:10: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"376930e5bdd9e4f5714bad4d9316d081127f5972e3750dc7a62757d05292355a","verifiedTreeHash":"062c75a2853fe0b4574ce21f63222ad06eda41bd","verifierVersion":"0.1.0+560ab6a2"},{"checks":[{"durationMs":407,"exitCode":0,"name":"build","output":"Compiling 9 files with Solc 0.8.26\nSolc 0.8.26 finished in 363.09ms\nCompiler run successful!\n","passed":true},{"durationMs":2097,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 34 tests for test/MirrorIMD.t.sol:MirrorIMDTest\n[PASS] testFuzz_aboveAllowanceReverts(uint256,uint256) (runs: 1024, μ: 100078, ~: 100417)\n[PASS] testFuzz_aboveBalanceReverts(uint256,uint256) (runs: 1024, μ: 104381, ~: 104693)\n[PASS] testFuzz_delegatedTransferAccounting(uint256,uint256) (runs: 1024, μ: 137226, ~: 138872)\n[PASS] testFuzz_transferPreservesSupply(uint256) (runs: 1024, μ: 74837, ~: 75132)\n[PASS] test_approvalCanBeReplacedAndRevoked() (gas: 150796)\n[PASS] test_approvalIsScopedToOwnerAndSpender() (gas: 92678)\n[PASS] test_approveEmitsEventAndSetsAllowance() (gas: 67432)\n[PASS] test_approveFromZeroReverts() (gas: 30739)\n[PASS] test_approveZeroSpenderReverts() (gas: 30379)\n[PASS] test_constructorEmitsExactlyOneMint() (gas: 6945)\n[PASS] test_delegatedSelfTransferConsumesAllowanceWithoutChangingBalance() (gas: 94586)\n[PASS] test_factoryDistributionAndClaimTransfersArriveWhole() (gas: 484713)\n[PASS] test_factoryReceivesWholeSupply() (gas: 255265)\n[PASS] test_failedTransferFromRollsBackAllowance() (gas: 157721)\n[PASS] test_holderAlsoNeedsAllowanceForTransferFrom() (gas: 33339)\n[PASS] test_infiniteAllowanceIsNotReduced() (gas: 120552)\n[PASS] test_insufficientBalanceRevertsWithoutChangingState() (gas: 104266)\n[PASS] test_maximumTransferRevertsAsInsufficientBalance() (gas: 33131)\n[PASS] test_metadataAndInitialSupply() (gas: 66203)\n[PASS] test_noMintBurnOrAdminEntrypoints() (gas: 492103)\n[PASS] test_selfTransferPreservesBalance() (gas: 42707)\n[PASS] test_transferEmitsEventAndMovesExactAmount() (gas: 79817)\n[PASS] test_transferEntireSupply() (gas: 62733)\n[PASS] test_transferFromAboveAllowanceReverts() (gas: 99987)\n[PASS] test_transferFromEmitsEventAndConsumesFiniteAllowance() (gas: 205252)\n[PASS] test_transferFromToZeroRollsBackAllowance() (gas: 102898)\n[PASS] test_transferFromWithoutApprovalReverts() (gas: 45303)\n[PASS] test_transferFromZeroAddressRevertsEvenForZeroAmount() (gas: 32958)\n[PASS] test_transferFromZeroSenderReverts() (gas: 30729)\n[PASS] test_transferSingleBaseUnit() (gas: 67481)\n[PASS] test_transferToZeroRevertsWithoutChangingState() (gas: 41693)\n[PASS] test_zeroTransferFromEmptyAccountEmitsEvent() (gas: 57412)\n[PASS] test_zeroTransferFromNeedsNoAllowance() (gas: 58514)\n[PASS] test_zeroTransferToZeroAlsoReverts() (gas: 30382)\nSuite result: ok. 34 passed; 0 failed; 0 skipped; finished in 30.57ms (107.27ms CPU time)\n\nRan 1 test for test/MirrorIMD.invariant.t.sol:MirrorIMDInvariantTest\n[PASS]\nMirrorIMDInvariantTest invariants:\n[PASS] invariant_allowancesMatchApprovalsAndSpending\n[PASS] invariant_supplyAndBalancesAreConserved\n MirrorIMDInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭------------------+-------------------+-------+---------+----------╮\n| Contract         | Selector          | Calls | Reverts | Discards |\n+===================================================================+\n| MirrorIMDHandler | approve           | 2105  | 0       | 0        |\n|------------------+-------------------+-------+---------+----------|\n| MirrorIMDHandler | rejectedOverdraft | 1965  | 0       | 0        |\n|------------------+-------------------+-------+---------+----------|\n| MirrorIMDHandler | transfer          | 2039  | 0       | 0        |\n|------------------+-------------------+-------+---------+----------|\n| MirrorIMDHandler | transferFrom      | 2083  | 0       | 0        |\n╰------------------+-------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.05s (2.05s CPU time)\n\nRan 2 test suites in 2.05s (2.08s CPU time): 35 tests passed, 0 failed, 0 skipped (35 total tests)\n","passed":true},{"durationMs":23,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"MirrorIMD.approve(address,uint256)\",\"MirrorIMD.transfer(address,uint256)\",\"MirrorIMD.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":3,\"DEPENDENCIES.md\":23,\"LICENSE\":21,\"README.md\":123,\"foundry.toml\":19,\"launch.json\":24,\"src/MirrorIMD.sol\":16,\"test/MirrorIMD.invariant.t.sol\":122,\"test/MirrorIMD.t.sol\":371,\"test/utils/TestBase.sol\":41},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"9806f669bbffc74294c794d5d800918ce611f81f9598ba5d45b8d287155e8253","verifiedTreeHash":"a59a100797b3b34b436b0bc26417ab790add095e","verifierVersion":"0.1.0+560ab6a2"},{"checks":[{"durationMs":683,"exitCode":0,"name":"build","output":"Compiling 10 files with Solc 0.8.26\nSolc 0.8.26 finished in 618.19ms\nCompiler run successful!\n","passed":true},{"durationMs":7128,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 34 tests for test/MirrorIMD.t.sol:MirrorIMDTest\n[PASS] testFuzz_aboveAllowanceReverts(uint256,uint256) (runs: 1024, μ: 100101, ~: 100417)\n[PASS] testFuzz_aboveBalanceReverts(uint256,uint256) (runs: 1024, μ: 104390, ~: 104693)\n[PASS] testFuzz_delegatedTransferAccounting(uint256,uint256) (runs: 1024, μ: 137407, ~: 138884)\n[PASS] testFuzz_transferPreservesSupply(uint256) (runs: 1024, μ: 74838, ~: 75144)\n[PASS] test_approvalCanBeReplacedAndRevoked() (gas: 150796)\n[PASS] test_approvalIsScopedToOwnerAndSpender() (gas: 92678)\n[PASS] test_approveEmitsEventAndSetsAllowance() (gas: 67432)\n[PASS] test_approveFromZeroReverts() (gas: 30739)\n[PASS] test_approveZeroSpenderReverts() (gas: 30379)\n[PASS] test_constructorEmitsExactlyOneMint() (gas: 6945)\n[PASS] test_delegatedSelfTransferConsumesAllowanceWithoutChangingBalance() (gas: 94586)\n[PASS] test_factoryDistributionAndClaimTransfersArriveWhole() (gas: 484713)\n[PASS] test_factoryReceivesWholeSupply() (gas: 255265)\n[PASS] test_failedTransferFromRollsBackAllowance() (gas: 157721)\n[PASS] test_holderAlsoNeedsAllowanceForTransferFrom() (gas: 33339)\n[PASS] test_infiniteAllowanceIsNotReduced() (gas: 120552)\n[PASS] test_insufficientBalanceRevertsWithoutChangingState() (gas: 104266)\n[PASS] test_maximumTransferRevertsAsInsufficientBalance() (gas: 33131)\n[PASS] test_metadataAndInitialSupply() (gas: 66203)\n[PASS] test_noMintBurnOrAdminEntrypoints() (gas: 492103)\n[PASS] test_selfTransferPreservesBalance() (gas: 42707)\n[PASS] test_transferEmitsEventAndMovesExactAmount() (gas: 79817)\n[PASS] test_transferEntireSupply() (gas: 62733)\n[PASS] test_transferFromAboveAllowanceReverts() (gas: 99987)\n[PASS] test_transferFromEmitsEventAndConsumesFiniteAllowance() (gas: 205252)\n[PASS] test_transferFromToZeroRollsBackAllowance() (gas: 102898)\n[PASS] test_transferFromWithoutApprovalReverts() (gas: 45303)\n[PASS] test_transferFromZeroAddressRevertsEvenForZeroAmount() (gas: 32958)\n[PASS] test_transferFromZeroSenderReverts() (gas: 30729)\n[PASS] test_transferSingleBaseUnit() (gas: 67481)\n[PASS] test_transferToZeroRevertsWithoutChangingState() (gas: 41693)\n[PASS] test_zeroTransferFromEmptyAccountEmitsEvent() (gas: 57412)\n[PASS] test_zeroTransferFromNeedsNoAllowance() (gas: 58514)\n[PASS] test_zeroTransferToZeroAlsoReverts() (gas: 30382)\nSuite result: ok. 34 passed; 0 failed; 0 skipped; finished in 79.24ms (287.21ms CPU time)\n\nRan 17 tests for test/MirrorIMD.properties.t.sol:MirrorIMDPropertiesTest\n[PASS] testFuzz_approvalOverwriteIsIdempotent(uint256,uint256) (runs: 1024, μ: 142218, ~: 142292)\n[PASS] testFuzz_failedDelegatedSpendIsAtomic(uint256,uint256,bool) (runs: 1024, μ: 171869, ~: 171210)\n[PASS] testFuzz_finiteAllowanceCanBeExhaustedButNotReplayed(uint256,uint256) (runs: 1024, μ: 236893, ~: 238661)\n[PASS] testFuzz_revocationDoesNotAffectOtherSpendersOrOwners(uint256,uint256) (runs: 1024, μ: 249020, ~: 249818)\n[PASS] testFuzz_splitTransferEqualsLumpSum(uint256,uint256) (runs: 1024, μ: 188182, ~: 189148)\n[PASS] testFuzz_transferRoundTripRestoresBalances(uint256,uint256) (runs: 1024, μ: 213163, ~: 213894)\n[PASS] testFuzz_transferToArbitraryNonzeroRecipient(address,uint256) (runs: 1024, μ: 82796, ~: 83265)\n[PASS] test_approvalBeforeFundingIsUsableAfterFunding() (gas: 199396)\n[PASS] test_lastApprovedUnitCannotBeSpentTwice() (gas: 205492)\n[PASS] test_maximumMinusOneAllowanceIsFinite() (gas: 138901)\n[PASS] test_ownerSpenderAndRecipientCanBeTheSameAccount() (gas: 137162)\n[PASS] test_refillingBalanceDoesNotRestoreSpentAllowance() (gas: 365628)\n[PASS] test_selfTransferCannotBypassBalanceChecks() (gas: 44651)\n[PASS] test_unlimitedAllowanceCanBeReplacedWithFiniteAllowance() (gas: 229299)\n[PASS] test_unlimitedAllowanceCanBeRevoked() (gas: 180451)\n[PASS] test_unlimitedAllowanceDoesNotBypassBalanceChecks() (gas: 162083)\n[PASS] test_zeroDelegatedTransferToZeroRevertsForFiniteAndUnlimitedApproval() (gas: 203409)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 79.44ms (547.01ms CPU time)\n\nRan 1 test for test/MirrorIMD.invariant.t.sol:MirrorIMDInvariantTest\n[PASS]\nMirrorIMDInvariantTest invariants:\n[PASS] invariant_allowancesMatchApprovalsAndSpending\n[PASS] invariant_supplyAndBalancesAreConserved\n MirrorIMDInvariantTest invariants (runs: 256, calls: 24576, reverts: 0)\n\n╭------------------+----------------------------+-------+---------+----------╮\n| Contract         | Selector                   | Calls | Reverts | Discards |\n+============================================================================+\n| MirrorIMDHandler | approve                    | 2743  | 0       | 0        |\n|------------------+----------------------------+-------+---------+----------|\n| MirrorIMDHandler | rejectedAboveAllowance     | 2862  | 0       | 0        |\n|------------------+----------------------------+-------+---------+----------|\n| MirrorIMDHandler | rejectedDelegatedOverdraft | 2782  | 0       | 0        |\n|------------------+----------------------------+-------+---------+----------|\n| MirrorIMDHandler | rejectedOverdraft          | 2628  | 0       | 0        |\n|------------------+----------------------------+-------+---------+----------|\n| MirrorIMDHandler | rejectedZeroRecipient      | 2803  | 0       | 0        |\n|------------------+----------------------------+-------+---------+----------|\n| MirrorIMDHandler | rejectedZeroSpender        | 2706  | 0       | 0        |\n|------------------+----------------------------+-------+---------+----------|\n| MirrorIMDHandler | revokeAndReject            | 2692  | 0       | 0        |\n|------------------+----------------------------+-------+---------+----------|\n| MirrorIMDHandler | transfer                   | 2668  | 0       | 0        |\n|------------------+----------------------------+-------+---------+----------|\n| MirrorIMDHandler | transferFrom               | 2692  | 0       | 0        |\n╰------------------+----------------------------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 7.07s (7.06s CPU time)\n\nRan 3 test suites in 7.07s (7.22s CPU time): 52 tests passed, 0 failed, 0 skipped (52 total tests)\n","passed":true},{"durationMs":35,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"MirrorIMD.approve(address,uint256)\",\"MirrorIMD.transfer(address,uint256)\",\"MirrorIMD.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":3,\"DEPENDENCIES.md\":23,\"LICENSE\":21,\"README.md\":123,\"foundry.toml\":19,\"src/MirrorIMD.sol\":16,\"test/MirrorIMD.invariant.t.sol\":215,\"test/MirrorIMD.properties.t.sol\":270,\"test/MirrorIMD.t.sol\":371,\"test/utils/TestBase.sol\":49},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"acc0f6545c037ae1f1c6adb4bc6f15fc8d443ef12c88e8561db0eda87c73c792","verifiedTreeHash":"6c839c558d91044c1978135b339881489d82ce98","verifierVersion":"0.1.0+560ab6a2"}]}