{"assessments":[],"deployments":[{"attestationHash":"58acc2d26c94fcb6754769c16b1dc23d3078e7659afa41663e5644c7fba86d74","chainId":1,"contracts":[{"address":"0x0e136532e31d4376fe93f8ae2f130ab9096e718f","blockNumber":26363881,"name":"MerkleDistributor","role":"distributor","txHash":"0xa6b5630a7f96e7ef007dd9deb8ca89fe97d2a0ef94d7e44800493ede4b82162c"},{"address":"0x784ff9a3ac5d88a30bfff6f7f2a270161fbe6000","blockNumber":26363881,"name":"PoolInitializationGuard","role":"hook","txHash":"0xa6b5630a7f96e7ef007dd9deb8ca89fe97d2a0ef94d7e44800493ede4b82162c"},{"address":"0x96ec6f6a4fe71cb4748dc7265b098c004d2a42de","blockNumber":26363881,"name":"SQUEEKSTR","role":"token","txHash":"0xa6b5630a7f96e7ef007dd9deb8ca89fe97d2a0ef94d7e44800493ede4b82162c"}],"id":"39bca548-cf28-47d8-b1f9-ca79e7342e31","manifestHash":"4802a5f52d2f2f4172ab737f74a7fabc9bd5eb1b494476aa46dd55cd157593f4","status":"live"}],"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":"8d821b2c-3b07-4a66-bfe0-98101d07c2d8","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"98f34534b8662ee17221cd28c3737901a66956873eb16ae783856fc17c90f7f0","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","subagents":3,"tools":[]},"key":"audit_economics","kind":"code","role":"review","skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"af68be9fa7908ace11b84f5bfe52d0fe7b70aaaa79ecf364ab7c8d8fdeacccba","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","subagents":3,"tools":[]},"key":"audit_flow","kind":"code","role":"review","skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"ca7c7adaa2357335bea9ee06070d5ea374fcea104b7becc3afb9ad28be6d105b","dependsOn":["build_contract_project","write_foundry_tests","manifest","audit_math","audit_permissions","audit_economics","audit_flow"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"b89279670f5a00f5d26286edee00c97dd158b997031350a01cafe6e0329ad227","skillId":"audit-judge","subagents":4,"tools":[]},"key":"audit_judge","kind":"code","role":"review","skillHash":"b89279670f5a00f5d26286edee00c97dd158b997031350a01cafe6e0329ad227","skillId":"audit-judge","state":"accepted"},{"acceptedSubmissionHash":"d65ad1d8a1ba166e06ab34d4b8cfd197ffaf05d377420c4be29980c54212fa30","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","subagents":3,"tools":[]},"key":"audit_math","kind":"code","role":"review","skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"9847d7602974936363f4d89580446e824bec308f4b6a0f5eed0fee14c14c0f7e","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","subagents":3,"tools":[]},"key":"audit_permissions","kind":"code","role":"review","skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"568aeec18f51992e11c17074b671e761b1aef0f81fdf762409b510bc7f6c06cd","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"15b04fc8f60521936b9e2b37c09a804685ec689fc98cd5b04510d986d3106a15","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"15b04fc8f60521936b9e2b37c09a804685ec689fc98cd5b04510d986d3106a15","skillId":"build-contract-project","state":"accepted"},{"acceptedSubmissionHash":"542c9c454c352f5eb3b6ac32628793fd0fcacf5702d5de1b8bd6f86ee42a713d","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"f4aab21fb4258ecf3b909b1c0a7557860910c56a8114f1dcc6b914f4e16fbeff","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"68506fdcd4ed07ed9dcf40cddecfe9a7d7282e399586d1d75a902eca2f5d692b","skillId":"write-foundry-tests","subagents":4,"tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"68506fdcd4ed07ed9dcf40cddecfe9a7d7282e399586d1d75a902eca2f5d692b","skillId":"write-foundry-tests","state":"accepted"}],"objective":"A custom token: SQUEEKSTR (SQKSTR).\nToken name: SQUEEKSTR\nToken symbol: SQKSTR\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.\nWhat it does: sqkstr.xyz","parentJobId":null,"planHash":"dceb9e73489b4603d16982df45dc84ce9b2e900e254cef16360a0e888bacabab","previousHash":"af5811e6bd296f62f9db5f4b95045be487f1d8b45acfa3e47b3fde9c4a4b0cc5","projectId":"8d821b2c-3b07-4a66-bfe0-98101d07c2d8","publication":{"commit":"fd5ad8da9283b24e28a984a0e40c7df051e41c93","deliveredAt":"2026-11-07T15:29:02.252Z","repoUrl":"https://github.com/identity-md-launches/launch-3112-squeekstr"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[],"site":null,"snapshotHash":"962005ac94e672ca8a6d8b112a96b299c6eb267196decad447abf6885b9c6f58","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"40c7a783324534a9d231f4e3cc453a8f0e99cfd688a373146957441b4805a203","device":"9506ecec995bdbf9","findings":[],"hash":"542c9c454c352f5eb3b6ac32628793fd0fcacf5702d5de1b8bd6f86ee42a713d","nodeId":"d5c728a4-a7bb-4733-8ea1-68672217a3b3","outcome":"completed","summary":"I wrote `launch.json` for the SQUEEKSTR launch, and it is the only file changed. `forge build` succeeds, and `forge test` with the verifier's fuzz seed passes all 35 tests in the repository's own suites. The two protected tests weren't run, because they need a launch harness and environment that only the verifier has. Nothing validates the manifest locally, so I checked it by reading it against the schema rules and confirmed it parses as JSON. I haven't committed it.\n\n- **Token:** the contract is `SQUEEKSTR`, named \"SQUEEKSTR\" with symbol \"SQKSTR\" and 18 decimals. Its constructor takes no parameters, so `constructorArgs` is `[]`. `totalSupply` is `\"1000000000000000000000000000\"`, which is the 1,000,000,000 × 10^18 the constructor mints once to `msg.sender`.\n- **Contracts:** `[]`. The accepted code has only the token contract (`src/SQUEEKSTR.sol`), with no application contracts.\n- **Pool:** paired with IMD (`0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7`), fee 12500, tick spacing 60, and the one-to-one initial price `79228162514264337593543950336`.\n- **Economics:** copied exactly as given: `{\"poolBps\":6000,\"initialMarketCapWei\":\"3000000000000000000000\",\"remainderTo\":\"0xee2aaa315cf7ed169f93148d30d24af9318dbb66\"}`.\n- **Notes** (667 characters): the token is a plain fixed-supply ERC-20 with no owner, no mint or burn functions and no transfer fees. The launch deploys no other contracts.","treeHash":"dae45a756736b646d0631055cfe61a49426eb408","usage":{"cachedInputTokens":73806,"cost":{"source":"runtime","usdMicros":185558},"inputTokens":8,"model":"claude-opus-5-5","outputTokens":2191,"runtime":"claude","turns":5,"wallClockMs":30920}},{"artifacts":[],"attempt":1,"bundleHash":"9a39bc2885906d0ce057f32afc0b850aee4e4b92ad43ccf1a946d31f6f780970","device":"729f8e34b40e405d","findings":[],"hash":"568aeec18f51992e11c17074b671e761b1aef0f81fdf762409b510bc7f6c06cd","nodeId":"a89dfefe-a7cd-480a-b989-77fad9325cca","outcome":"completed","summary":"Implemented SQUEEKSTR (SQKSTR): 1 billion tokens with 18 decimals, minted once to the deployer. Dependencies are vendored for offline builds.\n\nValidation passed: `forge build`, all 35 tests with the supplied fuzz seed, and `forge fmt --check`.\n\nDeployment parameters and responsibilities are documented in [README.md](/root/.identitymd/work/8d821b2c-3b07-4a66-bfe0-98101d07c2d8/a89dfefe-a7cd-480a-b989-77fad9325cca/README.md).","treeHash":"799555290f8927c3c6ac0ce4a99159de1f059325","usage":{"cachedInputTokens":508672,"cost":{"source":"estimated","usdMicros":1826742},"inputTokens":47102,"model":"gpt-6-astra","outputTokens":16941,"runtime":"codex","turns":5,"wallClockMs":449824}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"81314195390981c7","findings":[],"hash":"9847d7602974936363f4d89580446e824bec308f4b6a0f5eed0fee14c14c0f7e","nodeId":"56d0e939-d310-4039-9ca4-813d11e2db66","outcome":"completed","summary":"I found no defects, so `.imd-findings.json` has an empty findings list and a coverage row for each of the three entry points, all `holds`.\n\n**Why the permissions area comes up empty:** `src/SQUEEKSTR.sol` is a plain OpenZeppelin v5.1 ERC20 and changes nothing it inherits. Its only code is a constructor that mints `1_000_000_000 * 10**18` (1e27) once to `msg.sender`, which is the factory in a launch. It has no owner or roles and no mint or burn functions. There is no pause, blacklist, fee or exemption list, no `receive` or `fallback`, and no external calls.\n\nAgainst the three guides:\n- **Access Control:** no privileged role exists. `transfer` only moves the caller's own balance. `approve` only sets the caller's own allowance and rejects the zero address as spender. `transferFrom` only works with an allowance from the holder, and only an unlimited allowance is left undecremented, as OpenZeppelin documents.\n- **Trust Gap:** the constructor takes no arguments and gives out no roles, so after deployment nobody holds any power. The factory, PoolManager and distributor transfers move exactly the amount stated.\n- **Asymmetry:** `transfer` and `transferFrom` both run through the same `_update` path, so neither has a check the other lacks.\n\n**Tool leads:** aderyn flagged a large number at `SQUEEKSTR.sol:12`. It is `1_000_000_000 * 10 ** 18 = 1e27`, which matches the stated supply, so it is not a defect. Slither reported nothing.\n\n**What I checked and what I didn't:** the project's own 35 tests pass. I didn't run the protected tests: they import launch helpers that aren't in this tree, so I only read them. I didn't diff `lib/openzeppelin-contracts` against the official v5.1 release; I took it to be unmodified. The known race where a spender front-runs a change to their allowance belongs to every ERC20, not this code, so I didn't report it.","treeHash":null,"usage":{"cachedInputTokens":130090,"cost":{"source":"runtime","usdMicros":235577},"inputTokens":10,"model":"claude-opus-5-5","outputTokens":2018,"runtime":"claude","turns":5,"wallClockMs":46484}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"fdbedee33322a6ef","findings":[{"citation":"resolved","description":"Outside the economics area and with no effect on the deployed token. DEPENDENCIES.md says this command verifies the vendored copies, but 19 committed forge-std files (test-only) hash to values other than those in lib/SHA256SUMS, e.g. lib/SHA256SUMS:21 records 9068805b...2cb1 for lib/forge-std/src/Vm.sol while the committed blob (git show HEAD:lib/forge-std/src/Vm.sol | sha256sum) is e8345950...ad52. The OpenZeppelin files in the production import graph all pass. The provenance record is therefore inaccurate for the test library.","line":19,"path":"DEPENDENCIES.md","reproduction":"From the repo root at HEAD 65aa0d4: run `sha256sum --check --quiet lib/SHA256SUMS`. Expected: no output, exit 0. Actual: 'sha256sum: WARNING: 19 computed checksums did NOT match' (StdJson.sol, StdChains.sol, StdCheats.sol, Vm.sol, console.sol, ...). Fix: re-vendor forge-std v1.9.7 exactly or regenerate SHA256SUMS and dependencies.json from the committed files.","severity":"info","snippet":"sha256sum --check lib/SHA256SUMS","title":"Documented dependency integrity check fails: 19 vendored forge-std files do not match lib/SHA256SUMS"}],"hash":"98f34534b8662ee17221cd28c3737901a66956873eb16ae783856fc17c90f7f0","nodeId":"07933769-94c8-4dd1-b0ee-c332c5c5100a","outcome":"completed","summary":"I found no economic defects in SQUEEKSTR, and one informational issue outside my area. The results are in `.imd-findings.json`: one finding, plus a coverage row for each entry point and the invariants I checked. I changed no other files.\n\n**What I checked (Economic Security, Invariant and Flow Gap guides):**\n- `src/SQUEEKSTR.sol` is a plain OpenZeppelin v5.1 ERC20 with no changes to its transfer logic. The constructor mints the full 1,000,000,000 × 10^18 tokens to whoever deploys it (the factory, in a launch). There is no other way to mint or burn, no fee or burn on transfer, no hooks, no owner or admin powers, and no delegatecall or selfdestruct.\n- **Flows:** every transfer moves exactly the amount sent. So the factory's transfer to the distributor, the pool seed, and swaps in both directions through the PoolManager all arrive in full.\n- **Fixed supply:** total supply stays at 10^27 and the sum of all balances always equals it. I checked this by reading the code; the project's own invariant suite also passes.\n- **Brief:** decimals are 18 and the supply matches the brief exactly.\n- **Entry points:** `approve`, `transfer` and `transferFrom` all **hold**. I traced each one's checks, state changes and failure paths. Over-balance and over-allowance calls revert, and an unlimited allowance is never reduced.\n- **Static analysis:** aderyn flagged the large number on line 12 (`INITIAL_SUPPLY`). It is correct and only a style note.\n- `forge test` passed 35 of 35. I didn't run the protected launch tests (`Token.protected.t.sol`) because they import harness files (`src/LaunchLiquidity.sol` and two others) that this tree doesn't have.\n\n**Finding (info, outside my area):** the integrity check that `DEPENDENCIES.md` documents fails. Running `sha256sum --check lib/SHA256SUMS` reports 19 mismatches. They are all in the vendored forge-std files, which only the tests use; for example, `Vm.sol` hashes to e83459…, but the recorded value is 9068805…. The OpenZeppelin files that go into the deployed token all match. The deployed token isn't affected, but the dependency record is wrong for forge-std.\n\n**Not covered:** there is no `launch.json` in the tree yet, so I couldn't review a manifest.","treeHash":null,"usage":{"cachedInputTokens":296599,"cost":{"source":"runtime","usdMicros":358099},"inputTokens":19,"model":"claude-opus-5-5","outputTokens":4388,"runtime":"claude","turns":10,"wallClockMs":77777}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"dd2ee4882a1be950","findings":[{"citation":"resolved","description":"DEPENDENCIES.md tells the operator to verify the vendored dependencies with `sha256sum --check lib/SHA256SUMS`, and SECURITY.md states that dependency file hashes are checked against the vendored records. Running that command from the repository root fails for 19 of the 30 forge-std files (every hash under lib/forge-std/src/ except Base.sol, Script.sol, StdError.sol, StdStyle.sol, Test.sol, console2.sol, safeconsole.sol and the three interfaces IERC165/IERC20 and the two licence files). The hashes recorded in lib/SHA256SUMS are the hashes of the upstream forge-std v1.9.7 files at commit 77041d2ce690e692d6e03cc812b57d1ddaa4d505 (confirmed by downloading those files and hashing them), but the files committed under lib/forge-std/ were reformatted after the record was produced: a whitespace-insensitive comparison shows no non-whitespace difference against upstream, while the byte-level hashes differ (for example lib/forge-std/src/Vm.sol line 349, where one long declaration was wrapped onto three lines). The OpenZeppelin files are unaffected: all six match both the record and upstream v5.1.0 byte for byte, so the production token's import graph is intact. Impact is limited to the test toolchain and to the repository's provenance claim: the integrity check the documentation relies on cannot be used as written, and a reviewer who runs it gets the same failure a real tampering would produce, which hides a genuine modification behind an expected noise floor. Minimal fix: regenerate lib/SHA256SUMS from the files as committed (`sha256sum lib/openzeppelin-contracts/... lib/forge-std/... > lib/SHA256SUMS`), or restore the forge-std files to their upstream bytes so the existing record holds; either way, re-run the documented command and confirm it exits 0 with every line OK.","line":19,"path":"DEPENDENCIES.md","reproduction":"State: the committed tree at HEAD (65aa0d4), no local changes. Input: from the repository root run `sha256sum --check lib/SHA256SUMS`. Expected (per DEPENDENCIES.md and SECURITY.md): every line reports OK and the command exits 0. Actual: 19 lines report FAILED (lib/forge-std/src/Vm.sol, StdCheats.sol, StdJson.sol, StdChains.sol, StdConstants.sol, StdUtils.sol, StdStorage.sol, StdAssertions.sol, StdToml.sol, StdMath.sol, StdInvariant.sol, console.sol and the interfaces IERC1155, IERC4626, IERC6909, IERC721, IERC7540, IERC7575, IMulticall3) and sha256sum prints `WARNING: 19 computed checksums did NOT match`. Cross-check: `sha256sum lib/forge-std/src/Vm.sol` gives e83459505ce804ce24f6768c5675f7b57137eaae7237893ff5052b81a3aead52 while lib/SHA256SUMS line 21 records 9068805b59ac1d0ea03a8fa1f15ae49c094e0c6c852a2500e0dd112f264b2cb1, which is the hash of the upstream file at the recorded commit; `diff` between the two shows only line re-wrapping.","severity":"low","snippet":"sha256sum --check lib/SHA256SUMS","title":"Documented dependency integrity check fails: lib/SHA256SUMS does not match the vendored forge-std files"}],"hash":"af68be9fa7908ace11b84f5bfe52d0fe7b70aaaa79ecf364ab7c8d8fdeacccba","nodeId":"d7996a94-9dd6-4dd2-9c4b-d52f6b87cbf9","outcome":"completed","summary":"The review is complete and written to .imd-findings.json. No repository file was changed, and nothing was left under test/scratch/.\n\n**Result: one low finding, no defects in the token itself.**\n\nThe contract is an unmodified OpenZeppelin v5.1.0 ERC-20 with a single constructor mint of 10^27 units to the immediate deployer. The three entry points (approve, transfer, transferFrom) were traced through the Execution Trace, Periphery and First Principles guides and each holds: zero-address sentinels are rejected, every revert rolls back the allowance debit atomically, max allowance is never decremented, self and zero-value transfers are balance-neutral, there are no external calls, hooks, receive or fallback, and the compiled ABI exposes no mint, burn, owner, pause or initializer. The runtime bytecode has no reachable DELEGATECALL, CALLCODE or SELFDESTRUCT. All six vendored OpenZeppelin files are byte-identical to the upstream v5.1.0 commit. The project's own suite (35 tests, fuzz and invariants) and `forge fmt --check` pass. Neither static-analysis lead (aderyn's large-literal note) is a defect.\n\n**The one finding (low):** the documented integrity check in DEPENDENCIES.md, `sha256sum --check lib/SHA256SUMS`, fails on 19 of the 30 forge-std files. The recorded hashes match upstream forge-std v1.9.7, but the committed files were reformatted afterward (whitespace-only differences). It affects only the test toolchain and the repo's provenance claim, not deployed code. Fix is to regenerate the record or restore the upstream bytes.\n\nCoverage: all three listed entry points plus five invariant rows (supply, vendored base, bytecode opcodes, forge-std record, test suite). Nothing was left unreached.","treeHash":null,"usage":{"cachedInputTokens":603695,"cost":{"source":"runtime","usdMicros":2451846},"inputTokens":258,"model":"claude-fable-5-1","outputTokens":13960,"runtime":"claude","turns":30,"wallClockMs":219848}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"6ed09c2eb1ff6aec","findings":[{"citation":"resolved","description":"Merged from audit_flow (low), audit_math (low) and audit_economics (info): one root cause. DEPENDENCIES.md lines 14-19 tell the operator that lib/SHA256SUMS records every vendored file hash and to verify the copies with `sha256sum --check lib/SHA256SUMS`. In the committed tree that check fails for 19 forge-std files (test-only support), which specialists traced to the files being re-wrapped (forge fmt, line_length 110) after the record was produced. The OpenZeppelin files in the production import graph (ERC20.sol, IERC20.sol, IERC20Metadata.sol, Context.sol, draft-IERC6093.sol, LICENSE) all pass, so the deployed token is unaffected. Impact: the provenance record the docs rely on is inaccurate, and a reviewer running the documented check cannot distinguish this expected noise from real tampering. No funds at risk. Fix: regenerate lib/SHA256SUMS (and lib/dependencies.json if it records the same) from the committed files, or restore forge-std to its upstream bytes, so the documented command exits 0.","line":19,"path":"DEPENDENCIES.md","reproduction":"State: committed tree at HEAD, no local changes. From the repository root run `sha256sum --check --quiet lib/SHA256SUMS`. Expected (per DEPENDENCIES.md:16-19): no output, exit 0. Actual (reproduced in this review): 19 lines FAILED — lib/forge-std/src/StdJson.sol, StdChains.sol, StdCheats.sol, StdConstants.sol, console.sol, Vm.sol, StdUtils.sol, StdStorage.sol, StdAssertions.sol, StdToml.sol, StdMath.sol, StdInvariant.sol, interfaces/IERC7575.sol, IMulticall3.sol, IERC4626.sol, IERC6909.sol, IERC7540.sol, IERC1155.sol, IERC721.sol — followed by `sha256sum: WARNING: 19 computed checksums did NOT match`. No lib/openzeppelin-contracts line fails.","severity":"low","snippet":"sha256sum --check lib/SHA256SUMS","title":"Documented dependency integrity check fails: lib/SHA256SUMS does not match 19 vendored forge-std files"}],"hash":"ca7c7adaa2357335bea9ee06070d5ea374fcea104b7becc3afb9ad28be6d105b","nodeId":"cdfac081-9543-4018-9092-744e16401de6","outcome":"completed","summary":"The review is finished. I kept one low-severity finding and found no defects in the token. The results are in `.imd-findings.json`, which is the only file I wrote.\n\n**The code:** `src/SQUEEKSTR.sol` is a plain OpenZeppelin v5 ERC-20. Its constructor takes no arguments and mints 1,000,000,000 tokens with 18 decimals (10^27 minor units) once, to the deployer. It has no owner, no mint or burn functions and no fees. The OpenZeppelin files it imports match the recorded checksums, so the library code is as published.\n\n**Specialist findings:** All three findings report the same problem, so I merged them into one:\n- **[low] The documented dependency check fails** (`DEPENDENCIES.md:19`, `sha256sum --check lib/SHA256SUMS`). I ran it here: 19 forge-std files fail and it prints `WARNING: 19 computed checksums did NOT match`. Every OpenZeppelin file passes. forge-std is only used by the tests and is never deployed, so no funds are at risk. The harm is that the integrity record is wrong, so anyone running the check sees failures and can't tell them apart from real tampering. Fix: regenerate `lib/SHA256SUMS` from the committed files, or restore forge-std's original files.\n\n**My own pass:**\n- **Entry points:** `approve`, `transfer` and `transferFrom` all **hold**. Each reverts on the zero address, a short balance or a short allowance, and moves exactly the amount asked, so the factory, distributor and pool transfers arrive in full.\n- **Manifest:** `launch.json` matches the code: supply, 18 decimals, an empty argument list for the parameterless constructor, and no application contracts.\n- **Deployment:** nothing blocks it. The deployed code is about 1.75 KB against the 24,576-byte limit, and it uses no DELEGATECALL or SELFDESTRUCT.\n- **Static analysis:** aderyn's \"large numeric literal\" flag at line 12 is the intended 10^27 supply, so it isn't a defect.\n- **Build and tests:** the build succeeds and the 54 existing tests pass.\n\nNo finding is critical or high, so none carries a proof test. I didn't run the protected floor tests (`.imd/reads/protected/...`), because their harness files aren't in this tree.","treeHash":null,"usage":{"cachedInputTokens":159747,"cost":{"source":"runtime","usdMicros":313570},"inputTokens":10,"model":"claude-opus-5-5","outputTokens":3253,"runtime":"claude","turns":5,"wallClockMs":93453}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"42a6bb6aa496cd6b","findings":[{"citation":"resolved","description":"DEPENDENCIES.md and README.md tell the operator to verify the vendored dependencies with `sha256sum --check lib/SHA256SUMS`. That command fails in the committed tree: 19 of the 30 forge-std files (Vm.sol, StdCheats.sol, StdUtils.sol, StdJson.sol, StdChains.sol, StdStorage.sol, StdAssertions.sol, StdInvariant.sol, StdMath.sol, StdToml.sol, StdConstants.sol, console.sol and seven interface files) do not match the recorded hashes. Root cause: the files were re-wrapped by `forge fmt` under the project's `line_length = 110` after the checksum file was generated. Running `forge fmt` with this repository's foundry.toml on the pristine upstream v1.9.7 files reproduces the vendored hashes exactly (Vm.sol e83459505ce8..., StdCheats.sol 9c775f65da79..., StdUtils.sol cb88b584e246...), so the vendored forge-std is upstream v1.9.7 with formatting changes only, and the production OpenZeppelin files (ERC20.sol, Context.sol) match both lib/SHA256SUMS and upstream commit 69c8def5 byte-for-byte. Impact is limited to the integrity record: forge-std is test-only and never deployed, no production bytecode is affected. Severity is low because the record the author instructs reviewers to rely on is wrong, which weakens the provenance story but moves no value. Fix: regenerate lib/SHA256SUMS from the files as committed (or exclude lib/ from `forge fmt` and restore the upstream bytes), and keep DEPENDENCIES.md's claim that the files are 'preserving their upstream contents' accurate by noting the reformat.","line":19,"path":"DEPENDENCIES.md","reproduction":"State: the committed tree at HEAD (65aa0d4), no changes. Command from the repository root: `sha256sum --check lib/SHA256SUMS`. Expected (per DEPENDENCIES.md line 19, which README.md line 59 points the operator to): every line reports OK. Actual: 19 lines report FAILED and the tool prints `WARNING: 19 computed checksums did NOT match`; for example lib/SHA256SUMS records 9068805b59ac1d0ea03a8fa1f15ae49c094e0c6c852a2500e0dd112f264b2cb1 for lib/forge-std/src/Vm.sol while the file hashes to e83459505ce804ce24f6768c5675f7b57137eaae7237893ff5052b81a3aead52. Confirmation of cause: `curl` upstream forge-std 77041d2c src/Vm.sol hashes to the recorded 9068805b...; after `forge fmt` with this repo's foundry.toml it hashes to e83459... identical to the vendored file.","severity":"low","snippet":"sha256sum --check lib/SHA256SUMS","title":"Documented integrity check fails: lib/SHA256SUMS records pre-format hashes for 19 vendored forge-std files"}],"hash":"d65ad1d8a1ba166e06ab34d4b8cfd197ffaf05d377420c4be29980c54212fa30","nodeId":"bb396e26-1e25-442d-8487-f3ef48adb7d9","outcome":"completed","summary":"The review is complete and `.imd-findings.json` holds the result.\n\n**Outcome: the token's arithmetic is clean in my area.** SQUEEKSTR is OpenZeppelin v5.1.0 ERC-20 with a single constructor mint, and the vendored ERC20.sol and Context.sol are byte-identical to upstream commit 69c8def5. I made all three passes myself, no helpers.\n\n- **Math Precision:** the only arithmetic is the compile-time constant for the supply and the checked or guarded operations inside OpenZeppelin's `_update` and `_spendAllowance`. No division, rounding, casts, or scale conversion exist. The supply is exactly the manifest figure and is divisible by 10,000, so every basis-point share the factory computes is exact with no dust.\n- **Boundary:** there are no external calls, no payable or fallback surface, no bytes decoding. The only sentinel branches are the zero-address rejections, each walked.\n- **Numerical Gap:** I probed self-transfer at full balance, allowance at max minus one versus max, allowance above balance, zero-value paths from empty accounts, and random-transfer conservation with 1,024 fuzz runs. All behaved per ERC-20. The aderyn large-literal lead is benign.\n\n**One low finding, outside my area:** the dependency integrity check the author instructs operators to run fails.\n\n```\nsha256sum --check lib/SHA256SUMS\nWARNING: 19 computed checksums did NOT match\n```\n\nAll 19 mismatches are forge-std test files that `forge fmt` re-wrapped under the project's line length after the checksum file was generated. Formatting pristine upstream v1.9.7 with this repository's config reproduces the vendored hashes exactly, so the library is genuine and nothing deployed is affected. The fix is to regenerate the checksum file or exclude `lib/` from formatting.\n\n**Coverage:** all three entry points, `approve`, `transfer` and `transferFrom`, are recorded as holds, along with rows for the constructor supply constant, launch split arithmetic, `decimals()`, and the external-boundary inventory. No row is unreached. My scratch test was removed, and the only file I left is the findings file.","treeHash":null,"usage":{"cachedInputTokens":616371,"cost":{"source":"runtime","usdMicros":2678018},"inputTokens":258,"model":"claude-fable-5-1","outputTokens":15012,"runtime":"claude","turns":25,"wallClockMs":246651}},{"artifacts":[],"attempt":1,"bundleHash":"e6a3e65738f27aa539b53b8e94e06d3684f3aaf2d603355366a40c47e9c31bb5","device":"bfeaa965edf57623","findings":[],"hash":"f4aab21fb4258ecf3b909b1c0a7557860910c56a8114f1dcc6b914f4e16fbeff","nodeId":"8b46280a-05ef-4aa9-81e4-b9af99cd6727","outcome":"completed","summary":"I added two test files and changed nothing else. The full suite passes with the verifier's fuzz seed: 54 tests in 4 suites, 0 failures.\n\n**Defects found: none.** `src/SQUEEKSTR.sol` is a plain OpenZeppelin v5 ERC20. Its constructor mints 10^27 (one billion with 18 decimals) to whoever deploys it, and it adds nothing else: no owner, no mint or burn, no pause, no tax, no permit. Nothing failed that I would have to test around, so I did not write `.imd-findings.json`. One thing to know, though it isn't a defect: tokens sent to the token contract's own address are accepted and can never be recovered, because the contract has no rescue function. A test records this.\n\n**What was already there** (earlier work, kept as it was): `test/SQUEEKSTR.t.sol` with 34 unit and fuzz tests, and `test/SQUEEKSTR.invariant.t.sol`, an invariant suite over four fixed holders.\n\n**`test/SQUEEKSTR.edges.t.sol`** (18 tests):\n- **Deployment:** for any deployer and any transaction origin, only the deployer receives the supply. The constructor emits exactly one event, the mint.\n- **Launch split:** a helper contract deploys the token and splits the supply in a single call, as the factory does in one transaction. For any pool share from 0 to 90%, the shares arrive exact and nothing is left with the deployer. Deploying again with the same salt reverts, so no second supply can appear.\n- **Zero address:** sending from it, approving from it, sending to it (any amount) and `transferFrom` to it with an unlimited allowance all revert with the exact OpenZeppelin error, and leave state unchanged.\n- **Allowances:**\n  - Spending an allowance emits no Approval event.\n  - An allowance of max − 1 still decreases.\n  - Asking for one wei over the allowance or over the balance reverts without using up any allowance.\n  - Approving one owner–spender pair changes no other pair.\n  - Two spends that add up to the allowance succeed, and one more wei fails.\n- **Absent functions:** permit, nonces, DOMAIN_SEPARATOR and the old increase/decreaseAllowance calls all fail.\n\n**`test/SQUEEKSTR.openInvariant.t.sol`** (256 runs, depth 64, set inline): unlike the existing suite, its handler sends to any fuzzed address, including the token contract. It records every address it touches and tries five failing calls inside try/catch, checking each reverts with exactly the expected error. The invariants checked after every random sequence:\n- Total supply stays fixed.\n- The recorded holders together hold the whole supply.\n- Every balance and allowance matches an independent model.\n- No call behaved unexpectedly: no success without `true`, no wrong revert reason.\n- No balance exceeds the supply, and the token holds no ETH.\n\nThe run made 16,384 calls with 0 reverts.\n\nNothing is committed yet. I left the two files uncommitted because I wasn't told to commit.","treeHash":"033750ff5c08de1e6744d7605e45af9146929227","usage":{"cachedInputTokens":275664,"cost":{"source":"runtime","usdMicros":651597},"inputTokens":16,"model":"claude-opus-5-5","outputTokens":13518,"runtime":"claude","turns":9,"wallClockMs":162170}}],"verification":[{"checks":[{"durationMs":1165,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.06s\nCompiler run successful!\n","passed":true},{"durationMs":2749,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 34 tests for test/SQUEEKSTR.t.sol:SQUEEKSTRTest\n[PASS] testFuzz_ApprovedTransfer(uint256,uint256) (runs: 1024, μ: 166094, ~: 167137)\nLogs:\n  Bound result 61\n  Bound result 212915594555996409613095801710952654918997244752273802363252162103830789\n\n[PASS] testFuzz_RevertOverdraft(uint256) (runs: 1024, μ: 69226, ~: 69564)\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129639942\n\n[PASS] testFuzz_RevertUnapprovedTransfer(address,uint256) (runs: 1024, μ: 62266, ~: 62503)\nLogs:\n  Bound result 16603504726754147735550081\n\n[PASS] testFuzz_TransferConservesSupply(address,uint256) (runs: 1024, μ: 92774, ~: 93167)\nLogs:\n  Bound result 16603504726754147735550081\n\n[PASS] test_ApproveReplacesAllowanceAndEmitsEvent() (gas: 121564)\n[PASS] test_ApproveWithoutBalance() (gas: 78636)\n[PASS] test_ConstructorEmitsMintTransfer() (gas: 11430)\n[PASS] test_Create2MintsToImmediateFactoryAndLaunchTransfersAreExact() (gas: 689689)\n[PASS] test_InfiniteAllowanceDoesNotDecrease() (gas: 128865)\n[PASS] test_MetadataAndInitialSupply() (gas: 107605)\n[PASS] test_NoMintBurnAdminOrUpgradeEntryPoints() (gas: 1371123)\n[PASS] test_RejectsEtherAndUnknownCalls() (gas: 96450)\n[PASS] test_RevertApprovalToZeroSpender() (gas: 37641)\n[PASS] test_RevertSelfTransferExceedingBalance() (gas: 33427)\n[PASS] test_RevertTransferExceedingBalanceIsAtomic() (gas: 65289)\n[PASS] test_RevertTransferFromByUnapprovedSpender() (gas: 117802)\n[PASS] test_RevertTransferFromEmptyAccount() (gas: 37841)\n[PASS] test_RevertTransferFromOverAllowanceIsAtomic() (gas: 115766)\n[PASS] test_RevertTransferFromOverBalanceRestoresAllowance() (gas: 121785)\n[PASS] test_RevertTransferFromOwnAccountWithoutAllowance() (gas: 35681)\n[PASS] test_RevertTransferFromToZeroRestoresAllowance() (gas: 114243)\n[PASS] test_RevertTransferFromWithoutAllowanceEvenForDeployer() (gas: 95028)\n[PASS] test_RevertTransferFromZeroAddress() (gas: 42106)\n[PASS] test_RevertTransferToZero() (gas: 47575)\n[PASS] test_RevertZeroTransferToZero() (gas: 30435)\n[PASS] test_RevokeAllowancePreventsSpending() (gas: 131309)\n[PASS] test_SelfTransferPreservesBalance() (gas: 51420)\n[PASS] test_TransferEntireBalance() (gas: 75765)\n[PASS] test_TransferFromConsumesFiniteAllowanceAndEmitsTransfer() (gas: 160009)\n[PASS] test_TransferFromExhaustsAllowance() (gas: 161820)\n[PASS] test_TransferFromSelfConsumesAllowanceButPreservesBalance() (gas: 107732)\n[PASS] test_TransferMovesExactAmountAndEmitsEvent() (gas: 93572)\n[PASS] test_ZeroTransferFromEmptyAccountEmitsEvent() (gas: 73354)\n[PASS] test_ZeroTransferFromNeedsNoAllowance() (gas: 81512)\nSuite result: ok. 34 passed; 0 failed; 0 skipped; finished in 30.01ms (115.26ms CPU time)\n\nRan 1 test for test/SQUEEKSTR.invariant.t.sol:SQUEEKSTRInvariantTest\n[PASS]\nSQUEEKSTRInvariantTest invariants:\n[PASS] invariant_BalancesAndAllowancesMatchIndependentModel\n[PASS] invariant_TotalSupplyAndBalancesAreConserved\n SQUEEKSTRInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+---------------------+-------+---------+----------╮\n| Contract     | Selector            | Calls | Reverts | Discards |\n+=================================================================+\n| TokenHandler | approve             | 1682  | 0       | 0        |\n|--------------+---------------------+-------+---------+----------|\n| TokenHandler | rejectOverAllowance | 1626  | 0       | 0        |\n|--------------+---------------------+-------+---------+----------|\n| TokenHandler | rejectOverBalance   | 1651  | 0       | 0        |\n|--------------+---------------------+-------+---------+----------|\n| TokenHandler | transfer            | 1640  | 0       | 0        |\n|--------------+---------------------+-------+---------+----------|\n| TokenHandler | transferFrom        | 1593  | 0       | 0        |\n╰--------------+---------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 3403\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 15\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 8\n  Bound result 11\n  Bound result 1\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 3403\n  Bound result 2\n  Bound result 13\n  Bound result 6\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.64s (2.64s CPU time)\n\nRan 2 test suites in 2.64s (2.67s CPU time): 35 tests passed, 0 failed, 0 skipped (35 total tests)\n","passed":true},{"durationMs":63,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SQUEEKSTR.approve(address,uint256)\",\"SQUEEKSTR.transfer(address,uint256)\",\"SQUEEKSTR.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":22,\"LICENSE\":21,\"README.md\":121,\"SECURITY.md\":35,\"foundry.toml\":25,\"launch.json\":24,\"src/SQUEEKSTR.sol\":17,\"test/SQUEEKSTR.invariant.t.sol\":135,\"test/SQUEEKSTR.t.sol\":433},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"542c9c454c352f5eb3b6ac32628793fd0fcacf5702d5de1b8bd6f86ee42a713d","verifiedTreeHash":"dae45a756736b646d0631055cfe61a49426eb408","verifierVersion":"0.1.0+18543036"},{"checks":[{"durationMs":1114,"exitCode":0,"name":"build","output":"Compiling 27 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.04s\nCompiler run successful!\n","passed":true},{"durationMs":2715,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 34 tests for test/SQUEEKSTR.t.sol:SQUEEKSTRTest\n[PASS] testFuzz_ApprovedTransfer(uint256,uint256) (runs: 1024, μ: 166094, ~: 167137)\nLogs:\n  Bound result 3\n  Bound result 9892160\n\n[PASS] testFuzz_RevertOverdraft(uint256) (runs: 1024, μ: 69226, ~: 69564)\nLogs:\n  Bound result 57074837973261086953373493834624439719761874385522681161731025549884481544\n\n[PASS] testFuzz_RevertUnapprovedTransfer(address,uint256) (runs: 1024, μ: 62266, ~: 62503)\nLogs:\n  Bound result 704944365753238854335979594\n\n[PASS] testFuzz_TransferConservesSupply(address,uint256) (runs: 1024, μ: 92774, ~: 93167)\nLogs:\n  Bound result 133291013406178219310820125\n\n[PASS] test_ApproveReplacesAllowanceAndEmitsEvent() (gas: 121564)\n[PASS] test_ApproveWithoutBalance() (gas: 78636)\n[PASS] test_ConstructorEmitsMintTransfer() (gas: 11430)\n[PASS] test_Create2MintsToImmediateFactoryAndLaunchTransfersAreExact() (gas: 689689)\n[PASS] test_InfiniteAllowanceDoesNotDecrease() (gas: 128865)\n[PASS] test_MetadataAndInitialSupply() (gas: 107605)\n[PASS] test_NoMintBurnAdminOrUpgradeEntryPoints() (gas: 1371123)\n[PASS] test_RejectsEtherAndUnknownCalls() (gas: 96450)\n[PASS] test_RevertApprovalToZeroSpender() (gas: 37641)\n[PASS] test_RevertSelfTransferExceedingBalance() (gas: 33427)\n[PASS] test_RevertTransferExceedingBalanceIsAtomic() (gas: 65289)\n[PASS] test_RevertTransferFromByUnapprovedSpender() (gas: 117802)\n[PASS] test_RevertTransferFromEmptyAccount() (gas: 37841)\n[PASS] test_RevertTransferFromOverAllowanceIsAtomic() (gas: 115766)\n[PASS] test_RevertTransferFromOverBalanceRestoresAllowance() (gas: 121785)\n[PASS] test_RevertTransferFromOwnAccountWithoutAllowance() (gas: 35681)\n[PASS] test_RevertTransferFromToZeroRestoresAllowance() (gas: 114243)\n[PASS] test_RevertTransferFromWithoutAllowanceEvenForDeployer() (gas: 95028)\n[PASS] test_RevertTransferFromZeroAddress() (gas: 42106)\n[PASS] test_RevertTransferToZero() (gas: 47575)\n[PASS] test_RevertZeroTransferToZero() (gas: 30435)\n[PASS] test_RevokeAllowancePreventsSpending() (gas: 131309)\n[PASS] test_SelfTransferPreservesBalance() (gas: 51420)\n[PASS] test_TransferEntireBalance() (gas: 75765)\n[PASS] test_TransferFromConsumesFiniteAllowanceAndEmitsTransfer() (gas: 160009)\n[PASS] test_TransferFromExhaustsAllowance() (gas: 161820)\n[PASS] test_TransferFromSelfConsumesAllowanceButPreservesBalance() (gas: 107732)\n[PASS] test_TransferMovesExactAmountAndEmitsEvent() (gas: 93572)\n[PASS] test_ZeroTransferFromEmptyAccountEmitsEvent() (gas: 73354)\n[PASS] test_ZeroTransferFromNeedsNoAllowance() (gas: 81512)\nSuite result: ok. 34 passed; 0 failed; 0 skipped; finished in 25.85ms (100.96ms CPU time)\n\nRan 1 test for test/SQUEEKSTR.invariant.t.sol:SQUEEKSTRInvariantTest\n[PASS]\nSQUEEKSTRInvariantTest invariants:\n[PASS] invariant_BalancesAndAllowancesMatchIndependentModel\n[PASS] invariant_TotalSupplyAndBalancesAreConserved\n SQUEEKSTRInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+---------------------+-------+---------+----------╮\n| Contract     | Selector            | Calls | Reverts | Discards |\n+=================================================================+\n| TokenHandler | approve             | 1682  | 0       | 0        |\n|--------------+---------------------+-------+---------+----------|\n| TokenHandler | rejectOverAllowance | 1626  | 0       | 0        |\n|--------------+---------------------+-------+---------+----------|\n| TokenHandler | rejectOverBalance   | 1651  | 0       | 0        |\n|--------------+---------------------+-------+---------+----------|\n| TokenHandler | transfer            | 1640  | 0       | 0        |\n|--------------+---------------------+-------+---------+----------|\n| TokenHandler | transferFrom        | 1593  | 0       | 0        |\n╰--------------+---------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 3403\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 15\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 8\n  Bound result 11\n  Bound result 1\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 3403\n  Bound result 2\n  Bound result 13\n  Bound result 6\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.61s (2.61s CPU time)\n\nRan 2 test suites in 2.61s (2.64s CPU time): 35 tests passed, 0 failed, 0 skipped (35 total tests)\n","passed":true},{"durationMs":45,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SQUEEKSTR.approve(address,uint256)\",\"SQUEEKSTR.transfer(address,uint256)\",\"SQUEEKSTR.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":22,\"LICENSE\":21,\"README.md\":121,\"SECURITY.md\":35,\"foundry.toml\":25,\"src/SQUEEKSTR.sol\":17,\"test/SQUEEKSTR.invariant.t.sol\":135,\"test/SQUEEKSTR.t.sol\":433},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":522,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":215,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/SQUEEKSTR.sol:12: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"568aeec18f51992e11c17074b671e761b1aef0f81fdf762409b510bc7f6c06cd","verifiedTreeHash":"799555290f8927c3c6ac0ce4a99159de1f059325","verifierVersion":"0.1.0+18543036"},{"checks":[{"durationMs":2105,"exitCode":0,"name":"build","output":"Compiling 29 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.96s\nCompiler run successful!\n","passed":true},{"durationMs":23569,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 18 tests for test/SQUEEKSTR.edges.t.sol:SQUEEKSTREdgeTest\n[PASS] testFuzz_ApproveIsIsolated(address,address,address,uint256) (runs: 1024, μ: 94438, ~: 94789)\n[PASS] testFuzz_ChainOfTransfersPreservesSupply(address,address,address) (runs: 1024, μ: 188481, ~: 188548)\n[PASS] testFuzz_DeployerReceivesWholeSupply(address,address) (runs: 1024, μ: 37798, ~: 37798)\n[PASS] testFuzz_OneCallLaunchSplitIsExact(uint256) (runs: 512, μ: 566088, ~: 567120)\nLogs:\n  Bound result 1461\n\n[PASS] testFuzz_RevertOneWeiOverBalance(uint256) (runs: 1024, μ: 112897, ~: 113344)\nLogs:\n  Bound result 100000000000000000000\n\n[PASS] testFuzz_RevertTransferFromOverAllowance(uint256,uint256) (runs: 1024, μ: 110358, ~: 110800)\nLogs:\n  Bound result 910254881129403319650836127\n  Bound result 910254881129403319650836129\n\n[PASS] testFuzz_RevertTransferFromOverBalance(uint256,uint256) (runs: 1024, μ: 185675, ~: 186185)\nLogs:\n  Bound result 10000\n  Bound result 10000000000000000000\n\n[PASS] testFuzz_RevertTransferFromToZeroWithInfiniteAllowance(uint256) (runs: 1024, μ: 104515, ~: 104254)\nLogs:\n  Bound result 336553867411578665307574609\n\n[PASS] testFuzz_RevertTransferToZeroAnyAmount(uint256) (runs: 1024, μ: 51156, ~: 51106)\nLogs:\n  Bound result 52908\n\n[PASS] testFuzz_SplitSpendExhaustsAllowance(uint256,uint256) (runs: 1024, μ: 231701, ~: 234232)\nLogs:\n  Bound result 10000000000000000000\n  Bound result 18\n\n[PASS] test_AllowanceJustBelowMaxIsFinite() (gas: 123953)\n[PASS] test_ConstructorEmitsOnlyTheMintEvent() (gas: 9092)\n[PASS] test_NoPermitOrLegacyAllowanceHelpers() (gas: 147092)\n[PASS] test_RevertApproveFromZeroOwner() (gas: 40415)\n[PASS] test_RevertRedeployAtSameCreate2Address() (gas: 582108)\n[PASS] test_RevertTransferFromZeroSender() (gas: 50373)\n[PASS] test_TransferFromEmitsOnlyTransfer() (gas: 127173)\n[PASS] test_TransferToTokenContractIsAccepted() (gas: 73163)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 99.78ms (886.91ms CPU time)\n\nRan 34 tests for test/SQUEEKSTR.t.sol:SQUEEKSTRTest\n[PASS] testFuzz_ApprovedTransfer(uint256,uint256) (runs: 1024, μ: 166246, ~: 167155)\nLogs:\n  Bound result 10000\n  Bound result 10000000000000000000\n\n[PASS] testFuzz_RevertOverdraft(uint256) (runs: 1024, μ: 69221, ~: 69564)\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639564039557584007913129639935\n\n[PASS] testFuzz_RevertUnapprovedTransfer(address,uint256) (runs: 1024, μ: 62270, ~: 62539)\nLogs:\n  Bound result 15\n\n[PASS] testFuzz_TransferConservesSupply(address,uint256) (runs: 1024, μ: 92887, ~: 93525)\nLogs:\n  Bound result 15\n\n[PASS] test_ApproveReplacesAllowanceAndEmitsEvent() (gas: 121564)\n[PASS] test_ApproveWithoutBalance() (gas: 78636)\n[PASS] test_ConstructorEmitsMintTransfer() (gas: 11430)\n[PASS] test_Create2MintsToImmediateFactoryAndLaunchTransfersAreExact() (gas: 689689)\n[PASS] test_InfiniteAllowanceDoesNotDecrease() (gas: 128865)\n[PASS] test_MetadataAndInitialSupply() (gas: 107605)\n[PASS] test_NoMintBurnAdminOrUpgradeEntryPoints() (gas: 1371123)\n[PASS] test_RejectsEtherAndUnknownCalls() (gas: 96450)\n[PASS] test_RevertApprovalToZeroSpender() (gas: 37641)\n[PASS] test_RevertSelfTransferExceedingBalance() (gas: 33427)\n[PASS] test_RevertTransferExceedingBalanceIsAtomic() (gas: 65289)\n[PASS] test_RevertTransferFromByUnapprovedSpender() (gas: 117802)\n[PASS] test_RevertTransferFromEmptyAccount() (gas: 37841)\n[PASS] test_RevertTransferFromOverAllowanceIsAtomic() (gas: 115766)\n[PASS] test_RevertTransferFromOverBalanceRestoresAllowance() (gas: 121785)\n[PASS] test_RevertTransferFromOwnAccountWithoutAllowance() (gas: 35681)\n[PASS] test_RevertTransferFromToZeroRestoresAllowance() (gas: 114243)\n[PASS] test_RevertTransferFromWithoutAllowanceEvenForDeployer() (gas: 95028)\n[PASS] test_RevertTransferFromZeroAddress() (gas: 42106)\n[PASS] test_RevertTransferToZero() (gas: 47575)\n[PASS] test_RevertZeroTransferToZero() (gas: 30435)\n[PASS] test_RevokeAllowancePreventsSpending() (gas: 131309)\n[PASS] test_SelfTransferPreservesBalance() (gas: 51420)\n[PASS] test_TransferEntireBalance() (gas: 75765)\n[PASS] test_TransferFromConsumesFiniteAllowanceAndEmitsTransfer() (gas: 160009)\n[PASS] test_TransferFromExhaustsAllowance() (gas: 161820)\n[PASS] test_TransferFromSelfConsumesAllowanceButPreservesBalance() (gas: 107732)\n[PASS] test_TransferMovesExactAmountAndEmitsEvent() (gas: 93572)\n[PASS] test_ZeroTransferFromEmptyAccountEmitsEvent() (gas: 73354)\n[PASS] test_ZeroTransferFromNeedsNoAllowance() (gas: 81512)\nSuite result: ok. 34 passed; 0 failed; 0 skipped; finished in 99.73ms (394.72ms CPU time)\n\nRan 1 test for test/SQUEEKSTR.invariant.t.sol:SQUEEKSTRInvariantTest\n[PASS]\nSQUEEKSTRInvariantTest invariants:\n[PASS] invariant_BalancesAndAllowancesMatchIndependentModel\n[PASS] invariant_TotalSupplyAndBalancesAreConserved\n SQUEEKSTRInvariantTest invariants (runs: 128, calls: 8192, reverts: 0)\n\n╭--------------+---------------------+-------+---------+----------╮\n| Contract     | Selector            | Calls | Reverts | Discards |\n+=================================================================+\n| TokenHandler | approve             | 1682  | 0       | 0        |\n|--------------+---------------------+-------+---------+----------|\n| TokenHandler | rejectOverAllowance | 1626  | 0       | 0        |\n|--------------+---------------------+-------+---------+----------|\n| TokenHandler | rejectOverBalance   | 1651  | 0       | 0        |\n|--------------+---------------------+-------+---------+----------|\n| TokenHandler | transfer            | 1640  | 0       | 0        |\n|--------------+---------------------+-------+---------+----------|\n| TokenHandler | transferFrom        | 1593  | 0       | 0        |\n╰--------------+---------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 5815\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 40000000000000000000\n  Bound result 355\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 0\n  Bound result 11\n  Bound result 39999999999999999643\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.38s (3.38s CPU time)\n\nRan 1 test for test/SQUEEKSTR.openInvariant.t.sol:SQUEEKSTROpenInvariantTest\n[PASS]\nSQUEEKSTROpenInvariantTest invariants:\n[PASS] invariant_NoBalanceExceedsSupplyAndNoEther\n[PASS] invariant_NoUnexpectedOutcome\n[PASS] invariant_StateMatchesGhostModel\n[PASS] invariant_SupplyIsFixedAndFullyAccounted\n SQUEEKSTROpenInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭------------------+---------------------------+-------+---------+----------╮\n| Contract         | Selector                  | Calls | Reverts | Discards |\n+===========================================================================+\n| OpenTokenHandler | approveAnyone             | 2089  | 0       | 0        |\n|------------------+---------------------------+-------+---------+----------|\n| OpenTokenHandler | failAllowanceAboveBalance | 2101  | 0       | 0        |\n|------------------+---------------------------+-------+---------+----------|\n| OpenTokenHandler | failApproveZeroSpender    | 2021  | 0       | 0        |\n|------------------+---------------------------+-------+---------+----------|\n| OpenTokenHandler | failOverAllowance         | 1966  | 0       | 0        |\n|------------------+---------------------------+-------+---------+----------|\n| OpenTokenHandler | failOverdraft             | 2036  | 0       | 0        |\n|------------------+---------------------------+-------+---------+----------|\n| OpenTokenHandler | failToZero                | 2045  | 0       | 0        |\n|------------------+---------------------------+-------+---------+----------|\n| OpenTokenHandler | spendAllowance            | 2103  | 0       | 0        |\n|------------------+---------------------------+-------+---------+----------|\n| OpenTokenHandler | transferToAnyone          | 2023  | 0       | 0        |\n╰------------------+---------------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129639933\n  Bound result 115792089237316195423570985008687907853269984665639564039457584007913129639933\n  Bound result 60000000000000000000\n  Bound result 0\n  Bound result 6246\n  Bound result 642\n  Bound result 1\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 1653\n  Bound result 8647\n  Bound result 0\n  Bound result 20000000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 15\n  Bound result 6191543\n  Bound result 100000000000000000000\n  Bound result 11\n  Bound result 0\n  Bound result 0\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 23.43s (23.43s CPU time)\n\nRan 4 test suites in 23.44s (27.01s CPU time): 54 tests passed, 0 failed, 0 skipped (54 total tests)\n","passed":true},{"durationMs":41,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SQUEEKSTR.approve(address,uint256)\",\"SQUEEKSTR.transfer(address,uint256)\",\"SQUEEKSTR.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":22,\"LICENSE\":21,\"README.md\":121,\"SECURITY.md\":35,\"foundry.toml\":25,\"src/SQUEEKSTR.sol\":17,\"test/SQUEEKSTR.edges.t.sol\":281,\"test/SQUEEKSTR.invariant.t.sol\":135,\"test/SQUEEKSTR.openInvariant.t.sol\":254,\"test/SQUEEKSTR.t.sol\":433},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"f4aab21fb4258ecf3b909b1c0a7557860910c56a8114f1dcc6b914f4e16fbeff","verifiedTreeHash":"033750ff5c08de1e6744d7605e45af9146929227","verifierVersion":"0.1.0+18543036"}]}