{"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":"e9849423-9fc4-4544-87fd-ae81aafbfcfe","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"75a9e5abc164dd0b35cb1915c467974d82de758f2d5a1976d40643390c0ca46e","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":"4ff1661dede170812ec2d9939342d79efc349f38e240ba5951267f25fb2621a7","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":"a8a7793aa383bd6769e95abf5708b8f8690aa3e5da0daeab3f45ad0ddc337fa9","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":"a0619f40bb65de077e99e77d6909855347b71849ea3a9b62da31483f68dd2a9d","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":"926b659516c799eb271e2116d137169e636e216e3aa6adcd2dbc98d16ed3169a","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":"bc30b644b42ebf11d842628d161c8bf8426bf81654a7f6ee72aba79adb79982c","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":"ded1a7727e01bef0ae65689cc996417a72daa97432ff08956c50529909cc6857","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"968550907fb24a614d048754dc00b731567126d7ad2e3f1807a4555bf0f6681a","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: SuperIdentity (SUPER).\nToken name: SuperIdentity\nToken symbol: SUPER\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.","parentJobId":null,"planHash":"1bcc3088608717a86ae36045d02fbda57581bf48d49ba30bfdfeca7c8a875984","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"e9849423-9fc4-4544-87fd-ae81aafbfcfe","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-1599-superidentity"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51487","feedbackHash":"2c91279e8be611f28a3457c2cfe328cec5ce2c256299daa846f54398b2c4e7f7","nodeKey":"audit_economics","submissionHash":"75a9e5abc164dd0b35cb1915c467974d82de758f2d5a1976d40643390c0ca46e","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51476","feedbackHash":"a29d8c8a894be7fd127c8db7d01088b7afda37b4eec18eb9f6ef7278c6df5604","nodeKey":"audit_flow","submissionHash":"4ff1661dede170812ec2d9939342d79efc349f38e240ba5951267f25fb2621a7","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52572","feedbackHash":"7c101bd500739f51745a81ba0249ccf5732fb839b315ae2b779b081be39cf95e","nodeKey":"audit_judge","submissionHash":"a8a7793aa383bd6769e95abf5708b8f8690aa3e5da0daeab3f45ad0ddc337fa9","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51375","feedbackHash":"a212c3e4578a86d7960685c691ceb63cf164fb033359d74e79fe8681ad1bceb5","nodeKey":"audit_math","submissionHash":"a0619f40bb65de077e99e77d6909855347b71849ea3a9b62da31483f68dd2a9d","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51486","feedbackHash":"adbd093f7e87c811f27d30856aaa603319f80123a342ac753686f4fcdae3f645","nodeKey":"audit_permissions","submissionHash":"926b659516c799eb271e2116d137169e636e216e3aa6adcd2dbc98d16ed3169a","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51084","feedbackHash":"b563ed8b73942fbc1bdf42ebe470ddba29ba3d723265cbc5cf7937f28d99cfd8","nodeKey":"build_contract_project","submissionHash":"bc30b644b42ebf11d842628d161c8bf8426bf81654a7f6ee72aba79adb79982c","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52640","feedbackHash":"cb44c9b4e12a5bc6b4fc39637a83fb78ae52e77cae529c3b9a8e86d4512f4310","nodeKey":"manifest","submissionHash":"ded1a7727e01bef0ae65689cc996417a72daa97432ff08956c50529909cc6857","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51316","feedbackHash":"300c271b1c29313982bd00abbe049ad6da512c19be6e195698c4192d993916ab","nodeKey":"write_foundry_tests","submissionHash":"968550907fb24a614d048754dc00b731567126d7ad2e3f1807a4555bf0f6681a","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"058a0769ec37eb5f04ca7ee6db0b4c48b57b630de0d3f7a8d9066fbcd789ced0","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"e9049e5b12ba53ba","findings":[],"hash":"4ff1661dede170812ec2d9939342d79efc349f38e240ba5951267f25fb2621a7","nodeId":"51cd8a6a-0ac3-4b74-9eea-2e990fc970b3","outcome":"completed","summary":"I found no defects I could back up, so `.imd-findings.json` holds an empty findings list and one coverage row per entry point. No repository files were changed, and the existing suite passes (38 of 38 tests).\n\n**What I covered** (the Execution Trace, Periphery and First Principles guides, against `src/SuperIdentityToken.sol`, 182 lines with no imports):\n\n- **`transfer`** — holds. It checks the balance before the unchecked subtraction and refuses the zero address. A transfer to yourself leaves the balance unchanged, because the second write re-reads the slot. The addition can't overflow because all balances together always equal the fixed total.\n- **`transferFrom`** — holds. The allowance is checked and reduced before the balance moves, and an allowance of the maximum value is treated as unlimited. If any check fails, the whole call reverts with nothing changed.\n- **`approve`** — holds. It sets the allowance to exactly the amount given and refuses the zero address as spender.\n- **`permit`** — holds. Each signature is tied to the owner's current nonce, and the nonce is used up only if the call succeeds. It rejects high-s signatures using the correct cutoff (half the curve order), a failed signature recovery (address zero), and an expired deadline. The signing domain is recomputed if the chain id changes.\n- **Supply and access** — holds. The constructor mints 1,000,000,000 × 10^18 to `msg.sender` once, and nothing can create or destroy tokens afterwards. There is no owner, pause, blacklist or burn-from, and no DELEGATECALL, CALLCODE or SELFDESTRUCT. The constructor takes no arguments, so the manifest's `constructorArgs` should be an empty list.\n- **Launch flows** — holds. There is no fee or burn on transfer, so the factory's payout to the distributor, contributor claims and pool settlements all move exactly the stated amounts.\n\n**Static analysis leads, rejected:**\n- **Slither, timestamp:** the timestamp comparison is the normal permit deadline check.\n- **Aderyn, `ecrecover` malleability:** already handled by the high-s and zero-address checks.\n- **Aderyn, large literal:** the literal is the correct fixed supply.\n\n**Not covered:** I didn't run the protected launch test. It needs launch contracts and environment variables that aren't in this tree. I also didn't review a `launch.json`, because none exists yet.","treeHash":null,"usage":{"cachedInputTokens":153156,"inputTokens":8,"model":"claude-opus-5-5","outputTokens":2902,"runtime":"claude","turns":4,"wallClockMs":32202}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"9e51ef2afd7c2af8","findings":[{"citation":"resolved","description":"Economic Security / Invariant pass. The token implements the EIP-20 approve semantics exactly: the allowance is overwritten, never adjusted relatively, and the contract offers no increaseAllowance/decreaseAllowance. This is the well-known ERC-20 approve race, documented in EIP-20 itself, and OpenZeppelin v5 also ships without the relative helpers, so it is not a defect in this code. It is recorded so the judge sees it was checked and so holders are told: to lower a non-zero allowance safely, approve(spender, 0) first and wait for inclusion, or use permit with a fresh nonce. No code change is required to meet the brief.","line":165,"path":"src/SuperIdentityToken.sol","reproduction":"State: owner holds 1000 SUPER and has called approve(spender, 100e18). Owner broadcasts approve(spender, 50e18) intending to lower it. Spender sees the pending tx and submits transferFrom(owner, spender, 100e18) first; it succeeds (allowance 100 -> 0). Owner's approve(spender, 50e18) then mines (allowance 0 -> 50). Spender calls transferFrom(owner, spender, 50e18). Actual: spender received 150e18. Expected by the owner: at most 100e18 (the larger of the two approvals). Verified by test_approveRaceSpenderTakesOldPlusNew in test/scratch/Econ.t.sol (passes on this code, i.e. the sequence executes as described).","severity":"info","snippet":"        allowance[owner][spender] = amount;","title":"approve() sets the allowance absolutely, so a spender can front-run a re-approval and spend old plus new (inherent ERC-20 race; no increase/decreaseAllowance offered)"},{"citation":"resolved","description":"Flow Gap pass (periphery x first-principles seam). permit is permissionless by the EIP-2612 design and consumes nonces[owner] on success. A router or vault that calls token.permit(...) followed by token.transferFrom(...) in one transaction can be griefed: a watcher replays the same signature in an earlier transaction, the allowance is set as intended, and the integrator's own permit call then reverts with InvalidSignature because the nonce has moved. The allowance is in place and funds are never at risk; only the integrator's transaction fails, and only until it is resubmitted without the permit step or with permit wrapped in try/catch. This matches OpenZeppelin's documented guidance for ERC20Permit and needs no change to the token. Recorded so that application contracts built on SUPER (none in this tree) wrap permit defensively.","line":131,"path":"src/SuperIdentityToken.sol","reproduction":"State: owner (key 0xA11CE) holds 1000 SUPER, nonce 0. Owner signs Permit(owner, spender, 10e18, nonce 0, deadline now+1h). Tx A from an unrelated address `other`: permit(owner, spender, 10e18, deadline, v, r, s) -> succeeds, allowance(owner, spender) = 10e18, nonces(owner) = 1. Tx B from spender with the same (v, r, s): permit(...) -> reverts InvalidSignature(recovered, owner) because the struct now hashes nonce 1. If Tx B bundled permit + transferFrom, the whole bundle reverts. Actual: integrator tx fails. Expected by an integrator unaware of this: permit succeeds. Verified by test_permitFrontRunMakesSecondSubmissionRevert in test/scratch/Econ.t.sol.","severity":"info","snippet":"        bytes32 structHash = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline));","title":"permit() can be submitted by anyone, so a third party can front-run an integrator's permit-then-transferFrom bundle and make the integrator's permit call revert (inherent EIP-2612 behaviour)"}],"hash":"75a9e5abc164dd0b35cb1915c467974d82de758f2d5a1976d40643390c0ca46e","nodeId":"2620fdc6-6988-4321-bd6b-da5658e09b3c","outcome":"completed","summary":"The review is complete and the findings file is written. The tree is otherwise untouched: git status shows nothing, since .imd-findings.json and test/scratch/ are both gitignored.\n\n**Outcome: no defects in the economics, invariant or flow-gap area.** The token is a self-contained ERC-20 with EIP-2612 permit, no external calls, no fee, no privileged role, and a compile-time constant supply. Every failure mode the three guides list either has no surface here or was checked and holds.\n\n**What I verified**\n\n- **Supply conservation.** A stateful invariant run of 128,000 random transfer, approve, transferFrom and permit calls across six actors, including the token's own address, never moved the sum of balances off the fixed supply.\n- **Allowance semantics.** The infinite-allowance sentinel is exact, max minus one is decremented, zero-amount transferFrom by a stranger changes no state, and from-zero can never pass since the zero address can never hold an allowance.\n- **Permit economics.** Deadline is inclusive per the spec, nonce moves only on success, high-s and bad-v signatures recover to zero and revert, and a signature for the old chain id is refused after a fork while a fresh one is accepted.\n- **Launch flows.** Traced by reading, not executed, because v4-core is not vendored here. Transfers move exactly the stated amount and return true, so the distributor share, the pool seed via sync/settle, claims and swaps all arrive whole.\n- **Static-analysis leads.** The timestamp, ecrecover malleability and large-literal lines are all non-issues on inspection.\n\n**Recorded as informational, not defects**\n\n1. The approve race inherent to EIP-20, with a reproduction where a spender takes old plus new allowance. No relative-allowance helpers are offered, matching OpenZeppelin v5.\n2. Permit front-running: anyone can submit a signed permit first, making an integrator's bundled permit call revert. Funds are never at risk and the fix belongs to integrators.\n\nAll four listed entry points have coverage rows marked holds, plus four invariant rows. Nothing was left unreached.","treeHash":null,"usage":{"cachedInputTokens":648806,"inputTokens":322,"model":"claude-fable-5-1","outputTokens":15556,"runtime":"claude","turns":20,"wallClockMs":272186}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"0e78515c4d95885a","findings":[],"hash":"926b659516c799eb271e2116d137169e636e216e3aa6adcd2dbc98d16ed3169a","nodeId":"e2433136-a4a5-4c7f-bff2-6eca17fc4cc9","outcome":"completed","summary":"The review is complete. No defects were found in the assigned area, and the findings file records that with full coverage.\n\n**Outcome.** The findings file at the repository root holds an empty findings list and eight coverage rows. All four verifier entry points are marked `holds`. No tracked file was changed. The scratch tests live only under the ignored scratch directory.\n\n**What I checked, against the Access Control, Trust Gap and Asymmetry guides:**\n\n- **Permission model.** The compiled ABI exposes only `approve`, `permit`, `transfer` and `transferFrom` as state-changing, with no fallback, receive, owner, minter, pauser, blacklist, initializer or upgrade path. Every write is scoped to the caller or to a signer, so there is no privileged actor and no guard gap.\n- **Constructor.** Takes no arguments, makes no external calls, and mints the constant supply once to the deployer. On the launch that is the factory, which the protected floor test requires.\n- **Asymmetry.** `transfer` and `transferFrom` share one internal path. `approve` and `permit` share one internal path. Allowance spending is the only other writer of the allowance slot and only decrements what the owner granted. Storage lifecycle is clean: every variable is both written and read.\n- **Trust gap.** No economic formula, price, fee or recipient exists, so there is no seam between access and economics to exploit.\n- **Edge probes.** I ran eleven scratch tests covering zero owner and spender in `permit`, invalid `v`, the exact `s` boundary at n/2, deadline equality, replay after a chain-id change, `transferFrom` from the zero address, self-pull without allowance, infinite versus finite allowance accounting, and whole-balance self-transfer. All behaved as intended and none burned a nonce on a reverting path.\n\n**Static analysis leads.** The Slither timestamp line is the standard EIP-2612 deadline comparison. The Aderyn ecrecover line is mitigated by the low-s check and nonces. The large literal is the correct secp256k1 n/2 constant. None is a defect.\n\n**Not reached.** Nothing within the assigned area was left unexamined. The deploy script was read and is reference-only; it broadcasts from whatever signer `forge script` is given, which is outside the launch path.","treeHash":null,"usage":{"cachedInputTokens":605013,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":11289,"runtime":"claude","turns":20,"wallClockMs":164150}},{"artifacts":[],"attempt":1,"bundleHash":"c2fd30c6b644778206db56a6882379f3fe6a94b5692a32e4856e9e689061cb44","device":"6b0a28df3d585600","findings":[],"hash":"968550907fb24a614d048754dc00b731567126d7ad2e3f1807a4555bf0f6681a","nodeId":"81ce4c1b-2ab7-4e3a-b316-1aa093c5594c","outcome":"completed","summary":"Done. The full suite is green: 88 tests across 4 suites, including 10 invariants over 14,400 randomized calls with `fail-on-revert` enabled.\n\n**What I added** (two new files under `test/`, the existing suite left untouched):\n\n- `test/SuperIdentityToken.invariant.t.sol`: a handler with six keyed actors holding the whole supply, driving transfer, transferAll, self-transfer, approve, transferFrom, permit, time warps, unknown selectors and ether sends in random order with bounded inputs. Each failure-path handler asserts the exact custom error and that nothing moved. Invariants check fixed supply, conservation across actors with nothing leaking to the handler, zero address or token, a ledger model of every balance, every allowance and every nonce, the EIP-712 domain separator against the live chain id, immutable metadata, and no ether held. A second suite lets the chain id change mid-sequence.\n- `test/SuperIdentityToken.edges.t.sol`: 48 unit and fuzz tests for edges the base suite skipped. CREATE2 deployment lands the supply on the deployer, stray constructor data is ignored, zero-amount transfers emit events, one wei, whole supply, max uint, self-transfer above balance, exact-allowance spend emits Approval(0), infinite allowance emits no Approval, max-minus-one is finite, permit at the exact deadline, one second past it, max deadline, zero value, zero spender, zero owner, invalid v, zero signature, high-s boundary one above n/2, future nonce, cross-chain-id rejection, and non-payable calls refusing ether.\n\n**Harness grounding.** I ran the invariant file against two deliberately broken copies of the token in scratch. A 1% burn on transfer broke conservation and the self-transfer check within 23 calls. Removing the infinite-allowance short-circuit broke the allowance model. Both were caught, so the properties are not vacuous.\n\n**Defects found: none.** I read the token adversarially before writing tests and found nothing to report, so no findings file was written. The unchecked arithmetic is bounded by the fixed supply, nonces roll back on failed permits, high-s signatures are refused, and there is no fallback, payable path or privileged surface.\n\nBuild emits only forge lint style warnings about reading block.timestamp before a warp, the same pattern the existing accepted test file uses. The new files are formatted and uncommitted in the working tree.","treeHash":"0b3f037317aa6c27409a0dfec473622a52c3d32c","usage":{"cachedInputTokens":1100648,"inputTokens":418,"model":"claude-fable-5-1","outputTokens":41178,"runtime":"claude","turns":27,"wallClockMs":656683}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"93c37f17670e4d98","findings":[{"citation":"resolved","description":"Not a math defect; an integration boundary note outside the assigned area, recorded because it is concrete. The permit digest binds the EIP-712 domain {name:\"SuperIdentity\", version:\"1\", chainId, verifyingContract}, but the contract exposes neither EIP-5267 eip712Domain() nor a version() getter. Tooling that builds the typed-data domain from chain reads (wallets, Permit2-style helpers, ethers/viem permit utilities that call eip712Domain() first) gets a revert and must hard-code version \"1\"; a tool that guesses a different version string produces a signature that permit() rejects with InvalidSignature. Nothing can be lost: a wrongly-built signature simply does not grant an allowance. Fix (optional, preserves behaviour): add `function eip712Domain() external view returns (bytes1 fields, string memory name_, string memory version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] memory extensions)` returning (0x0f, \"SuperIdentity\", \"1\", block.chainid, address(this), 0, []), or at minimum `function version() external pure returns (string memory) { return \"1\"; }`.","line":67,"path":"src/SuperIdentityToken.sol","reproduction":"Deploy SuperIdentityToken. address(token).call(abi.encodeWithSignature(\"eip712Domain()\")) returns success=false; address(token).call(abi.encodeWithSignature(\"version()\")) returns success=false. Expected by EIP-5267-aware integrators: a tuple whose version field is \"1\". Actual: revert, so the version must be known out-of-band. A permit signed over a domain with version \"2\" (otherwise identical) is rejected: permit(owner, spender, 1, deadline, v, r, s) reverts InvalidSignature(recovered, owner) with recovered != owner.","severity":"info","snippet":"    bytes32 private constant VERSION_HASH = keccak256(bytes(\"1\"));","title":"EIP-712 domain version is hashed into the separator but not discoverable on-chain (no version() or eip712Domain())"}],"hash":"a0619f40bb65de077e99e77d6909855347b71849ea3a9b62da31483f68dd2a9d","nodeId":"b90cfba5-f8fa-4371-a602-4fcf707e9755","outcome":"completed","summary":"The review is complete. The working tree holds only the findings file, which is untracked and expected.\n\n**Result: no math, boundary or numerical-gap defect in SuperIdentityToken.** The findings file at `.imd-findings.json` carries one info-level note and seven coverage rows, all `holds`.\n\n**What I checked against the three guides**\n\n- **Math Precision.** The contract has no division, no downcast, no scale conversion and no fee formula. The only arithmetic is the supply constant, two unchecked subtractions each preceded by the matching bound check, and one unchecked addition bounded by the fixed supply. The Approval value emitted after a finite spend is computed outside the unchecked block and is safe for the same reason.\n- **Boundary.** There are no external call sites, payable functions, bytes inputs or token-address parameters, so the guide's call-site and decode questions have no targets. I exercised the sentinels that do exist: zero addresses revert everywhere, the max-uint allowance is infinite while max-minus-one stays finite, and infinite allowance is still bounded by balance.\n- **Numerical Gap.** The supply-conservation invariant held under a five-actor Foundry invariant run mixing transfer, approve and transferFrom with the token's own address as a sink. Self-transfer at full balance preserves the balance because the addition re-reads storage after the subtraction write. Launch shares of 10% and 80% of 1e27 divide exactly, so no dust can arise in the factory flows.\n- **Permit edges.** Deadline equal to the timestamp is accepted and one second later is rejected. The s-bound literal equals secp256k1 n/2 exactly, so the flipped high-s encoding reverts and the low-s one passes. v outside 27 and 28, and zero r and s, recover to the zero address and revert. A failed permit rolls back the nonce increment. Max value and max deadline work.\n\n**Static-analysis leads.** The Slither timestamp line is the intended deadline comparison. The Aderyn ecrecover line is mitigated by the s-bound check, and the large literal is that bound, verified numerically. None became a finding.\n\n**The one info note.** The permit domain hashes version \"1\" but the contract exposes neither `eip712Domain()` nor a version getter, so integrators must know the version out of band. Nothing can be lost; a mis-built signature is simply rejected. It sits outside the assigned area and is recorded only because it is concrete.\n\n**Coverage.** All four listed entry points are `holds` with reasons, plus three invariant rows. Nothing was left unreached.","treeHash":null,"usage":{"cachedInputTokens":559544,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":13450,"runtime":"claude","turns":18,"wallClockMs":199799}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"373b43d9e5572ce8","findings":[],"hash":"a8a7793aa383bd6769e95abf5708b8f8690aa3e5da0daeab3f45ad0ddc337fa9","nodeId":"e9f298c0-51cf-4d98-95cf-bacc8b5593ce","outcome":"completed","summary":"The review is done. I found no defects and dropped all three specialist findings. `.imd-findings.json` contains an empty findings list and a coverage row for each entry point; the JSON parses and no tracked files changed.\n\n**What I checked**\n- The local suite passed: 88 tests in 4 suites, 0 failed. I couldn't run the protected launch test here because the files it imports (`src/LaunchLiquidity.sol`, `PoolInitializationGuard`, `HookFlags`) aren't in this tree. The token itself is a plain ERC-20 with no transfer fee or hooks, so the launch flows (factory → distributor → claimant, the pool seed, swaps) should move exact amounts.\n- **Size:** runtime is 2,594 bytes and creation code 2,945 bytes, well within both limits.\n- **Manifest:** `launch.json` matches the code. The constructor takes no arguments, so `constructorArgs: []` is right. Supply is `1000000000000000000000000000`, decimals 18, and the contract name is valid.\n- **Supply and privileges:** the constructor mints once to `msg.sender` and `totalSupply()` is a constant. There is no owner, mint, pause, blacklist, burn, `DELEGATECALL` or `SELFDESTRUCT`.\n\n**Coverage (all `holds`)**\n- **`approve`:** sets the allowance exactly and rejects a zero spender.\n- **`permit`:** rejects expired deadlines, and the nonce is consumed only on success. The domain separator is recomputed if the chain ID changes. It rejects high-s (malleable) signatures, and a signature that recovers to zero or to anyone but the owner.\n- **`transfer`:** moves the exact amount, reverts on a short balance or zero receiver, and a transfer to yourself leaves the balance unchanged.\n- **`transferFrom`:** spends the allowance before moving funds and leaves an unlimited allowance untouched.\n\n**Specialist findings I dropped**\n1. **`approve` front-run race (economics):** this is how EIP-20 is specified; OpenZeppelin v5 behaves the same. It's not a defect in this code.\n2. **`permit` front-run griefing (economics):** EIP-2612 lets anyone submit a signed permit. The allowance still gets set, nothing can be lost, and there are no application contracts in this tree that could be affected.\n3. **No `eip712Domain()` or `version()` getter (math):** this is accurate, but neither EIP-2612 nor the launch requires them. A wrong signature just fails and nothing can be lost. Adding the getter is an optional improvement, not a defect.\n\n**Static-analysis leads**\n- The slither timestamp warning is the normal permit deadline check.\n- The aderyn `ecrecover` warning is handled: the code rejects high-s signatures and a zero recovered address.\n- The large-number warning is the supply constant, `1_000_000_000 * 10 ** 18`, which is correct.","treeHash":null,"usage":{"cachedInputTokens":245188,"inputTokens":12,"model":"claude-opus-5-5","outputTokens":3922,"runtime":"claude","turns":6,"wallClockMs":102872}},{"artifacts":[],"attempt":1,"bundleHash":"ba21ba35ee76c8e7ff6c8614a3f834c1a42b2aad768b76abc1938c44263dc64d","device":"7c0191a32541eb74","findings":[],"hash":"bc30b644b42ebf11d842628d161c8bf8426bf81654a7f6ee72aba79adb79982c","nodeId":"a173dbbc-429b-4d66-b846-3f6a0b0f4da5","outcome":"completed","summary":"The SuperIdentity token is implemented, verified and committed on main.\n\n**What was built**\n\n- `src/SuperIdentityToken.sol`: a self-contained ERC-20 named SuperIdentity, symbol SUPER, 18 decimals. The constructor takes no arguments and mints the whole supply of 1,000,000,000 tokens to the deployer once. It also implements EIP-2612 permit with replay and malleability protection.\n- The contract has no owner, mint, burn, pause, blacklist, proxy or external call, so the supply can never grow and no privileged hand can move a holder's balance. Transfers move exact amounts, so the factory, PoolManager and distributor flows need no exemptions.\n- `foundry.toml` pins solc 0.8.26, sets `bytecode_hash = \"none\"`, disables ffi and grants no filesystem permissions. forge-std 1.9.7 is vendored under lib/ as ordinary files with no git metadata.\n- `script/Deploy.s.sol` exposes a unit-tested deploy function; its run entry point reads no environment variables.\n- `README.md` documents assumptions, the manifest values the launch step will need, deployment parameters and operational responsibilities.\n\n**Checks**\n\n| Check | Result |\n|---|---|\n| forge build | passes |\n| forge test | 38 passed, 0 failed |\n| forge fmt --check | passes |\n\nTests cover success and failure paths for transfer, approve, transferFrom, infinite allowance, zero-address rejection, permit (expiry, wrong signer, replay, tampering, high-s), the launch payout flows arriving whole, the same admin and freeze call lists the protected harness probes, bytecode opcode and link-placeholder scans, and fuzzed supply conservation.\n\n**Open items for the launch, not this repository**\n\n- Slither and Mythril were not available on this machine and were not run.\n- Explorer verification and the launch manifest belong to the IdentityMD deployer and manifest steps.","treeHash":"4738fdfd2d57689e2c853881228a5f59d366ebfe","usage":{"cachedInputTokens":413676,"inputTokens":258,"model":"claude-fable-5-1","outputTokens":20964,"runtime":"claude","turns":21,"wallClockMs":275913}},{"artifacts":[],"attempt":1,"bundleHash":"b01f53cebb998f99f63a063b4c4329a29c4709d9bda7ef2c9e84169e8def5df4","device":"483b1030f62fc40e","findings":[],"hash":"ded1a7727e01bef0ae65689cc996417a72daa97432ff08956c50529909cc6857","nodeId":"fbf3e637-a3b8-483a-96cb-0284cd225598","outcome":"completed","summary":"Created [launch.json](/home/imd1/.identitymd/work/e9849423-9fc4-4544-87fd-ae81aafbfcfe/fbf3e637-a3b8-483a-96cb-0284cd225598/launch.json) matching the accepted token, constructor, supply, pool and exact economics.\n\nValidation passed: manifest checks, `forge build`, and all 38 tests from `forge test`. Only `launch.json` is changed.","treeHash":"0b0a86d932b18302b478c56da82ffcc4c1df03de","usage":{"cachedInputTokens":190208,"inputTokens":25663,"model":"gpt-6-astra","outputTokens":2280,"runtime":"codex","turns":3,"wallClockMs":96239}}],"verification":[{"checks":[{"durationMs":1879,"exitCode":0,"name":"build","output":"Compiling 25 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.78s\nCompiler run successful!\nwarning[block-timestamp]: usage of `block.timestamp` in a comparison may be manipulated by validators\n    ╭▸ src/SuperIdentityToken.sol:129:13\n    │\n129 │         if (block.timestamp > deadline) revert PermitExpired(deadline, block.timestamp);\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/block-timestamp\n\nwarning[environment-read-across-mutation]: `block.timestamp` may be reused across `vm.warp`\n    ╭▸ test/SuperIdentityToken.edges.t.sol:320:28\n    │\n320 │         uint256 deadline = block.timestamp + 10;\n    │                            ━━━━━━━━━━━━━━━\n321 │         (uint8 v, bytes32 r, bytes32 s) = _sign(ownerKey, owner, bob, 1, 0, deadline);\n322 │         vm.warp(deadline + 1);\n    │         ───────────────────── `vm.warp` changes this environment here\n    │\n    ├ help: capture it with `vm.getBlockTimestamp()` instead\n    ╰ help: https://getfoundry.sh/forge/linting/environment-read-across-mutation\n\nwarning[environment-read-across-mutation]: `block.chainid` may be reused across `vm.chainId`\n    ╭▸ test/SuperIdentityToken.edges.t.sol:444:28\n    │\n444 │         uint256 original = block.chainid;\n    │                            ━━━━━━━━━━━━━\n445 │         vm.chainId(4663);\n    │         ──────────────── `vm.chainId` changes this environment here\n    │\n    ├ help: capture it with `vm.getChainId()` instead\n    ╰ help: https://getfoundry.sh/forge/linting/environment-read-across-mutation\n\nwarning[environment-read-across-mutation]: `block.timestamp` may be reused across `vm.warp`\n    ╭▸ test/SuperIdentityToken.edges.t.sol:589:28\n    │\n589 │         uint256 deadline = block.timestamp + ttl;\n    │                            ━━━━━━━━━━━━━━━\n590 │         (uint8 v, bytes32 r, bytes32 s) = _sign(ownerKey, owner, bob, 1, 0, deadline);\n591 │         vm.warp(deadline + late);\n    │         ──────────────────────── `vm.warp` changes this environment here\n    │\n    ├ help: capture it with `vm.getBlockTimestamp()` instead\n    ╰ help: https://getfoundry.sh/forge/linting/environment-read-across-mutation\n\nwarning[environment-read-across-mutation]: `block.timestamp` may be reused across `vm.warp`\n    ╭▸ test/SuperIdentityToken.t.sol:304:28\n    │\n304 │         uint256 deadline = block.timestamp;\n    │                            ━━━━━━━━━━━━━━━\n305 │         (uint8 v, bytes32 r, bytes32 s) = _sign(signerKey, signer, bob, 1 ether, 0, deadline);\n306 │         vm.warp(deadline + 1);\n    │         ───────────────────── `vm.warp` changes this environment here\n    │\n    ├ help: capture it with `vm.getBlockTimestamp()` instead\n    ╰ help: https://getfoundry.sh/forge/linting/environment-read-across-mutation\n\n","passed":true},{"durationMs":11136,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 38 tests for test/SuperIdentityToken.t.sol:SuperIdentityTokenTest\n[PASS] testFuzz_transferAboveBalanceReverts(uint256,uint256) (runs: 256, μ: 97093, ~: 97507)\nLogs:\n  Bound result 337176020383855900565995609\n  Bound result 662823979618802954951212813\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 256, μ: 99450, ~: 99680)\nLogs:\n  Bound result 197093679747120184\n\n[PASS] testFuzz_transferFromRespectsAllowance(uint256,uint256) (runs: 256, μ: 117517, ~: 95669)\nLogs:\n  Bound result 25333472416126039103263\n  Bound result 425855162595242618949241855\n\n[PASS] test_approveOverwritesRatherThanAdds() (gas: 92083)\n[PASS] test_approveSetsAllowanceAndEmits() (gas: 67566)\n[PASS] test_approveZeroAddressSpenderReverts() (gas: 30401)\n[PASS] test_constructorMintsWholeSupplyToDeployerOnce() (gas: 32989)\n[PASS] test_creationCodeHasNoLinkPlaceholders() (gas: 2954849)\n[PASS] test_deployScriptMintsToCaller() (gas: 1458381)\n[PASS] test_domainSeparatorFollowsChainIdOnFork() (gas: 17454)\n[PASS] test_domainSeparatorMatchesEip712() (gas: 8979)\n[PASS] test_infiniteAllowanceIsNotDecremented() (gas: 187808)\n[PASS] test_launchFlowsMoveExactAmounts() (gas: 546164)\n[PASS] test_metadata() (gas: 26750)\n[PASS] test_noAdminCallIncreasesSupplyOrGrantsTokens() (gas: 668277)\n[PASS] test_noEtherAccepted() (gas: 39732)\n[PASS] test_noPrivilegedCallMovesOrFreezesAHolder() (gas: 446885)\n[PASS] test_permitCannotBeReplayed() (gas: 140167)\n[PASS] test_permitRejectsMalleableSignature() (gas: 73153)\n[PASS] test_permitRevertsOnTamperedValue() (gas: 75816)\n[PASS] test_permitRevertsOnWrongSigner() (gas: 81205)\n[PASS] test_permitRevertsWhenExpired() (gas: 50423)\n[PASS] test_permitSetsAllowanceAndBumpsNonce() (gas: 123634)\n[PASS] test_permitThenTransferFrom() (gas: 223269)\n[PASS] test_runtimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 3161470)\n[PASS] test_supplyIsOneBillionWithEighteenDecimals() (gas: 24951)\n[PASS] test_transferFromEmptyAccountReverts() (gas: 37675)\n[PASS] test_transferFromRevertsBeyondAllowance() (gas: 140153)\n[PASS] test_transferFromRevertsWhenOwnerBalanceTooLow() (gas: 147445)\n[PASS] test_transferFromSpendsAllowance() (gas: 212328)\n[PASS] test_transferFromToZeroAddressReverts() (gas: 89871)\n[PASS] test_transferFromWithoutApprovalReverts() (gas: 90539)\n[PASS] test_transferMovesBalanceAndEmits() (gas: 93140)\n[PASS] test_transferOfZeroSucceeds() (gas: 45089)\n[PASS] test_transferRevertsOnInsufficientBalance() (gas: 90041)\n[PASS] test_transferToSelfKeepsBalance() (gas: 95734)\n[PASS] test_transferToZeroAddressReverts() (gas: 30481)\n[PASS] test_whenTheFactoryDeploysTheFactoryHoldsTheSupply() (gas: 286574)\nSuite result: ok. 38 passed; 0 failed; 0 skipped; finished in 68.02ms (152.67ms CPU time)\n\nRan 48 tests for test/SuperIdentityToken.edges.t.sol:SuperIdentityTokenEdgesTest\n[PASS] testFuzz_approveIsIdempotentAndOverwrites(address,uint256,uint256) (runs: 1000, μ: 132926, ~: 133209)\nLogs:\n  Bound result 44231403038964112662015746420768357532469646827\n\n[PASS] testFuzz_permitExpiredByAnyMarginReverts(uint256,uint256) (runs: 1000, μ: 64134, ~: 64017)\nLogs:\n  Bound result 86400000\n  Bound result 83807730\n\n[PASS] testFuzz_permitFromAnyKeySetsAllowanceForThatSignerOnly(uint256,address,uint256,uint256) (runs: 1000, μ: 183725, ~: 184079)\nLogs:\n  Bound result 3\n  Bound result 52529462764780153870800041478518661916975409513\n  Bound result 44383303\n\n[PASS] testFuzz_randomSignatureNeverGrantsAllowance(bytes32,bytes32,uint8) (runs: 1000, μ: 80768, ~: 81464)\n[PASS] testFuzz_roundTripTransferRestoresBalances(address,uint256) (runs: 1000, μ: 132504, ~: 132475)\nLogs:\n  Bound result 1077320955957104539294326242035728471887758556602\n  Bound result 938129914380201243054282899\n\n[PASS] testFuzz_splitTransfersEqualOneTransfer(uint256,uint256) (runs: 1000, μ: 119195, ~: 119991)\nLogs:\n  Bound result 600553190000421414906542396\n  Bound result 600553190000421414906542395\n\n[PASS] testFuzz_transferFromNeverExceedsMinOfBalanceAndAllowance(uint256,uint256,uint256) (runs: 1000, μ: 169827, ~: 151583)\nLogs:\n  Bound result 1010\n  Bound result 229189199138137786651359906860759877423\n  Bound result 1945644526148568178880543859827596\n\n[PASS] test_approveAboveSupplyIsAllowedButSpendingIsBoundedByBalance() (gas: 211540)\n[PASS] test_approveSelfAndTransferFromSelf() (gas: 227838)\n[PASS] test_approveZeroEmitsAndClears() (gas: 92713)\n[PASS] test_callerCannotSpendSomebodyElsesBalanceViaTransfer() (gas: 98862)\n[PASS] test_create2DeployerReceivesTheSupplyNotItsCaller() (gas: 855536)\n[PASS] test_creationCodeTakesNoConstructorArguments() (gas: 700786)\n[PASS] test_domainSeparatorReturnsToCachedValueWhenChainIdReturns() (gas: 25898)\n[PASS] test_failedTransferFromLeavesAllowanceIntact() (gas: 166573)\n[PASS] test_infiniteAllowanceDoesNotEmitApprovalOnSpend() (gas: 119930)\n[PASS] test_maxMinusOneAllowanceIsFiniteAndDecrements() (gas: 127626)\n[PASS] test_nonPayableFunctionsRefuseEther() (gas: 134949)\n[PASS] test_permitAtExactDeadlineSucceeds() (gas: 105941)\n[PASS] test_permitDoesNotMoveTokens() (gas: 170290)\n[PASS] test_permitForZeroOwnerReverts() (gas: 127368)\n[PASS] test_permitOfZeroValueClearsAllowance() (gas: 173176)\n[PASS] test_permitOneSecondPastDeadlineReverts() (gas: 56818)\n[PASS] test_permitSignedOnAnotherChainIdIsRejectedHere() (gas: 174443)\n[PASS] test_permitSignedWithFutureNonceFailsUntilItsTurn() (gas: 226730)\n[PASS] test_permitToZeroSpenderRevertsAndKeepsNonce() (gas: 77921)\n[PASS] test_permitWithInvalidVReverts() (gas: 239304)\n[PASS] test_permitWithMaxDeadlineNeverExpires() (gas: 106697)\n[PASS] test_permitWithMaxValueGrantsInfiniteAllowance() (gas: 211277)\n[PASS] test_permitWithSAboveHalfOrderRevertsEvenIfItWouldRecover() (gas: 138589)\n[PASS] test_permitWithZeroSignatureReverts() (gas: 62658)\n[PASS] test_permitWrongSpenderWrongDeadlineWrongOwnerAllRevert() (gas: 307055)\n[PASS] test_sameTransferTwiceMovesTwice() (gas: 112416)\n[PASS] test_selfTransferAboveBalanceReverts() (gas: 94842)\n[PASS] test_selfTransferOfWholeBalanceKeepsIt() (gas: 45814)\n[PASS] test_tokenContractAsCallerHasNoSpecialPower() (gas: 64507)\n[PASS] test_transferFromAllowanceIsPerSpender() (gas: 95015)\n[PASS] test_transferFromExactAllowanceLeavesZeroAndEmitsApprovalZero() (gas: 163174)\n[PASS] test_transferFromFromZeroAddressReverts() (gas: 38118)\n[PASS] test_transferFromOfZeroWithNoAllowanceSucceeds() (gas: 57857)\n[PASS] test_transferOfMaxUintRevertsWithoutWrapping() (gas: 72125)\n[PASS] test_transferOfOneWei() (gas: 115430)\n[PASS] test_transferOfWholeSupplyAndNothingMore() (gas: 167432)\n[PASS] test_transferOfZeroEmitsTransferEvent() (gas: 78726)\n[PASS] test_transferToTheTokenItselfIsAllowedAndUnrecoverable() (gas: 123739)\n[PASS] test_twoDeploymentsAreIndependent() (gas: 46562)\n[PASS] test_unknownSelectorsRevert() (gas: 151299)\n[PASS] test_zeroAddressTransferRevertsEvenForZeroAmount() (gas: 30411)\nSuite result: ok. 48 passed; 0 failed; 0 skipped; finished in 68.46ms (435.33ms CPU time)\n\nRan 1 test for test/SuperIdentityToken.invariant.t.sol:SuperIdentityTokenForkInvariantTest\n[PASS]\nSuperIdentityTokenForkInvariantTest invariants:\n[PASS] invariant_domainSeparatorFollowsTheChainId\n[PASS] invariant_supplyAndAllowancesSurviveForks\n SuperIdentityTokenForkInvariantTest invariants (runs: 32, calls: 1600, reverts: 0)\n\n╭----------------------+-------------------+-------+---------+----------╮\n| Contract             | Selector          | Calls | Reverts | Discards |\n+=======================================================================+\n| SuperIdentityHandler | changeChainId     | 272   | 0       | 0        |\n|----------------------+-------------------+-------+---------+----------|\n| SuperIdentityHandler | permit            | 252   | 0       | 0        |\n|----------------------+-------------------+-------+---------+----------|\n| SuperIdentityHandler | permitReplay      | 284   | 0       | 0        |\n|----------------------+-------------------+-------+---------+----------|\n| SuperIdentityHandler | permitWrongSigner | 250   | 0       | 0        |\n|----------------------+-------------------+-------+---------+----------|\n| SuperIdentityHandler | transfer          | 238   | 0       | 0        |\n|----------------------+-------------------+-------+---------+----------|\n| SuperIdentityHandler | transferFrom      | 304   | 0       | 0        |\n╰----------------------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 5\n  Bound result 4\n  Bound result 4\n  Bound result 95\n  Bound result 96\n  Bound result 3\n  Bound result 4\n  Bound result 3\n  Bound result 0\n  Bound result 4\n  Bound result 3\n  Bound result 21893\n  Bound result 2392268884\n  Bound result 2597498363\n  Bound result 1454766612\n  Bound result 2\n  Bound result 3\n  Bound result 561\n  Bound result 2\n  Bound result 0\n  Bound result 3\n  Bound result 352\n  Bound result 16\n  Bound result 3\n  Bound result 4\n  Bound result 9\n  Bound result 1\n  Bound result 2\n  Bound result 4\n  Bound result 4663\n  Bound result 9605\n  Bound result 3\n  Bound result 4\n  Bound result 21293\n  Bound result 0\n  Bound result 3\n  Bound result 4\n  Bound result 0\n  Bound result 5\n  Bound result 1\n  Bound result 23732\n  Bound result 1\n  Bound result 5\n  Bound result 1\n  Bound result 0\n  Bound result 5\n  Bound result 1\n  Bound result 0\n  Bound result 1\n  Bound result 3\n  Bound result 0\n  Bound result 4\n  Bound result 5\n  Bound result 5\n  Bound result 3\n  Bound result 1\n  Bound result 5\n  Bound result 0\n  Bound result 1\n  Bound result 4\n  Bound result 7003664086482408922105040\n  Bound result 4\n  Bound result 3\n  Bound result 22737\n  Bound result 25574\n  Bound result 3\n  Bound result 0\n  Bound result 2\n  Bound result 4\n  Bound result 4\n  Bound result 3601\n  Bound result 0\n  Bound result 3\n  Bound result 2\n  Bound result 0\n  Bound result 2\n  Bound result 0\n  Bound result 4\n  Bound result 0\n  Bound result 3\n  Bound result 0\n  Bound result 183361590918225801840074911\n  Bound result 5\n  Bound result 4\n  Bound result 0\n  Bound result 1\n  Bound result 4\n  Bound result 24576\n  Bound result 18\n  Bound result 0\n  Bound result 3\n  Bound result 5\n  Bound result 0\n  Bound result 0\n  Bound result 4\n  Bound result 5\n  Bound result 1\n  Bound result 3\n  Bound result 4\n  Bound result 0\n  Bound result 4\n  Bound result 4\n  Bound result 5\n  Bound result 0\n  Bound result 4\n  Bound result 5\n  Bound result 4\n  Bound result 28\n  Bound result 1078582737\n  Bound result 0\n  Bound result 5\n  Bound result 0\n  Bound result 0\n  Bound result 9603\n  Bound result 0\n  Bound result 1\n  Bound result 28870692\n  Bound result 3\n  Bound result 0\n  Bound result 23185\n  Bound result 4\n  Bound result 1\n  Bound result 752\n  Bound result 3\n  Bound result 2\n  Bound result 7114599557964674350379975\n  Bound result 0\n  Bound result 2\n  Bound result 16002044\n  Bound result 3388201400\n  Bound result 5\n  Bound result 4\n  Bound result 0\n  Bound result 1874624\n  Bound result 0\n  Bound result 2\n  Bound result 0\n  Bound result 2827\n  Bound result 2\n  Bound result 3\n  Bound result 2\n  Bound result 4\n  Bound result 2\n  Bound result 4\n  Bound result 0\n  Bound result 2\n  Bound result 4\n  Bound result 2\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 970.67ms (968.24ms CPU time)\n\nRan 1 test for test/SuperIdentityToken.invariant.t.sol:SuperIdentityTokenInvariantTest\n[PASS]\nSuperIdentityTokenInvariantTest invariants:\n[PASS] invariant_allowancesMatchTheModel\n[PASS] invariant_balancesMatchTheModel\n[PASS] invariant_domainSeparatorMatchesCurrentChain\n[PASS] invariant_metadataNeverChanges\n[PASS] invariant_noncesCountSuccessfulPermits\n[PASS] invariant_sumOfBalancesEqualsSupply\n[PASS] invariant_tokenHoldsNoEther\n[PASS] invariant_totalSupplyIsFixed\n SuperIdentityTokenInvariantTest invariants (runs: 128, calls: 12800, reverts: 0)\n\n╭----------------------+--------------------------------+-------+---------+----------╮\n| Contract             | Selector                       | Calls | Reverts | Discards |\n+====================================================================================+\n| SuperIdentityHandler | approve                        | 669   | 0       | 0        |\n|----------------------+--------------------------------+-------+---------+----------|\n| SuperIdentityHandler | approveZeroAddress             | 672   | 0       | 0        |\n|----------------------+--------------------------------+-------+---------+----------|\n| SuperIdentityHandler | callUnknownSelector            | 641   | 0       | 0        |\n|----------------------+--------------------------------+-------+---------+----------|\n| SuperIdentityHandler | permit                         | 670   | 0       | 0        |\n|----------------------+--------------------------------+-------+---------+----------|\n| SuperIdentityHandler | permitExpired                  | 661   | 0       | 0        |\n|----------------------+--------------------------------+-------+---------+----------|\n| SuperIdentityHandler | permitReplay                   | 708   | 0       | 0        |\n|----------------------+--------------------------------+-------+---------+----------|\n| SuperIdentityHandler | permitTampered                 | 671   | 0       | 0        |\n|----------------------+--------------------------------+-------+---------+----------|\n| SuperIdentityHandler | permitWrongSigner              | 666   | 0       | 0        |\n|----------------------+--------------------------------+-------+---------+----------|\n| SuperIdentityHandler | selfTransfer                   | 684   | 0       | 0        |\n|----------------------+--------------------------------+-------+---------+----------|\n| SuperIdentityHandler | sendEther                      | 651   | 0       | 0        |\n|----------------------+--------------------------------+-------+---------+----------|\n| SuperIdentityHandler | transfer                       | 706   | 0       | 0        |\n|----------------------+--------------------------------+-------+---------+----------|\n| SuperIdentityHandler | transferAll                    | 670   | 0       | 0        |\n|----------------------+--------------------------------+-------+---------+----------|\n| SuperIdentityHandler | transferExceedingBalance       | 690   | 0       | 0        |\n|----------------------+--------------------------------+-------+---------+----------|\n| SuperIdentityHandler | transferFrom                   | 602   | 0       | 0        |\n|----------------------+--------------------------------+-------+---------+----------|\n| SuperIdentityHandler | transferFromExceedingAllowance | 687   | 0       | 0        |\n|----------------------+--------------------------------+-------+---------+----------|\n| SuperIdentityHandler | transferFromExceedingBalance   | 699   | 0       | 0        |\n|----------------------+--------------------------------+-------+---------+----------|\n| SuperIdentityHandler | transferFromWithoutApproval    | 647   | 0       | 0        |\n|----------------------+--------------------------------+-------+---------+----------|\n| SuperIdentityHandler | transferToZeroAddress          | 695   | 0       | 0        |\n|----------------------+--------------------------------+-------+---------+----------|\n| SuperIdentityHandler | warp                           | 711   | 0       | 0        |\n╰----------------------+--------------------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 4\n  Bound result 17\n  Bound result 2\n  Bound result 0\n  Bound result 2000000000000000000\n  Bound result 4\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640325944219488769817891569181\n  Bound result 4\n  Bound result 4\n  Bound result 3\n  Bound result 115792089237316195423570985008687907852837564279074904382605163141518161494337\n  Bound result 5\n  Bound result 255\n  Bound result 5\n  Bound result 0\n  Bound result 2\n  Bound result 0\n  Bound result 2\n  Bound result 4\n  Bound result 3\n  Bound result 115792089237316195423570985008687907853269984665640325944219488769817891566553\n  Bound result 2\n  Bound result 3\n  Bound result 1684\n  Bound result 2\n  Bound result 2\n  Bound result 2\n  Bound result 2\n  Bound result 0\n  Bound result 23961\n  Bound result 16930\n  Bound result 2\n  Bound result 4\n  Bound result 8681\n  Bound result 5\n  Bound result 0\n  Bound result 1\n  Bound result 5\n  Bound result 1\n  Bound result 20172\n  Bound result 2\n  Bound result 4\n  Bound result 1\n  Bound result 36157856303443743635755867571\n  Bound result 5\n  Bound result 2\n  Bound result 142857142857142857142870054\n  Bound result 1\n  Bound result 4\n  Bound result 115792089237316195423570985008687907853269984665640468801362345912675034404164\n  Bound result 2\n  Bound result 0\n  Bound result 728815563385977040452943777879061427756277306518\n  Bound result 4\n  Bound result 1\n  Bound result 3\n  Bound result 1370474226489484757394754883\n  Bound result 2\n  Bound result 0\n  Bound result 0\n  Bound result 2\n  Bound result 2\n  Bound result 1\n  Bound result 0\n  Bound result 2907363493819473244416973845176\n  Bound result 4\n  Bound result 3\n  Bound result 16028\n  Bound result 0\n  Bound result 2\n  Bound result 692\n  Bound result 0\n  Bound result 4\n  Bound result 4\n  Bound result 0\n  Bound result 2\n  Bound result 1\n  Bound result 22474476\n  Bound result 1\n  Bound result 5\n  Bound result 23199613488307010075054762950649662032464878\n  Bound result 2\n  Bound result 4\n  Bound result 2\n  Bound result 0\n  Bound result 4\n  Bound result 5\n  Bound result 0\n  Bound result 5\n  Bound result 0\n  Bound result 5\n  Bound result 3\n  Bound result 5\n  Bound result 1686140\n  Bound result 5\n  Bound result 5\n  Bound result 242\n  Bound result 660695\n  Bound result 0\n  Bound result 4\n  Bound result 5\n  Bound result 2\n  Bound result 1\n  Bound result 1\n  Bound result 4\n  Bound result 4\n  Bound result 3\n  Bound result 3\n  Bound result 115792089237316195423570985008687907853269984665640373563267107817436939149299\n  Bound result 5\n  Bound result 0\n  Bound result 18458\n  Bound result 0\n  Bound result 4\n  Bound result 121\n  Bound result 0\n  Bound result 2\n  Bound result 3\n  Bound result 25862\n  Bound result 2\n  Bound result 1\n  Bound result 5\n  Bound result 3\n  Bound result 3\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129639934\n  Bound result 1\n  Bound result 4\n  Bound result 4\n  Bound result 4\n  Bound result 5\n  Bound result 16909060\n  Bound result 4\n  Bound result 5\n  Bound result 3\n  Bound result 5\n  Bound result 3\n  Bound result 0\n  Bound result 2171290\n  Bound result 0\n  Bound result 802221208812747709411\n  Bound result 1\n  Bound result 4\n  Bound result 3\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 1\n  Bound result 5\n  Bound result 605163141518161494337\n  Bound result 2\n  Bound result 5\n  Bound result 4\n  Bound result 3\n  Bound result 115792089237316195423570985008687907853269984665640564039457584007913129621507\n  Bound result 0\n  Bound result 0\n  Bound result 3\n  Bound result 1\n  Bound result 11000000000000000000\n  Bound result 2284\n  Bound result 3\n  Bound result 5\n  Bound result 13626\n  Bound result 5\n  Bound result 3457\n  Bound result 20732\n  Bound result 2\n  Bound result 0\n  Bound result 3\n  Bound result 23612449\n  Bound result 1\n  Bound result 1\n  Bound result 95238106238095238095238096\n  Bound result 1\n  Bound result 1\n  Bound result 3\n  Bound result 115792089237316195423570985008687907853269984665640468801351345912675747060517\n  Bound result 2\n  Bound result 1\n  Bound result 3\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640373563278107817436939185919\n  Bound result 2\n  Bound result 8\n  Bound result 1\n  Bound result 5\n  Bound result 27731067\n  Bound result 0\n  Bound result 1\n  Bound result 2\n  Bound result 2\n  Bound result 3\n  Bound result 0\n  Bound result 52652740481757233381421874189338857596166092962388620371106214052040830812161\n  Bound result 2\n  Bound result 157198258\n  Bound result 2\n  Bound result 3\n  Bound result 4\n  Bound result 1\n  Bound result 1\n  Bound result 0\n  Bound result 4\n  Bound result 3\n  Bound result 4\n  Bound result 0\n  Bound result 1\n  Bound result 1\n  Bound result 0\n  Bound result 0\n  Bound result 4\n  Bound result 0\n  Bound result 0\n  Bound result 3\n  Bound result 4\n  Bound result 2\n  Bound result 2661867\n  Bound result 3\n  Bound result 4\n  Bound result 5\n  Bound result 115792089237316195423570985008687907853269984665640135468027012579341701110181\n  Bound result 5\n  Bound result 0\n  Bound result 5\n  Bound result 0\n  Bound result 0\n  Bound result 5470\n  Bound result 3\n  Bound result 0\n  Bound result 2\n  Bound result 0\n  Bound result 4\n  Bound result 3\n  Bound result 60432871590285540569969\n  Bound result 5\n  Bound result 2\n  Bound result 4\n  Bound result 26130\n  Bound result 1\n  Bound result 5\n  Bound result 8571631757795081518293504475312233829309060648357448453799895179564494918\n  Bound result 0\n  Bound result 1\n  Bound result 3944\n  Bound result 5\n  Bound result 4\n  Bound result 1513\n  Bound result 5\n  Bound result 1\n  Bound result 4\n  Bound result 1889567281\n  Bound result 1\n  Bound result 23961\n  Bound result 0\n  Bound result 660965844085325289337\n  Bound result 0\n  Bound result 5\n  Bound result 2\n  Bound result 1332\n  Bound result 5\n  Bound result 4\n  Bound result 2\n  Bound result 2\n  Bound result 1\n  Bound result 14069\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 11.05s (11.05s CPU time)\n\nRan 4 test suites in 11.06s (12.16s CPU time): 88 tests passed, 0 failed, 0 skipped (88 total tests)\n","passed":true},{"durationMs":31,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SuperIdentityToken.approve(address,uint256)\",\"SuperIdentityToken.permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\",\"SuperIdentityToken.transfer(address,uint256)\",\"SuperIdentityToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":6,\"README.md\":113,\"foundry.toml\":20,\"remappings.txt\":1,\"script/Deploy.s.sol\":26,\"src/SuperIdentityToken.sol\":182,\"test/SuperIdentityToken.edges.t.sol\":605,\"test/SuperIdentityToken.invariant.t.sol\":640,\"test/SuperIdentityToken.t.sol\":495},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"968550907fb24a614d048754dc00b731567126d7ad2e3f1807a4555bf0f6681a","verifiedTreeHash":"0b3f037317aa6c27409a0dfec473622a52c3d32c","verifierVersion":"0.1.0+327e1e9f"},{"checks":[{"durationMs":1646,"exitCode":0,"name":"build","output":"Compiling 23 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.47s\nCompiler run successful!\nwarning[block-timestamp]: usage of `block.timestamp` in a comparison may be manipulated by validators\n    ╭▸ src/SuperIdentityToken.sol:129:13\n    │\n129 │         if (block.timestamp > deadline) revert PermitExpired(deadline, block.timestamp);\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/block-timestamp\n\nwarning[environment-read-across-mutation]: `block.timestamp` may be reused across `vm.warp`\n    ╭▸ test/SuperIdentityToken.t.sol:304:28\n    │\n304 │         uint256 deadline = block.timestamp;\n    │                            ━━━━━━━━━━━━━━━\n305 │         (uint8 v, bytes32 r, bytes32 s) = _sign(signerKey, signer, bob, 1 ether, 0, deadline);\n306 │         vm.warp(deadline + 1);\n    │         ───────────────────── `vm.warp` changes this environment here\n    │\n    ├ help: capture it with `vm.getBlockTimestamp()` instead\n    ╰ help: https://getfoundry.sh/forge/linting/environment-read-across-mutation\n\n","passed":true},{"durationMs":153,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 38 tests for test/SuperIdentityToken.t.sol:SuperIdentityTokenTest\n[PASS] testFuzz_transferAboveBalanceReverts(uint256,uint256) (runs: 256, μ: 97140, ~: 97531)\nLogs:\n  Bound result 698870542912082211755666752\n  Bound result 903388371263753375135217519\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 256, μ: 99153, ~: 99644)\nLogs:\n  Bound result 260712767349804547996327343\n\n[PASS] testFuzz_transferFromRespectsAllowance(uint256,uint256) (runs: 256, μ: 120784, ~: 95699)\nLogs:\n  Bound result 698870542891688909190433466\n  Bound result 10402217775\n\n[PASS] test_approveOverwritesRatherThanAdds() (gas: 92083)\n[PASS] test_approveSetsAllowanceAndEmits() (gas: 67566)\n[PASS] test_approveZeroAddressSpenderReverts() (gas: 30401)\n[PASS] test_constructorMintsWholeSupplyToDeployerOnce() (gas: 32989)\n[PASS] test_creationCodeHasNoLinkPlaceholders() (gas: 2954849)\n[PASS] test_deployScriptMintsToCaller() (gas: 1458381)\n[PASS] test_domainSeparatorFollowsChainIdOnFork() (gas: 17454)\n[PASS] test_domainSeparatorMatchesEip712() (gas: 8979)\n[PASS] test_infiniteAllowanceIsNotDecremented() (gas: 187808)\n[PASS] test_launchFlowsMoveExactAmounts() (gas: 546164)\n[PASS] test_metadata() (gas: 26750)\n[PASS] test_noAdminCallIncreasesSupplyOrGrantsTokens() (gas: 668277)\n[PASS] test_noEtherAccepted() (gas: 39732)\n[PASS] test_noPrivilegedCallMovesOrFreezesAHolder() (gas: 446885)\n[PASS] test_permitCannotBeReplayed() (gas: 140167)\n[PASS] test_permitRejectsMalleableSignature() (gas: 73153)\n[PASS] test_permitRevertsOnTamperedValue() (gas: 75816)\n[PASS] test_permitRevertsOnWrongSigner() (gas: 81205)\n[PASS] test_permitRevertsWhenExpired() (gas: 50423)\n[PASS] test_permitSetsAllowanceAndBumpsNonce() (gas: 123634)\n[PASS] test_permitThenTransferFrom() (gas: 223269)\n[PASS] test_runtimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 3161470)\n[PASS] test_supplyIsOneBillionWithEighteenDecimals() (gas: 24951)\n[PASS] test_transferFromEmptyAccountReverts() (gas: 37675)\n[PASS] test_transferFromRevertsBeyondAllowance() (gas: 140153)\n[PASS] test_transferFromRevertsWhenOwnerBalanceTooLow() (gas: 147445)\n[PASS] test_transferFromSpendsAllowance() (gas: 212328)\n[PASS] test_transferFromToZeroAddressReverts() (gas: 89871)\n[PASS] test_transferFromWithoutApprovalReverts() (gas: 90539)\n[PASS] test_transferMovesBalanceAndEmits() (gas: 93140)\n[PASS] test_transferOfZeroSucceeds() (gas: 45089)\n[PASS] test_transferRevertsOnInsufficientBalance() (gas: 90041)\n[PASS] test_transferToSelfKeepsBalance() (gas: 95734)\n[PASS] test_transferToZeroAddressReverts() (gas: 30481)\n[PASS] test_whenTheFactoryDeploysTheFactoryHoldsTheSupply() (gas: 286574)\nSuite result: ok. 38 passed; 0 failed; 0 skipped; finished in 16.48ms (75.99ms CPU time)\n\nRan 1 test suite in 17.32ms (16.48ms CPU time): 38 tests passed, 0 failed, 0 skipped (38 total tests)\n","passed":true},{"durationMs":70,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SuperIdentityToken.approve(address,uint256)\",\"SuperIdentityToken.permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\",\"SuperIdentityToken.transfer(address,uint256)\",\"SuperIdentityToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":6,\"README.md\":113,\"foundry.toml\":20,\"remappings.txt\":1,\"script/Deploy.s.sol\":26,\"src/SuperIdentityToken.sol\":182,\"test/SuperIdentityToken.t.sol\":495},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":616,"exitCode":0,"name":"slither","output":"[low/medium] timestamp at src/SuperIdentityToken.sol:126: SuperIdentityToken.permit(address,address,uint256,uint256,uint8,bytes32,bytes32) (src/SuperIdentityToken.sol#126-142) uses timestamp for comparisons","passed":true},{"durationMs":446,"exitCode":0,"name":"aderyn","output":"[low] ecrecover at src/SuperIdentityToken.sol:138: `ecrecover` Signature Malleability\n[low] large-numeric-literal at src/SuperIdentityToken.sol:23: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"bc30b644b42ebf11d842628d161c8bf8426bf81654a7f6ee72aba79adb79982c","verifiedTreeHash":"4738fdfd2d57689e2c853881228a5f59d366ebfe","verifierVersion":"0.1.0+327e1e9f"},{"checks":[{"durationMs":1524,"exitCode":0,"name":"build","output":"Compiling 23 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.36s\nCompiler run successful!\nwarning[block-timestamp]: usage of `block.timestamp` in a comparison may be manipulated by validators\n    ╭▸ src/SuperIdentityToken.sol:129:13\n    │\n129 │         if (block.timestamp > deadline) revert PermitExpired(deadline, block.timestamp);\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://getfoundry.sh/forge/linting/block-timestamp\n\nwarning[environment-read-across-mutation]: `block.timestamp` may be reused across `vm.warp`\n    ╭▸ test/SuperIdentityToken.t.sol:304:28\n    │\n304 │         uint256 deadline = block.timestamp;\n    │                            ━━━━━━━━━━━━━━━\n305 │         (uint8 v, bytes32 r, bytes32 s) = _sign(signerKey, signer, bob, 1 ether, 0, deadline);\n306 │         vm.warp(deadline + 1);\n    │         ───────────────────── `vm.warp` changes this environment here\n    │\n    ├ help: capture it with `vm.getBlockTimestamp()` instead\n    ╰ help: https://getfoundry.sh/forge/linting/environment-read-across-mutation\n\n","passed":true},{"durationMs":156,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 38 tests for test/SuperIdentityToken.t.sol:SuperIdentityTokenTest\n[PASS] testFuzz_transferAboveBalanceReverts(uint256,uint256) (runs: 256, μ: 96755, ~: 97545)\nLogs:\n  Bound result 2827\n  Bound result 999999999999999999999997428\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 256, μ: 99594, ~: 99692)\nLogs:\n  Bound result 1000000000000000000000000000\n\n[PASS] testFuzz_transferFromRespectsAllowance(uint256,uint256) (runs: 256, μ: 121865, ~: 148607)\nLogs:\n  Bound result 2827\n  Bound result 255\n\n[PASS] test_approveOverwritesRatherThanAdds() (gas: 92083)\n[PASS] test_approveSetsAllowanceAndEmits() (gas: 67566)\n[PASS] test_approveZeroAddressSpenderReverts() (gas: 30401)\n[PASS] test_constructorMintsWholeSupplyToDeployerOnce() (gas: 32989)\n[PASS] test_creationCodeHasNoLinkPlaceholders() (gas: 2954849)\n[PASS] test_deployScriptMintsToCaller() (gas: 1458381)\n[PASS] test_domainSeparatorFollowsChainIdOnFork() (gas: 17454)\n[PASS] test_domainSeparatorMatchesEip712() (gas: 8979)\n[PASS] test_infiniteAllowanceIsNotDecremented() (gas: 187808)\n[PASS] test_launchFlowsMoveExactAmounts() (gas: 546164)\n[PASS] test_metadata() (gas: 26750)\n[PASS] test_noAdminCallIncreasesSupplyOrGrantsTokens() (gas: 668277)\n[PASS] test_noEtherAccepted() (gas: 39732)\n[PASS] test_noPrivilegedCallMovesOrFreezesAHolder() (gas: 446885)\n[PASS] test_permitCannotBeReplayed() (gas: 140167)\n[PASS] test_permitRejectsMalleableSignature() (gas: 73153)\n[PASS] test_permitRevertsOnTamperedValue() (gas: 75816)\n[PASS] test_permitRevertsOnWrongSigner() (gas: 81205)\n[PASS] test_permitRevertsWhenExpired() (gas: 50423)\n[PASS] test_permitSetsAllowanceAndBumpsNonce() (gas: 123634)\n[PASS] test_permitThenTransferFrom() (gas: 223269)\n[PASS] test_runtimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 3161470)\n[PASS] test_supplyIsOneBillionWithEighteenDecimals() (gas: 24951)\n[PASS] test_transferFromEmptyAccountReverts() (gas: 37675)\n[PASS] test_transferFromRevertsBeyondAllowance() (gas: 140153)\n[PASS] test_transferFromRevertsWhenOwnerBalanceTooLow() (gas: 147445)\n[PASS] test_transferFromSpendsAllowance() (gas: 212328)\n[PASS] test_transferFromToZeroAddressReverts() (gas: 89871)\n[PASS] test_transferFromWithoutApprovalReverts() (gas: 90539)\n[PASS] test_transferMovesBalanceAndEmits() (gas: 93140)\n[PASS] test_transferOfZeroSucceeds() (gas: 45089)\n[PASS] test_transferRevertsOnInsufficientBalance() (gas: 90041)\n[PASS] test_transferToSelfKeepsBalance() (gas: 95734)\n[PASS] test_transferToZeroAddressReverts() (gas: 30481)\n[PASS] test_whenTheFactoryDeploysTheFactoryHoldsTheSupply() (gas: 286574)\nSuite result: ok. 38 passed; 0 failed; 0 skipped; finished in 17.23ms (83.43ms CPU time)\n\nRan 1 test suite in 18.22ms (17.23ms CPU time): 38 tests passed, 0 failed, 0 skipped (38 total tests)\n","passed":true},{"durationMs":96,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SuperIdentityToken.approve(address,uint256)\",\"SuperIdentityToken.permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\",\"SuperIdentityToken.transfer(address,uint256)\",\"SuperIdentityToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":6,\"README.md\":113,\"foundry.toml\":20,\"launch.json\":24,\"remappings.txt\":1,\"script/Deploy.s.sol\":26,\"src/SuperIdentityToken.sol\":182,\"test/SuperIdentityToken.t.sol\":495},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"ded1a7727e01bef0ae65689cc996417a72daa97432ff08956c50529909cc6857","verifiedTreeHash":"0b0a86d932b18302b478c56da82ffcc4c1df03de","verifierVersion":"0.1.0+327e1e9f"}]}