{"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":"550912c0-e73c-41e0-be6e-b9400a57d111","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"840640a7bbebe0e6b069db1b0549c41c2b921c9f1a68e4e18c701dbad1f7737f","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":"e1aca7433ff355880173905918208fed3fbf22b39f27aa85df6ff7f775c4a3f2","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":"5940eb3d74e875dd730447b8b05441723a0339f0bb1ba23708c628593c881572","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":"7d740bf8ceebc9316e63d1e6a6bbb66bbbabe4539790a3b0798296a69efb7863","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":"9e29b2cae3f9ed4924d4cf17ba88674c0ccc9266da34370d483ee916667bf113","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":"fb8e538b713bca057ef1d9a42b40f4305e4a12784f92526ca99018e8e3a45145","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"816fe39c7efd64504a19175b0f4dd9186d61069f37a22684c90358a18c60bddc","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"816fe39c7efd64504a19175b0f4dd9186d61069f37a22684c90358a18c60bddc","skillId":"build-contract-project","state":"accepted"},{"acceptedSubmissionHash":"1052be6beded63c88a84e4c5c35761accb53c975fe482ade2fc4c080ba1a34c5","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"504ed0c22e7f467484f991852bf764625285a6893a06df1d33676a0929d60cbb","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"ab3f8f2aa4e7f3b3ada558c0dcf522ba733ca3df3b1da92c707a0fe305816d5f","skillId":"write-foundry-tests","tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"ab3f8f2aa4e7f3b3ada558c0dcf522ba733ca3df3b1da92c707a0fe305816d5f","skillId":"write-foundry-tests","state":"accepted"}],"objective":"A custom token: Sooth Protocol (SOOTH).\nToken name: Sooth Protocol\nToken symbol: SOOTH\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.\nWhat it does: M","parentJobId":null,"planHash":"af0f0cad0ba01a37d3749affaec88b00e16a220568400173984170416b22ca56","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"550912c0-e73c-41e0-be6e-b9400a57d111","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-2508-sooth-protocol"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51493","feedbackHash":"966f69f0a0cc83c3b2c420b3ea8033e8536e8965149dea6e7246eae70933bb5c","nodeKey":"audit_economics","submissionHash":"840640a7bbebe0e6b069db1b0549c41c2b921c9f1a68e4e18c701dbad1f7737f","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51374","feedbackHash":"56574b6cb297603addfce3795d558687f6b7fe1ab392f81e31daca7bdaad4611","nodeKey":"audit_flow","submissionHash":"e1aca7433ff355880173905918208fed3fbf22b39f27aa85df6ff7f775c4a3f2","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52615","feedbackHash":"f3aa7d208559563b0f262accdaa9ac26d0c584959dd5a1768e9a7bf893a227c6","nodeKey":"audit_judge","submissionHash":"5940eb3d74e875dd730447b8b05441723a0339f0bb1ba23708c628593c881572","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"53929","feedbackHash":"fccd2b321406586b5774e4a64c7fb478b9752183478f64e116b03322fd912d80","nodeKey":"audit_math","submissionHash":"7d740bf8ceebc9316e63d1e6a6bbb66bbbabe4539790a3b0798296a69efb7863","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52170","feedbackHash":"dba4e52d225a54fe1757cf5aa397eaa3215a8439ba20fe927685e81342224cfc","nodeKey":"audit_permissions","submissionHash":"9e29b2cae3f9ed4924d4cf17ba88674c0ccc9266da34370d483ee916667bf113","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52593","feedbackHash":"7c04a63a5e4212f71e346ece2cfeacc130801e18d12b0fd694e82425e26be8d4","nodeKey":"build_contract_project","submissionHash":"fb8e538b713bca057ef1d9a42b40f4305e4a12784f92526ca99018e8e3a45145","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51729","feedbackHash":"5236fcd7b4a49648d3cb01d1374ee39adb19e9fd26c5c21ea83af9b725481401","nodeKey":"manifest","submissionHash":"1052be6beded63c88a84e4c5c35761accb53c975fe482ade2fc4c080ba1a34c5","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51533","feedbackHash":"a403280790f0abdc6415b70d4f18f80285236b11131590a631de49c551f49421","nodeKey":"write_foundry_tests","submissionHash":"504ed0c22e7f467484f991852bf764625285a6893a06df1d33676a0929d60cbb","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"c98ca67f32a1829af00a99fc68660e7b6253ff30b369a24b30d7f63fd7c7c282","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"d069e2a7d30887d78b8cd11946da13e01fb23a1f67a667006391ff4c303e70c9","device":"b312209aac1edeae","findings":[],"hash":"1052be6beded63c88a84e4c5c35761accb53c975fe482ade2fc4c080ba1a34c5","nodeId":"69cefe84-4305-48ce-b47d-3880201bd35e","outcome":"completed","summary":"Created [launch.json](/root/nft5/.identitymd/work/550912c0-e73c-41e0-be6e-b9400a57d111/69cefe84-4305-48ce-b47d-3880201bd35e/launch.json) matching `SoothToken`, its exact supply, empty constructor arguments, and the specified pool and economics.\n\n`forge build` succeeded; all 32 tests passed with the supplied fuzz seed. Only `launch.json` is changed for submission.","treeHash":"fd2c6eb9aef2e48f0e0d4f890a7da0f710c1b04d","usage":{"cachedInputTokens":195200,"inputTokens":25450,"model":"gpt-6-astra","outputTokens":2353,"runtime":"codex","turns":3,"wallClockMs":69951}},{"artifacts":[],"attempt":1,"bundleHash":"b5b563714bdba8301b22e72c6620076fe1b1a5b9506793d7c715567760253bea","device":"9eee291846dcb046","findings":[],"hash":"504ed0c22e7f467484f991852bf764625285a6893a06df1d33676a0929d60cbb","nodeId":"f50d18c3-dceb-4763-b425-4bcde880ac1f","outcome":"completed","summary":"Added two test files under `test/` covering failure paths, boundary values, allowance rollback, and stateful invariants.\n\n`forge build` and seeded `forge test` pass: 40 tests, including 32,768 invariant handler calls. No implementation defects found.","treeHash":"94d4054da12852d2f74898062f2a86ddfb31374b","usage":{"cachedInputTokens":562176,"inputTokens":54967,"model":"gpt-6.1-sol","outputTokens":8066,"runtime":"codex","turns":4,"wallClockMs":213824}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"b8fd8054ea57c5d8","findings":[],"hash":"5940eb3d74e875dd730447b8b05441723a0339f0bb1ba23708c628593c881572","nodeId":"473a19d5-a2d3-478c-aac2-7ff64a268b7e","outcome":"completed","summary":"I found no defects to report. `.imd-findings.json` holds an empty findings list and a coverage record, and the JSON parses correctly.\n\n**What I checked**\n- **The token:** `src/SoothToken.sol` is a standard OpenZeppelin v5 ERC-20 with nothing overridden. Its constructor takes no arguments and mints `INITIAL_SUPPLY = 1_000_000_000 * 10 ** 18` (1e27) once to `msg.sender`, which is the factory.\n- **The library:** I read the vendored copy of OpenZeppelin's ERC-20 code and found no tampering. `transfer`, `transferFrom`, `approve`, `_update`, `_spendAllowance` and `_approve` all match the standard code.\n- **Launch requirements:**\n  - Transfers move exactly the amount asked, with no fee, burn or hook, so the distributor share, the pool seed, swaps and the remainder all arrive whole.\n  - There is no owner, pause, blacklist, mint or burn function.\n  - The deployed code has no DELEGATECALL, CALLCODE or SELFDESTRUCT and is about 1.8 KB, far below the 24,576-byte limit.\n- **`launch.json`:** It only uses keys the schema allows. `constructorArgs: []` matches the constructor, decimals are 18, `totalSupply` equals 1e27, the contract name `SoothToken` is valid, and the economics are copied verbatim.\n- **Tests:** `forge build` succeeds and the project's own suite passes (40 of 40). I did not run the protected launch tests; they need the network's separate launch harness.\n\n**Specialist and tool leads**\n- None of the four specialists or the independent tester reported a finding, so there was nothing to reproduce or merge.\n- Aderyn's \"large numeric literal\" warning at line 12 is not a defect: the constant is correct and matches the manifest.\n\n**Coverage:** all three entry points (`approve`, `transfer`, `transferFrom`) are marked `holds`. I added two invariant rows: the supply stays fixed at 1e27, and the manifest matches a deployable token.\n\nThe brief's feature description is cut off at \"M\". The README says the implementation treats that as unspecified, so I couldn't treat it as a requirement the code misses. I changed no files apart from `.imd-findings.json`.","treeHash":null,"usage":{"cachedInputTokens":328058,"inputTokens":18,"model":"claude-opus-5-5","outputTokens":3353,"runtime":"claude","turns":9,"wallClockMs":58704}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"23617eab0c5242d6","findings":[],"hash":"7d740bf8ceebc9316e63d1e6a6bbb66bbbabe4539790a3b0798296a69efb7863","nodeId":"49a08108-5985-40de-a1c7-f35f9a3dce04","outcome":"completed","summary":"I found no defects in the math audit of SOOTH, so `.imd-findings.json` has an empty findings list plus a coverage row for each of the three entry points and two invariants. I changed no repository files, and the existing test suite passes (32 of 32, including the 1,024-run fuzz test).\n\n**What the code is:** `src/SoothToken.sol` is a plain OpenZeppelin v5.1.0 ERC-20 (the vendored library's code matches upstream). Its constructor mints `1_000_000_000 * 10 ** 18` to `msg.sender` once. There are no mint, burn, fee, owner or upgrade functions.\n\n**Math Precision, Boundary and Numerical Gap checks:**\n- **Supply:** 1e27 is calculated when the contract compiles, cannot overflow, and matches the 18 decimals. Nothing after the constructor can change the total, so the total supply always equals the sum of all balances.\n- **The unchecked arithmetic in the transfer code is safe:**\n  - The sender's balance is subtracted only after a check that it covers the amount.\n  - The recipient's balance can't overflow, because no balance can exceed the 1e27 total.\n- **Allowances:** `transferFrom` checks the allowance before subtracting from it. An allowance of `type(uint256).max` is never reduced. If the transfer then fails, the whole transaction reverts, so the allowance isn't lost.\n- **Boundaries:** sending zero, sending to yourself, sending your full balance and sending one base unit all leave balances exact. Sends to or from the zero address revert.\n- **Launch split:** the 10% swarm share and the 80% pool seed divide 1e27 with no remainder, and transfers deliver exactly what is sent.\n- **Static analysis lead:** aderyn's large-numeric-literal flag at line 12 is about style, not a defect.\n\n**Coverage:** `approve`, `transfer` and `transferFrom` are all marked \"holds\", as are the fixed-supply and exact-launch-split invariants. I didn't run the protected v4 launch test, because it needs the network's launch harness and its environment inputs.","treeHash":null,"usage":{"cachedInputTokens":225677,"inputTokens":12,"model":"claude-opus-5-5","outputTokens":2686,"runtime":"claude","turns":6,"wallClockMs":41573}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"74979c69cdd583ad","findings":[],"hash":"840640a7bbebe0e6b069db1b0549c41c2b921c9f1a68e4e18c701dbad1f7737f","nodeId":"b47c240d-6660-43c6-8699-38b322ae0471","outcome":"completed","summary":"I found no defects. `SoothToken` (`src/SoothToken.sol`) is an unmodified OpenZeppelin ERC‑20 that mints exactly 1,000,000,000 × 10¹⁸ tokens to the deployer in its constructor.\n\n`.imd-findings.json` has an empty findings list and a coverage row for each of the three listed entry points, all marked `holds`. It also has a fourth row for the supply invariant.\n\n- **`approve`, `transfer`, `transferFrom`:** these are the library's own code, with no fee, burn, tax or blocklist. So the launch transfers (factory to distributor, pool seeding, remainder) and trades through the pool move exactly the amounts stated.\n- **Supply:** it is fixed. The constructor is the only place that mints, and there is no owner, burn, pause or upgrade path, so nobody can grow the supply or move or freeze a holder's balance.\n- **Static analysis lead:** aderyn's \"large numeric literal\" warning on line 12 is just the `INITIAL_SUPPLY` constant written out, not a defect.\n\nThe economics guides check fees, taxes, rebasing, mint authority and launch-flow shortfalls, and none of those exist in this token. I didn't run Foundry tests, because I had no finding to prove.","treeHash":null,"usage":{"cachedInputTokens":100069,"inputTokens":6,"model":"claude-opus-5-5","outputTokens":969,"runtime":"claude","turns":3,"wallClockMs":16237}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"fa99051b60a858d6","findings":[],"hash":"9e29b2cae3f9ed4924d4cf17ba88674c0ccc9266da34370d483ee916667bf113","nodeId":"990082a7-492c-49b1-9848-4420c6f7125a","outcome":"completed","summary":"The review is complete. No defects were found in the assigned area, and `.imd-findings.json` holds an empty findings list with eleven coverage rows. The working tree is otherwise unchanged.\n\n**What was reviewed**\n\n- `src/SoothToken.sol` is a 17-line wrapper over OpenZeppelin ERC-20 that mints the whole supply to the deployer in the constructor. It has no owner, roles, initializer, setters, mint, burn, pause, or fallback.\n- The vendored OpenZeppelin files pass their checksum manifest and diff byte-identical against the upstream v5.1.0 tag, so the inherited transfer and allowance logic is the audited standard implementation.\n- The compiled ABI exposes exactly the three listed entry points. A reachable-opcode scan of the runtime finds no DELEGATECALL, CALLCODE, SELFDESTRUCT, or any external-call opcode.\n\n**Checks run against the three guides**\n\n- Access Control: every storage write is keyed on the caller or gated by the allowance check. A scratch fuzz test over random selectors, payloads, and callers confirmed that nothing outside approve, transfer, and transferFrom dispatches. The deployer has no standing over other holders after construction.\n- Asymmetry: transfer and transferFrom share one internal path, and allowance spending exactly mirrors approve. The zero-address mint and burn branches are unreachable from public functions.\n- Trust Gap: there is no privileged actor, setter, fee, or pricing formula after construction, so none of the seams exist. The factory holding the full supply at construction is the launch design.\n\n**Notes that are not findings**\n\n- The ERC-20 approve-replacement race is inherent to the standard and documented in the README.\n- The aderyn large-numeric-literal lead is a style note; the literal equals the manifest supply.\n- The brief's feature description is a single letter, \"M\". The builder implemented a plain ERC-20 and documented that choice. If the requester intended a feature, that is a scope question for them, not a code defect.\n\nThe existing 32 project tests and the format check also pass.","treeHash":null,"usage":{"cachedInputTokens":1031301,"inputTokens":386,"model":"claude-fable-5-1","outputTokens":15899,"runtime":"claude","turns":33,"wallClockMs":232919}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"13603a08ada71730","findings":[],"hash":"e1aca7433ff355880173905918208fed3fbf22b39f27aa85df6ff7f775c4a3f2","nodeId":"69260803-6ac1-44ae-b3fb-3a84f0b635f3","outcome":"completed","summary":"I found no defects in SOOTH. `.imd-findings.json` holds an empty findings list plus a coverage row for each entry point, and it parses as valid JSON. No tracked files changed.\n\n**What the code is:** `src/SoothToken.sol` is a plain OpenZeppelin v5.1 ERC20 with nothing overridden. Its constructor mints `INITIAL_SUPPLY = 1_000_000_000 * 10 ** 18` once to `msg.sender`, which on the launch path is the factory. There is no owner, minting after deployment, burning, pause, upgrade, fee or hook.\n\n**Execution trace:** I read `transfer`, `transferFrom` and `approve` through `_spendAllowance`, `_transfer`, `_update` and `_approve` in the vendored OpenZeppelin `ERC20.sol`.\n- Sending to the zero address, spending more than the balance, or exceeding the allowance all revert.\n- A transfer to yourself leaves the balance unchanged.\n- An unlimited (`type(uint256).max`) allowance is never reduced.\n- None of the three makes an external call, so there is nothing to re-enter.\n\n**Periphery (launch flows):** Nothing is taken on transfer, so the factory's payments to the distributor and the pool arrive in full, distributor claims pay in full, and swaps settle in full both ways. Supply can't grow and no privileged call can move or freeze a holder's balance. There is no DELEGATECALL, CALLCODE or SELFDESTRUCT, and `decimals()` is 18.\n\n**First principles:** Total supply stays at exactly 1e27 base units (one billion tokens at 18 decimals) for good, since the constructor is the only place tokens are minted. The usual race when an approval is changed from one non-zero value to another is built into the ERC-20 standard, not a defect here, so I didn't report it.\n\n**Coverage:** all three entry points, `approve`, `transfer` and `transferFrom`, are marked `holds`. I added a fourth row for the fixed-supply rule.\n\n**Static analysis:** aderyn flagged a \"large numeric literal\" at line 12. That is the supply constant, written with underscores and `10 ** 18` so it reads clearly, so it isn't a defect. Slither reported nothing.\n\n**Tests:** the repository's 32 tests, including a fuzz run of 1,024 cases, all pass.\n\n**Limits:** I didn't run the protected launch tests. They import `LaunchLiquidity`, `PoolInitializationGuard` and `HookFlags` from `src/`, and those files aren't in this tree. I also didn't review `launch.json`, because none exists yet.","treeHash":null,"usage":{"cachedInputTokens":176732,"inputTokens":10,"model":"claude-opus-5-5","outputTokens":2704,"runtime":"claude","turns":5,"wallClockMs":39042}},{"artifacts":[],"attempt":1,"bundleHash":"488fa38b830349af004103116bf8761c2b72027e325429e3b3753bd1c4b21b70","device":"cbc3d81ff238201c","findings":[],"hash":"fb8e538b713bca057ef1d9a42b40f4305e4a12784f92526ca99018e8e3a45145","nodeId":"c7712d58-9d2e-4fac-985d-4da3a4d14d44","outcome":"completed","summary":"Implemented SOOTH: 1 billion tokens, 18 decimals, minted once to the deployer. Dependencies are vendored; deployment responsibilities and the assumption that undefined “M” adds no behavior are documented.\n\nValidation passed: `forge build`, all 32 tests using your fuzz seed, and `forge fmt --check`.\n\nFull launch integration remains for the verifier.","treeHash":"fb563e863f58411797ac81745e1a54bfbffcc940","usage":{"cachedInputTokens":465792,"inputTokens":59259,"model":"gpt-6-astra","outputTokens":16495,"runtime":"codex","turns":5,"wallClockMs":453096}}],"verification":[{"checks":[{"durationMs":634,"exitCode":0,"name":"build","output":"Compiling 10 files with Solc 0.8.26\nSolc 0.8.26 finished in 575.00ms\nCompiler run successful!\n","passed":true},{"durationMs":768,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 3 tests for test/SoothTokenLaunch.t.sol:SoothTokenLaunchTest\n[PASS] test_create2MintsToImmediateDeployerAndRequiresNoInitialization() (gas: 290617)\n[PASS] test_exactLaunchAllocationsClaimsAndTradingTransferPaths() (gas: 775294)\n[PASS] test_factoryHasNoAuthorityOverDistributedTokens() (gas: 388647)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 672.50ms (1.41ms CPU time)\n\nRan 28 tests for test/SoothToken.t.sol:SoothTokenTest\n[PASS] testFuzz_delegatedTransferConservesBalanceAndAllowance(uint256,uint256) (runs: 1024, μ: 137332, ~: 139146)\n[PASS] testFuzz_overspendAlwaysReverts(uint256) (runs: 1024, μ: 45418, ~: 45382)\n[PASS] testFuzz_transferConservesSupply(uint256,address) (runs: 1024, μ: 73831, ~: 75607)\n[PASS] test_approvalCanBeReplacedAndRevoked() (gas: 147661)\n[PASS] test_approveEmitsAndOnlyChangesCallersAllowance() (gas: 122706)\n[PASS] test_approveZeroSpenderReverts() (gas: 34936)\n[PASS] test_constructorEmitsExactlyOneMint() (gas: 7221)\n[PASS] test_delegatedSelfTransferSpendsAllowanceWithoutChangingBalance() (gas: 94615)\n[PASS] test_exhaustedAllowanceCannotBeReused() (gas: 138415)\n[PASS] test_holderUsesTransferOrApprovesItselfForTransferFrom() (gas: 137914)\n[PASS] test_metadataAndEntireSupply() (gas: 74943)\n[PASS] test_nativeCurrencyAndUnknownCallsAreRejected() (gas: 57761)\n[PASS] test_noMintBurnAdministrativeOrUpgradeEntryPoints() (gas: 982627)\n[PASS] test_selfTransferPreservesBalance() (gas: 42836)\n[PASS] test_selfTransferStillRequiresSufficientBalance() (gas: 33618)\n[PASS] test_transferDeliversExactAmountAndEmitsEvent() (gas: 80007)\n[PASS] test_transferEntireBalanceAndOneBaseUnitBack() (gas: 125505)\n[PASS] test_transferFromInsufficientAllowanceIsAtomic() (gas: 100473)\n[PASS] test_transferFromInsufficientBalanceRestoresAllowance() (gas: 98590)\n[PASS] test_transferFromSpendsFiniteAllowanceAndEmitsTransfer() (gas: 141463)\n[PASS] test_transferFromToZeroRestoresAllowance() (gas: 95785)\n[PASS] test_transferFromZeroSenderReverts() (gas: 44653)\n[PASS] test_transferInsufficientBalanceReverts() (gas: 45331)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 66551)\n[PASS] test_unauthorizedSpenderCannotUseSomeoneElsesApproval() (gas: 92842)\n[PASS] test_unlimitedAllowanceRemainsUnlimited() (gas: 175940)\n[PASS] test_zeroTransferFromEmptyAccountEmitsEvent() (gas: 57521)\n[PASS] test_zeroTransferFromWithoutAllowanceEmitsTransfer() (gas: 45927)\nSuite result: ok. 28 passed; 0 failed; 0 skipped; finished in 688.68ms (82.75ms CPU time)\n\nRan 1 test for test/SoothTokenModel.t.sol:SoothTokenModelTest\n[PASS] testFuzz_operationSequencePreservesLedger(bytes32) (runs: 1024, μ: 10854319, ~: 10852106)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 688.72ms (688.21ms CPU time)\n\nRan 3 test suites in 689.35ms (2.05s CPU time): 32 tests passed, 0 failed, 0 skipped (32 total tests)\n","passed":true},{"durationMs":35,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SoothToken.approve(address,uint256)\",\"SoothToken.transfer(address,uint256)\",\"SoothToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":5,\"README.md\":134,\"foundry.toml\":15,\"launch.json\":24,\"src/SoothToken.sol\":18,\"test/SoothToken.t.sol\":309,\"test/SoothTokenLaunch.t.sol\":110,\"test/SoothTokenModel.t.sol\":107,\"test/support/TestBase.sol\":37},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"1052be6beded63c88a84e4c5c35761accb53c975fe482ade2fc4c080ba1a34c5","verifiedTreeHash":"fd2c6eb9aef2e48f0e0d4f890a7da0f710c1b04d","verifierVersion":"0.1.0+3dc93dc1"},{"checks":[{"durationMs":1104,"exitCode":0,"name":"build","output":"Compiling 12 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.04s\nCompiler run successful!\n","passed":true},{"durationMs":10721,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 3 tests for test/SoothTokenLaunch.t.sol:SoothTokenLaunchTest\n[PASS] test_create2MintsToImmediateDeployerAndRequiresNoInitialization() (gas: 290617)\n[PASS] test_exactLaunchAllocationsClaimsAndTradingTransferPaths() (gas: 775294)\n[PASS] test_factoryHasNoAuthorityOverDistributedTokens() (gas: 388647)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 59.02ms (1.83ms CPU time)\n\nRan 6 tests for test/SoothTokenProperties.t.sol:SoothTokenPropertiesTest\n[PASS] testFuzz_failedSpendAfterPartialUseCanBeRetriedAfterFunding(uint256,uint256) (runs: 1024, μ: 330059, ~: 329626)\n[PASS] testFuzz_largeFiniteApprovalIsConsumed(uint256) (runs: 1024, μ: 134380, ~: 134344)\n[PASS] testFuzz_roundTripRestoresBalancesButDoesNotRestoreApproval(uint256) (runs: 1024, μ: 193962, ~: 194722)\n[PASS] test_maxMinusOneApprovalIsFinite() (gas: 134170)\n[PASS] test_maximumDelegatedSpendCannotBypassBalanceWithUnlimitedApproval() (gas: 110740)\n[PASS] test_rejectedDelegatedTransferLeavesNoEventsOrStateChanges() (gas: 104474)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 66.09ms (197.43ms CPU time)\n\nRan 28 tests for test/SoothToken.t.sol:SoothTokenTest\n[PASS] testFuzz_delegatedTransferConservesBalanceAndAllowance(uint256,uint256) (runs: 1024, μ: 137179, ~: 139146)\n[PASS] testFuzz_overspendAlwaysReverts(uint256) (runs: 1024, μ: 45418, ~: 45382)\n[PASS] testFuzz_transferConservesSupply(uint256,address) (runs: 1024, μ: 73834, ~: 75607)\n[PASS] test_approvalCanBeReplacedAndRevoked() (gas: 147661)\n[PASS] test_approveEmitsAndOnlyChangesCallersAllowance() (gas: 122706)\n[PASS] test_approveZeroSpenderReverts() (gas: 34936)\n[PASS] test_constructorEmitsExactlyOneMint() (gas: 7221)\n[PASS] test_delegatedSelfTransferSpendsAllowanceWithoutChangingBalance() (gas: 94615)\n[PASS] test_exhaustedAllowanceCannotBeReused() (gas: 138415)\n[PASS] test_holderUsesTransferOrApprovesItselfForTransferFrom() (gas: 137914)\n[PASS] test_metadataAndEntireSupply() (gas: 74943)\n[PASS] test_nativeCurrencyAndUnknownCallsAreRejected() (gas: 57761)\n[PASS] test_noMintBurnAdministrativeOrUpgradeEntryPoints() (gas: 982627)\n[PASS] test_selfTransferPreservesBalance() (gas: 42836)\n[PASS] test_selfTransferStillRequiresSufficientBalance() (gas: 33618)\n[PASS] test_transferDeliversExactAmountAndEmitsEvent() (gas: 80007)\n[PASS] test_transferEntireBalanceAndOneBaseUnitBack() (gas: 125505)\n[PASS] test_transferFromInsufficientAllowanceIsAtomic() (gas: 100473)\n[PASS] test_transferFromInsufficientBalanceRestoresAllowance() (gas: 98590)\n[PASS] test_transferFromSpendsFiniteAllowanceAndEmitsTransfer() (gas: 141463)\n[PASS] test_transferFromToZeroRestoresAllowance() (gas: 95785)\n[PASS] test_transferFromZeroSenderReverts() (gas: 44653)\n[PASS] test_transferInsufficientBalanceReverts() (gas: 45331)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 66551)\n[PASS] test_unauthorizedSpenderCannotUseSomeoneElsesApproval() (gas: 92842)\n[PASS] test_unlimitedAllowanceRemainsUnlimited() (gas: 175940)\n[PASS] test_zeroTransferFromEmptyAccountEmitsEvent() (gas: 57521)\n[PASS] test_zeroTransferFromWithoutAllowanceEmitsTransfer() (gas: 45927)\nSuite result: ok. 28 passed; 0 failed; 0 skipped; finished in 699.14ms (143.87ms CPU time)\n\nRan 1 test for test/SoothTokenModel.t.sol:SoothTokenModelTest\n[PASS] testFuzz_operationSequencePreservesLedger(bytes32) (runs: 1024, μ: 10856700, ~: 10852597)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 699.05ms (698.58ms CPU time)\n\nRan 2 tests for test/SoothTokenInvariant.t.sol:SoothTokenInvariantTest\n[PASS]\nSoothTokenInvariantTest invariants:\n[PASS] invariant_balancesMatchRequestedMovements\n[PASS] invariant_metadataDoesNotChange\n[PASS] invariant_onlyApprovedSpendingChangesAllowances\n[PASS] invariant_supplyIsFixedAndEveryTokenIsAccountedFor\n SoothTokenInvariantTest invariants (runs: 256, calls: 32768, reverts: 0)\n\n╭-------------------+--------------------------+-------+---------+----------╮\n| Contract          | Selector                 | Calls | Reverts | Discards |\n+===========================================================================+\n| SoothTokenHandler | approve                  | 3973  | 0       | 0        |\n|-------------------+--------------------------+-------+---------+----------|\n| SoothTokenHandler | rejectAllowanceOverspend | 4097  | 0       | 0        |\n|-------------------+--------------------------+-------+---------+----------|\n| SoothTokenHandler | rejectDelegatedOverdraft | 4065  | 0       | 0        |\n|-------------------+--------------------------+-------+---------+----------|\n| SoothTokenHandler | rejectOverdraft          | 4086  | 0       | 0        |\n|-------------------+--------------------------+-------+---------+----------|\n| SoothTokenHandler | rejectZeroRecipient      | 4133  | 0       | 0        |\n|-------------------+--------------------------+-------+---------+----------|\n| SoothTokenHandler | rejectZeroSpender        | 4096  | 0       | 0        |\n|-------------------+--------------------------+-------+---------+----------|\n| SoothTokenHandler | transfer                 | 4193  | 0       | 0        |\n|-------------------+--------------------------+-------+---------+----------|\n| SoothTokenHandler | transferFrom             | 4125  | 0       | 0        |\n╰-------------------+--------------------------+-------+---------+----------╯\n\n[PASS] test_handlerExercisesSpendingRevocationAndRollback() (gas: 1435634)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 10.64s (10.64s CPU time)\n\nRan 5 test suites in 10.64s (12.16s CPU time): 40 tests passed, 0 failed, 0 skipped (40 total tests)\n","passed":true},{"durationMs":33,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SoothToken.approve(address,uint256)\",\"SoothToken.transfer(address,uint256)\",\"SoothToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":5,\"README.md\":134,\"foundry.toml\":15,\"src/SoothToken.sol\":18,\"test/SoothToken.t.sol\":309,\"test/SoothTokenInvariant.t.sol\":252,\"test/SoothTokenLaunch.t.sol\":110,\"test/SoothTokenModel.t.sol\":107,\"test/SoothTokenProperties.t.sol\":118,\"test/support/TestBase.sol\":37},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"504ed0c22e7f467484f991852bf764625285a6893a06df1d33676a0929d60cbb","verifiedTreeHash":"94d4054da12852d2f74898062f2a86ddfb31374b","verifierVersion":"0.1.0+3dc93dc1"},{"checks":[{"durationMs":509,"exitCode":0,"name":"build","output":"Compiling 10 files with Solc 0.8.26\nSolc 0.8.26 finished in 462.31ms\nCompiler run successful!\n","passed":true},{"durationMs":625,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 3 tests for test/SoothTokenLaunch.t.sol:SoothTokenLaunchTest\n[PASS] test_create2MintsToImmediateDeployerAndRequiresNoInitialization() (gas: 290617)\n[PASS] test_exactLaunchAllocationsClaimsAndTradingTransferPaths() (gas: 775294)\n[PASS] test_factoryHasNoAuthorityOverDistributedTokens() (gas: 388647)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 538.84ms (868.01µs CPU time)\n\nRan 28 tests for test/SoothToken.t.sol:SoothTokenTest\n[PASS] testFuzz_delegatedTransferConservesBalanceAndAllowance(uint256,uint256) (runs: 1024, μ: 137332, ~: 139146)\n[PASS] testFuzz_overspendAlwaysReverts(uint256) (runs: 1024, μ: 45418, ~: 45382)\n[PASS] testFuzz_transferConservesSupply(uint256,address) (runs: 1024, μ: 73831, ~: 75607)\n[PASS] test_approvalCanBeReplacedAndRevoked() (gas: 147661)\n[PASS] test_approveEmitsAndOnlyChangesCallersAllowance() (gas: 122706)\n[PASS] test_approveZeroSpenderReverts() (gas: 34936)\n[PASS] test_constructorEmitsExactlyOneMint() (gas: 7221)\n[PASS] test_delegatedSelfTransferSpendsAllowanceWithoutChangingBalance() (gas: 94615)\n[PASS] test_exhaustedAllowanceCannotBeReused() (gas: 138415)\n[PASS] test_holderUsesTransferOrApprovesItselfForTransferFrom() (gas: 137914)\n[PASS] test_metadataAndEntireSupply() (gas: 74943)\n[PASS] test_nativeCurrencyAndUnknownCallsAreRejected() (gas: 57761)\n[PASS] test_noMintBurnAdministrativeOrUpgradeEntryPoints() (gas: 982627)\n[PASS] test_selfTransferPreservesBalance() (gas: 42836)\n[PASS] test_selfTransferStillRequiresSufficientBalance() (gas: 33618)\n[PASS] test_transferDeliversExactAmountAndEmitsEvent() (gas: 80007)\n[PASS] test_transferEntireBalanceAndOneBaseUnitBack() (gas: 125505)\n[PASS] test_transferFromInsufficientAllowanceIsAtomic() (gas: 100473)\n[PASS] test_transferFromInsufficientBalanceRestoresAllowance() (gas: 98590)\n[PASS] test_transferFromSpendsFiniteAllowanceAndEmitsTransfer() (gas: 141463)\n[PASS] test_transferFromToZeroRestoresAllowance() (gas: 95785)\n[PASS] test_transferFromZeroSenderReverts() (gas: 44653)\n[PASS] test_transferInsufficientBalanceReverts() (gas: 45331)\n[PASS] test_transferToZeroRevertsEvenForZeroAmount() (gas: 66551)\n[PASS] test_unauthorizedSpenderCannotUseSomeoneElsesApproval() (gas: 92842)\n[PASS] test_unlimitedAllowanceRemainsUnlimited() (gas: 175940)\n[PASS] test_zeroTransferFromEmptyAccountEmitsEvent() (gas: 57521)\n[PASS] test_zeroTransferFromWithoutAllowanceEmitsTransfer() (gas: 45927)\nSuite result: ok. 28 passed; 0 failed; 0 skipped; finished in 547.10ms (60.69ms CPU time)\n\nRan 1 test for test/SoothTokenModel.t.sol:SoothTokenModelTest\n[PASS] testFuzz_operationSequencePreservesLedger(bytes32) (runs: 1024, μ: 10854319, ~: 10852106)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 557.22ms (556.92ms CPU time)\n\nRan 3 test suites in 558.05ms (1.64s CPU time): 32 tests passed, 0 failed, 0 skipped (32 total tests)\n","passed":true},{"durationMs":47,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SoothToken.approve(address,uint256)\",\"SoothToken.transfer(address,uint256)\",\"SoothToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":5,\"README.md\":134,\"foundry.toml\":15,\"src/SoothToken.sol\":18,\"test/SoothToken.t.sol\":309,\"test/SoothTokenLaunch.t.sol\":110,\"test/SoothTokenModel.t.sol\":107,\"test/support/TestBase.sol\":37},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":640,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":252,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/SoothToken.sol:12: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"fb8e538b713bca057ef1d9a42b40f4305e4a12784f92526ca99018e8e3a45145","verifiedTreeHash":"fb563e863f58411797ac81745e1a54bfbffcc940","verifierVersion":"0.1.0+3dc93dc1"}]}