{"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":"26b7e7da-fde4-4893-942e-573622e3fbb2","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"727b01081710c8e87bf416b08962bab46ae09f48f5a46e265c675b9bb076f1a8","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":"8b87548c39f285dae4bf24937315a1bb32f5055adb528b3e9114eb0b828ac62b","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":"5f6061a9f0f527feb8fb31b6188c208b79f3112f5f6519b9ee8bf2b8818d2ef6","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":"2fd12ff93842d06dbd3db7a223fa7fd68b670390eed4e14ce4f77df0e7b93d81","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":"e60384eca6b5e694e9ad2c1b61e10eea527f96922bc332dabfe142488e660bcf","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":"f3c663cde11fc11d252ad280e7ed0d166ba18e16d2ef68dc7d597cd4b680d583","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":"3b18b6aab4b98a3409d992a33e4e86aac67bdf99917d6b9184815f953207b225","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"1a0177d9e482bfcd50cfd19f88f83b25b674bea7f363b77d060da5dceb9adda7","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"606842ccca0e7c5d3017a54684625438eab9b351eb51dcf0cf88c43d1ea41464","skillId":"write-foundry-tests","subagents":4,"tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"606842ccca0e7c5d3017a54684625438eab9b351eb51dcf0cf88c43d1ea41464","skillId":"write-foundry-tests","state":"accepted"}],"objective":"A custom token: SIPHON (SIPH).\nToken name: SIPHON\nToken symbol: SIPH\nToken supply: 1,000,000,000 with 18 decimals, all minted once to the deployer in the constructor.","parentJobId":null,"planHash":"9ac81469f07983e50ff764ee7b26ba5b4e4d6dd2ab264996e73da4d3c1f173c3","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"26b7e7da-fde4-4893-942e-573622e3fbb2","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-2596-siphon"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"50986","feedbackHash":"091afdeecb7a8e41f072200349c3b114da649a74f8a0f22b5a0e6a20aadfe1a9","nodeKey":"audit_economics","submissionHash":"727b01081710c8e87bf416b08962bab46ae09f48f5a46e265c675b9bb076f1a8","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52131","feedbackHash":"3dd191eb097d9065ba8486c22c8752a8e3412942570c6b7d658c1b9f2fb009ae","nodeKey":"audit_flow","submissionHash":"8b87548c39f285dae4bf24937315a1bb32f5055adb528b3e9114eb0b828ac62b","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52205","feedbackHash":"e24accdfeadfb4f2e52ba031d56897fed82e0e893a54f0874ac039a0af064c49","nodeKey":"audit_judge","submissionHash":"5f6061a9f0f527feb8fb31b6188c208b79f3112f5f6519b9ee8bf2b8818d2ef6","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52135","feedbackHash":"603d1da0242f8c60b769a777591e5b7b363811f269616750365bcbadf8cb391b","nodeKey":"audit_math","submissionHash":"2fd12ff93842d06dbd3db7a223fa7fd68b670390eed4e14ce4f77df0e7b93d81","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"54235","feedbackHash":"6f3b6005dddba5bcab70132de9052f9df6160f7561c38289b03ad5727c59efbc","nodeKey":"audit_permissions","submissionHash":"e60384eca6b5e694e9ad2c1b61e10eea527f96922bc332dabfe142488e660bcf","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51510","feedbackHash":"2936f03b53cedfdf71978744dea720c5cb77438d6b510481ff4b1f368b74cd73","nodeKey":"build_contract_project","submissionHash":"f3c663cde11fc11d252ad280e7ed0d166ba18e16d2ef68dc7d597cd4b680d583","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52641","feedbackHash":"27c257b9c2b29536b4d592c3e4b740aa708ee0e17bd9f1f54d89d9c00048db9a","nodeKey":"manifest","submissionHash":"3b18b6aab4b98a3409d992a33e4e86aac67bdf99917d6b9184815f953207b225","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"50988","feedbackHash":"e6b2d4bf1b4791d638252d3b99b8a396297335764cc9a04353301a162ec23292","nodeKey":"write_foundry_tests","submissionHash":"1a0177d9e482bfcd50cfd19f88f83b25b674bea7f363b77d060da5dceb9adda7","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"fceb6cad800cc092989348012c8fdd264fb97f6453fe22f4976e18f0c704ab65","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"970da38f1d564250","findings":[],"hash":"0e15bde7a93870b09e93e6faed623b72a2b0ccd5b25c5f07f5f651798321840f","nodeId":"0ea12edd-57ee-4caa-998c-c986d14583c4","outcome":"failed","summary":"Your organization has disabled Claude subscription access for Claude Code · Use an Anthropic API key instead, or ask your admin to enable access","treeHash":null,"usage":{"cachedInputTokens":0,"inputTokens":0,"model":null,"outputTokens":0,"runtime":"claude","turns":1,"wallClockMs":2826}},{"artifacts":[],"attempt":1,"bundleHash":"60ecb1c2ba4452276e189ce6eb1eb39d0e1b5aa677f5bf28a8ab7c6c6f114e88","device":"fa2b0b9c7ebc1547","findings":[],"hash":"1a0177d9e482bfcd50cfd19f88f83b25b674bea7f363b77d060da5dceb9adda7","nodeId":"1412e5b6-12ba-4a37-b1d9-9290f290c015","outcome":"completed","summary":"I've added 25 tests in two new files under `test/` and found no defects in the token. The full suite of 55 tests passes with the verifier's fuzz seed, and `forge build` is clean. I haven't committed anything.\n\n**`test/SiphonToken.edges.t.sol`** (24 tests) covers the edge inputs the existing suite didn't pin down:\n- **Launch flows:** the token is deployed through CREATE2 and the supply split in the same call, mirroring the launch: 10% to the distributor, 88% to the pool and 2% to the remainder address. Each share arrives exactly, nothing is left on the deployer, and reusing the same salt reverts.\n- **Zero amounts and zero addresses:**\n  - A zero-amount `transferFrom` succeeds with no allowance.\n  - Pulling from the zero address reverts, even for zero tokens.\n  - Sending to the zero address reverts, even for zero tokens.\n  - A failed pull to the zero address leaves the allowance untouched.\n  - Tokens sent to the token contract itself are accepted and can't be recovered, as the README says.\n- **Allowances:**\n  - A new approval replaces the old one rather than adding to it.\n  - Approving zero revokes.\n  - Allowances are per spender.\n  - An allowance spent exactly to zero then refuses one more wei.\n  - Pulling your own tokens needs a self-allowance.\n  - The full supply can move through `transferFrom`.\n  - An allowance larger than the balance still can't take more than the balance.\n  - A `transferFrom` emits only a `Transfer` event.\n- **Return data and events:** `transfer` returns exactly one true word, an unknown function reverts with empty data, and the constructor emits exactly two events.\n- **Fuzz tests (1,000 runs each):**\n  - Any approved amount is stored exactly.\n  - An address that holds nothing can't move anything.\n  - Two-hop transfers lose nothing.\n  - An unlimited allowance never goes down.\n  - One wei below unlimited does go down.\n\n**`test/SiphonToken.ghost.invariant.t.sol`** keeps its own record of every balance and allowance across five holders, one of them the token contract. It makes random sequences of valid calls and of calls that must fail: transfers over the balance, transfers to the zero address, and pulls over the allowance or over the owner's balance. It ran 25,600 calls across all seven actions. After every sequence it checks that:\n- the supply is still exactly 1,000,000,000 × 10¹⁸;\n- every balance and allowance matches the record, and the balances add up to the supply;\n- the zero address holds nothing;\n- no call that should fail succeeded, and no call that should succeed failed.\n\nRun counts are set in the test files, since `foundry.toml` isn't mine to change.\n\nOne fuzz test failed on the first run, and the cause was my test, not the token: the fuzzer picked the zero address as the caller, and the token correctly rejects that sender before it checks the balance. I now keep the zero address out of that input.\n\nThe token is a plain OpenZeppelin v5 ERC-20 with no owner, mint, burn, fee or pause, and nothing behaved wrongly under any of these tests. So I didn't write `.imd-findings.json`. The two earlier test files are unchanged.","treeHash":"630b22f1e908ebf8bad948b15c31a525a9c5b271","usage":{"cachedInputTokens":264173,"inputTokens":16,"model":"claude-opus-5-5","outputTokens":14860,"runtime":"claude","turns":11,"wallClockMs":170996}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"b97527597dd934a0","findings":[],"hash":"2fd12ff93842d06dbd3db7a223fa7fd68b670390eed4e14ce4f77df0e7b93d81","nodeId":"0538e0f1-b886-4ade-8dcf-6b05ce5c57d9","outcome":"completed","summary":"The math review of SiphonToken found no defects. The findings file holds an empty list and a nine-row coverage record. The working tree is clean apart from that file.\n\n**What was checked**\n\n- **Math Precision.** The only arithmetic the token adds is the supply constant. It evaluates to exactly 1e27, with the exponent typed as uint256 under the solc 0.7+ literal rule, and sits far below the uint256 ceiling. There are no divisions, fees, casts, or scale conversions anywhere in the contract.\n- **Boundary.** The token makes no external calls, has no payable, receive, or fallback, and decodes no bytes. The only sentinel branches are OpenZeppelin's zero-address checks, which revert rather than silently no-op. Max-uint transfer reverts cleanly with ERC20InsufficientBalance, and allowance at max-1 is treated as finite.\n- **Numerical Gap.** The supply-equals-sum-of-balances invariant rests on OpenZeppelin's unchecked blocks, whose precondition is enforced by the preceding checked comparison. The existing invariant suite and a scratch fuzz both confirm it. The launch split percentages all divide 1e27 exactly, so the factory's share math loses nothing on this supply.\n\n**Verification performed**\n\n- The vendored ERC20, Context, IERC20, IERC20Metadata and IERC6093 files are byte-identical to upstream OpenZeppelin v5.4.0.\n- The full existing suite passes with 30 tests, including the invariant run.\n- A scratch test of eight boundary cases passed and was removed afterwards.\n\n**Leads not promoted.** The aderyn large-numeric-literal line is a style note. The DECIMALS constant is not wired into decimals(), which is a latent coupling with no failing input today. Both are recorded as coverage rows, not findings.\n\nNothing was unreached in the assigned area.","treeHash":null,"usage":{"cachedInputTokens":371049,"inputTokens":194,"model":"claude-fable-5-1","outputTokens":11409,"runtime":"claude","turns":22,"wallClockMs":176016}},{"artifacts":[],"attempt":1,"bundleHash":"d6bda2a801b47f75155640e319ce5826e817f121d9446cfc3b9846db2366fb7f","device":"803eeae3d8b63de3","findings":[],"hash":"3b18b6aab4b98a3409d992a33e4e86aac67bdf99917d6b9184815f953207b225","nodeId":"00f48d86-457c-4602-8930-d5ea9717e1b6","outcome":"completed","summary":"`launch.json` is written and verified. It is the only new file in the tree.\n\n**What the manifest says**\n- Kind is custom_token. The token contract is SiphonToken, named SIPHON with symbol SIPH and 18 decimals.\n- constructorArgs is empty. The compiled ABI confirms the constructor takes zero parameters.\n- totalSupply is 1000000000000000000000000000, matching the constant the constructor mints to msg.sender.\n- contracts is empty. The accepted tree has no application contracts, only the token.\n- pool and economics are copied exactly as the launch gives them: native ETH, fee 12500, tick spacing 60, the one-to-one provenance price, and the requester's economics object verbatim.\n- notes describe only what is in the tree, in 883 characters.\n\n**Checks run**\n- `forge build` compiled cleanly with solc 0.8.26.\n- `forge test` with the verifier's fuzz seed passed all 30 tests across both suites, including the 256-run invariant suite.\n- The manifest parses as JSON with only the schema's top-level keys, and all addresses are lowercase.\n\n**Working tree**\nNo tracked file was modified. The untracked dotfiles that `git status` lists are sandbox device nodes owned by nobody, not files of mine. The protected tests themselves need the verifier's environment (factory, pool manager and launch number) and cannot be run here, but the token satisfies every behaviour they probe: fixed supply minted to the deployer, no admin surface, no transfer fee, no DELEGATECALL or SELFDESTRUCT.","treeHash":"206bd7ac79c17ef1f3265c627ba36ef0b1b7a00e","usage":{"cachedInputTokens":145972,"inputTokens":130,"model":"claude-fable-5-1","outputTokens":2868,"runtime":"claude","turns":9,"wallClockMs":107048}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"fa5c50e7abe46571","findings":[{"citation":"resolved","description":"Merged from audit_permissions (its only finding); audit_economics, audit_math, audit_flow and the independent tester reported nothing. Reproduced by the judge. approve() (ERC20.sol:120) overwrites _allowances[owner][spender] unconditionally at line 280, while transferFrom() decrements it through _spendAllowance (line 301, '_approve(owner, spender, currentAllowance - value, false)'). An owner lowering a non-zero allowance therefore gives the spender a window to pull the old amount first and the new amount afterwards. This is the well-known ERC-20 approve race, part of the standard, not a defect introduced by this token: the judge diffed the vendored ERC20.sol, IERC20.sol, IERC20Metadata.sol, Context.sol and draft-IERC6093.sol byte-for-byte against upstream OpenZeppelin v5.4.0 (identical), and SiphonToken (src/SiphonToken.sol) overrides nothing. No privileged actor exists; launch flows (factory -> distributor -> claimant, factory -> PoolManager, trader <-> PoolManager) use transfer() or self-set allowances and are unaffected. No code change is required or recommended: changing approve() semantics would break ERC-20 conformance. Recorded at info as a documented trust assumption for holders (reduce an allowance to zero before setting a new value, or use a spender you trust).","line":280,"path":"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol","reproduction":"Judge scratch test test/scratch/ApproveRace.t.sol (passes on this code, demonstrating the behaviour). State: owner O deploys SiphonToken and holds 1e27 SIPH; spender S. 1) prank(O) approve(S, 100e18). 2) prank(S) transferFrom(O, S, 100e18): succeeds, allowance(O,S) == 0. 3) prank(O) approve(S, 50e18) (the intended reduction lands after the front-run). 4) prank(S) transferFrom(O, S, 50e18): succeeds. Expected by O: S pulls at most 100e18 (or 50e18). Actual: balanceOf(S) == 150e18 and allowance(O,S) == 0. Verified with forge test --match-path test/scratch/ApproveRace.t.sol: test_spenderFrontRunsAllowanceReductionAndSpendsBoth passes asserting balanceOf(S) == 150e18.","severity":"info","snippet":"        _allowances[owner][spender] = value;","title":"Standard ERC-20 approve race: a spender can front-run an allowance reduction and spend both the old and the new allowance (inherited unmodified from OpenZeppelin v5.4.0; trust assumption for holders, "}],"hash":"5f6061a9f0f527feb8fb31b6188c208b79f3112f5f6519b9ee8bf2b8818d2ef6","nodeId":"d0529b47-bd4d-4cbc-ab57-2a0bbae54b1e","outcome":"completed","summary":"The review is complete. The findings file is written and the working tree is clean apart from it.\n\n**Outcome.** The SIPHON token has no defects. It is an unmodified OpenZeppelin v5.4.0 ERC-20 with no constructor arguments, no owner, no mint or burn path after deployment, and no fee or transfer restriction.\n\n**Specialist findings.** Four specialists and the independent tester reported one finding in total, from audit_permissions. It is the standard ERC-20 approve race, where a spender can front-run an allowance reduction and spend both amounts. I reproduced it with a scratch test and kept it at info severity as a holder trust assumption, since it is inherent to the ERC-20 standard and the vendored library is byte-identical to upstream. No duplicates existed to merge. The static analysis lead about a large numeric literal is a readable underscore literal that computes the correct supply, so it was not kept.\n\n**My own checks.**\n- All 55 project tests pass, including the 256-run invariant suites.\n- The compiled runtime and creation code contain no DELEGATECALL, CALLCODE or SELFDESTRUCT, and both are far below the size limits.\n- The five vendored OpenZeppelin files diff identically against upstream v5.4.0.\n- The manifest in launch.json matches the code: empty constructor arguments, 18 decimals and the exact minted supply.\n- The protected tests could not run locally because they need the network's own harness, which this tree does not vendor. Every behaviour they assert was traced by hand and holds.\n\n**Coverage.** All three entry points are answered, plus rows for the constructor and supply, bytecode deployability, the manifest and the vendored dependencies.","treeHash":null,"usage":{"cachedInputTokens":486915,"inputTokens":418,"model":"claude-fable-5-1","outputTokens":8619,"runtime":"claude","turns":14,"wallClockMs":171009}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"ef5038c1bdac3372","findings":[],"hash":"727b01081710c8e87bf416b08962bab46ae09f48f5a46e265c675b9bb076f1a8","nodeId":"9e74c1af-009c-4924-adfd-9ee99718c414","outcome":"completed","summary":"The review is complete. No defects were found in the assigned area, and the findings file is written with an empty list and full coverage.\n\n**What I checked.** The token at `src/SiphonToken.sol` is a 39-line wrapper over OpenZeppelin ERC20 with no constructor arguments, no owner, no mint, burn, pause, fee or hook. I applied the Senior Auditor's Mindset and all three guides for my area (Economic Security, Invariant, Flow Gap) myself, with no helpers.\n\n- **Dependency integrity.** The real execution surface is the vendored library, so I hashed the five OpenZeppelin files the token compiles against and compared them to the upstream v5.4.0 tag. All five match byte-for-byte. No delegatecall, callcode or selfdestruct exists in the chain.\n- **ABI and storage.** The compiled ABI exposes only the three state-changing ERC-20 functions plus views and five constant getters. Storage is the standard five OpenZeppelin slots.\n- **Invariants.** Supply is minted once in the constructor and equals exactly 1e27. The burn path is internal and unreachable. Balances always sum to supply. The project's own invariant suite passed 128,000 handler calls with the verifier's fuzz seed.\n- **Flows and economics.** I wrote eight scratch probes covering the exact launch flows (factory to distributor to claimant, factory to a pulling pool stand-in, trader buy and sell, remainder to requester), self-transfer of the whole balance, spender equal to owner, transfer to the token itself, max-uint amount, round-trip losslessness under fuzz, and the standard ERC-20 approve race. All passed and every flow arrived exact. The approve race is inherent to the ERC-20 interface and is recorded in coverage as a standard property, not reported as a defect.\n- **Static analysis leads.** Slither reported nothing. Aderyn's one low lead, the large numeric literal at line 24, is stylistic and the value was verified equal to the brief.\n\n**Output.** The file `.imd-findings.json` holds zero findings and nine coverage rows: one `holds` row for each of the three listed entry points, plus rows for the supply invariant, the balance-conservation invariant, the launch-flow invariant, dependency integrity, constructor-time state, and the reference deploy script. The scratch test directory was removed, and the working tree is unchanged apart from the findings file, which the repository already excludes from git.\n\n**Not covered.** The deployer's price derivation and the manifest step do not exist in this tree, so I could not review them.","treeHash":null,"usage":{"cachedInputTokens":809789,"inputTokens":386,"model":"claude-fable-5-1","outputTokens":14703,"runtime":"claude","turns":28,"wallClockMs":229807}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"de319b702da6aa2e","findings":[],"hash":"8b87548c39f285dae4bf24937315a1bb32f5055adb528b3e9114eb0b828ac62b","nodeId":"0ea12edd-57ee-4caa-998c-c986d14583c4","outcome":"completed","summary":"I found no defects in SIPHON (SIPH). I wrote `.imd-findings.json` with an empty findings list and a coverage row for each of the three entry points, all marked `holds`. The JSON parses correctly, and I changed no repository files.\n\n**What the code is:** `src/SiphonToken.sol` is a plain OpenZeppelin v5.4.0 ERC-20. Its only addition is a constructor that mints 1,000,000,000 × 10¹⁸ tokens to `msg.sender` once and emits a `SupplyMinted` event. It has no overrides, owner, mint/burn/pause functions, fallback, constructor arguments or external calls.\n\n**What I checked, against the Execution Trace, Periphery and First Principles guides:**\n- **Execution Trace:** `transfer`, `transferFrom` and `approve` run straight through OpenZeppelin's code. Nothing in them depends on a value read before a state change, can stop halfway through an update, uses a special-value shortcut or leaves an allowance exploitable. There are no settings that could change between transactions. Since there's no fee, the launch's own transfers (factory to distributor, distributor to claimant, into and out of the pool) move exactly the stated amounts.\n- **Periphery:** The only libraries are the vendored OpenZeppelin files. I compared `ERC20.sol`, `IERC20.sol`, `IERC20Metadata.sol`, `Context.sol` and `draft-IERC6093.sol` byte-for-byte with the upstream v5.4.0 tag, and they are identical, so the base contract hasn't been tampered with.\n- **First Principles:** Supply can't grow, because `_mint` is only reachable from the constructor. Self-transfers, zero amounts and maximum allowances behave as standard. Transfers to or from the zero address revert.\n- **Static-analysis lead:** Aderyn's \"large numeric literal\" note at line 24 is just `1_000_000_000`, the intended supply written with separators. It's a style note, not a defect.\n- **Tests:** `forge test` passes all 30 tests, including the 128,000-call invariant run.\n\n**Not covered:** I didn't run the launch-floor tests in `.imd/reads/protected`, because they need launch environment variables and v4-core sources that aren't in this tree. I also skipped the other nine Pashov guides beyond a quick look, since they belong to the other three reviewers.\n\n`git status` shows untracked files at the repository root that I didn't create: `.bashrc`, `.profile`, `.zshrc`, `.zprofile`, `.bash_profile`, `.gitconfig`, `.gitmodules`, `.claude/`, `.idea`, `.vscode`, `.mcp.json` and `.ripgreprc`. They look like sandbox environment artifacts. Make sure they aren't included if anything is packaged from this directory.","treeHash":null,"usage":{"cachedInputTokens":315822,"inputTokens":18,"model":"claude-opus-5-5","outputTokens":4392,"runtime":"claude","turns":9,"wallClockMs":67028}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"bc39660800b5f882","findings":[{"citation":"resolved","description":"Asymmetry guide, pair approve <-> pull. approve() (ERC20.sol:120, writing _allowances[owner][spender] = value at line 280) overwrites the allowance unconditionally, while transferFrom() decrements it through _spendAllowance (ERC20.sol:294, line 301 '_approve(owner, spender, currentAllowance - value, false)'). The write and the read-then-decrement are not mirror operations, so an owner who lowers an existing non-zero allowance gives the spender a window to spend the old value first and the new value afterwards. This is the well-known ERC-20 approve race, not a defect introduced by SiphonToken: the vendored ERC20.sol, Context.sol, IERC20.sol, IERC20Metadata.sol and draft-IERC6093.sol were diffed byte-for-byte against upstream OpenZeppelin v5.4.0 and are identical, SiphonToken overrides nothing, and OpenZeppelin v5 deliberately dropped increaseAllowance/decreaseAllowance. No privileged actor is involved and the launch flows (factory -> distributor -> claimant, factory -> PoolManager, trader <-> PoolManager) use transfer or self-set allowances, so they are unaffected. Reported at info so the judge can record it as a documented trust assumption for holders rather than a fix: the README lists operational responsibilities but does not mention that allowances should be reduced to zero before being changed. If the author wants to close it, the only in-scope fix that preserves the plain-ERC-20 design is documentation, or optionally exposing increaseAllowance/decreaseAllowance-style helpers; changing approve() semantics would break ERC-20 conformance and is not recommended.","line":280,"path":"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol","reproduction":"State: owner O holds >= 150e18 SIPH (e.g. the deployer). 1) O calls approve(S, 100e18). 2) O broadcasts approve(S, 50e18) intending to lower the allowance. 3) S sees it pending and first calls transferFrom(O, S, 100e18): succeeds, allowance 0. 4) O's approve(S, 50e18) lands: allowance 50e18. 5) S calls transferFrom(O, S, 50e18): succeeds. Expected by O: S can pull at most 100e18 (or 50e18). Actual: S received 150e18 and allowance is 0. Verified with the scratch test test/scratch/ApproveRace.t.sol (test_spenderFrontRunsAllowanceReductionAndSpendsBoth passes on this code, asserting balanceOf(S) == 150e18).","severity":"info","snippet":"        _allowances[owner][spender] = value;","title":"approve/transferFrom asymmetry: a spender can front-run an allowance reduction and spend both the old and the new allowance (standard ERC-20 behaviour, inherited unmodified from OpenZeppelin v5.4.0)"}],"hash":"e60384eca6b5e694e9ad2c1b61e10eea527f96922bc332dabfe142488e660bcf","nodeId":"53c5490d-9a76-45b1-9d4a-556e3f969728","outcome":"completed","summary":"The review is complete and the findings file is written and validated. No source files were changed; only `.imd-findings.json` and the scratch test under `test/scratch/` were created, and git reports a clean tracked tree.\n\n**Outcome: no defects in the permissions area.** SIPHON is a 35-line wrapper over an unmodified OpenZeppelin v5.4.0 ERC-20 with no owner, role, modifier, initializer, mint, burn, pause, blacklist, receive, fallback or proxy. The three state-changing entry points bind strictly to the caller or the caller's own allowance.\n\n**What I checked, per guide**\n\n- **Access Control.** Mapped every storage writer. Balances and supply are written only through transfer paths bound to the caller, and through `_mint` in the constructor. Allowances are written only by the owner's own `approve` or by decrementing the caller's own row. The burn branch inside `_update` is unreachable because `_transfer` rejects the zero address first. Context's sender is plain `msg.sender`, so no forwarder confusion. The compiled ABI confirms the surface is exactly the three listed entry points plus views.\n- **Trust Gap.** No privileged actor, setter, fee recipient, oracle or price formula exists in the token, so none of the four seams is present. The deployer's full starting balance is an economic position the README documents as the factory's distribution duty, not a permission.\n- **Asymmetry.** The approve/pull pair shows the standard ERC-20 overwrite-versus-decrement race. I reported it at info severity with a reproduction confirmed by a scratch test, framed as a holder trust assumption rather than a code defect, since the vendored library matches upstream byte-for-byte and OpenZeppelin v5 removed the allowance helpers by design.\n\n**Other evidence.** The full project suite passed, with 30 tests including 256-run fuzzing and the two invariants. The vendored ERC20 and its four parents diffed identical to the upstream v5.4.0 tag. The aderyn large-literal lead is readability only, since a unit test asserts the constant's value.\n\n**Coverage record.** All three verifier entry points have rows: `approve` marked finding (info, reference 1), `transfer` and `transferFrom` marked holds. Seven further rows record the constructor, the no-admin invariant, writer-guard parity, the trust-gap seams, the library diff, the static-analysis lead and the reference deploy script. Nothing in my area was unreached.","treeHash":null,"usage":{"cachedInputTokens":1013333,"inputTokens":546,"model":"claude-fable-5-1","outputTokens":11797,"runtime":"claude","turns":18,"wallClockMs":357653}},{"artifacts":[],"attempt":1,"bundleHash":"a316f5af2a79a675d456092373e570a36fe9d657547d0418d108ca8c987cd438","device":"8d428b115b0ebd64","findings":[],"hash":"f3c663cde11fc11d252ad280e7ed0d166ba18e16d2ef68dc7d597cd4b680d583","nodeId":"d3adbf01-bc9b-4027-b032-788cefac7b08","outcome":"completed","summary":"The SIPHON token is built, tested, documented, and committed. The offline rebuild, test run, and format check all pass.\n\n**What was delivered**\n\n- `src/SiphonToken.sol`: contract `SiphonToken` (11 characters, within the 32-byte launch limit) returning name `SIPHON`, symbol `SIPH`, 18 decimals. The constructor mints the full one billion tokens to `msg.sender` once and emits `Transfer` plus a `SupplyMinted` event. It inherits only OpenZeppelin v5.4.0 `ERC20`, so there is no owner, mint, burn, pause, blacklist, fee, or upgrade path, and no external calls in the constructor.\n- `foundry.toml` pins `solc = \"0.8.26\"`, Cancun, optimizer on, `bytecode_hash = \"none\"` and `cbor_metadata = false`. The deployed bytecode tail confirms no metadata hash. `ffi` is off and `fs_permissions` is empty.\n- `lib/`: forge-std v1.9.7 and OpenZeppelin Contracts v5.4.0 vendored as plain files from release tarballs. No submodules, so the verifier builds with no network.\n- `test/SiphonToken.t.sol` and `test/SiphonToken.invariant.t.sol`: 30 tests covering metadata, exact supply to an EOA and to a contract deployer, transfer and allowance success paths, insufficient balance and allowance reverts, zero-address reverts, rejection of fourteen admin and mint selectors from both a stranger and the deployer, ETH rejection, a bytecode scan for DELEGATECALL, CALLCODE and SELFDESTRUCT, four fuzz tests, and two invariants over random transfer sequences.\n- `script/DeploySiphonToken.s.sol`: reference script whose `deploy()` function is unit-tested and reads no environment.\n- `README.md`: assumptions, deployment parameters, the manifest fields the launch step will record, launch-policy values, operational responsibilities, and an \"After launch\" section stating there is nothing to configure.\n\n**Verification**\n\n- `forge build`, `forge test` and `forge fmt --check` pass, including with the verifier's fuzz seed.\n- A scratch replay of the protected floor's non-pool checks passed. It deploys the creation code via CREATE2 from a factory stand-in on chain id 4663, then checks supply, the whole swarm share arriving and being claimable, the no-supply-growth selector loop, and the no-freeze selector loop.\n- The pool seed and swap checks could not be replayed locally because they need the verifier's own v4 harness. Since the token has unconditional transfers with no fee, those flows move exactly what they say.\n\n**Committed** as ee98aea on main with 376 tracked files and nothing from `test/scratch/`. The commit used an explicit author identity because the repository had none configured.","treeHash":"fad7f08294c656a78891d0ae994be452d06dfceb","usage":{"cachedInputTokens":537640,"inputTokens":354,"model":"claude-fable-5-1","outputTokens":21058,"runtime":"claude","turns":23,"wallClockMs":253148}}],"verification":[{"checks":[{"durationMs":2079,"exitCode":0,"name":"build","output":"Compiling 31 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.97s\nCompiler run successful!\n","passed":true},{"durationMs":13333,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 29 tests for test/SiphonToken.t.sol:SiphonTokenTest\n[PASS] testFuzz_transferAboveBalanceReverts(uint256,uint256) (runs: 256, μ: 99607, ~: 99926)\nLogs:\n  Bound result 231451917787305\n  Bound result 115792089237316195423570985008687907853269984665640564039457583776461211852628\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 256, μ: 97662, ~: 98567)\nLogs:\n  Bound result 519438208546583527511602032\n\n[PASS] testFuzz_transferFromBeyondAllowanceReverts(uint256,uint256) (runs: 256, μ: 95262, ~: 95673)\nLogs:\n  Bound result 16466\n  Bound result 999999999999999999999983584\n\n[PASS] testFuzz_transferFromWithinAllowance(uint256,uint256) (runs: 256, μ: 157234, ~: 159055)\nLogs:\n  Bound result 16466\n  Bound result 50\n\n[PASS] test_approveAndTransferFrom() (gas: 171789)\n[PASS] test_approveZeroSpenderReverts() (gas: 32928)\n[PASS] test_chainOfTransfersIsLossless() (gas: 205714)\n[PASS] test_constantsMatchTheBrief() (gas: 25427)\n[PASS] test_constructorEmitsTransferFromZeroAndSupplyMinted() (gas: 10073)\n[PASS] test_contractDeployerReceivesWholeSupply() (gas: 372595)\n[PASS] test_deployScriptFunctionDeploysToCaller() (gas: 1567512)\n[PASS] test_deployerCannotPullWithoutAllowance() (gas: 98201)\n[PASS] test_infiniteAllowanceIsNotDecremented() (gas: 123379)\n[PASS] test_metadata() (gas: 58183)\n[PASS] test_mintsWholeSupplyToDeployerOnce() (gas: 44071)\n[PASS] test_noAdminOrMintSelectorExists() (gas: 1696848)\n[PASS] test_plainEtherTransferIsRejected() (gas: 39438)\n[PASS] test_runtimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 3103274)\n[PASS] test_transferFromRevertsBeyondAllowance() (gas: 87947)\n[PASS] test_transferFromRevertsWhenOwnerLacksBalance() (gas: 93560)\n[PASS] test_transferFromRevertsWithoutAllowance() (gas: 40299)\n[PASS] test_transferMovesExactAmount() (gas: 96062)\n[PASS] test_transferRevertsOnInsufficientBalance() (gas: 37774)\n[PASS] test_transferRevertsWhenExceedingBalanceByOne() (gas: 92637)\n[PASS] test_transferToSelfKeepsBalance() (gas: 43896)\n[PASS] test_transferToZeroAddressReverts() (gas: 32876)\n[PASS] test_transferWholeBalance() (gas: 78403)\n[PASS] test_transferZeroAmountSucceeds() (gas: 47835)\n[PASS] test_twoDeploymentsAreIndependent() (gas: 45027)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 42.92ms (168.33ms CPU time)\n\nRan 24 tests for test/SiphonToken.edges.t.sol:SiphonTokenEdgesTest\n[PASS] testFuzz_approveStoresExactValue(address,address,uint256) (runs: 1000, μ: 80608, ~: 80884)\nLogs:\n  Bound result 101\n  Bound result 22203\n\n[PASS] testFuzz_infiniteAllowanceNeverDecrements(uint256,uint256) (runs: 1000, μ: 181451, ~: 182074)\nLogs:\n  Bound result 2455\n  Bound result 1504\n\n[PASS] testFuzz_nearMaxAllowanceDecrements(uint256) (runs: 1000, μ: 130439, ~: 130224)\nLogs:\n  Bound result 22303\n\n[PASS] testFuzz_strangerCannotMoveAnything(address,uint256) (runs: 1000, μ: 84702, ~: 84643)\nLogs:\n  Bound result 1354941157727837149803708939817078948520967367685\n  Bound result 15327611999957647209117\n\n[PASS] testFuzz_twoHopTransferConserves(address,address,uint256,uint256) (runs: 1000, μ: 187409, ~: 189333)\nLogs:\n  Bound result 21406\n  Bound result 22736\n  Bound result 105151831\n  Bound result 88\n\n[PASS] test_allowanceAboveBalanceIsCappedByBalance() (gas: 153768)\n[PASS] test_allowanceIsPerSpender() (gas: 118090)\n[PASS] test_allowanceSpentExactlyThenExhausted() (gas: 159967)\n[PASS] test_approveOverwritesRatherThanAdds() (gas: 133306)\n[PASS] test_approveZeroRevokes() (gas: 113468)\n[PASS] test_constructorEmitsExactlyTwoLogs() (gas: 14901)\n[PASS] test_create2LaunchSplitIsExact() (gas: 493080)\n[PASS] test_create2SameSaltTwiceReverts() (gas: 475906)\n[PASS] test_emptyCalldataWithoutValueReverts() (gas: 28993)\n[PASS] test_fullSupplyThroughTransferFrom() (gas: 170983)\n[PASS] test_selfTransferFromNeedsSelfAllowance() (gas: 160257)\n[PASS] test_transferFromEmitsOnlyTransfer() (gas: 123433)\n[PASS] test_transferFromToZeroAddressRevertsAndKeepsAllowance() (gas: 119035)\n[PASS] test_transferFromZeroAddressReverts() (gas: 65568)\n[PASS] test_transferFromZeroWithoutAllowanceSucceeds() (gas: 70650)\n[PASS] test_transferReturnsExactlyOneTrueWord() (gas: 65541)\n[PASS] test_transferToTokenContractIsAcceptedAndStranded() (gas: 121088)\n[PASS] test_transferZeroToZeroAddressStillReverts() (gas: 32880)\n[PASS] test_unknownSelectorRevertsWithEmptyData() (gas: 29940)\nSuite result: ok. 24 passed; 0 failed; 0 skipped; finished in 43.57ms (217.17ms CPU time)\n\nRan 1 test for test/SiphonToken.invariant.t.sol:SiphonTokenInvariantTest\n[PASS]\nSiphonTokenInvariantTest invariants:\n[PASS] invariant_actorBalancesSumToSupply\n[PASS] invariant_totalSupplyIsFixed\n SiphonTokenInvariantTest invariants (runs: 256, calls: 128000, reverts: 0)\n\n╭---------------+--------------+-------+---------+----------╮\n| Contract      | Selector     | Calls | Reverts | Discards |\n+===========================================================+\n| SiphonHandler | approve      | 42873 | 0       | 0        |\n|---------------+--------------+-------+---------+----------|\n| SiphonHandler | transfer     | 42508 | 0       | 0        |\n|---------------+--------------+-------+---------+----------|\n| SiphonHandler | transferFrom | 42619 | 0       | 0        |\n╰---------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 444\n  Bound result 0\n  Bound result 477\n  Bound result 1\n  Bound result 10\n  Bound result 0\n  Bound result 423\n  Bound result 0\n  Bound result 32\n  Bound result 0\n  Bound result 2540\n  Bound result 0\n  Bound result 7\n  Bound result 0\n  Bound result 19\n  Bound result 95\n  Bound result 329\n  Bound result 0\n  Bound result 1234000000000000000000\n  Bound result 429650608270857958692028739\n  Bound result 0\n  Bound result 127\n  Bound result 456\n  Bound result 0\n  Bound result 543\n  Bound result 1295\n  Bound result 1985807559\n  Bound result 6000000000000000000\n  Bound result 0\n  Bound result 2\n  Bound result 317530826314043693713024535\n  Bound result 0\n  Bound result 244\n  Bound result 0\n  Bound result 100\n  Bound result 24576\n  Bound result 1000000000000000000\n  Bound result 55081707598766345731813\n  Bound result 10\n  Bound result 160\n  Bound result 5000000000000000000\n  Bound result 736\n  Bound result 1248\n  Bound result 10000\n  Bound result 81008940\n  Bound result 957526737273019973207\n  Bound result 3448\n  Bound result 251596713557510104423\n  Bound result 0\n  Bound result 5\n  Bound result 3477573098\n  Bound result 4494\n  Bound result 4000000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 255971417494389687862155811\n  Bound result 757\n  Bound result 5821\n  Bound result 243\n  Bound result 0\n  Bound result 1064\n  Bound result 394554660\n  Bound result 4569\n  Bound result 732\n  Bound result 0\n  Bound result 0\n  Bound result 171646089574583355255877390\n  Bound result 2789\n  Bound result 1000000000000000001\n  Bound result 64\n  Bound result 255\n  Bound result 243\n  Bound result 18876549169469945502\n  Bound result 0\n  Bound result 2184\n  Bound result 1597\n  Bound result 5000000000000000000\n  Bound result 1649\n  Bound result 100000000000000000000\n  Bound result 3000000000000000000\n  Bound result 5190\n  Bound result 810\n  Bound result 14947590417440773097\n  Bound result 103482660599392734040170240\n  Bound result 1842\n  Bound result 86\n  Bound result 5\n  Bound result 29\n  Bound result 10\n  Bound result 2142\n  Bound result 0\n  Bound result 4000000000000000000\n  Bound result 242\n  Bound result 2428\n  Bound result 1000000000000000001\n  Bound result 582\n  Bound result 145885873739460338457178991\n  Bound result 1476\n  Bound result 244\n  Bound result 3401\n  Bound result 4325\n  Bound result 1000000000\n  Bound result 255971440370938857332107768\n  Bound result 3037\n  Bound result 3591\n  Bound result 7\n  Bound result 90\n  Bound result 68\n  Bound result 194369\n  Bound result 845532125434856487338206207\n  Bound result 2832\n  Bound result 91\n  Bound result 211648121343168635690297360\n  Bound result 53325083833043579476275308\n  Bound result 83080458732698660140910\n  Bound result 256\n  Bound result 1234000000000000000000\n  Bound result 242\n  Bound result 424\n  Bound result 1234000000000000000000\n  Bound result 3570957910797308009370\n  Bound result 299\n  Bound result 198\n  Bound result 6000000000000000000\n  Bound result 1295\n  Bound result 1\n  Bound result 787\n  Bound result 5139\n  Bound result 95\n  Bound result 477478920677913978828\n  Bound result 223\n  Bound result 1060383464129821644443\n  Bound result 537\n  Bound result 173616535870178355490\n  Bound result 0\n  Bound result 4057\n  Bound result 0\n  Bound result 9\n  Bound result 265343198677660915124\n  Bound result 6000000000000000000\n  Bound result 4000000000000372444\n  Bound result 91\n  Bound result 5167\n  Bound result 105703017010658452272099723\n  Bound result 1416\n  Bound result 1\n  Bound result 86\n  Bound result 88\n  Bound result 7\n  Bound result 220230125168851808895103520\n  Bound result 2563\n  Bound result 7\n  Bound result 18\n  Bound result 2\n  Bound result 12\n  Bound result 0\n  Bound result 660\n  Bound result 183524674402596203\n  Bound result 4536\n  Bound result 28\n  Bound result 110762912136012369\n  Bound result 242\n  Bound result 0\n  Bound result 3999999999999999976\n  Bound result 253\n  Bound result 1233999999999999998718\n  Bound result 703\n  Bound result 1841\n  Bound result 25\n  Bound result 1646\n  Bound result 220230121279614721030749569\n  Bound result 361357796020429194214904184\n  Bound result 486077906516934478524959054\n  Bound result 1000000000000000001\n  Bound result 1\n  Bound result 45620244126821278176259358\n  Bound result 94\n  Bound result 4\n  Bound result 0\n  Bound result 1000000000000000000\n  Bound result 35800307107981820582238130\n  Bound result 4926\n  Bound result 1\n  Bound result 294287586538608570\n  Bound result 16783209916422575082887657\n  Bound result 4\n  Bound result 91\n  Bound result 88\n  Bound result 74344430045927340616280613\n  Bound result 4269\n  Bound result 845\n  Bound result 360\n  Bound result 0\n  Bound result 2988\n  Bound result 777000000000000000000\n  Bound result 6\n  Bound result 0\n  Bound result 319378275770020242502300631\n  Bound result 30\n  Bound result 60000000000000000000\n  Bound result 33238430895434022500124846\n  Bound result 1877\n  Bound result 3160687104357325196133209\n  Bound result 82909982012052883535274718\n  Bound result 6\n  Bound result 2\n  Bound result 418356011261165488365\n  Bound result 299521079322086021172\n  Bound result 7\n  Bound result 7\n  Bound result 2145781\n  Bound result 1429\n  Bound result 2178\n  Bound result 42\n  Bound result 42\n  Bound result 6000000000000000000\n  Bound result 4000000000000000000\n  Bound result 10000000000000000000\n  Bound result 57030741600413733\n  Bound result 826074470\n  Bound result 74105158172915513805839144\n  Bound result 1185\n  Bound result 4810\n  Bound result 0\n  Bound result 4\n  Bound result 817428790637368443\n  Bound result 35800307107981820582243540\n  Bound result 243\n  Bound result 1353\n  Bound result 1\n  Bound result 6000000000000000000\n  Bound result 4\n  Bound result 1\n  Bound result 127724973856552194011438295\n  Bound result 2904812228804867077150690\n  Bound result 841\n  Bound result 1561114403098786563426977\n  Bound result 862\n  Bound result 20633990266028\n  Bound result 254\n  Bound result 91\n  Bound result 88\n  Bound result 476938117539440716645979\n  Bound result 3720\n  Bound result 50906617272276626861734760\n  Bound result 93131751160923672520222206\n  Bound result 220230121279614721030749571\n  Bound result 2776\n  Bound result 811533697684387020310151\n  Bound result 218441678462635955950696683\n  Bound result 2878\n  Bound result 0\n  Bound result 36\n  Bound result 3000000000000000000\n  Bound result 8800\n  Bound result 2184\n  Bound result 254\n  Bound result 4166545675653635944811642\n  Bound result 10000\n  Bound result 96\n  Bound result 100000000000000000000\n  Bound result 9687741988694234260847074\n  Bound result 26\n  Bound result 42\n  Bound result 104903983933478951556030690\n  Bound result 330175194692835102\n  Bound result 820\n  Bound result 26\n  Bound result 44461062527058037494852362\n  Bound result 813\n  Bound result 159129615496991530399703541\n  Bound result 0\n  Bound result 177711657876616269054034326\n  Bound result 25044184671462546140194985\n  Bound result 42799190894934068465913245\n  Bound result 279\n  Bound result 48\n  Bound result 6000000000000000000\n  Bound result 3000000000000000000\n  Bound result 126614140497163095456069194\n  Bound result 63\n  Bound result 145885874739460338457176565\n  Bound result 2957397979\n  Bound result 4000000000000000000\n  Bound result 160\n  Bound result 83044817481134788772532166\n  Bound result 862\n  Bound result 1035\n  Bound result 216199134705022662307726151\n  Bound result 2\n  Bound result 30115644602051149915613578\n  Bound result 252\n  Bound result 1848\n  Bound result 36\n  Bound result 10000000000000000001\n  Bound result 95\n  Bound result 1234000000000000000000\n  Bound result 693404023993070309\n  Bound result 24575411361542638307104315\n  Bound result 3277347093643457520557821\n  Bound result 1647\n  Bound result 59353033686\n  Bound result 88\n  Bound result 2965\n  Bound result 3\n  Bound result 2548672804751489866426136\n  Bound result 3669\n  Bound result 147990630784190407352165814\n  Bound result 10000000000000000000\n  Bound result 1000000000\n  Bound result 17\n  Bound result 22\n  Bound result 1\n  Bound result 1325\n  Bound result 10000000000000000000\n  Bound result 8800\n  Bound result 1264811664\n  Bound result 8\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 11.18s (11.18s CPU time)\n\nRan 1 test for test/SiphonToken.ghost.invariant.t.sol:SiphonTokenGhostInvariantTest\n[PASS]\nSiphonTokenGhostInvariantTest invariants:\n[PASS] invariant_allowancesMatchGhost\n[PASS] invariant_balancesMatchGhostAndSumToSupply\n[PASS] invariant_noUnexpectedOutcome\n[PASS] invariant_supplyNeverChanges\n[PASS] invariant_zeroAddressHoldsNothing\n SiphonTokenGhostInvariantTest invariants (runs: 256, calls: 25600, reverts: 0)\n\n╭--------------------+---------------------------+-------+---------+----------╮\n| Contract           | Selector                  | Calls | Reverts | Discards |\n+=============================================================================+\n| SiphonGhostHandler | approve                   | 3542  | 0       | 0        |\n|--------------------+---------------------------+-------+---------+----------|\n| SiphonGhostHandler | transfer                  | 3740  | 0       | 0        |\n|--------------------+---------------------------+-------+---------+----------|\n| SiphonGhostHandler | transferFrom              | 3591  | 0       | 0        |\n|--------------------+---------------------------+-------+---------+----------|\n| SiphonGhostHandler | transferFromOverAllowance | 3682  | 0       | 0        |\n|--------------------+---------------------------+-------+---------+----------|\n| SiphonGhostHandler | transferFromOverBalance   | 3659  | 0       | 0        |\n|--------------------+---------------------------+-------+---------+----------|\n| SiphonGhostHandler | transferToZero            | 3692  | 0       | 0        |\n|--------------------+---------------------------+-------+---------+----------|\n| SiphonGhostHandler | transferTooMuch           | 3694  | 0       | 0        |\n╰--------------------+---------------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 460639160420585868495706\n  Bound result 1000000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 78572727666952064476991305487\n  Bound result 1000\n  Bound result 0\n  Bound result 42\n  Bound result 10000000000000000000\n  Bound result 0\n  Bound result 96\n  Bound result 1679\n  Bound result 0\n  Bound result 57\n  Bound result 52\n  Bound result 2\n  Bound result 0\n  Bound result 4129\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 182886451752999390\n  Bound result 710\n  Bound result 45\n  Bound result 9746840429461635272880668777496\n  Bound result 5000000000000000000\n  Bound result 234\n  Bound result 10\n  Bound result 1000000000000000000\n  Bound result 0\n  Bound result 18\n  Bound result 0\n  Bound result 87834369345039210139704470860121622019884709393287549289754218482509473632985\n  Bound result 3684\n  Bound result 1000000000000000000\n  Bound result 42\n  Bound result 3888\n  Bound result 10\n  Bound result 5053\n  Bound result 39308684142439326\n  Bound result 0\n  Bound result 20572\n  Bound result 18103\n  Bound result 818927773587011942474585070\n  Bound result 81008940\n  Bound result 14\n  Bound result 20\n  Bound result 127\n  Bound result 10000000000000000000\n  Bound result 81\n  Bound result 0\n  Bound result 2631\n  Bound result 1234000000000000000000\n  Bound result 3228174\n  Bound result 254\n  Bound result 100\n  Bound result 10000000000000000001\n  Bound result 0\n  Bound result 115792089237316195423570985008687907853269984665640382967231353906307276216514\n  Bound result 263\n  Bound result 4859178255232269175840479503161561654478030012\n  Bound result 2046\n  Bound result 211536445773733487734509806733777592545553927192306365602\n  Bound result 6271\n  Bound result 0\n  Bound result 0\n  Bound result 244\n  Bound result 2422\n  Bound result 0\n  Bound result 1000000000000000000000000000\n  Bound result 115792089237316195423570985008687907853269984665640382967231353906307276218559\n  Bound result 86\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 13.21s (13.20s CPU time)\n\nRan 4 test suites in 13.21s (24.47s CPU time): 55 tests passed, 0 failed, 0 skipped (55 total tests)\n","passed":true},{"durationMs":42,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SiphonToken.approve(address,uint256)\",\"SiphonToken.transfer(address,uint256)\",\"SiphonToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"README.md\":135,\"foundry.toml\":21,\"remappings.txt\":2,\"script/DeploySiphonToken.s.sol\":25,\"src/SiphonToken.sol\":39,\"test/SiphonToken.edges.t.sol\":346,\"test/SiphonToken.ghost.invariant.t.sol\":210,\"test/SiphonToken.invariant.t.sol\":79,\"test/SiphonToken.t.sol\":371},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"1a0177d9e482bfcd50cfd19f88f83b25b674bea7f363b77d060da5dceb9adda7","verifiedTreeHash":"630b22f1e908ebf8bad948b15c31a525a9c5b271","verifierVersion":"0.1.0+944e816a"},{"checks":[{"durationMs":1382,"exitCode":0,"name":"build","output":"Compiling 29 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.29s\nCompiler run successful!\n","passed":true},{"durationMs":11165,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 29 tests for test/SiphonToken.t.sol:SiphonTokenTest\n[PASS] testFuzz_transferAboveBalanceReverts(uint256,uint256) (runs: 256, μ: 99667, ~: 99902)\nLogs:\n  Bound result 749469581803947686255417753\n  Bound result 268763071416586471\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 256, μ: 97730, ~: 98567)\nLogs:\n  Bound result 519438208546583527511602032\n\n[PASS] testFuzz_transferFromBeyondAllowanceReverts(uint256,uint256) (runs: 256, μ: 95303, ~: 95668)\nLogs:\n  Bound result 749469581818187619796984299\n  Bound result 751591254814200212025633574\n\n[PASS] testFuzz_transferFromWithinAllowance(uint256,uint256) (runs: 256, μ: 157278, ~: 159033)\nLogs:\n  Bound result 231451917787305\n  Bound result 231451917787303\n\n[PASS] test_approveAndTransferFrom() (gas: 171789)\n[PASS] test_approveZeroSpenderReverts() (gas: 32928)\n[PASS] test_chainOfTransfersIsLossless() (gas: 205714)\n[PASS] test_constantsMatchTheBrief() (gas: 25427)\n[PASS] test_constructorEmitsTransferFromZeroAndSupplyMinted() (gas: 10073)\n[PASS] test_contractDeployerReceivesWholeSupply() (gas: 372595)\n[PASS] test_deployScriptFunctionDeploysToCaller() (gas: 1567512)\n[PASS] test_deployerCannotPullWithoutAllowance() (gas: 98201)\n[PASS] test_infiniteAllowanceIsNotDecremented() (gas: 123379)\n[PASS] test_metadata() (gas: 58183)\n[PASS] test_mintsWholeSupplyToDeployerOnce() (gas: 44071)\n[PASS] test_noAdminOrMintSelectorExists() (gas: 1696848)\n[PASS] test_plainEtherTransferIsRejected() (gas: 39438)\n[PASS] test_runtimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 3103274)\n[PASS] test_transferFromRevertsBeyondAllowance() (gas: 87947)\n[PASS] test_transferFromRevertsWhenOwnerLacksBalance() (gas: 93560)\n[PASS] test_transferFromRevertsWithoutAllowance() (gas: 40299)\n[PASS] test_transferMovesExactAmount() (gas: 96062)\n[PASS] test_transferRevertsOnInsufficientBalance() (gas: 37774)\n[PASS] test_transferRevertsWhenExceedingBalanceByOne() (gas: 92637)\n[PASS] test_transferToSelfKeepsBalance() (gas: 43896)\n[PASS] test_transferToZeroAddressReverts() (gas: 32876)\n[PASS] test_transferWholeBalance() (gas: 78403)\n[PASS] test_transferZeroAmountSucceeds() (gas: 47835)\n[PASS] test_twoDeploymentsAreIndependent() (gas: 45027)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 14.95ms (63.33ms CPU time)\n\nRan 1 test for test/SiphonToken.invariant.t.sol:SiphonTokenInvariantTest\n[PASS]\nSiphonTokenInvariantTest invariants:\n[PASS] invariant_actorBalancesSumToSupply\n[PASS] invariant_totalSupplyIsFixed\n SiphonTokenInvariantTest invariants (runs: 256, calls: 128000, reverts: 0)\n\n╭---------------+--------------+-------+---------+----------╮\n| Contract      | Selector     | Calls | Reverts | Discards |\n+===========================================================+\n| SiphonHandler | approve      | 42873 | 0       | 0        |\n|---------------+--------------+-------+---------+----------|\n| SiphonHandler | transfer     | 42508 | 0       | 0        |\n|---------------+--------------+-------+---------+----------|\n| SiphonHandler | transferFrom | 42619 | 0       | 0        |\n╰---------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 444\n  Bound result 0\n  Bound result 477\n  Bound result 1\n  Bound result 0\n  Bound result 0\n  Bound result 28\n  Bound result 0\n  Bound result 226\n  Bound result 237\n  Bound result 2542\n  Bound result 704\n  Bound result 1\n  Bound result 0\n  Bound result 163\n  Bound result 255\n  Bound result 854\n  Bound result 0\n  Bound result 2\n  Bound result 14\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 820\n  Bound result 524\n  Bound result 1245\n  Bound result 399\n  Bound result 91\n  Bound result 11\n  Bound result 4000000000000097580\n  Bound result 1\n  Bound result 43\n  Bound result 0\n  Bound result 0\n  Bound result 1\n  Bound result 95\n  Bound result 416\n  Bound result 27\n  Bound result 40\n  Bound result 0\n  Bound result 60000000000000000000\n  Bound result 34\n  Bound result 0\n  Bound result 0\n  Bound result 2275\n  Bound result 67\n  Bound result 2951\n  Bound result 22\n  Bound result 4\n  Bound result 0\n  Bound result 10\n  Bound result 140189311855308653468123352\n  Bound result 40000000000000000000\n  Bound result 404098525\n  Bound result 0\n  Bound result 821777383734959073802423391\n  Bound result 5739\n  Bound result 5335\n  Bound result 0\n  Bound result 0\n  Bound result 335\n  Bound result 0\n  Bound result 132\n  Bound result 75\n  Bound result 0\n  Bound result 1\n  Bound result 637035076149341191\n  Bound result 43\n  Bound result 6000000000000000000\n  Bound result 454\n  Bound result 0\n  Bound result 253\n  Bound result 1233999999999999999933\n  Bound result 9\n  Bound result 96\n  Bound result 209\n  Bound result 22640\n  Bound result 0\n  Bound result 1257362964923850758559\n  Bound result 100000000000000000000\n  Bound result 4756\n  Bound result 2805\n  Bound result 14947590417440773097\n  Bound result 0\n  Bound result 3972\n  Bound result 0\n  Bound result 2778\n  Bound result 0\n  Bound result 10\n  Bound result 2063\n  Bound result 34\n  Bound result 60000000000000000000\n  Bound result 86\n  Bound result 4327\n  Bound result 6000000000000000000\n  Bound result 24\n  Bound result 1636\n  Bound result 2\n  Bound result 255\n  Bound result 2413\n  Bound result 3722\n  Bound result 0\n  Bound result 1340147796424260651736\n  Bound result 3\n  Bound result 2776\n  Bound result 465\n  Bound result 1984\n  Bound result 27\n  Bound result 194369\n  Bound result 14\n  Bound result 4807\n  Bound result 95\n  Bound result 19227311766447562071137475\n  Bound result 109396377431139794978697638\n  Bound result 83080458732698660140910\n  Bound result 240\n  Bound result 2664\n  Bound result 86\n  Bound result 36\n  Bound result 2\n  Bound result 3570957910797308009370\n  Bound result 404098525\n  Bound result 0\n  Bound result 91\n  Bound result 255\n  Bound result 1\n  Bound result 1765\n  Bound result 4766\n  Bound result 242\n  Bound result 0\n  Bound result 224\n  Bound result 9168\n  Bound result 437\n  Bound result 9168\n  Bound result 1234000000000000000000\n  Bound result 352\n  Bound result 2953\n  Bound result 654\n  Bound result 923\n  Bound result 91\n  Bound result 2\n  Bound result 95\n  Bound result 53\n  Bound result 105703017010658452272099723\n  Bound result 116928437836198098194419431\n  Bound result 1\n  Bound result 243\n  Bound result 777000000000000000000\n  Bound result 1\n  Bound result 8\n  Bound result 6\n  Bound result 10000000000000000000\n  Bound result 18\n  Bound result 90\n  Bound result 744\n  Bound result 74\n  Bound result 42451277588967451820765033\n  Bound result 3\n  Bound result 4336\n  Bound result 683\n  Bound result 1409914981024364967978618\n  Bound result 255\n  Bound result 100\n  Bound result 136155063655055242420704271\n  Bound result 253\n  Bound result 33043917520912411524978577\n  Bound result 4477\n  Bound result 372\n  Bound result 0\n  Bound result 956\n  Bound result 14\n  Bound result 31062397964669427020684172\n  Bound result 40657574265996395362232430\n  Bound result 6000000000000000000\n  Bound result 773\n  Bound result 63533382910363219009325344\n  Bound result 169\n  Bound result 654\n  Bound result 5112802115293921503\n  Bound result 1892\n  Bound result 10631196205296787188778660\n  Bound result 13\n  Bound result 20\n  Bound result 45\n  Bound result 76105568758123115101842071\n  Bound result 6\n  Bound result 95\n  Bound result 777000000000000000000\n  Bound result 8\n  Bound result 1\n  Bound result 15\n  Bound result 53817659845721815449526132\n  Bound result 2\n  Bound result 0\n  Bound result 2\n  Bound result 351\n  Bound result 1234000000000000000000\n  Bound result 127\n  Bound result 4734\n  Bound result 0\n  Bound result 647130145840825027695446676\n  Bound result 167\n  Bound result 164119126414339812359766542\n  Bound result 464316543302648990414206498\n  Bound result 244\n  Bound result 1000000000000000000\n  Bound result 1766\n  Bound result 17215168499590107339\n  Bound result 0\n  Bound result 1191156281674007715747103\n  Bound result 14\n  Bound result 5739\n  Bound result 1378\n  Bound result 5000000000000000000\n  Bound result 5000000000000000000\n  Bound result 91\n  Bound result 40000000000000000000\n  Bound result 10000000000000000001\n  Bound result 640763845827421146272\n  Bound result 826074471\n  Bound result 91052409582155129493\n  Bound result 54\n  Bound result 0\n  Bound result 0\n  Bound result 383988544303404055\n  Bound result 7\n  Bound result 215128377471206962890458\n  Bound result 253\n  Bound result 868\n  Bound result 182726043213833404502924140\n  Bound result 0\n  Bound result 0\n  Bound result 1\n  Bound result 178221233849666420191663984\n  Bound result 1272928063619633307338505\n  Bound result 43\n  Bound result 2065889945257006113621309\n  Bound result 843\n  Bound result 20633990266028\n  Bound result 0\n  Bound result 95\n  Bound result 0\n  Bound result 1289\n  Bound result 3079\n  Bound result 39732990118791271665939480\n  Bound result 14\n  Bound result 1063889002577447492227588\n  Bound result 91\n  Bound result 9457016129760675125997542\n  Bound result 6235382559440736532294447\n  Bound result 1985\n  Bound result 7418031382157435640\n  Bound result 544\n  Bound result 10000000000000000001\n  Bound result 0\n  Bound result 30\n  Bound result 254\n  Bound result 15754201497340111716898272\n  Bound result 0\n  Bound result 244\n  Bound result 86\n  Bound result 1357362964923850754621\n  Bound result 868\n  Bound result 5000000000000000000\n  Bound result 2404\n  Bound result 24576\n  Bound result 60000000000000000000\n  Bound result 4294967295\n  Bound result 786020314589672447754511387\n  Bound result 799\n  Bound result 6000000000000000000\n  Bound result 0\n  Bound result 26214653350776651472508434\n  Bound result 19994624797356252385205409\n  Bound result 6215438061245785475279867\n  Bound result 4446397189113119625\n  Bound result 95\n  Bound result 96\n  Bound result 10000000000000000001\n  Bound result 17693692303915725786448406\n  Bound result 86\n  Bound result 178221233849666420191667206\n  Bound result 4202047189\n  Bound result 40000000000000000000\n  Bound result 1000000001\n  Bound result 13543357344125047868161828\n  Bound result 4\n  Bound result 455518164169214955\n  Bound result 6343999949997593622940046\n  Bound result 10\n  Bound result 2864533567055702125258909\n  Bound result 178221342117244501936904167\n  Bound result 1848\n  Bound result 1787678118086646543110139\n  Bound result 0\n  Bound result 242\n  Bound result 2\n  Bound result 0\n  Bound result 3623114857690632840133930\n  Bound result 29\n  Bound result 24\n  Bound result 59353033686\n  Bound result 777000000000000000000\n  Bound result 11\n  Bound result 3\n  Bound result 17215168499590102341\n  Bound result 2879\n  Bound result 1229855176222908197266\n  Bound result 10000000000000000001\n  Bound result 18\n  Bound result 139750595212\n  Bound result 2\n  Bound result 5000000000000000000\n  Bound result 7\n  Bound result 10000000000000000001\n  Bound result 0\n  Bound result 2110234842\n  Bound result 27733976\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 11.03s (11.03s CPU time)\n\nRan 2 test suites in 11.04s (11.05s CPU time): 30 tests passed, 0 failed, 0 skipped (30 total tests)\n","passed":true},{"durationMs":44,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SiphonToken.approve(address,uint256)\",\"SiphonToken.transfer(address,uint256)\",\"SiphonToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"README.md\":135,\"foundry.toml\":21,\"launch.json\":24,\"remappings.txt\":2,\"script/DeploySiphonToken.s.sol\":25,\"src/SiphonToken.sol\":39,\"test/SiphonToken.invariant.t.sol\":79,\"test/SiphonToken.t.sol\":371},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"3b18b6aab4b98a3409d992a33e4e86aac67bdf99917d6b9184815f953207b225","verifiedTreeHash":"206bd7ac79c17ef1f3265c627ba36ef0b1b7a00e","verifierVersion":"0.1.0+944e816a"},{"checks":[{"durationMs":1433,"exitCode":0,"name":"build","output":"Compiling 29 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.30s\nCompiler run successful!\n","passed":true},{"durationMs":11562,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 29 tests for test/SiphonToken.t.sol:SiphonTokenTest\n[PASS] testFuzz_transferAboveBalanceReverts(uint256,uint256) (runs: 256, μ: 99667, ~: 99902)\nLogs:\n  Bound result 231451917787305\n  Bound result 115792089237316195423570985008687907853269984665640564039457583776461211852628\n\n[PASS] testFuzz_transferConservesSupply(address,uint256) (runs: 256, μ: 97730, ~: 98567)\nLogs:\n  Bound result 113265635911636225771\n\n[PASS] testFuzz_transferFromBeyondAllowanceReverts(uint256,uint256) (runs: 256, μ: 95303, ~: 95668)\nLogs:\n  Bound result 231451917787305\n  Bound result 999999999999999999999999998\n\n[PASS] testFuzz_transferFromWithinAllowance(uint256,uint256) (runs: 256, μ: 157278, ~: 159033)\nLogs:\n  Bound result 231451917787305\n  Bound result 231451917787303\n\n[PASS] test_approveAndTransferFrom() (gas: 171789)\n[PASS] test_approveZeroSpenderReverts() (gas: 32928)\n[PASS] test_chainOfTransfersIsLossless() (gas: 205714)\n[PASS] test_constantsMatchTheBrief() (gas: 25427)\n[PASS] test_constructorEmitsTransferFromZeroAndSupplyMinted() (gas: 10073)\n[PASS] test_contractDeployerReceivesWholeSupply() (gas: 372595)\n[PASS] test_deployScriptFunctionDeploysToCaller() (gas: 1567512)\n[PASS] test_deployerCannotPullWithoutAllowance() (gas: 98201)\n[PASS] test_infiniteAllowanceIsNotDecremented() (gas: 123379)\n[PASS] test_metadata() (gas: 58183)\n[PASS] test_mintsWholeSupplyToDeployerOnce() (gas: 44071)\n[PASS] test_noAdminOrMintSelectorExists() (gas: 1696848)\n[PASS] test_plainEtherTransferIsRejected() (gas: 39438)\n[PASS] test_runtimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 3103274)\n[PASS] test_transferFromRevertsBeyondAllowance() (gas: 87947)\n[PASS] test_transferFromRevertsWhenOwnerLacksBalance() (gas: 93560)\n[PASS] test_transferFromRevertsWithoutAllowance() (gas: 40299)\n[PASS] test_transferMovesExactAmount() (gas: 96062)\n[PASS] test_transferRevertsOnInsufficientBalance() (gas: 37774)\n[PASS] test_transferRevertsWhenExceedingBalanceByOne() (gas: 92637)\n[PASS] test_transferToSelfKeepsBalance() (gas: 43896)\n[PASS] test_transferToZeroAddressReverts() (gas: 32876)\n[PASS] test_transferWholeBalance() (gas: 78403)\n[PASS] test_transferZeroAmountSucceeds() (gas: 47835)\n[PASS] test_twoDeploymentsAreIndependent() (gas: 45027)\nSuite result: ok. 29 passed; 0 failed; 0 skipped; finished in 16.40ms (63.08ms CPU time)\n\nRan 1 test for test/SiphonToken.invariant.t.sol:SiphonTokenInvariantTest\n[PASS]\nSiphonTokenInvariantTest invariants:\n[PASS] invariant_actorBalancesSumToSupply\n[PASS] invariant_totalSupplyIsFixed\n SiphonTokenInvariantTest invariants (runs: 256, calls: 128000, reverts: 0)\n\n╭---------------+--------------+-------+---------+----------╮\n| Contract      | Selector     | Calls | Reverts | Discards |\n+===========================================================+\n| SiphonHandler | approve      | 42873 | 0       | 0        |\n|---------------+--------------+-------+---------+----------|\n| SiphonHandler | transfer     | 42508 | 0       | 0        |\n|---------------+--------------+-------+---------+----------|\n| SiphonHandler | transferFrom | 42619 | 0       | 0        |\n╰---------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 444\n  Bound result 0\n  Bound result 477\n  Bound result 1\n  Bound result 0\n  Bound result 0\n  Bound result 28\n  Bound result 0\n  Bound result 226\n  Bound result 237\n  Bound result 2542\n  Bound result 704\n  Bound result 1\n  Bound result 0\n  Bound result 163\n  Bound result 255\n  Bound result 854\n  Bound result 0\n  Bound result 2\n  Bound result 14\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 820\n  Bound result 524\n  Bound result 1245\n  Bound result 399\n  Bound result 91\n  Bound result 11\n  Bound result 4000000000000097580\n  Bound result 1\n  Bound result 43\n  Bound result 0\n  Bound result 0\n  Bound result 1\n  Bound result 95\n  Bound result 416\n  Bound result 27\n  Bound result 40\n  Bound result 0\n  Bound result 60000000000000000000\n  Bound result 34\n  Bound result 0\n  Bound result 0\n  Bound result 2275\n  Bound result 67\n  Bound result 2951\n  Bound result 22\n  Bound result 4\n  Bound result 0\n  Bound result 10\n  Bound result 140189311855308653468123352\n  Bound result 40000000000000000000\n  Bound result 404098525\n  Bound result 0\n  Bound result 821777383734959073802423391\n  Bound result 5739\n  Bound result 5335\n  Bound result 0\n  Bound result 0\n  Bound result 335\n  Bound result 0\n  Bound result 132\n  Bound result 75\n  Bound result 0\n  Bound result 1\n  Bound result 637035076149341191\n  Bound result 298\n  Bound result 6000000000000000000\n  Bound result 454\n  Bound result 0\n  Bound result 253\n  Bound result 64000000000000100200\n  Bound result 9\n  Bound result 96\n  Bound result 209\n  Bound result 22640\n  Bound result 0\n  Bound result 87362964923850858826\n  Bound result 100000000000000000000\n  Bound result 4756\n  Bound result 523\n  Bound result 14947590417440773097\n  Bound result 1\n  Bound result 834\n  Bound result 1\n  Bound result 2776\n  Bound result 1\n  Bound result 10\n  Bound result 2063\n  Bound result 0\n  Bound result 60000000000000000000\n  Bound result 86\n  Bound result 4327\n  Bound result 6000000000000000000\n  Bound result 1575\n  Bound result 178222403849666420191564901\n  Bound result 1323\n  Bound result 255\n  Bound result 2107\n  Bound result 3695\n  Bound result 0\n  Bound result 121\n  Bound result 1225\n  Bound result 2611\n  Bound result 58\n  Bound result 0\n  Bound result 3\n  Bound result 194369\n  Bound result 14\n  Bound result 1306\n  Bound result 95\n  Bound result 122469899891727235993500199\n  Bound result 399564120803360058497660326\n  Bound result 83080458732698660140910\n  Bound result 0\n  Bound result 704\n  Bound result 0\n  Bound result 220\n  Bound result 2\n  Bound result 3570957910797308009370\n  Bound result 262\n  Bound result 601\n  Bound result 91\n  Bound result 379\n  Bound result 1\n  Bound result 465\n  Bound result 4685\n  Bound result 242\n  Bound result 142\n  Bound result 224\n  Bound result 2472\n  Bound result 401\n  Bound result 187362964923850857509\n  Bound result 1234000000000000000000\n  Bound result 330\n  Bound result 874\n  Bound result 52\n  Bound result 889\n  Bound result 91\n  Bound result 2\n  Bound result 95\n  Bound result 1215\n  Bound result 105703017010658452272099723\n  Bound result 462967574679966002990453329\n  Bound result 85\n  Bound result 243\n  Bound result 777000000000000000000\n  Bound result 1\n  Bound result 25260234973663020700\n  Bound result 291\n  Bound result 10000000000000000000\n  Bound result 18\n  Bound result 27\n  Bound result 744\n  Bound result 4857\n  Bound result 48318603506893114031426259\n  Bound result 200\n  Bound result 4338\n  Bound result 681\n  Bound result 15761909314736079470353079\n  Bound result 255\n  Bound result 100\n  Bound result 3680\n  Bound result 253\n  Bound result 7236706110411493756865\n  Bound result 4325\n  Bound result 105\n  Bound result 10000000000000000000\n  Bound result 956\n  Bound result 14\n  Bound result 692453941665467400030894\n  Bound result 178222552902076002750916386\n  Bound result 175\n  Bound result 737\n  Bound result 187362964923850858826\n  Bound result 19\n  Bound result 122468884307101741999494423\n  Bound result 15\n  Bound result 1000000000000000000\n  Bound result 9019308168320400150390071\n  Bound result 5\n  Bound result 95\n  Bound result 106\n  Bound result 154714852459217033703549792\n  Bound result 6000000000000000000\n  Bound result 95\n  Bound result 777000000000000000000\n  Bound result 2\n  Bound result 2552851539\n  Bound result 15\n  Bound result 299841053470988478736707439\n  Bound result 2\n  Bound result 1668079052\n  Bound result 2\n  Bound result 21\n  Bound result 1234000000000000000000\n  Bound result 127\n  Bound result 4777\n  Bound result 24576\n  Bound result 81868627306098024018202372\n  Bound result 1062\n  Bound result 34739765026336979038\n  Bound result 150304265566151580611417126\n  Bound result 244\n  Bound result 1000000000000000000\n  Bound result 20\n  Bound result 187362964923850856305\n  Bound result 7\n  Bound result 67\n  Bound result 14\n  Bound result 957\n  Bound result 1107\n  Bound result 68\n  Bound result 5000000000000000000\n  Bound result 3\n  Bound result 40000000000000000000\n  Bound result 10000000000000000001\n  Bound result 162\n  Bound result 826074471\n  Bound result 45686744\n  Bound result 63\n  Bound result 2\n  Bound result 0\n  Bound result 31529334\n  Bound result 263\n  Bound result 243907772623199896452880556\n  Bound result 253\n  Bound result 945\n  Bound result 156408738811623248559826414\n  Bound result 91\n  Bound result 396\n  Bound result 1\n  Bound result 59999999999999999738\n  Bound result 54209406070436921812562316\n  Bound result 217\n  Bound result 93221238134896169691162877\n  Bound result 764\n  Bound result 20633990266028\n  Bound result 254\n  Bound result 95\n  Bound result 48\n  Bound result 1257\n  Bound result 369\n  Bound result 17734959073781878864\n  Bound result 14\n  Bound result 79338775070109008013314210\n  Bound result 91\n  Bound result 137\n  Bound result 134435608792879630202606713\n  Bound result 2308\n  Bound result 1711042938\n  Bound result 45999999999595901583\n  Bound result 10000000000000000001\n  Bound result 0\n  Bound result 410\n  Bound result 7\n  Bound result 75070087427948914157036649\n  Bound result 0\n  Bound result 244\n  Bound result 22265040926218121136\n  Bound result 356444807699332840383128763\n  Bound result 945\n  Bound result 5000000000000000000\n  Bound result 71658239706590132783659211\n  Bound result 1725\n  Bound result 60000000000000000000\n  Bound result 0\n  Bound result 133959823297512639429382944\n  Bound result 25\n  Bound result 6000000000000000000\n  Bound result 0\n  Bound result 445397349457109842840240218\n  Bound result 788\n  Bound result 162827278044218501080920991\n  Bound result 72\n  Bound result 95\n  Bound result 96\n  Bound result 10000000000000000001\n  Bound result 3267385754667074048446610\n  Bound result 86\n  Bound result 356444807699332840383132459\n  Bound result 4228666475\n  Bound result 40000000000000000000\n  Bound result 464\n  Bound result 989226753906519461691388\n  Bound result 8\n  Bound result 155954133111271705799\n  Bound result 186584279570001249806622\n  Bound result 1\n  Bound result 2039740087824975945790741\n  Bound result 154\n  Bound result 1848\n  Bound result 9346370739674365113\n  Bound result 12\n  Bound result 242\n  Bound result 2\n  Bound result 0\n  Bound result 2079813104224757266149418\n  Bound result 1\n  Bound result 28\n  Bound result 59353033686\n  Bound result 777000000000000000000\n  Bound result 3590\n  Bound result 3\n  Bound result 3679\n  Bound result 2992\n  Bound result 50606389801170773001293164\n  Bound result 10000000000000000001\n  Bound result 18\n  Bound result 50545559902\n  Bound result 2\n  Bound result 5000000000000000000\n  Bound result 1242826418\n  Bound result 10000000000000000001\n  Bound result 0\n  Bound result 36\n  Bound result 27733976\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 11.39s (11.38s CPU time)\n\nRan 2 test suites in 11.39s (11.41s CPU time): 30 tests passed, 0 failed, 0 skipped (30 total tests)\n","passed":true},{"durationMs":54,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"SiphonToken.approve(address,uint256)\",\"SiphonToken.transfer(address,uint256)\",\"SiphonToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"README.md\":135,\"foundry.toml\":21,\"remappings.txt\":2,\"script/DeploySiphonToken.s.sol\":25,\"src/SiphonToken.sol\":39,\"test/SiphonToken.invariant.t.sol\":79,\"test/SiphonToken.t.sol\":371},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":826,"exitCode":0,"name":"slither","output":"slither: no results at low impact or above","passed":true},{"durationMs":526,"exitCode":0,"name":"aderyn","output":"[low] large-numeric-literal at src/SiphonToken.sol:24: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"f3c663cde11fc11d252ad280e7ed0d166ba18e16d2ef68dc7d597cd4b680d583","verifiedTreeHash":"fad7f08294c656a78891d0ae994be452d06dfceb","verifierVersion":"0.1.0+944e816a"}]}