{"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":"f8b82360-e5dd-4fc4-83c4-d20351ccbd99","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"ff308137ccf785a33b73c1a3ad9c4c3f7a225d79734f464f00f0b559669399e4","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":"9d9a532faca95404604f06fc9f3d486de032b20b491140982de833424448e8b5","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":"fa911193208fe86d259b6be33d0c96a7e705dccd7e9d2b1bed8e55cc75494c02","dependsOn":["build_contract_project","write_foundry_tests","manifest","audit_math","audit_permissions","audit_economics","audit_flow"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"3014f1ea5961918ca059453a484bf4c8bcbbfc2248dbe31d94ac7c5cdf8f50bd","skillId":"audit-judge","tools":[]},"key":"audit_judge","kind":"code","role":"review","skillHash":"3014f1ea5961918ca059453a484bf4c8bcbbfc2248dbe31d94ac7c5cdf8f50bd","skillId":"audit-judge","state":"accepted"},{"acceptedSubmissionHash":"2c473f7932cda2104fd80eba3dd5cc184cbf4d26c3d2f1f7368644e7e57b5676","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":"317afd11d31aeea2f73d0694a2c1d3cb347fa905e180d567ece78e115d474d47","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":"9d7d739d2bcfeee42127206fdb517528306b90bc66a49e3e453a0056f698d84a","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"b6503de65ad02f845827887c23da4c3b56ccc5df7a459db263bae6e549d92f7f","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"b6503de65ad02f845827887c23da4c3b56ccc5df7a459db263bae6e549d92f7f","skillId":"build-contract-project","state":"accepted"},{"acceptedSubmissionHash":"53a723e820318bf6d42d20661df02345f4b474a1bf68ee81d60e87cb20e55009","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"039e329aaacc3afcc4ae5229ceef3b3d7ae6684b4279c92921a5574b23dc60de","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"73431852439ad3a343f3d2b7db1c43cd363b9f48f9bb51497374a0cf6d50b223","skillId":"write-foundry-tests","tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"73431852439ad3a343f3d2b7db1c43cd363b9f48f9bb51497374a0cf6d50b223","skillId":"write-foundry-tests","state":"accepted"}],"objective":"A custom token: Identity Units (UI).\nToken name: Identity Units\nToken symbol: UI\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.\n\nTransfer rules: No fee","parentJobId":null,"planHash":"32ccf5ea5cbf1e483a02f6db6b2ea6c705acdeb898da9d14d0aaec76f777a80d","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"f8b82360-e5dd-4fc4-83c4-d20351ccbd99","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-798-identity-units"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51742","feedbackHash":"33de2b1695868bed96ebad6460b423ede5ac86db2276392ca5905ff9ac8d69ca","nodeKey":"audit_economics","submissionHash":"ff308137ccf785a33b73c1a3ad9c4c3f7a225d79734f464f00f0b559669399e4","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51025","feedbackHash":"e2e6cc693dab4e054d620cb469fbd195e3ff6c03740426eb164878a99b3109ad","nodeKey":"audit_flow","submissionHash":"9d9a532faca95404604f06fc9f3d486de032b20b491140982de833424448e8b5","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"50952","feedbackHash":"7f5501481c67704a0917f81dfe483c8d27800e43dd427039d3039fb795c49ac8","nodeKey":"audit_judge","submissionHash":"fa911193208fe86d259b6be33d0c96a7e705dccd7e9d2b1bed8e55cc75494c02","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"50969","feedbackHash":"7e261573ff4524f6a9d25fe2c23eb8a9679f2daaf8f8350f79e4e5beb1540aa4","nodeKey":"audit_math","submissionHash":"2c473f7932cda2104fd80eba3dd5cc184cbf4d26c3d2f1f7368644e7e57b5676","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51020","feedbackHash":"50e8a08808024ba0488ca6057bde44b5fa553ecce1dc7901d8f902c36e1bee34","nodeKey":"audit_permissions","submissionHash":"317afd11d31aeea2f73d0694a2c1d3cb347fa905e180d567ece78e115d474d47","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52224","feedbackHash":"cebd4f2ddc3f3980fba654ca38acc74b939723c6182926eed960fb6267226114","nodeKey":"build_contract_project","submissionHash":"9d7d739d2bcfeee42127206fdb517528306b90bc66a49e3e453a0056f698d84a","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51180","feedbackHash":"92109344e32cf99fc841274db352bf431d1eae8f9251f317d5c0bd3c58ee3797","nodeKey":"manifest","submissionHash":"53a723e820318bf6d42d20661df02345f4b474a1bf68ee81d60e87cb20e55009","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51320","feedbackHash":"4bc6901748567f8ade7876724909561599a5620ffd7740988e1b42bf28c3fd1d","nodeKey":"write_foundry_tests","submissionHash":"039e329aaacc3afcc4ae5229ceef3b3d7ae6684b4279c92921a5574b23dc60de","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"98299a6b3c1f0ca84827810204d9602edc9c1b47401bbc20995bec7610e6a041","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"6b9431f422630df2352c5b816aadfac0b6dd5d035f0816625fd390ee0a705fc7","device":"fe36973c683b5abb","findings":[],"hash":"039e329aaacc3afcc4ae5229ceef3b3d7ae6684b4279c92921a5574b23dc60de","nodeId":"943c8b33-d4da-40b5-8e13-576952f84789","outcome":"completed","summary":"Added 15 edge-case and fuzz tests, and expanded invariants to cover rejected calls, allowance rollback, supply conservation, and fee-free transfers.\n\nOffline `forge build` and `forge test` pass: **46 tests**, including **32,768 invariant calls**.\n\nOnly `test/` files changed. No implementation defects found.","treeHash":"38edd82bd4fc1f512dbfd04261863097716822e7","usage":{"cachedInputTokens":659712,"inputTokens":77576,"model":"gpt-6-astra","outputTokens":9539,"runtime":"codex","turns":4,"wallClockMs":305791}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"93ca4a1020037bf1","findings":[],"hash":"2c473f7932cda2104fd80eba3dd5cc184cbf4d26c3d2f1f7368644e7e57b5676","nodeId":"955a87f0-fea1-4237-9880-87574ba53fa2","outcome":"completed","summary":"I found no defects in my area (Math Precision, Boundary and Numerical Gaps), so `.imd-findings.json` holds an empty findings list plus coverage rows.\n\n**What I checked:** `src/IdentityUnits.sol` is a plain OpenZeppelin v5.0.2 ERC20 that mints `INITIAL_SUPPLY = 1_000_000_000 * 10 ** 18` (10^27) once to `msg.sender` in the constructor. The token code doesn't change any of the inherited ERC20 behaviour.\n- **Supply math:** 10^27 is computed at compile time and is far below 2^256. There is no mint or burn entry point after the constructor, so the supply can't change.\n- **Unchecked blocks:** each one in OZ's `_update` and `_spendAllowance` is guarded first:\n  - The sender's balance is subtracted only after `fromBalance >= value` is checked.\n  - The recipient's balance can't overflow because it's capped by the total supply.\n  - The allowance is reduced only after `currentAllowance >= value` is checked.\n- **Edge values:**\n  - A transfer of 0 works.\n  - Sending a full balance works.\n  - Sending to yourself works.\n  - The zero address reverts as sender, recipient, approver or spender.\n  - `type(uint256).max` works as an unlimited allowance that is never reduced.\n- **Precision and fees:** there are no fees, division or rounding. `_update` moves exactly `value`, so the \"no fee\" rule holds. Decimals stay at the default 18.\n- **Tool leads:** Aderyn flagged `large-numeric-literal` at line 10. The constant is correct, so at most it's a style point, not a defect. Slither reported nothing.\n- **Tests:** `forge test` passes all 31 of the repo's tests, including the invariant suite (8,192 calls, 0 reverts).\n\n**Coverage:** all three entry points are marked `holds`: `approve`, `transfer` and `transferFrom`. I added rows for two invariants: the fixed supply, and 18 decimals with exact, fee-free transfers.\n\n**Limits:**\n- I did not run the protected launch test. It needs files outside this repo (`LaunchLiquidity`, `PoolInitializationGuard`, v4-core) and launch environment variables I don't have.\n- I relied on the vendored OZ files being unmodified, as `DEPENDENCIES.md` says. I read the relevant functions and they match standard v5.0.2, but I didn't check the archive hash.\n- I left out the standard ERC-20 `approve` race. It's outside the math area and not specific to this token.","treeHash":null,"usage":{"cachedInputTokens":207029,"inputTokens":10,"model":"claude-opus-5-5","outputTokens":2643,"runtime":"claude","turns":5,"wallClockMs":38495}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"a31e321b410aaa02","findings":[],"hash":"317afd11d31aeea2f73d0694a2c1d3cb347fa905e180d567ece78e115d474d47","nodeId":"4aedb832-3e88-4a10-ab2d-b1a8cef7ed26","outcome":"completed","summary":"The permissions audit (access control, trust gap and asymmetry) of `src/IdentityUnits.sol` found no defects. I wrote `.imd-findings.json` with `{\"findings\":[]}` and a coverage record. I changed no other files.\n\n**What I checked:**\n- **Source:** the token is a plain OpenZeppelin v5.0.2 `ERC20`. Its constructor only sets the name and symbol and mints `1_000_000_000 * 10**18` to `msg.sender`, which is the factory when the factory deploys it. There is no owner or role storage, no access-check modifier, no external mint, burn, pause, blacklist, freeze, seize, initialize or upgrade function, and no `receive`, `fallback` or external call.\n- **Vendored library:** I read the vendored `ERC20.sol` and `Context.sol` in full. `transfer`, `approve`, `transferFrom`, `_update`, `_spendAllowance` and `_approve` contain nothing beyond the standard upstream code. `decimals` returns 18 and there is no fee or exemption logic.\n- **Trust gap and asymmetry:** after construction the deployer or factory holds no power that other holders lack. It cannot move tokens without an allowance and cannot freeze anyone. The launch flows (factory to distributor, distributor claims, and pool seed and swaps) move exact amounts, as the protected harness requires.\n- **Tests:** `forge test` passes, 31 of 31, including the invariant test. I did not run the protected harness: it needs the network's Uniswap v4 launch code and environment variables, which aren't in this repo.\n\n**Coverage rows (all `holds`):**\n- **`IdentityUnits.approve(address,uint256)`:** only writes the caller's own allowance.\n- **`IdentityUnits.transfer(address,uint256)`:** only moves the caller's own balance, and the full amount arrives.\n- **`IdentityUnits.transferFrom(address,address,uint256)`:** the allowance is spent before the transfer, and no privileged caller can skip that.\n- **Invariants:** I also added rows for no privileged role after deployment, a supply that cannot grow, and no `DELEGATECALL`, `CALLCODE`, `SELFDESTRUCT` or callbacks.\n\n**Not reported as defects:**\n- **Approve race:** `approve` replaces an allowance rather than adding to it, which allows the usual transaction-ordering race. This is standard ERC-20 behaviour and the README documents it.\n- **Static-analysis leads:** aderyn flagged a \"large numeric literal\" at line 10. It is only a style note and the value is correct (10^27). Slither reported nothing at low impact or above.","treeHash":null,"usage":{"cachedInputTokens":216393,"inputTokens":12,"model":"claude-opus-5-5","outputTokens":3065,"runtime":"claude","turns":6,"wallClockMs":42256}},{"artifacts":[],"attempt":1,"bundleHash":"873a3dc75e9c13fedc13a9a1aa82576ad06947f3bbbf40ce8d4876431477e7d1","device":"fef70a876212b4f0","findings":[],"hash":"53a723e820318bf6d42d20661df02345f4b474a1bf68ee81d60e87cb20e55009","nodeId":"05e8148e-8924-4e4a-b245-01a0429f1211","outcome":"completed","summary":"Created [launch.json](/home/imd/.identitymd/work/f8b82360-e5dd-4fc4-83c4-d20351ccbd99/05e8148e-8924-4e4a-b245-01a0429f1211/launch.json) matching the accepted constructor, exact supply, requested pair, and verbatim economics.\n\nValidation passed: supplied schema, constructor ABI, `forge build`, and all 31 tests. Only `launch.json` is changed outside permitted scratch artifacts.","treeHash":"52336e94e6b1c7143a3c27a614d5b8d216bbe796","usage":{"cachedInputTokens":200192,"inputTokens":23527,"model":"gpt-6-astra","outputTokens":2945,"runtime":"codex","turns":3,"wallClockMs":99505}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"b0001bc8a5c908cd","findings":[],"hash":"90be4eeaf764b56ef7ad2743fbd9643301566d8b8e42721e5554d0406e149e97","nodeId":"c5957e37-5680-48a8-a0cb-50cf340a6fc0","outcome":"failed","summary":"fetch failed","treeHash":null,"usage":{"cachedInputTokens":0,"inputTokens":0,"model":null,"outputTokens":0,"runtime":"claude","turns":0,"wallClockMs":10565}},{"artifacts":[],"attempt":1,"bundleHash":"49965d4d701b7a4ca76b8e2eab6095be6949827156b8780f6560ce94fc144f81","device":"2a2028177fd413f2","findings":[],"hash":"9d7d739d2bcfeee42127206fdb517528306b90bc66a49e3e453a0056f698d84a","nodeId":"3a8c627e-7731-4311-b001-b35f8e4d4d4e","outcome":"completed","summary":"Implemented Identity Units (UI): 1 billion tokens, 18 decimals, minted once to the deployer, with fee-free transfers.\n\nAdded vendored dependencies, deployment documentation, and success, failure, fuzz, and invariant tests.\n\nPassed `forge build`, `forge test` (31 tests), and `forge fmt --check`, including offline checks with an empty environment.\n\nThe protected launch harness requires network infrastructure unavailable locally.","treeHash":"bf77beb3fe8c042949bceffe5fa8dececc904b09","usage":{"cachedInputTokens":365952,"inputTokens":58136,"model":"gpt-6-astra","outputTokens":12184,"runtime":"codex","turns":5,"wallClockMs":349830}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"b273d407784470b4","findings":[],"hash":"9d9a532faca95404604f06fc9f3d486de032b20b491140982de833424448e8b5","nodeId":"6f7d2f8e-28df-43b8-b199-835cd821309f","outcome":"completed","summary":"The findings file is in place and excluded by the harness's own git exclude list, scratch is removed, and the tree is otherwise untouched. Review is complete.\n\n**Result: no defects found.** The token is a 16-line wrapper over an unmodified OpenZeppelin v5.0.2 ERC20 that mints the whole supply to the constructor caller once and adds nothing else. `.imd-findings.json` holds an empty findings list and nine coverage rows, all `holds`.\n\n**What I checked against the Execution Trace, Periphery and First Principles guides**\n\n- **Execution flow of the three entry points.** Traced approve, transfer and transferFrom through the inherited internals. Zero-address sentinels revert on every path, including the zero-sender transferFrom that could otherwise look like a mint. Allowance is spent before the balance moves and the whole call reverts atomically if either step fails. The infinite-allowance residual and the approve race are standard ERC-20 behaviour and are documented in the README.\n- **Deployment and first caller.** A CREATE2 deployment from an etched factory address lands all of the supply on the factory. The supply constant computes to exactly 10^27, matching the brief and the manifest string in the README. Decimals report 18.\n- **Launch flows.** Factory to distributor, distributor to claimant, and an approve plus pull by a pool-style address followed by a push back all arrive whole. There is no fee, so no exemption list is needed or present.\n- **Admin surface.** All 22 selectors from the protected floor and the project tests, tried from the factory and a stranger, revert with no state change. No receive or fallback exists. A factory transferFrom against a holder without approval reverts.\n- **Bytecode.** Both creation and runtime code are free of DELEGATECALL, CALLCODE, SELFDESTRUCT and PUSH0. Runtime is well under the EIP-170 limit.\n- **Periphery.** All five vendored OpenZeppelin files hash-match the upstream v5.0.2 tag. No submodules exist. Context resolves msg.sender directly with no forwarder.\n- **Static-analysis lead.** The aderyn large-numeric-literal note is the supply expression and evaluates correctly. Not a defect.\n\n**Tooling that ran:** offline forge build with no warnings, the project's 31 tests including the invariant suite, forge fmt check, and my scratch harness of five tests. Slither and the Uniswap v4 protected harness could not be run here. The seed and swap through a real PoolManager remain the one floor check I could only reason about rather than execute, and a plain fee-free ERC20 gives the pool manager nothing to trip on.","treeHash":null,"usage":{"cachedInputTokens":729123,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":13296,"runtime":"claude","turns":26,"wallClockMs":187767}},{"artifacts":[],"attempt":2,"bundleHash":null,"device":"ce6eaff570c608ab","findings":[],"hash":"fa911193208fe86d259b6be33d0c96a7e705dccd7e9d2b1bed8e55cc75494c02","nodeId":"c5957e37-5680-48a8-a0cb-50cf340a6fc0","outcome":"completed","summary":"The review is complete. The findings file is valid JSON and no tracked files were changed.\n\n**Result: no defects found.** The four specialists and the independent tester each reported nothing, and I confirmed that against the code.\n\nWhat I checked:\n\n- **Source.** `src/IdentityUnits.sol` is a 16-line contract inheriting OpenZeppelin ERC20 with an argument-free constructor that mints a constant supply once to msg.sender. There are no owner, mint, burn, pause, blacklist or upgrade functions.\n- **Vendored library.** The five OpenZeppelin files in `lib/` hash identically to upstream v5.0.2, so the inherited approve, transfer and transferFrom are the unmodified reference implementations with no fee, exact amounts, and reverts on zero addresses or insufficient balance and allowance.\n- **Manifest agreement.** The constant equals 10^27, which matches launch.json totalSupply, constructorArgs is empty, and decimals returns 18.\n- **Launch floor.** A scratch test deployed the token through a factory-like contract and confirmed the whole supply lands on the deployer, metadata is correct, calls to mint, owner and burn selectors revert, and the runtime bytecode contains no DELEGATECALL, CALLCODE or SELFDESTRUCT. The scratch directory was removed afterwards.\n- **Existing suite.** All 46 tests pass, including the invariant suite with 32,768 handler calls and zero reverts.\n- **Static analysis.** The single aderyn low on the large numeric literal is a style note. The expression folds to exactly 10^27 and is not a defect.\n\n`.imd-findings.json` holds an empty findings list and a coverage record of seven rows. The three listed entry points are marked as holding, plus rows for the constructor mint, the no-supply-growth and no-admin-surface invariant, the forbidden-opcode scan, and the aderyn lead.","treeHash":null,"usage":{"cachedInputTokens":311518,"inputTokens":194,"model":"claude-fable-5-1","outputTokens":5566,"runtime":"claude","turns":13,"wallClockMs":132061}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"ce319efac2b76da0","findings":[],"hash":"ff308137ccf785a33b73c1a3ad9c4c3f7a225d79734f464f00f0b559669399e4","nodeId":"dfabff46-0300-466c-b98a-d0c906e50384","outcome":"completed","summary":"The review is complete. No defects were found in the Identity Units token, and `.imd-findings.json` holds an empty findings list with nine coverage rows.\n\n**What I audited.** The token in `src/IdentityUnits.sol` is an unmodified OpenZeppelin v5.0.2 ERC20 whose constructor mints the full supply to the caller. I checked it against the Economic Security, Invariant and Flow Gap guides, the x-ray token profile, and the protected launch harness.\n\n**What held, and how I verified it:**\n- **Supply and recipient.** The constant equals ten to the twenty-seventh power, and the constructor mints it all to the immediate caller, which is the factory under CREATE2. The existing factory test and my scratch probe both confirm the factory holds and forwards the whole supply.\n- **Conservation invariants.** Mint is reachable only from the constructor. There is no burn path, because transfers to the zero address revert and no burn selector exists in the ABI. The fuzz and invariant suites pass with 31 tests.\n- **Launch flows arrive whole.** Every transfer moves exactly the requested value and returns true. The supply is divisible by ten thousand, so the ten percent swarm share and every possible pool share split with no dust. The supply also fits within the signed 128-bit range Uniswap v4 uses for deltas.\n- **No external dependencies.** An opcode scan of the runtime found no call, static call, delegate call, create or self-destruct instructions. There is no receive or fallback, so nothing can be sandwiched, re-entered or starved.\n- **No privileged surface.** The ABI exposes only approve, transfer and transferFrom as state-changing functions. Every admin selector in the protected harness reverts without changing state.\n- **Dependency integrity.** All five vendored OpenZeppelin files diff byte-identical against the upstream v5.0.2 tag, so there is no hidden relayer or exempt path in the context helper.\n\n**Leads I ran down and dismissed.** The aderyn large-numeric-literal note is style only, and the literal evaluates to the correct supply. The standard ERC-20 approve ordering race is inherent to the specification, is documented in the README, and is not an implementation defect, so it is noted in the coverage row rather than reported.\n\nThe scratch test directory was removed after use, and the working tree has no other changes.","treeHash":null,"usage":{"cachedInputTokens":650123,"inputTokens":258,"model":"claude-fable-5-1","outputTokens":13279,"runtime":"claude","turns":28,"wallClockMs":212998}}],"verification":[{"checks":[{"durationMs":1528,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.40s\nCompiler run successful!\n","passed":true},{"durationMs":6773,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 30 tests for test/IdentityUnits.t.sol:IdentityUnitsTest\n[PASS] testFuzz_DelegatedTransfersRespectAllowance(uint256,uint256) (runs: 512, μ: 156220, ~: 158143)\nLogs:\n  Bound result 16729\n  Bound result 1061\n\n[PASS] testFuzz_OverAllowanceTransferRevertsWithoutChangingState(uint256,uint256) (runs: 512, μ: 116590, ~: 116855)\nLogs:\n  Bound result 876213037062343873037787028\n  Bound result 916657134337126225241744059\n\n[PASS] testFuzz_OverBalanceTransferRevertsWithoutChangingState(uint256) (runs: 512, μ: 65116, ~: 65420)\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129654104\n\n[PASS] testFuzz_TransfersConserveSupply(uint256,uint256) (runs: 512, μ: 155577, ~: 157408)\nLogs:\n  Bound result 870102056453014721634909545\n  Bound result 482922945697891076852526343\n\n[PASS] test_ApproveEmitsEventAndReplacesAllowance() (gas: 125166)\n[PASS] test_ApproveRejectsZeroSpender() (gas: 37744)\n[PASS] test_CommonMintAndAdminCallsAreUnavailable() (gas: 841579)\n[PASS] test_ConstructorEmitsMintEvent() (gas: 5632)\n[PASS] test_Create2FactoryReceivesAndCanForwardEntireSupply() (gas: 354637)\n[PASS] test_DelegatedSelfTransferPreservesBalanceButSpendsAllowance() (gas: 100683)\n[PASS] test_DeployerCannotSpendHolderBalanceWithoutApproval() (gas: 150752)\n[PASS] test_EmptyAccountCannotTransfer() (gas: 50993)\n[PASS] test_FullBalanceTransfer() (gas: 71331)\n[PASS] test_InfiniteAllowanceIsNotDecremented() (gas: 198628)\n[PASS] test_LaunchCustodyRoutesDeliverExactAmounts() (gas: 348195)\n[PASS] test_MetadataAndEntireSupplyBelongToDeployer() (gas: 93750)\n[PASS] test_RevocationPreventsSpending() (gas: 136639)\n[PASS] test_RuntimeHasNoDelegationOrDestructionOpcodes() (gas: 791514)\n[PASS] test_SelfTransferPreservesBalance() (gas: 51484)\n[PASS] test_TransferDeliversExactAmountAndEmitsEvent() (gas: 88958)\n[PASS] test_TransferDoesNotCallRecipient() (gas: 182949)\n[PASS] test_TransferFromCanSpendExactAllowance() (gas: 130619)\n[PASS] test_TransferFromDeliversExactAmountAndSpendsAllowance() (gas: 163293)\n[PASS] test_TransferFromInsufficientBalanceRollsBackAllowance() (gas: 176955)\n[PASS] test_TransferFromRejectsInsufficientAllowanceAtomically() (gas: 108897)\n[PASS] test_TransferFromZeroRecipientRollsBackAllowance() (gas: 111758)\n[PASS] test_TransferFromZeroSourceCannotMint() (gas: 78531)\n[PASS] test_TransferRejectsZeroRecipientIncludingZeroAmount() (gas: 72350)\n[PASS] test_ZeroTransferFromEmptyAccountEmitsEvent() (gas: 66488)\n[PASS] test_ZeroTransferFromNeedsNoAllowance() (gas: 67641)\nSuite result: ok. 30 passed; 0 failed; 0 skipped; finished in 40.58ms (150.56ms CPU time)\n\nRan 15 tests for test/IdentityUnits.edge.t.sol:IdentityUnitsEdgeTest\n[PASS] testFuzz_DelegatedOverBalanceFailurePreservesAllowance(uint256,uint256,uint256,bool) (runs: 1000, μ: 195948, ~: 193749)\nLogs:\n  Bound result 811650\n  Bound result 121192678690314576903938097082632\n\n[PASS] testFuzz_ReplacementApprovalIsIndependentOfOtherSpenders(uint256,uint256,uint256) (runs: 1000, μ: 268907, ~: 271140)\nLogs:\n  Bound result 1051\n\n[PASS] testFuzz_TransferRoundTripRestoresEntireSupply(uint256,address) (runs: 1000, μ: 146124, ~: 146095)\nLogs:\n  Bound result 18\n  Bound result 659918\n\n[PASS] test_CallerCannotBorrowTxOriginsAllowance() (gas: 130695)\n[PASS] test_EmptyHolderCanApproveFutureBalance() (gas: 220504)\n[PASS] test_ExhaustedAllowanceCannotBeSpentTwice() (gas: 163145)\n[PASS] test_InfiniteAllowanceCanBeReducedAndRevoked() (gas: 272207)\n[PASS] test_LargestFiniteAllowanceIsDecremented() (gas: 151323)\n[PASS] test_MaximumDelegatedTransferCannotExceedBalance() (gas: 122325)\n[PASS] test_MaximumTransferRevertsWithoutWrappingBalances() (gas: 61238)\n[PASS] test_OneWeiTransferRoundTripHasNoFee() (gas: 138379)\n[PASS] test_OwnerNeedsSelfApprovalForTransferFrom() (gas: 183519)\n[PASS] test_SelfTransfersStillRequireSufficientBalance() (gas: 204707)\n[PASS] test_ZeroApprovalStillRejectsZeroSpender() (gas: 48275)\n[PASS] test_ZeroDelegatedTransferEmitsEventWithoutSpendingAllowance() (gas: 127336)\nSuite result: ok. 15 passed; 0 failed; 0 skipped; finished in 43.21ms (114.10ms CPU time)\n\nRan 1 test for test/IdentityUnits.invariant.t.sol:IdentityUnitsInvariantTest\n[PASS] invariant_ExactBalancesAllowancesAndFixedSupply() (runs: 256, calls: 32768, reverts: 0)\n\n╭--------------+---------------------------+-------+---------+----------╮\n| Contract     | Selector                  | Calls | Reverts | Discards |\n+=======================================================================+\n| TokenHandler | approve                   | 3279  | 0       | 0        |\n|--------------+---------------------------+-------+---------+----------|\n| TokenHandler | approveZeroSpender        | 3346  | 0       | 0        |\n|--------------+---------------------------+-------+---------+----------|\n| TokenHandler | revokeAndAttemptSpend     | 3189  | 0       | 0        |\n|--------------+---------------------------+-------+---------+----------|\n| TokenHandler | roundTripEntireBalance    | 3280  | 0       | 0        |\n|--------------+---------------------------+-------+---------+----------|\n| TokenHandler | transfer                  | 3297  | 0       | 0        |\n|--------------+---------------------------+-------+---------+----------|\n| TokenHandler | transferFrom              | 3247  | 0       | 0        |\n|--------------+---------------------------+-------+---------+----------|\n| TokenHandler | transferFromOverAllowance | 3324  | 0       | 0        |\n|--------------+---------------------------+-------+---------+----------|\n| TokenHandler | transferFromOverBalance   | 3315  | 0       | 0        |\n|--------------+---------------------------+-------+---------+----------|\n| TokenHandler | transferOverBalance       | 3236  | 0       | 0        |\n|--------------+---------------------------+-------+---------+----------|\n| TokenHandler | transferToZero            | 3255  | 0       | 0        |\n╰--------------+---------------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 210907349249598196480341206051747546067633888237123777785699124\n  Bound result 115792089237316195423570985008687907853269984665640230706124250674582385836733\n  Bound result 115792089237316195423570985008687907853269984665640230706124250674579796306612\n  Bound result 1396\n  Bound result 7676839407136755624023273\n  Bound result 115792089237316195423570985008687907853269984665640230706124250674579796312737\n  Bound result 115792089237316195423570985008687907853269984665640230706124250674579796306641\n  Bound result 1000000000\n  Bound result 115792089237316195423570985008687907853269984665640230706124250674583537330492\n  Bound result 115792089237316195423570985008687907853269984665640230706124250674579796306856\n  Bound result 10409\n  Bound result 115792089237316195423570985008687907853269984665640230706124250674579796360193\n  Bound result 46614905173462290929665928099359379706395828919273146386837\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640230706124250674579796309428\n  Bound result 2657585764\n  Bound result 242\n  Bound result 115792089237316195423570985008687907853269984665640230706124250674579796306862\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640230706124250674579796311503\n  Bound result 126495113856997470719183031134414549751650962793068\n  Bound result 115792089237316195423570985008687907853269984665640230706124250674582453896574\n  Bound result 250\n  Bound result 10\n  Bound result 0\n  Bound result 786\n  Bound result 115792089237316195423570985008687907853269984665640230706124250674582453892115\n  Bound result 115792089237316195423570985008687907853269984665640230706124250674582453916407\n  Bound result 333333333333333330675747828\n  Bound result 6762\n  Bound result 14\n  Bound result 115792089237316195423570985008687907853269984665640230706124250674579796318564\n  Bound result 4383\n  Bound result 2412\n  Bound result 0\n  Bound result 4024\n  Bound result 244379425439952231723457758\n  Bound result 7924723810997351421462186\n  Bound result 115792089237316195423570985008687907853269984665640230706124250674579796318957\n  Bound result 15\n  Bound result 1000000000000000000000000000\n  Bound result 1180651939345124143\n  Bound result 302654433171297415488046774\n  Bound result 9391\n  Bound result 5975\n  Bound result 152044426907550170556415397209775587775697500955752194243\n  Bound result 659918\n  Bound result 127\n  Bound result 53591\n  Bound result 977\n  Bound result 4670\n  Bound result 115792089237316195423570985008687907853269984665639928051691079377167326348235\n  Bound result 115792089237316195423570985008687907853269984665639928051691079377166966484437\n  Bound result 409\n  Bound result 75959055026188643857009667017890\n  Bound result 799\n  Bound result 14831597\n  Bound result 100\n  Bound result 1488\n  Bound result 115792089237316195423570985008687907853269984665639928051691079377166966486731\n  Bound result 10091\n  Bound result 635987766504630746163153220\n  Bound result 860813932182497907766349000630624903872066056\n  Bound result 115792089237316195423570985008687907853269984665640230706124250674579795665829\n  Bound result 6173\n  Bound result 333333333333333330675747818\n  Bound result 9647\n  Bound result 10570\n  Bound result 8120\n  Bound result 115792089237316195423570985008687907853269984665640533360557421971992626781698\n  Bound result 6\n  Bound result 115792089237316195423570985008687907853269984665640533360557421971992626781697\n  Bound result 1\n  Bound result 115792089237316195423570985008687907853269984665639928051691079403193805287392\n  Bound result 115792089237316195423570985008687907853269984665640230706124250674579795661690\n  Bound result 115792089237316195423570985008687907853269984665640230706124250674579795657576\n  Bound result 0\n  Bound result 242\n  Bound result 115792089237316195423570985008687907853269984665640230706124250674579795711160\n  Bound result 5471\n  Bound result 112833291928270781753979927\n  Bound result 95\n  Bound result 9850\n  Bound result 115792089237316195423570985008687907853269984665640533360557421971992626787265\n  Bound result 127\n  Bound result 16440999947568523920176785\n  Bound result 6870\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 6.66s (6.66s CPU time)\n\nRan 3 test suites in 6.67s (6.75s CPU time): 46 tests passed, 0 failed, 0 skipped (46 total tests)\n","passed":true},{"durationMs":51,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"IdentityUnits.approve(address,uint256)\",\"IdentityUnits.transfer(address,uint256)\",\"IdentityUnits.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":11,\"README.md\":95,\"foundry.toml\":20,\"remappings.txt\":2,\"src/IdentityUnits.sol\":16,\"test/IdentityUnits.edge.t.sol\":235,\"test/IdentityUnits.invariant.t.sol\":219,\"test/IdentityUnits.t.sol\":389},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"039e329aaacc3afcc4ae5229ceef3b3d7ae6684b4279c92921a5574b23dc60de","verifiedTreeHash":"38edd82bd4fc1f512dbfd04261863097716822e7","verifierVersion":"0.1.0+e6140b7a"},{"checks":[{"durationMs":1018,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 924.01ms\nCompiler run successful!\n","passed":true},{"durationMs":1449,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 30 tests for test/IdentityUnits.t.sol:IdentityUnitsTest\n[PASS] testFuzz_DelegatedTransfersRespectAllowance(uint256,uint256) (runs: 512, μ: 156102, ~: 158149)\nLogs:\n  Bound result 734409964491411220830018788\n  Bound result 796461824022\n\n[PASS] testFuzz_OverAllowanceTransferRevertsWithoutChangingState(uint256,uint256) (runs: 512, μ: 116403, ~: 116867)\nLogs:\n  Bound result 315727107270736156000306202\n  Bound result 684272892729264640461517820\n\n[PASS] testFuzz_OverBalanceTransferRevertsWithoutChangingState(uint256) (runs: 512, μ: 65098, ~: 65420)\nLogs:\n  Bound result 951936783744101306411449122672894270942214333517586281349280772673\n\n[PASS] testFuzz_TransfersConserveSupply(uint256,uint256) (runs: 512, μ: 155385, ~: 157406)\nLogs:\n  Bound result 1\n  Bound result 0\n\n[PASS] test_ApproveEmitsEventAndReplacesAllowance() (gas: 125166)\n[PASS] test_ApproveRejectsZeroSpender() (gas: 37744)\n[PASS] test_CommonMintAndAdminCallsAreUnavailable() (gas: 841579)\n[PASS] test_ConstructorEmitsMintEvent() (gas: 5632)\n[PASS] test_Create2FactoryReceivesAndCanForwardEntireSupply() (gas: 354637)\n[PASS] test_DelegatedSelfTransferPreservesBalanceButSpendsAllowance() (gas: 100683)\n[PASS] test_DeployerCannotSpendHolderBalanceWithoutApproval() (gas: 150752)\n[PASS] test_EmptyAccountCannotTransfer() (gas: 50993)\n[PASS] test_FullBalanceTransfer() (gas: 71331)\n[PASS] test_InfiniteAllowanceIsNotDecremented() (gas: 198628)\n[PASS] test_LaunchCustodyRoutesDeliverExactAmounts() (gas: 348195)\n[PASS] test_MetadataAndEntireSupplyBelongToDeployer() (gas: 93750)\n[PASS] test_RevocationPreventsSpending() (gas: 136639)\n[PASS] test_RuntimeHasNoDelegationOrDestructionOpcodes() (gas: 791514)\n[PASS] test_SelfTransferPreservesBalance() (gas: 51484)\n[PASS] test_TransferDeliversExactAmountAndEmitsEvent() (gas: 88958)\n[PASS] test_TransferDoesNotCallRecipient() (gas: 182949)\n[PASS] test_TransferFromCanSpendExactAllowance() (gas: 130619)\n[PASS] test_TransferFromDeliversExactAmountAndSpendsAllowance() (gas: 163293)\n[PASS] test_TransferFromInsufficientBalanceRollsBackAllowance() (gas: 176955)\n[PASS] test_TransferFromRejectsInsufficientAllowanceAtomically() (gas: 108897)\n[PASS] test_TransferFromZeroRecipientRollsBackAllowance() (gas: 111758)\n[PASS] test_TransferFromZeroSourceCannotMint() (gas: 78531)\n[PASS] test_TransferRejectsZeroRecipientIncludingZeroAmount() (gas: 72350)\n[PASS] test_ZeroTransferFromEmptyAccountEmitsEvent() (gas: 66488)\n[PASS] test_ZeroTransferFromNeedsNoAllowance() (gas: 67641)\nSuite result: ok. 30 passed; 0 failed; 0 skipped; finished in 15.48ms (67.54ms CPU time)\n\nRan 1 test for test/IdentityUnits.invariant.t.sol:IdentityUnitsInvariantTest\n[PASS] invariant_ExactBalancesAllowancesAndFixedSupply() (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+--------------+-------+---------+----------╮\n| Contract     | Selector     | Calls | Reverts | Discards |\n+==========================================================+\n| TokenHandler | approve      | 2758  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenHandler | transfer     | 2734  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenHandler | transferFrom | 2700  | 0       | 0        |\n╰--------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 1609\n  Bound result 11\n  Bound result 2827\n  Bound result 24576\n  Bound result 179728640699196581584926741\n  Bound result 2864\n  Bound result 3\n  Bound result 1910\n  Bound result 2827\n  Bound result 194688741375793771753390085\n  Bound result 101\n  Bound result 418\n  Bound result 4\n  Bound result 2430412327\n  Bound result 101\n  Bound result 4452\n  Bound result 60\n  Bound result 18\n  Bound result 4451\n  Bound result 35369115415507612266018039\n  Bound result 4\n  Bound result 2835717306\n  Bound result 1\n  Bound result 3357\n  Bound result 213\n  Bound result 76\n  Bound result 55\n  Bound result 9\n  Bound result 19\n  Bound result 95\n  Bound result 255\n  Bound result 3\n  Bound result 2693\n  Bound result 460\n  Bound result 436318891068799646\n  Bound result 10\n  Bound result 24576\n  Bound result 1352\n  Bound result 57\n  Bound result 4\n  Bound result 420\n  Bound result 661\n  Bound result 302423291090764305473342759\n  Bound result 10\n  Bound result 0\n  Bound result 2110234842\n  Bound result 10\n  Bound result 12\n  Bound result 24301\n  Bound result 5\n  Bound result 194688741812112659986463844\n  Bound result 1\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.37s (1.37s CPU time)\n\nRan 2 test suites in 1.37s (1.39s CPU time): 31 tests passed, 0 failed, 0 skipped (31 total tests)\n","passed":true},{"durationMs":36,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"IdentityUnits.approve(address,uint256)\",\"IdentityUnits.transfer(address,uint256)\",\"IdentityUnits.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":11,\"README.md\":95,\"foundry.toml\":20,\"launch.json\":20,\"remappings.txt\":2,\"src/IdentityUnits.sol\":16,\"test/IdentityUnits.invariant.t.sol\":89,\"test/IdentityUnits.t.sol\":389},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"53a723e820318bf6d42d20661df02345f4b474a1bf68ee81d60e87cb20e55009","verifiedTreeHash":"52336e94e6b1c7143a3c27a614d5b8d216bbe796","verifierVersion":"0.1.0+e6140b7a"},{"checks":[{"durationMs":1355,"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":1806,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 30 tests for test/IdentityUnits.t.sol:IdentityUnitsTest\n[PASS] testFuzz_DelegatedTransfersRespectAllowance(uint256,uint256) (runs: 512, μ: 156476, ~: 158125)\nLogs:\n  Bound result 4696\n  Bound result 2827\n\n[PASS] testFuzz_OverAllowanceTransferRevertsWithoutChangingState(uint256,uint256) (runs: 512, μ: 116683, ~: 116855)\nLogs:\n  Bound result 68195679309958808039168140\n  Bound result 369301045436137471191967325\n\n[PASS] testFuzz_OverBalanceTransferRevertsWithoutChangingState(uint256) (runs: 512, μ: 65130, ~: 65420)\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129642472\n\n[PASS] testFuzz_TransfersConserveSupply(uint256,uint256) (runs: 512, μ: 155765, ~: 157406)\nLogs:\n  Bound result 507970728642387\n  Bound result 158710096467823\n\n[PASS] test_ApproveEmitsEventAndReplacesAllowance() (gas: 125166)\n[PASS] test_ApproveRejectsZeroSpender() (gas: 37744)\n[PASS] test_CommonMintAndAdminCallsAreUnavailable() (gas: 841579)\n[PASS] test_ConstructorEmitsMintEvent() (gas: 5632)\n[PASS] test_Create2FactoryReceivesAndCanForwardEntireSupply() (gas: 354637)\n[PASS] test_DelegatedSelfTransferPreservesBalanceButSpendsAllowance() (gas: 100683)\n[PASS] test_DeployerCannotSpendHolderBalanceWithoutApproval() (gas: 150752)\n[PASS] test_EmptyAccountCannotTransfer() (gas: 50993)\n[PASS] test_FullBalanceTransfer() (gas: 71331)\n[PASS] test_InfiniteAllowanceIsNotDecremented() (gas: 198628)\n[PASS] test_LaunchCustodyRoutesDeliverExactAmounts() (gas: 348195)\n[PASS] test_MetadataAndEntireSupplyBelongToDeployer() (gas: 93750)\n[PASS] test_RevocationPreventsSpending() (gas: 136639)\n[PASS] test_RuntimeHasNoDelegationOrDestructionOpcodes() (gas: 791514)\n[PASS] test_SelfTransferPreservesBalance() (gas: 51484)\n[PASS] test_TransferDeliversExactAmountAndEmitsEvent() (gas: 88958)\n[PASS] test_TransferDoesNotCallRecipient() (gas: 182949)\n[PASS] test_TransferFromCanSpendExactAllowance() (gas: 130619)\n[PASS] test_TransferFromDeliversExactAmountAndSpendsAllowance() (gas: 163293)\n[PASS] test_TransferFromInsufficientBalanceRollsBackAllowance() (gas: 176955)\n[PASS] test_TransferFromRejectsInsufficientAllowanceAtomically() (gas: 108897)\n[PASS] test_TransferFromZeroRecipientRollsBackAllowance() (gas: 111758)\n[PASS] test_TransferFromZeroSourceCannotMint() (gas: 78531)\n[PASS] test_TransferRejectsZeroRecipientIncludingZeroAmount() (gas: 72350)\n[PASS] test_ZeroTransferFromEmptyAccountEmitsEvent() (gas: 66488)\n[PASS] test_ZeroTransferFromNeedsNoAllowance() (gas: 67641)\nSuite result: ok. 30 passed; 0 failed; 0 skipped; finished in 21.86ms (82.58ms CPU time)\n\nRan 1 test for test/IdentityUnits.invariant.t.sol:IdentityUnitsInvariantTest\n[PASS] invariant_ExactBalancesAllowancesAndFixedSupply() (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+--------------+-------+---------+----------╮\n| Contract     | Selector     | Calls | Reverts | Discards |\n+==========================================================+\n| TokenHandler | approve      | 2804  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenHandler | transfer     | 2706  | 0       | 0        |\n|--------------+--------------+-------+---------+----------|\n| TokenHandler | transferFrom | 2682  | 0       | 0        |\n╰--------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 1\n  Bound result 1\n  Bound result 72241217556055\n  Bound result 0\n  Bound result 1000000000000000000000000000\n  Bound result 4099\n  Bound result 3918\n  Bound result 6\n  Bound result 33484763431719\n  Bound result 0\n  Bound result 42344444475301\n  Bound result 10\n  Bound result 0\n  Bound result 0\n  Bound result 1000000000000000000000000000\n  Bound result 51\n  Bound result 95549467657674561804541855\n  Bound result 261\n  Bound result 11\n  Bound result 96\n  Bound result 3124842407\n  Bound result 4727\n  Bound result 2473\n  Bound result 30\n  Bound result 2099\n  Bound result 20\n  Bound result 2827\n  Bound result 1\n  Bound result 5647\n  Bound result 1\n  Bound result 0\n  Bound result 24301\n  Bound result 0\n  Bound result 10\n  Bound result 147396850464461081784381638\n  Bound result 333333333333333333333333345\n  Bound result 1777091605102446832909012\n  Bound result 2143955340058929205769\n  Bound result 0\n  Bound result 24301\n  Bound result 12\n  Bound result 5821\n  Bound result 0\n  Bound result 1000000000\n  Bound result 430077223160402507854802356\n  Bound result 80\n  Bound result 0\n  Bound result 712\n  Bound result 24576\n  Bound result 828417\n  Bound result 4666\n  Bound result 1788\n  Bound result 3111190521\n  Bound result 140244185197487400106127824\n  Bound result 292490426820269\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.70s (1.70s CPU time)\n\nRan 2 test suites in 1.71s (1.73s CPU time): 31 tests passed, 0 failed, 0 skipped (31 total tests)\n","passed":true},{"durationMs":38,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"IdentityUnits.approve(address,uint256)\",\"IdentityUnits.transfer(address,uint256)\",\"IdentityUnits.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":11,\"README.md\":95,\"foundry.toml\":20,\"remappings.txt\":2,\"src/IdentityUnits.sol\":16,\"test/IdentityUnits.invariant.t.sol\":89,\"test/IdentityUnits.t.sol\":389},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":636,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":313,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/IdentityUnits.sol:10: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"9d7d739d2bcfeee42127206fdb517528306b90bc66a49e3e453a0056f698d84a","verifiedTreeHash":"bf77beb3fe8c042949bceffe5fa8dececc904b09","verifierVersion":"0.1.0+e6140b7a"}]}