{"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":"e3eb4d78-836e-4916-be3d-ea571be5bdc4","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"5d234ca409a2dd983263112c18bb5d24a0d236459e10b899ef841c8ee817b34b","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"5c5c99a166c3c04ccd57d2e798a955dddd4a65fac4d4ef785f15fd91193b69fe","skillId":"gas-and-size-report","tools":[]},"key":"gas_and_size_report","kind":"code","role":"tests","skillHash":"5c5c99a166c3c04ccd57d2e798a955dddd4a65fac4d4ef785f15fd91193b69fe","skillId":"gas-and-size-report","state":"accepted"},{"acceptedSubmissionHash":"410ac67b32995c3134e640298fabdb175f4efceed17231d25f33cf3640a84f81","dependsOn":["refine_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"5c5c99a166c3c04ccd57d2e798a955dddd4a65fac4d4ef785f15fd91193b69fe","skillId":"gas-and-size-report","tools":[]},"key":"gas_and_size_report_2","kind":"code","role":"tests","skillHash":"5c5c99a166c3c04ccd57d2e798a955dddd4a65fac4d4ef785f15fd91193b69fe","skillId":"gas-and-size-report","state":"accepted"},{"acceptedSubmissionHash":"fa87858542c567ce32e003685c6d125b59b9ee1fe917aa0d74601f5ffb3c4d5f","dependsOn":["gas_and_size_report"],"execution":{"network":false,"profile":"none","requires":[],"skillHash":"99cccc7e3e2e1b515c66d54cc6d4bd9832d528aaf0ec0ba48c87a4182db4b7ca","skillId":"refine-project","tools":[]},"key":"refine_project","kind":"code","role":"implement","skillHash":"99cccc7e3e2e1b515c66d54cc6d4bd9832d528aaf0ec0ba48c87a4182db4b7ca","skillId":"refine-project","state":"accepted"}],"objective":"Measure MiniPair's (launch 114, this commit) gas use and size, apply safe gas optimisations, and measure again. The live deployment (Sepolia 0x898a07c8911f43218c5c2e1b7ae8146026f7e040) is immutable and stays as it is: the result is an optimised source version in the repository, not a redeploy.\n\nMeasure: gas for swapExactETHForTokens, swapExactTokensForETH, the first addLiquidity, a later addLiquidity that refunds ETH, a later addLiquidity that pulls fewer tokens than offered, and removeLiquidity; and MiniPair's runtime and initcode size.\n\nRefinement rules: keep the external ABI, events, custom errors, revert conditions and rounding exactly as they are, so docs/abi/MiniPair.json and docs/abi-hashes.json stay correct; keep the constructor (address token_, uint256 feeBps_); every existing test (test/MiniPair.t.sol, test/MiniPair.invariant.t.sol, test/MiniSwapToken.t.sol) must pass unchanged. foundry.toml and lib/ are protected, so solc 0.8.26, the compiler settings and OpenZeppelin v5.0.2 stay. Candidates: stop re-reading storage for the Sync event, keep both reserves in one slot as uint128s if the bounds are proven and documented, replace OpenZeppelin's storage ReentrancyGuard with a transient-storage lock (the EVM target is cancun), and unchecked arithmetic only where an adjacent check proves it safe. Never remove an event or a check; drop any change that alters behaviour in a tested or documented way.","parentJobId":null,"planHash":"8a8fc173917a892a665f20a8ed5cb5c83fa949284cefac17902311146c4d5ce6","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"e3eb4d78-836e-4916-be3d-ea571be5bdc4","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-323-measure-minipair-s-launch-114"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51028","feedbackHash":"64639061a65e74c62fc2ce23bfde3975b7cc249a60dfb13bdc688f7a4676948d","nodeKey":"gas_and_size_report","submissionHash":"5d234ca409a2dd983263112c18bb5d24a0d236459e10b899ef841c8ee817b34b","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"50987","feedbackHash":"3790cc0736ec86b4d1d9d6ac30b403dbce297b46a51815f4fa1d6648a761fd21","nodeKey":"gas_and_size_report_2","submissionHash":"410ac67b32995c3134e640298fabdb175f4efceed17231d25f33cf3640a84f81","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51461","feedbackHash":"81bbe9d6660ca54713163dbb0095c36004616ecb152ca9c5462343435080729b","nodeKey":"refine_project","submissionHash":"fa87858542c567ce32e003685c6d125b59b9ee1fe917aa0d74601f5ffb3c4d5f","tag1":"verification:structural","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"e5798d38834002dc7a09f0c3320b258724b7d48d9c06ed681181c94650a41ab1","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"d18fdc3dd0f2c6798175690c78b5ba296e3cd3060a8bb624eead20d8c7fbdee3","device":"18527ba42d5b89d7","findings":[],"hash":"410ac67b32995c3134e640298fabdb175f4efceed17231d25f33cf3640a84f81","nodeId":"1fa183d4-b461-4571-b9b8-582d15843b22","outcome":"completed","summary":"Created [artifacts/gas.md](/home/imd/.identitymd/work/e3eb4d78-836e-4916-be3d-ea571be5bdc4/1fa183d4-b461-4571-b9b8-582d15843b22/artifacts/gas.md) and refreshed `.gas-snapshot`.\n\n- Six requested paths save **5,030–5,133 gross gas**, or **2,230–2,333 after refunds**.\n- MiniPair runtime: **4,998 bytes**; initcode including arguments: **5,349 bytes**.\n- All **112 tests**, build, ABI checks, and snapshot verification pass.\n- Report explicitly flags the oversized **58,933-byte test harness**.\n- Offline reproduction script and baseline source included.\n\nCommit remains blocked: `.git` is read-only. The files are present; `artifacts/` requires force-adding because it is ignored.","treeHash":"378a09d0e3c5c82881398141b1a0e5e7b09169fb","usage":{"cachedInputTokens":1100800,"inputTokens":64977,"model":"gpt-6-astra","outputTokens":13199,"runtime":"codex","turns":6,"wallClockMs":452837}},{"artifacts":[],"attempt":1,"bundleHash":"630edff458f7b9fc3f7ff91db3e813e2c83ae9934797d27731ee4c27a2299bf0","device":"3a271480f26269e3","findings":[],"hash":"5d234ca409a2dd983263112c18bb5d24a0d236459e10b899ef841c8ee817b34b","nodeId":"d4bfcbdb-a0e1-4608-abec-35a0fd9baf6c","outcome":"completed","summary":"Created the baseline [gas report](artifacts/gas.md) and [.gas-snapshot](.gas-snapshot), with sources unchanged.\n\n- MiniPair: **4,997-byte runtime**, **5,288-byte creation bytecode**.\n- All six requested gas cases measured.\n- **107 tests pass**; build and snapshot check pass.\n- Oversized existing `MiniPairTest` harness reported as a deployment defect.\n\n**Commit blocked:** `.git` is read-only. Files are present; the report includes staging instructions for the locally ignored artifacts.","treeHash":"8a1415acb6a87b62785d6166dfd9ec5def374c9e","usage":{"cachedInputTokens":1045888,"inputTokens":67882,"model":"gpt-6-astra","outputTokens":20938,"runtime":"codex","turns":7,"wallClockMs":683249}},{"artifacts":[],"attempt":1,"bundleHash":"388ac3a4965ef8b63631f11437f437547d0b4c66a2921599e4ba06a4538509a4","device":"0b2cef729c75eb26","findings":[],"hash":"fa87858542c567ce32e003685c6d125b59b9ee1fe917aa0d74601f5ffb3c4d5f","nodeId":"dc5ef5b9-f19d-4218-8814-b1e3bd157396","outcome":"completed","summary":"Implemented transient locking, cached `Sync` values, and two proven-safe unchecked subtractions.\n\n- All 112 tests pass, including five new regression tests.\n- ABI and ABI hash remain unchanged.\n- Gas savings: 2,230–2,333 per measured call after accounting for lost refunds.\n- Runtime: 4,997 → 4,998 bytes; creation bytecode: 5,288 → 5,285 bytes.\n- Rejected reserve packing because valid inputs can exceed `uint128`.\n- Live deployment and protected files remain untouched.\n\nMeasurements and reproduction details: [test/MiniPair.gas.md](test/MiniPair.gas.md).","treeHash":"355dc21df2f4522f840865ca338a88be68b7803b","usage":{"cachedInputTokens":409856,"inputTokens":47177,"model":null,"outputTokens":5972,"runtime":"codex","turns":5,"wallClockMs":238396}}],"verification":[{"checks":[{"durationMs":2839,"exitCode":0,"name":"build","output":"Compiling 38 files with Solc 0.8.26\nSolc 0.8.26 finished in 2.76s\nCompiler run successful!\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/MiniSwapToken.t.sol:84:9\n   │\n84 │         token.transfer(bob, 1);\n   │         ━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[unsafe-typecast]: typecasts that can truncate values should be checked\n   ╭▸ test/MiniPair.invariant.t.sol:26:37\n   │\n26 │             address actor = address(uint160(0xA11CE0 + i));\n   │                                     ━━━━━━━━━━━━━━━━━━━━━\n   │\n   ├ note: consider disabling this lint if you're certain the cast is safe\n   │       \n   │       // casting to 'uint160' is safe because [explain why]\n   │       // forge-lint: disable-next-line(unsafe-typecast)\n   │       \n   │       \n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#unsafe-typecast\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/MiniPair.invariant.t.sol:38:13\n   │\n38 │             token.transfer(actors[i], each);\n   │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/GasBaseline.t.sol:31:9\n   │\n31 │         token.transfer(ALICE, FUNDS);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/GasBaseline.t.sol:32:9\n   │\n32 │         token.transfer(BOB, FUNDS);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/MiniPair.optimizations.t.sol:12:9\n   │\n12 │         token.transfer(address(attacker), 10_000_000e18);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/MiniPair.t.sol:45:9\n   │\n45 │         token.transfer(who, tokens);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/MiniPair.invariant.t.sol:140:9\n    │\n140 │         token.transfer(address(handler), 400_000_000e18);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/MiniSwapToken.t.sol:90:9\n   │\n90 │         token.transferFrom(factory, bob, 1);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/SupportGasBaseline.t.sol:15:9\n   │\n15 │         feeToken.transfer(ALICE, 10_000e18);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/MiniSwapToken.t.sol:110:9\n    │\n110 │         token.transfer(to, amount);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/SupportGasBaseline.t.sol:100:9\n    │\n100 │         token.transfer(address(attacker), 1_000_000e18);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/SupportGasBaseline.t.sol:208:9\n    │\n208 │         token.transfer(address(receiver), 1_000_000e18);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/MiniPair.t.sol:165:9\n    │\n165 │         token.transfer(dave, 1e18);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/MiniPair.t.sol:252:9\n    │\n252 │         token.transfer(address(rejecter), 100_000e18);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/MiniPair.t.sol:376:9\n    │\n376 │         token.transfer(address(rejecter), 100_000e18);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/MiniPair.t.sol:496:9\n    │\n496 │         token.transfer(dave, 1e18);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/MiniPair.t.sol:507:9\n    │\n507 │         token.transfer(address(rejecter), 1_000e18);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/MiniPair.t.sol:547:9\n    │\n547 │         token.transfer(address(pair), 10_000_000e18);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/MiniPair.t.sol:605:9\n    │\n605 │         token.transfer(address(pair), 1_000_000e18);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/MiniPair.t.sol:645:9\n    │\n645 │         token.transfer(address(attacker), 1_000_000e18);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[unsafe-typecast]: typecasts that can truncate values should be checked\n    ╭▸ test/MiniPair.t.sol:823:26\n    │\n823 │                 assertEq(bytes4(reason), MiniPair.ZeroAmount.selector);\n    │                          ━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'bytes4' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#unsafe-typecast\n\nwarning[unsafe-typecast]: typecasts that can truncate values should be checked\n    ╭▸ test/MiniPair.t.sol:828:31\n    │\n828 │             bytes4 selector = bytes4(reason);\n    │                               ━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'bytes4' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#unsafe-typecast\n\n","passed":true},{"durationMs":695,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/GasBaseline.t.sol:MiniPairFirstLiquidityGasTest\n[PASS] testGas_addLiquidity_first() (gas: 191440)\nLogs:\n  MiniPair.addLiquidity_first: 154318\n  MiniPair.addLiquidity_first.refund: 0\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 571.31µs (121.09µs CPU time)\n\nRan 5 tests for test/SupportGasBaseline.t.sol:RejectingReceiverGasTest\n[PASS] testGas_addLiquidity() (gas: 90311)\nLogs:\n  RejectingReceiver.addLiquidity: 56817\n  RejectingReceiver.addLiquidity.refund: 0\n\n[PASS] testGas_pair() (gas: 22861)\nLogs:\n  RejectingReceiver.pair: 259\n  RejectingReceiver.pair.refund: 0\n\n[PASS] testGas_receive_reverts() (gas: 30675)\nLogs:\n  RejectingReceiver.receive_reverts: 166\n  RejectingReceiver.receive_reverts.refund: 0\n\n[PASS] testGas_removeLiquidity_reverts() (gas: 91496)\nLogs:\n  RejectingReceiver.removeLiquidity_reverts: 49272\n  RejectingReceiver.removeLiquidity_reverts.refund: 0\n\n[PASS] testGas_swapExactTokensForETH_reverts() (gas: 85239)\nLogs:\n  RejectingReceiver.swapExactTokensForETH_reverts: 46158\n  RejectingReceiver.swapExactTokensForETH_reverts.refund: 0\n\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 850.28µs (727.80µs CPU time)\n\nRan 15 tests for test/GasBaseline.t.sol:MiniPairGasTest\n[PASS] testGas_BPS() (gas: 20067)\nLogs:\n  MiniPair.BPS: 217\n  MiniPair.BPS.refund: 0\n\n[PASS] testGas_MAX_FEE_BPS() (gas: 20090)\nLogs:\n  MiniPair.MAX_FEE_BPS: 238\n  MiniPair.MAX_FEE_BPS.refund: 0\n\n[PASS] testGas_MINIMUM_SHARES() (gas: 20039)\nLogs:\n  MiniPair.MINIMUM_SHARES: 216\n  MiniPair.MINIMUM_SHARES.refund: 0\n\n[PASS] testGas_addLiquidity_pullsFewerTokens() (gas: 100041)\nLogs:\n  MiniPair.addLiquidity_pullsFewerTokens: 64019\n  MiniPair.addLiquidity_pullsFewerTokens.refund: 0\n\n[PASS] testGas_addLiquidity_refundsETH() (gas: 106921)\nLogs:\n  MiniPair.addLiquidity_refundsETH: 71150\n  MiniPair.addLiquidity_refundsETH.refund: 0\n\n[PASS] testGas_feeBps() (gas: 20112)\nLogs:\n  MiniPair.feeBps: 239\n  MiniPair.feeBps.refund: 0\n\n[PASS] testGas_getReserves() (gas: 24715)\nLogs:\n  MiniPair.getReserves: 4419\n  MiniPair.getReserves.refund: 0\n\n[PASS] testGas_quoteEthToToken() (gas: 25797)\nLogs:\n  MiniPair.quoteEthToToken: 5414\n  MiniPair.quoteEthToToken.refund: 0\n\n[PASS] testGas_quoteTokenToEth() (gas: 25775)\nLogs:\n  MiniPair.quoteTokenToEth: 5370\n  MiniPair.quoteTokenToEth.refund: 0\n\n[PASS] testGas_removeLiquidity() (gas: 78800)\nLogs:\n  MiniPair.removeLiquidity: 48673\n  MiniPair.removeLiquidity.refund: 0\n\n[PASS] testGas_sharesOf() (gas: 22438)\nLogs:\n  MiniPair.sharesOf: 2547\n  MiniPair.sharesOf.refund: 0\n\n[PASS] testGas_swapExactETHForTokens() (gas: 64714)\nLogs:\n  MiniPair.swapExactETHForTokens: 31655\n  MiniPair.swapExactETHForTokens.refund: 0\n\n[PASS] testGas_swapExactTokensForETH() (gas: 70013)\nLogs:\n  MiniPair.swapExactTokensForETH: 43086\n  MiniPair.swapExactTokensForETH.refund: 0\n\n[PASS] testGas_token() (gas: 20385)\nLogs:\n  MiniPair.token: 303\n  MiniPair.token.refund: 0\n\n[PASS] testGas_totalShares() (gas: 22234)\nLogs:\n  MiniPair.totalShares: 2361\n  MiniPair.totalShares.refund: 0\n\nSuite result: ok. 15 passed; 0 failed; 0 skipped; finished in 961.42µs (1.84ms CPU time)\n\nRan 12 tests for test/SupportGasBaseline.t.sol:ReentrantAttackerGasTest\n[PASS] testGas_addLiquidity() (gas: 90161)\nLogs:\n  ReentrantAttacker.addLiquidity: 56843\n  ReentrantAttacker.addLiquidity.refund: 0\n\n[PASS] testGas_attempts() (gas: 24963)\nLogs:\n  ReentrantAttacker.attempts: 2372\n  ReentrantAttacker.attempts.refund: 0\n\n[PASS] testGas_bubble() (gas: 24742)\nLogs:\n  ReentrantAttacker.bubble: 2386\n  ReentrantAttacker.bubble.refund: 0\n\n[PASS] testGas_lastError() (gas: 25866)\nLogs:\n  ReentrantAttacker.lastError: 2943\n  ReentrantAttacker.lastError.refund: 0\n\n[PASS] testGas_mode() (gas: 24764)\nLogs:\n  ReentrantAttacker.mode: 2372\n  ReentrantAttacker.mode.refund: 0\n\n[PASS] testGas_pair() (gas: 22824)\nLogs:\n  ReentrantAttacker.pair: 281\n  ReentrantAttacker.pair.refund: 0\n\n[PASS] testGas_receive() (gas: 31750)\nLogs:\n  ReentrantAttacker.receive: 2214\n  ReentrantAttacker.receive.refund: 0\n\n[PASS] testGas_reenter() (gas: 23424)\nLogs:\n  ReentrantAttacker.reenter: 534\n  ReentrantAttacker.reenter.refund: 0\n\n[PASS] testGas_removeLiquidity() (gas: 84929)\nLogs:\n  ReentrantAttacker.removeLiquidity: 51724\n  ReentrantAttacker.removeLiquidity.refund: 0\n\n[PASS] testGas_setMode() (gas: 47521)\nLogs:\n  ReentrantAttacker.setMode: 22852\n  ReentrantAttacker.setMode.refund: 0\n\n[PASS] testGas_swapExactTokensForETH() (gas: 71897)\nLogs:\n  ReentrantAttacker.swapExactTokensForETH: 48497\n  ReentrantAttacker.swapExactTokensForETH.refund: 0\n\n[PASS] testGas_token() (gas: 22961)\nLogs:\n  ReentrantAttacker.token: 325\n  ReentrantAttacker.token.refund: 0\n\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 938.57µs (988.76µs CPU time)\n\nRan 9 tests for test/SupportGasBaseline.t.sol:FeeOnTransferTokenGasTest\n[PASS] testGas_allowance() (gas: 25410)\nLogs:\n  FeeOnTransferToken.allowance: 2811\n  FeeOnTransferToken.allowance.refund: 0\n\n[PASS] testGas_approve() (gas: 49122)\nLogs:\n  FeeOnTransferToken.approve: 24735\n  FeeOnTransferToken.approve.refund: 0\n\n[PASS] testGas_balanceOf() (gas: 25209)\nLogs:\n  FeeOnTransferToken.balanceOf: 2559\n  FeeOnTransferToken.balanceOf.refund: 0\n\n[PASS] testGas_decimals() (gas: 22831)\nLogs:\n  FeeOnTransferToken.decimals: 176\n  FeeOnTransferToken.decimals.refund: 0\n\n[PASS] testGas_name() (gas: 26226)\nLogs:\n  FeeOnTransferToken.name: 3086\n  FeeOnTransferToken.name.refund: 0\n\n[PASS] testGas_symbol() (gas: 26247)\nLogs:\n  FeeOnTransferToken.symbol: 3129\n  FeeOnTransferToken.symbol.refund: 0\n\n[PASS] testGas_totalSupply() (gas: 24919)\nLogs:\n  FeeOnTransferToken.totalSupply: 2325\n  FeeOnTransferToken.totalSupply.refund: 0\n\n[PASS] testGas_transfer() (gas: 63044)\nLogs:\n  FeeOnTransferToken.transfer: 37672\n  FeeOnTransferToken.transfer.refund: 0\n\n[PASS] testGas_transferFrom() (gas: 69107)\nLogs:\n  FeeOnTransferToken.transferFrom: 43345\n  FeeOnTransferToken.transferFrom.refund: 0\n\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 1.10ms (648.49µs CPU time)\n\nRan 5 tests for test/MiniPair.optimizations.t.sol:MiniPairOptimizationsTest\n[PASS] test_cachedSyncMatchesStoredReservesAndEventOrderOnEveryPath() (gas: 351845)\n[PASS] test_reserveAboveUint128RemainsSupported() (gas: 171375)\n[PASS] test_transientLockBlocksEveryEntryFromAllEthSendingPaths() (gas: 1410241)\n[PASS] test_uncheckedHeldSharesAtBalanceBoundary() (gas: 173395)\n[PASS] test_uncheckedInitialSharesAtMinimumBoundary() (gas: 184792)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 10.96ms (2.07ms CPU time)\n\nRan 9 tests for test/MiniSwapToken.t.sol:MiniSwapTokenTest\n[PASS] testFuzz_transfersConserveSupply(address,uint256) (runs: 256, μ: 50243, ~: 50302)\nLogs:\n  Bound result 10000000000000000000\n\n[PASS] test_creationCodeHasNoConstructorArguments() (gas: 477167)\n[PASS] test_metadata() (gas: 18053)\n[PASS] test_mintsWholeSupplyToDeployer() (gas: 17303)\n[PASS] test_noAdminOrMintEntryPoints() (gas: 38821)\n[PASS] test_runtimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 1030897)\n[PASS] test_transferAndAllowanceAreExact() (gas: 90418)\n[PASS] test_transferFromRevertsWithoutAllowance() (gas: 16319)\n[PASS] test_transferRevertsWhenBalanceIsShort() (gas: 16099)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 20.10ms (22.10ms CPU time)\n\nRan 43 tests for test/MiniPair.t.sol:MiniPairTest\n[PASS] testFuzz_addThenRemoveNeverProfits(uint256,uint256) (runs: 256, μ: 236405, ~: 247028)\nLogs:\n  Bound result 40897825657531535593\n  Bound result 4010609361620055514381995\n\n[PASS] testFuzz_firstDepositSharesFollowSqrt(uint256,uint256) (runs: 256, μ: 167064, ~: 178984)\nLogs:\n  Bound result 40897825657531535593\n  Bound result 4010609361620055514381995\n\n[PASS] testFuzz_kNeverDecreasesAcrossSwaps(uint256[8],uint8) (runs: 256, μ: 360856, ~: 368021)\nLogs:\n  Bound result 22898495076584812843\n  Bound result 4898956738029495684460344\n  Bound result 1\n  Bound result 9999999999999999999999998\n  Bound result 4488559013275583113994297\n  Bound result 110779084042456276365952\n  Bound result 42795515665563679\n  Bound result 51597738778707598275\n\n[PASS] testFuzz_quotesMatchSwaps(uint256,uint256) (runs: 256, μ: 224874, ~: 230556)\nLogs:\n  Bound result 11230928404263378330\n  Bound result 4461057712130672689742630\n\n[PASS] testFuzz_roundTripEthNeverProfits(uint256) (runs: 256, μ: 231432, ~: 231459)\nLogs:\n  Bound result 286086307429508824995\n\n[PASS] testFuzz_roundTripTokenNeverProfits(uint256) (runs: 256, μ: 221014, ~: 234230)\nLogs:\n  Bound result 25231836089879766469868581\n\n[PASS] test_addLiquidityEnforcesMinShares() (gas: 44955)\n[PASS] test_addLiquidityRevertsOnZeroAmounts() (gas: 20895)\n[PASS] test_addLiquidityRevertsWhenRefundIsRejected() (gas: 534135)\n[PASS] test_addLiquidityRevertsWithoutApproval() (gas: 175534)\n[PASS] test_constructorIsNotPayable() (gas: 40787)\n[PASS] test_constructorRevertsOnExcessiveFee() (gas: 1073955)\n[PASS] test_constructorRevertsOnZeroToken() (gas: 37126)\n[PASS] test_constructorStoresParameters() (gas: 23085)\n[PASS] test_ethDonationDoesNotChangeQuotesOrReserves() (gas: 212721)\n[PASS] test_feesAccrueToLiquidityProviders() (gas: 373193)\n[PASS] test_firstDepositMintsSqrtMinusLockedMinimum() (gas: 187825)\n[PASS] test_firstDepositRevertsBelowLockedMinimum() (gas: 184407)\n[PASS] test_firstDepositorInflationAttackIsNotProfitable() (gas: 241712)\n[PASS] test_laterDepositEnforcesMinShares() (gas: 185061)\n[PASS] test_laterDepositPullsOnlyTheNeededTokens() (gas: 243390)\n[PASS] test_laterDepositRefundsExcessEth() (gas: 247096)\n[PASS] test_laterDepositTooSmallForAnyShareReverts() (gas: 183115)\n[PASS] test_pairRejectsFeeOnTransferToken() (gas: 1713322)\n[PASS] test_plainEthTransferReverts() (gas: 17893)\n[PASS] test_reentrancyOnAddLiquidityRefundIsBlocked() (gas: 1069721)\n[PASS] test_reentrancyOnRemoveLiquidityIsBlocked() (gas: 1033683)\n[PASS] test_reentrancyOnSwapTokensForEthIsBlocked() (gas: 1090074)\n[PASS] test_removeAllReturnsFundsMinusLockedMinimum() (gas: 240811)\n[PASS] test_removeLiquidityEnforcesMinimums() (gas: 180538)\n[PASS] test_removeLiquidityIsProportional() (gas: 208337)\n[PASS] test_removeLiquidityRevertsAboveBalance() (gas: 181641)\n[PASS] test_removeLiquidityRevertsOnZeroShares() (gas: 173325)\n[PASS] test_removeLiquidityRevertsWhenReceiverRejectsEth() (gas: 517125)\n[PASS] test_swapExactETHForTokensMatchesQuoteAndKeepsK() (gas: 215364)\n[PASS] test_swapExactTokensForETHMatchesQuoteAndKeepsK() (gas: 221849)\n[PASS] test_swapSlippageLimitsRevert() (gas: 226578)\n[PASS] test_swapTokensForEthRevertsWhenReceiverRejectsEth() (gas: 468539)\n[PASS] test_swapTokensRevertsWithoutApproval() (gas: 217257)\n[PASS] test_swapsRevertOnEmptyPool() (gas: 30122)\n[PASS] test_swapsRevertOnZeroInput() (gas: 181939)\n[PASS] test_swapsRevertWhenOutputRoundsToZero() (gas: 176526)\n[PASS] test_tokenDonationDoesNotChangeQuotesOrReserves() (gas: 222234)\nSuite result: ok. 43 passed; 0 failed; 0 skipped; finished in 39.80ms (141.82ms CPU time)\n\nRan 12 tests for test/GasBaseline.t.sol:MiniSwapTokenGasTest\n[PASS] testGas_TOTAL_SUPPLY() (gas: 20333)\nLogs:\n  MiniSwapToken.TOTAL_SUPPLY: 216\n  MiniSwapToken.TOTAL_SUPPLY.refund: 0\n\n[PASS] testGas_allowance() (gas: 22656)\nLogs:\n  MiniSwapToken.allowance: 2811\n  MiniSwapToken.allowance.refund: 0\n\n[PASS] testGas_approve() (gas: 46363)\nLogs:\n  MiniSwapToken.approve: 24735\n  MiniSwapToken.approve.refund: 0\n\n[PASS] testGas_balanceOf() (gas: 22301)\nLogs:\n  MiniSwapToken.balanceOf: 2537\n  MiniSwapToken.balanceOf.refund: 0\n\n[PASS] testGas_decimals() (gas: 20210)\nLogs:\n  MiniSwapToken.decimals: 265\n  MiniSwapToken.decimals.refund: 0\n\n[PASS] testGas_name() (gas: 23755)\nLogs:\n  MiniSwapToken.name: 3086\n  MiniSwapToken.name.refund: 0\n\n[PASS] testGas_symbol() (gas: 23754)\nLogs:\n  MiniSwapToken.symbol: 3129\n  MiniSwapToken.symbol.refund: 0\n\n[PASS] testGas_totalSupply() (gas: 22181)\nLogs:\n  MiniSwapToken.totalSupply: 2325\n  MiniSwapToken.totalSupply.refund: 0\n\n[PASS] testGas_transferFrom_finiteAllowance() (gas: 43720)\nLogs:\n  MiniSwapToken.transferFrom_finiteAllowance: 18555\n  MiniSwapToken.transferFrom_finiteAllowance.refund: 0\n\n[PASS] testGas_transferFrom_infiniteAllowance() (gas: 38434)\nLogs:\n  MiniSwapToken.transferFrom_infiniteAllowance: 15318\n  MiniSwapToken.transferFrom_infiniteAllowance.refund: 0\n\n[PASS] testGas_transfer_existingRecipient() (gas: 36326)\nLogs:\n  MiniSwapToken.transfer_existingRecipient: 12882\n  MiniSwapToken.transfer_existingRecipient.refund: 0\n\n[PASS] testGas_transfer_newRecipient() (gas: 53364)\nLogs:\n  MiniSwapToken.transfer_newRecipient: 29982\n  MiniSwapToken.transfer_newRecipient.refund: 0\n\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 601.77ms (1.66ms CPU time)\n\nRan 4 tests for test/MiniPair.invariant.t.sol:MiniPairInvariantTest\n[PASS] invariant_quotesFollowInternalReserves() (runs: 64, calls: 3072, reverts: 0)\n\n╭-----------------+------------------+-------+---------+----------╮\n| Contract        | Selector         | Calls | Reverts | Discards |\n+=================================================================+\n| MiniPairHandler | addLiquidity     | 792   | 0       | 0        |\n|-----------------+------------------+-------+---------+----------|\n| MiniPairHandler | removeLiquidity  | 793   | 0       | 0        |\n|-----------------+------------------+-------+---------+----------|\n| MiniPairHandler | swapEthForTokens | 734   | 0       | 0        |\n|-----------------+------------------+-------+---------+----------|\n| MiniPairHandler | swapTokensForEth | 753   | 0       | 0        |\n╰-----------------+------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 21312904008639575850\n  Bound result 669716118281951715111139\n  Bound result 659918\n  Bound result 1000002\n  Bound result 9371376190865496477553943\n  Bound result 2159\n  Bound result 48411706838400345166\n  Bound result 3086\n  Bound result 30\n  Bound result 50000000000000000000\n  Bound result 5000000000000000000000000\n  Bound result 1\n  Bound result 18\n  Bound result 3786\n  Bound result 336\n  Bound result 124707766303292\n  Bound result 7953\n  Bound result 5050887938145132966\n  Bound result 5881782944965056650\n  Bound result 100000000000000000000\n  Bound result 520\n  Bound result 3\n  Bound result 100\n  Bound result 6924\n  Bound result 3\n  Bound result 1000000000000000000\n  Bound result 25136234884755115062\n  Bound result 7967188487366065212\n  Bound result 196190718334\n  Bound result 1\n  Bound result 1\n  Bound result 1473\n  Bound result 3\n  Bound result 2\n  Bound result 1\n  Bound result 500000000000000000000\n  Bound result 2\n  Bound result 33652561357\n  Bound result 1000000\n  Bound result 8116569381049\n  Bound result 61258423259662907622\n  Bound result 1214151734364987971316461\n  Bound result 95\n  Bound result 1569843286845891478\n  Bound result 127\n  Bound result 5320753844573525710\n  Bound result 1285046662\n  Bound result 470\n  Bound result 57218192\n  Bound result 4534897143749910114887404\n  Bound result 28603970491600686823\n  Bound result 49999999999999999999\n\n[PASS] invariant_reservesAreBackedByBalances() (runs: 64, calls: 3072, reverts: 0)\n\n╭-----------------+------------------+-------+---------+----------╮\n| Contract        | Selector         | Calls | Reverts | Discards |\n+=================================================================+\n| MiniPairHandler | addLiquidity     | 792   | 0       | 0        |\n|-----------------+------------------+-------+---------+----------|\n| MiniPairHandler | removeLiquidity  | 793   | 0       | 0        |\n|-----------------+------------------+-------+---------+----------|\n| MiniPairHandler | swapEthForTokens | 734   | 0       | 0        |\n|-----------------+------------------+-------+---------+----------|\n| MiniPairHandler | swapTokensForEth | 753   | 0       | 0        |\n╰-----------------+------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 21312904008639575850\n  Bound result 669716118281951715111139\n  Bound result 659918\n  Bound result 1000002\n  Bound result 9371376190865496477553943\n  Bound result 2159\n  Bound result 48411706838400345166\n  Bound result 3010\n  Bound result 30\n  Bound result 50000000000000000000\n  Bound result 5000000000000000000000000\n  Bound result 1\n  Bound result 18\n  Bound result 8708\n  Bound result 2514000706\n  Bound result 124707766303292\n  Bound result 4298\n  Bound result 5050887938145132966\n  Bound result 5881782944965056650\n  Bound result 100000000000000000000\n  Bound result 676\n  Bound result 3\n  Bound result 100\n  Bound result 6791\n  Bound result 2\n  Bound result 1000000000000000000\n  Bound result 25136234884755115062\n  Bound result 7967188487366065212\n  Bound result 173539409895\n  Bound result 1\n  Bound result 1\n  Bound result 1394\n  Bound result 2\n  Bound result 2\n  Bound result 1\n  Bound result 500000000000000000000\n  Bound result 2\n  Bound result 33652826949\n  Bound result 1000000\n  Bound result 1\n  Bound result 8116569381049\n  Bound result 61258423259662907622\n  Bound result 787235525024742729063707\n  Bound result 95\n  Bound result 1569843286845891478\n  Bound result 127\n  Bound result 5320753844573525710\n  Bound result 2829720368\n  Bound result 111\n  Bound result 57218192\n  Bound result 4534897143749910114887404\n  Bound result 28603970491600686823\n  Bound result 49999999999999999999\n\n[PASS] invariant_reservesEqualNetFlows() (runs: 64, calls: 3072, reverts: 0)\n\n╭-----------------+------------------+-------+---------+----------╮\n| Contract        | Selector         | Calls | Reverts | Discards |\n+=================================================================+\n| MiniPairHandler | addLiquidity     | 792   | 0       | 0        |\n|-----------------+------------------+-------+---------+----------|\n| MiniPairHandler | removeLiquidity  | 793   | 0       | 0        |\n|-----------------+------------------+-------+---------+----------|\n| MiniPairHandler | swapEthForTokens | 734   | 0       | 0        |\n|-----------------+------------------+-------+---------+----------|\n| MiniPairHandler | swapTokensForEth | 753   | 0       | 0        |\n╰-----------------+------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 21312904008639575850\n  Bound result 669716118281951715111139\n  Bound result 659918\n  Bound result 1000002\n  Bound result 9371376190865496477553943\n  Bound result 2159\n  Bound result 48411706838400345166\n  Bound result 3010\n  Bound result 30\n  Bound result 50000000000000000000\n  Bound result 5000000000000000000000000\n  Bound result 1\n  Bound result 18\n  Bound result 8708\n  Bound result 2514000706\n  Bound result 124707766303292\n  Bound result 4298\n  Bound result 5050887938145132966\n  Bound result 5881782944965056650\n  Bound result 100000000000000000000\n  Bound result 676\n  Bound result 3\n  Bound result 100\n  Bound result 6791\n  Bound result 2\n  Bound result 1000000000000000000\n  Bound result 25136234884755115062\n  Bound result 7967188487366065212\n  Bound result 173539409895\n  Bound result 1\n  Bound result 1\n  Bound result 1394\n  Bound result 1\n  Bound result 2\n  Bound result 1\n  Bound result 500000000000000000000\n  Bound result 2\n  Bound result 33652826949\n  Bound result 1000000\n  Bound result 1\n  Bound result 8116569381049\n  Bound result 61258423259662907622\n  Bound result 787235525024742729063707\n  Bound result 95\n  Bound result 1569843286845891478\n  Bound result 127\n  Bound result 5320753844573525710\n  Bound result 2829720368\n  Bound result 111\n  Bound result 57218192\n  Bound result 4534897143749910114887404\n  Bound result 28603970491600686823\n  Bound result 49999999999999999999\n\n[PASS] invariant_sharesAreConserved() (runs: 64, calls: 3072, reverts: 0)\n\n╭-----------------+------------------+-------+---------+----------╮\n| Contract        | Selector         | Calls | Reverts | Discards |\n+=================================================================+\n| MiniPairHandler | addLiquidity     | 792   | 0       | 0        |\n|-----------------+------------------+-------+---------+----------|\n| MiniPairHandler | removeLiquidity  | 793   | 0       | 0        |\n|-----------------+------------------+-------+---------+----------|\n| MiniPairHandler | swapEthForTokens | 734   | 0       | 0        |\n|-----------------+------------------+-------+---------+----------|\n| MiniPairHandler | swapTokensForEth | 753   | 0       | 0        |\n╰-----------------+------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 21312904008639575850\n  Bound result 669716118281951715111139\n  Bound result 659918\n  Bound result 1000002\n  Bound result 9371376190865496477553943\n  Bound result 2296\n  Bound result 48411706838400345166\n  Bound result 3085\n  Bound result 30\n  Bound result 50000000000000000000\n  Bound result 5000000000000000000000000\n  Bound result 1\n  Bound result 18\n  Bound result 8729\n  Bound result 335\n  Bound result 124707766303292\n  Bound result 4334\n  Bound result 5050887938145132966\n  Bound result 5881782944965056650\n  Bound result 100000000000000000000\n  Bound result 695\n  Bound result 3\n  Bound result 100\n  Bound result 6903\n  Bound result 2\n  Bound result 1000000000000000000\n  Bound result 25136234884755115062\n  Bound result 7967188487366065212\n  Bound result 44008020647\n  Bound result 255\n  Bound result 1\n  Bound result 207\n  Bound result 3\n  Bound result 2\n  Bound result 798442960368\n  Bound result 500000000000000000000\n  Bound result 2\n  Bound result 74977886922\n  Bound result 1000000\n  Bound result 8116569381049\n  Bound result 61258423259662907622\n  Bound result 7156586026102579404948816\n  Bound result 95\n  Bound result 1569843286845891478\n  Bound result 127\n  Bound result 5320753844573525710\n  Bound result 1285046662\n  Bound result 470\n  Bound result 57218192\n  Bound result 4534897143749910114887404\n  Bound result 28603970491600686823\n  Bound result 49999999999999999999\n\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 601.81ms (1.84s CPU time)\n\nRan 10 test suites in 604.81ms (1.28s CPU time): 115 tests passed, 0 failed, 0 skipped (115 total tests)\n","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"410ac67b32995c3134e640298fabdb175f4efceed17231d25f33cf3640a84f81","verifiedTreeHash":"378a09d0e3c5c82881398141b1a0e5e7b09169fb","verifierVersion":"0.1.0+ff982c0f"},{"checks":[{"durationMs":2428,"exitCode":0,"name":"build","output":"Compiling 37 files with Solc 0.8.26\nSolc 0.8.26 finished in 2.36s\nCompiler run successful!\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/MiniSwapToken.t.sol:84:9\n   │\n84 │         token.transfer(bob, 1);\n   │         ━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/SupportGasBaseline.t.sol:15:9\n   │\n15 │         feeToken.transfer(ALICE, 10_000e18);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/SupportGasBaseline.t.sol:100:9\n    │\n100 │         token.transfer(address(attacker), 1_000_000e18);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[unsafe-typecast]: typecasts that can truncate values should be checked\n   ╭▸ test/MiniPair.invariant.t.sol:26:37\n   │\n26 │             address actor = address(uint160(0xA11CE0 + i));\n   │                                     ━━━━━━━━━━━━━━━━━━━━━\n   │\n   ├ note: consider disabling this lint if you're certain the cast is safe\n   │       \n   │       // casting to 'uint160' is safe because [explain why]\n   │       // forge-lint: disable-next-line(unsafe-typecast)\n   │       \n   │       \n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#unsafe-typecast\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/GasBaseline.t.sol:31:9\n   │\n31 │         token.transfer(ALICE, FUNDS);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/GasBaseline.t.sol:32:9\n   │\n32 │         token.transfer(BOB, FUNDS);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/MiniSwapToken.t.sol:90:9\n   │\n90 │         token.transferFrom(factory, bob, 1);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/MiniPair.invariant.t.sol:38:13\n   │\n38 │             token.transfer(actors[i], each);\n   │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/MiniPair.t.sol:45:9\n   │\n45 │         token.transfer(who, tokens);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/MiniSwapToken.t.sol:110:9\n    │\n110 │         token.transfer(to, amount);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/MiniPair.invariant.t.sol:140:9\n    │\n140 │         token.transfer(address(handler), 400_000_000e18);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/MiniPair.t.sol:165:9\n    │\n165 │         token.transfer(dave, 1e18);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/SupportGasBaseline.t.sol:208:9\n    │\n208 │         token.transfer(address(receiver), 1_000_000e18);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/MiniPair.t.sol:252:9\n    │\n252 │         token.transfer(address(rejecter), 100_000e18);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/MiniPair.t.sol:376:9\n    │\n376 │         token.transfer(address(rejecter), 100_000e18);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/MiniPair.t.sol:496:9\n    │\n496 │         token.transfer(dave, 1e18);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/MiniPair.t.sol:507:9\n    │\n507 │         token.transfer(address(rejecter), 1_000e18);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/MiniPair.t.sol:547:9\n    │\n547 │         token.transfer(address(pair), 10_000_000e18);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/MiniPair.t.sol:605:9\n    │\n605 │         token.transfer(address(pair), 1_000_000e18);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/MiniPair.t.sol:645:9\n    │\n645 │         token.transfer(address(attacker), 1_000_000e18);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[unsafe-typecast]: typecasts that can truncate values should be checked\n    ╭▸ test/MiniPair.t.sol:823:26\n    │\n823 │                 assertEq(bytes4(reason), MiniPair.ZeroAmount.selector);\n    │                          ━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'bytes4' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#unsafe-typecast\n\nwarning[unsafe-typecast]: typecasts that can truncate values should be checked\n    ╭▸ test/MiniPair.t.sol:828:31\n    │\n828 │             bytes4 selector = bytes4(reason);\n    │                               ━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'bytes4' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#unsafe-typecast\n\n","passed":true},{"durationMs":688,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/GasBaseline.t.sol:MiniPairFirstLiquidityGasTest\n[PASS] testGas_addLiquidity_first() (gas: 193774)\nLogs:\n  MiniPair.addLiquidity_first: 159451\n  MiniPair.addLiquidity_first.refund: 2800\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 586.34µs (142.91µs CPU time)\n\nRan 12 tests for test/GasBaseline.t.sol:MiniSwapTokenGasTest\n[PASS] testGas_TOTAL_SUPPLY() (gas: 20333)\nLogs:\n  MiniSwapToken.TOTAL_SUPPLY: 216\n  MiniSwapToken.TOTAL_SUPPLY.refund: 0\n\n[PASS] testGas_allowance() (gas: 22656)\nLogs:\n  MiniSwapToken.allowance: 2811\n  MiniSwapToken.allowance.refund: 0\n\n[PASS] testGas_approve() (gas: 46363)\nLogs:\n  MiniSwapToken.approve: 24735\n  MiniSwapToken.approve.refund: 0\n\n[PASS] testGas_balanceOf() (gas: 22301)\nLogs:\n  MiniSwapToken.balanceOf: 2537\n  MiniSwapToken.balanceOf.refund: 0\n\n[PASS] testGas_decimals() (gas: 20210)\nLogs:\n  MiniSwapToken.decimals: 265\n  MiniSwapToken.decimals.refund: 0\n\n[PASS] testGas_name() (gas: 23755)\nLogs:\n  MiniSwapToken.name: 3086\n  MiniSwapToken.name.refund: 0\n\n[PASS] testGas_symbol() (gas: 23754)\nLogs:\n  MiniSwapToken.symbol: 3129\n  MiniSwapToken.symbol.refund: 0\n\n[PASS] testGas_totalSupply() (gas: 22181)\nLogs:\n  MiniSwapToken.totalSupply: 2325\n  MiniSwapToken.totalSupply.refund: 0\n\n[PASS] testGas_transferFrom_finiteAllowance() (gas: 43720)\nLogs:\n  MiniSwapToken.transferFrom_finiteAllowance: 18555\n  MiniSwapToken.transferFrom_finiteAllowance.refund: 0\n\n[PASS] testGas_transferFrom_infiniteAllowance() (gas: 38434)\nLogs:\n  MiniSwapToken.transferFrom_infiniteAllowance: 15318\n  MiniSwapToken.transferFrom_infiniteAllowance.refund: 0\n\n[PASS] testGas_transfer_existingRecipient() (gas: 36326)\nLogs:\n  MiniSwapToken.transfer_existingRecipient: 12882\n  MiniSwapToken.transfer_existingRecipient.refund: 0\n\n[PASS] testGas_transfer_newRecipient() (gas: 53364)\nLogs:\n  MiniSwapToken.transfer_newRecipient: 29982\n  MiniSwapToken.transfer_newRecipient.refund: 0\n\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 979.30µs (1.30ms CPU time)\n\nRan 9 tests for test/SupportGasBaseline.t.sol:FeeOnTransferTokenGasTest\n[PASS] testGas_allowance() (gas: 25410)\nLogs:\n  FeeOnTransferToken.allowance: 2811\n  FeeOnTransferToken.allowance.refund: 0\n\n[PASS] testGas_approve() (gas: 49122)\nLogs:\n  FeeOnTransferToken.approve: 24735\n  FeeOnTransferToken.approve.refund: 0\n\n[PASS] testGas_balanceOf() (gas: 25209)\nLogs:\n  FeeOnTransferToken.balanceOf: 2559\n  FeeOnTransferToken.balanceOf.refund: 0\n\n[PASS] testGas_decimals() (gas: 22831)\nLogs:\n  FeeOnTransferToken.decimals: 176\n  FeeOnTransferToken.decimals.refund: 0\n\n[PASS] testGas_name() (gas: 26226)\nLogs:\n  FeeOnTransferToken.name: 3086\n  FeeOnTransferToken.name.refund: 0\n\n[PASS] testGas_symbol() (gas: 26247)\nLogs:\n  FeeOnTransferToken.symbol: 3129\n  FeeOnTransferToken.symbol.refund: 0\n\n[PASS] testGas_totalSupply() (gas: 24919)\nLogs:\n  FeeOnTransferToken.totalSupply: 2325\n  FeeOnTransferToken.totalSupply.refund: 0\n\n[PASS] testGas_transfer() (gas: 63044)\nLogs:\n  FeeOnTransferToken.transfer: 37672\n  FeeOnTransferToken.transfer.refund: 0\n\n[PASS] testGas_transferFrom() (gas: 69107)\nLogs:\n  FeeOnTransferToken.transferFrom: 43345\n  FeeOnTransferToken.transferFrom.refund: 0\n\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 3.07ms (974.62µs CPU time)\n\nRan 12 tests for test/SupportGasBaseline.t.sol:ReentrantAttackerGasTest\n[PASS] testGas_addLiquidity() (gas: 92427)\nLogs:\n  ReentrantAttacker.addLiquidity: 61908\n  ReentrantAttacker.addLiquidity.refund: 2800\n\n[PASS] testGas_attempts() (gas: 24963)\nLogs:\n  ReentrantAttacker.attempts: 2372\n  ReentrantAttacker.attempts.refund: 0\n\n[PASS] testGas_bubble() (gas: 24742)\nLogs:\n  ReentrantAttacker.bubble: 2386\n  ReentrantAttacker.bubble.refund: 0\n\n[PASS] testGas_lastError() (gas: 25866)\nLogs:\n  ReentrantAttacker.lastError: 2943\n  ReentrantAttacker.lastError.refund: 0\n\n[PASS] testGas_mode() (gas: 24764)\nLogs:\n  ReentrantAttacker.mode: 2372\n  ReentrantAttacker.mode.refund: 0\n\n[PASS] testGas_pair() (gas: 22824)\nLogs:\n  ReentrantAttacker.pair: 281\n  ReentrantAttacker.pair.refund: 0\n\n[PASS] testGas_receive() (gas: 31750)\nLogs:\n  ReentrantAttacker.receive: 2214\n  ReentrantAttacker.receive.refund: 0\n\n[PASS] testGas_reenter() (gas: 23424)\nLogs:\n  ReentrantAttacker.reenter: 534\n  ReentrantAttacker.reenter.refund: 0\n\n[PASS] testGas_removeLiquidity() (gas: 87259)\nLogs:\n  ReentrantAttacker.removeLiquidity: 56853\n  ReentrantAttacker.removeLiquidity.refund: 2800\n\n[PASS] testGas_setMode() (gas: 47521)\nLogs:\n  ReentrantAttacker.setMode: 22852\n  ReentrantAttacker.setMode.refund: 0\n\n[PASS] testGas_swapExactTokensForETH() (gas: 74127)\nLogs:\n  ReentrantAttacker.swapExactTokensForETH: 53527\n  ReentrantAttacker.swapExactTokensForETH.refund: 2800\n\n[PASS] testGas_token() (gas: 22961)\nLogs:\n  ReentrantAttacker.token: 325\n  ReentrantAttacker.token.refund: 0\n\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 3.35ms (935.29µs CPU time)\n\nRan 9 tests for test/MiniSwapToken.t.sol:MiniSwapTokenTest\n[PASS] testFuzz_transfersConserveSupply(address,uint256) (runs: 256, μ: 50243, ~: 50302)\nLogs:\n  Bound result 787934797256673792477186466\n\n[PASS] test_creationCodeHasNoConstructorArguments() (gas: 477167)\n[PASS] test_metadata() (gas: 18053)\n[PASS] test_mintsWholeSupplyToDeployer() (gas: 17303)\n[PASS] test_noAdminOrMintEntryPoints() (gas: 38821)\n[PASS] test_runtimeHasNoDelegatecallCallcodeOrSelfdestruct() (gas: 1030897)\n[PASS] test_transferAndAllowanceAreExact() (gas: 90418)\n[PASS] test_transferFromRevertsWithoutAllowance() (gas: 16319)\n[PASS] test_transferRevertsWhenBalanceIsShort() (gas: 16099)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 8.12ms (10.70ms CPU time)\n\nRan 43 tests for test/MiniPair.t.sol:MiniPairTest\n[PASS] testFuzz_addThenRemoveNeverProfits(uint256,uint256) (runs: 256, μ: 239517, ~: 249958)\nLogs:\n  Bound result 40897825657531535593\n  Bound result 4010609361620055514381995\n\n[PASS] testFuzz_firstDepositSharesFollowSqrt(uint256,uint256) (runs: 256, μ: 167260, ~: 181322)\nLogs:\n  Bound result 6441\n  Bound result 2631156186\n\n[PASS] testFuzz_kNeverDecreasesAcrossSwaps(uint256[8],uint8) (runs: 256, μ: 368870, ~: 374306)\nLogs:\n  Bound result 93879615901680261123\n  Bound result 1\n  Bound result 234623999578\n  Bound result 691183603619405196773031\n  Bound result 4284762141034137761028496\n  Bound result 7698806222354847350976630\n  Bound result 4054410665650617375867519\n  Bound result 7910194706325560357172374\n\n[PASS] testFuzz_quotesMatchSwaps(uint256,uint256) (runs: 256, μ: 227525, ~: 233354)\nLogs:\n  Bound result 40897825657531535593\n  Bound result 4010609361620055514381995\n\n[PASS] testFuzz_roundTripEthNeverProfits(uint256) (runs: 256, μ: 234277, ~: 234256)\nLogs:\n  Bound result 286086307429508824995\n\n[PASS] testFuzz_roundTripTokenNeverProfits(uint256) (runs: 256, μ: 224057, ~: 237027)\nLogs:\n  Bound result 2239111394\n\n[PASS] test_addLiquidityEnforcesMinShares() (gas: 49846)\n[PASS] test_addLiquidityRevertsOnZeroAmounts() (gas: 30541)\n[PASS] test_addLiquidityRevertsWhenRefundIsRejected() (gas: 539792)\n[PASS] test_addLiquidityRevertsWithoutApproval() (gas: 180661)\n[PASS] test_constructorIsNotPayable() (gas: 40787)\n[PASS] test_constructorRevertsOnExcessiveFee() (gas: 1117965)\n[PASS] test_constructorRevertsOnZeroToken() (gas: 59231)\n[PASS] test_constructorStoresParameters() (gas: 23086)\n[PASS] test_ethDonationDoesNotChangeQuotesOrReserves() (gas: 215294)\n[PASS] test_feesAccrueToLiquidityProviders() (gas: 378155)\n[PASS] test_firstDepositMintsSqrtMinusLockedMinimum() (gas: 190159)\n[PASS] test_firstDepositRevertsBelowLockedMinimum() (gas: 191563)\n[PASS] test_firstDepositorInflationAttackIsNotProfitable() (gas: 244969)\n[PASS] test_laterDepositEnforcesMinShares() (gas: 190217)\n[PASS] test_laterDepositPullsOnlyTheNeededTokens() (gas: 245989)\n[PASS] test_laterDepositRefundsExcessEth() (gas: 249695)\n[PASS] test_laterDepositTooSmallForAnyShareReverts() (gas: 188271)\n[PASS] test_pairRejectsFeeOnTransferToken() (gas: 1735554)\n[PASS] test_plainEthTransferReverts() (gas: 17893)\n[PASS] test_reentrancyOnAddLiquidityRefundIsBlocked() (gas: 1075672)\n[PASS] test_reentrancyOnRemoveLiquidityIsBlocked() (gas: 1039763)\n[PASS] test_reentrancyOnSwapTokensForEthIsBlocked() (gas: 1098985)\n[PASS] test_removeAllReturnsFundsMinusLockedMinimum() (gas: 243739)\n[PASS] test_removeLiquidityEnforcesMinimums() (gas: 188519)\n[PASS] test_removeLiquidityIsProportional() (gas: 211000)\n[PASS] test_removeLiquidityRevertsAboveBalance() (gas: 189620)\n[PASS] test_removeLiquidityRevertsOnZeroShares() (gas: 178481)\n[PASS] test_removeLiquidityRevertsWhenReceiverRejectsEth() (gas: 522846)\n[PASS] test_swapExactETHForTokensMatchesQuoteAndKeepsK() (gas: 217933)\n[PASS] test_swapExactTokensForETHMatchesQuoteAndKeepsK() (gas: 224417)\n[PASS] test_swapSlippageLimitsRevert() (gas: 237617)\n[PASS] test_swapTokensForEthRevertsWhenReceiverRejectsEth() (gas: 473892)\n[PASS] test_swapTokensRevertsWithoutApproval() (gas: 222610)\n[PASS] test_swapsRevertOnEmptyPool() (gas: 39772)\n[PASS] test_swapsRevertOnZeroInput() (gas: 189918)\n[PASS] test_swapsRevertWhenOutputRoundsToZero() (gas: 181683)\n[PASS] test_tokenDonationDoesNotChangeQuotesOrReserves() (gas: 225136)\nSuite result: ok. 43 passed; 0 failed; 0 skipped; finished in 59.13ms (186.76ms CPU time)\n\nRan 15 tests for test/GasBaseline.t.sol:MiniPairGasTest\n[PASS] testGas_BPS() (gas: 20067)\nLogs:\n  MiniPair.BPS: 217\n  MiniPair.BPS.refund: 0\n\n[PASS] testGas_MAX_FEE_BPS() (gas: 20090)\nLogs:\n  MiniPair.MAX_FEE_BPS: 238\n  MiniPair.MAX_FEE_BPS.refund: 0\n\n[PASS] testGas_MINIMUM_SHARES() (gas: 20039)\nLogs:\n  MiniPair.MINIMUM_SHARES: 216\n  MiniPair.MINIMUM_SHARES.refund: 0\n\n[PASS] testGas_addLiquidity_pullsFewerTokens() (gas: 102307)\nLogs:\n  MiniPair.addLiquidity_pullsFewerTokens: 69084\n  MiniPair.addLiquidity_pullsFewerTokens.refund: 2800\n\n[PASS] testGas_addLiquidity_refundsETH() (gas: 109187)\nLogs:\n  MiniPair.addLiquidity_refundsETH: 76215\n  MiniPair.addLiquidity_refundsETH.refund: 2800\n\n[PASS] testGas_feeBps() (gas: 20112)\nLogs:\n  MiniPair.feeBps: 239\n  MiniPair.feeBps.refund: 0\n\n[PASS] testGas_getReserves() (gas: 24716)\nLogs:\n  MiniPair.getReserves: 4420\n  MiniPair.getReserves.refund: 0\n\n[PASS] testGas_quoteEthToToken() (gas: 25799)\nLogs:\n  MiniPair.quoteEthToToken: 5416\n  MiniPair.quoteEthToToken.refund: 0\n\n[PASS] testGas_quoteTokenToEth() (gas: 25777)\nLogs:\n  MiniPair.quoteTokenToEth: 5372\n  MiniPair.quoteTokenToEth.refund: 0\n\n[PASS] testGas_removeLiquidity() (gas: 81130)\nLogs:\n  MiniPair.removeLiquidity: 53802\n  MiniPair.removeLiquidity.refund: 2800\n\n[PASS] testGas_sharesOf() (gas: 22438)\nLogs:\n  MiniPair.sharesOf: 2547\n  MiniPair.sharesOf.refund: 0\n\n[PASS] testGas_swapExactETHForTokens() (gas: 66945)\nLogs:\n  MiniPair.swapExactETHForTokens: 36685\n  MiniPair.swapExactETHForTokens.refund: 2800\n\n[PASS] testGas_swapExactTokensForETH() (gas: 72244)\nLogs:\n  MiniPair.swapExactTokensForETH: 48116\n  MiniPair.swapExactTokensForETH.refund: 2800\n\n[PASS] testGas_token() (gas: 20385)\nLogs:\n  MiniPair.token: 303\n  MiniPair.token.refund: 0\n\n[PASS] testGas_totalShares() (gas: 22234)\nLogs:\n  MiniPair.totalShares: 2361\n  MiniPair.totalShares.refund: 0\n\nSuite result: ok. 15 passed; 0 failed; 0 skipped; finished in 376.65ms (2.20ms CPU time)\n\nRan 5 tests for test/SupportGasBaseline.t.sol:RejectingReceiverGasTest\n[PASS] testGas_addLiquidity() (gas: 92577)\nLogs:\n  RejectingReceiver.addLiquidity: 61882\n  RejectingReceiver.addLiquidity.refund: 2800\n\n[PASS] testGas_pair() (gas: 22861)\nLogs:\n  RejectingReceiver.pair: 259\n  RejectingReceiver.pair.refund: 0\n\n[PASS] testGas_receive_reverts() (gas: 30675)\nLogs:\n  RejectingReceiver.receive_reverts: 166\n  RejectingReceiver.receive_reverts.refund: 0\n\n[PASS] testGas_removeLiquidity_reverts() (gas: 96620)\nLogs:\n  RejectingReceiver.removeLiquidity_reverts: 54395\n  RejectingReceiver.removeLiquidity_reverts.refund: 0\n\n[PASS] testGas_swapExactTokensForETH_reverts() (gas: 90260)\nLogs:\n  RejectingReceiver.swapExactTokensForETH_reverts: 51178\n  RejectingReceiver.swapExactTokensForETH_reverts.refund: 0\n\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 603.79ms (837.68µs CPU time)\n\nRan 4 tests for test/MiniPair.invariant.t.sol:MiniPairInvariantTest\n[PASS] invariant_quotesFollowInternalReserves() (runs: 64, calls: 3072, reverts: 0)\n\n╭-----------------+------------------+-------+---------+----------╮\n| Contract        | Selector         | Calls | Reverts | Discards |\n+=================================================================+\n| MiniPairHandler | addLiquidity     | 792   | 0       | 0        |\n|-----------------+------------------+-------+---------+----------|\n| MiniPairHandler | removeLiquidity  | 793   | 0       | 0        |\n|-----------------+------------------+-------+---------+----------|\n| MiniPairHandler | swapEthForTokens | 734   | 0       | 0        |\n|-----------------+------------------+-------+---------+----------|\n| MiniPairHandler | swapTokensForEth | 753   | 0       | 0        |\n╰-----------------+------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 21312904008639575850\n  Bound result 669716118281951715111139\n  Bound result 659918\n  Bound result 1000002\n  Bound result 9371376190865496477553943\n  Bound result 3460\n  Bound result 48411706838400345166\n  Bound result 643\n  Bound result 30\n  Bound result 50000000000000000000\n  Bound result 5000000000000000000000000\n  Bound result 1\n  Bound result 18\n  Bound result 5661\n  Bound result 4299\n  Bound result 124707766303292\n  Bound result 1987\n  Bound result 5050887938145132966\n  Bound result 5881782944965056650\n  Bound result 100000000000000000000\n  Bound result 509\n  Bound result 3\n  Bound result 100\n  Bound result 88455529705988066413\n  Bound result 4178918666582\n  Bound result 1000000000000000000\n  Bound result 25136234884755115062\n  Bound result 7967188487366065212\n  Bound result 1962313871199\n  Bound result 255\n  Bound result 1\n  Bound result 15335594978650344\n  Bound result 4655\n  Bound result 1\n  Bound result 2\n  Bound result 2\n  Bound result 500000000000000000000\n  Bound result 2\n  Bound result 9390153894\n  Bound result 1000000\n  Bound result 6480830741\n  Bound result 8116569381049\n  Bound result 61258423259662907622\n  Bound result 15152835294605796911115088\n  Bound result 95\n  Bound result 1569843286845891478\n  Bound result 127\n  Bound result 5320753844573525710\n  Bound result 6785\n  Bound result 1222\n  Bound result 57218192\n  Bound result 4534897143749910114887404\n  Bound result 28603970491600686823\n  Bound result 49999999999999999999\n\n[PASS] invariant_reservesAreBackedByBalances() (runs: 64, calls: 3072, reverts: 0)\n\n╭-----------------+------------------+-------+---------+----------╮\n| Contract        | Selector         | Calls | Reverts | Discards |\n+=================================================================+\n| MiniPairHandler | addLiquidity     | 792   | 0       | 0        |\n|-----------------+------------------+-------+---------+----------|\n| MiniPairHandler | removeLiquidity  | 793   | 0       | 0        |\n|-----------------+------------------+-------+---------+----------|\n| MiniPairHandler | swapEthForTokens | 734   | 0       | 0        |\n|-----------------+------------------+-------+---------+----------|\n| MiniPairHandler | swapTokensForEth | 753   | 0       | 0        |\n╰-----------------+------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 21312904008639575850\n  Bound result 669716118281951715111139\n  Bound result 659918\n  Bound result 1000002\n  Bound result 9371376190865496477553943\n  Bound result 3460\n  Bound result 48411706838400345166\n  Bound result 6728\n  Bound result 30\n  Bound result 50000000000000000000\n  Bound result 5000000000000000000000000\n  Bound result 1\n  Bound result 18\n  Bound result 80234657\n  Bound result 4259\n  Bound result 124707766303292\n  Bound result 2156\n  Bound result 5050887938145132966\n  Bound result 5881782944965056650\n  Bound result 100000000000000000000\n  Bound result 461\n  Bound result 3\n  Bound result 100\n  Bound result 4094\n  Bound result 3\n  Bound result 1000000000000000000\n  Bound result 25136234884755115062\n  Bound result 7967188487366065212\n  Bound result 158404825935\n  Bound result 1\n  Bound result 4533\n  Bound result 3\n  Bound result 2\n  Bound result 1\n  Bound result 500000000000000000000\n  Bound result 2\n  Bound result 34034275837\n  Bound result 1000000\n  Bound result 8116569381049\n  Bound result 61258423259662907622\n  Bound result 9878138473048712098455991\n  Bound result 95\n  Bound result 1569843286845891478\n  Bound result 127\n  Bound result 5320753844573525710\n  Bound result 1526\n  Bound result 766\n  Bound result 57218192\n  Bound result 4534897143749910114887404\n  Bound result 28603970491600686823\n  Bound result 49999999999999999999\n\n[PASS] invariant_reservesEqualNetFlows() (runs: 64, calls: 3072, reverts: 0)\n\n╭-----------------+------------------+-------+---------+----------╮\n| Contract        | Selector         | Calls | Reverts | Discards |\n+=================================================================+\n| MiniPairHandler | addLiquidity     | 792   | 0       | 0        |\n|-----------------+------------------+-------+---------+----------|\n| MiniPairHandler | removeLiquidity  | 793   | 0       | 0        |\n|-----------------+------------------+-------+---------+----------|\n| MiniPairHandler | swapEthForTokens | 734   | 0       | 0        |\n|-----------------+------------------+-------+---------+----------|\n| MiniPairHandler | swapTokensForEth | 753   | 0       | 0        |\n╰-----------------+------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 21312904008639575850\n  Bound result 669716118281951715111139\n  Bound result 659918\n  Bound result 1000002\n  Bound result 9371376190865496477553943\n  Bound result 3460\n  Bound result 48411706838400345166\n  Bound result 6728\n  Bound result 30\n  Bound result 50000000000000000000\n  Bound result 5000000000000000000000000\n  Bound result 1\n  Bound result 18\n  Bound result 5542\n  Bound result 4259\n  Bound result 124707766303292\n  Bound result 2156\n  Bound result 5050887938145132966\n  Bound result 5881782944965056650\n  Bound result 100000000000000000000\n  Bound result 459\n  Bound result 3\n  Bound result 100\n  Bound result 4094\n  Bound result 1\n  Bound result 1000000000000000000\n  Bound result 25136234884755115062\n  Bound result 7967188487366065212\n  Bound result 213601537682\n  Bound result 1\n  Bound result 1\n  Bound result 4533\n  Bound result 2\n  Bound result 2\n  Bound result 2511386507502615\n  Bound result 500000000000000000000\n  Bound result 2\n  Bound result 164571023899\n  Bound result 1000000\n  Bound result 8116569381049\n  Bound result 61258423259662907622\n  Bound result 988233295015859616669256\n  Bound result 95\n  Bound result 1569843286845891478\n  Bound result 127\n  Bound result 5320753844573525710\n  Bound result 1728\n  Bound result 48696837\n  Bound result 57218192\n  Bound result 4534897143749910114887404\n  Bound result 28603970491600686823\n  Bound result 49999999999999999999\n\n[PASS] invariant_sharesAreConserved() (runs: 64, calls: 3072, reverts: 0)\n\n╭-----------------+------------------+-------+---------+----------╮\n| Contract        | Selector         | Calls | Reverts | Discards |\n+=================================================================+\n| MiniPairHandler | addLiquidity     | 792   | 0       | 0        |\n|-----------------+------------------+-------+---------+----------|\n| MiniPairHandler | removeLiquidity  | 793   | 0       | 0        |\n|-----------------+------------------+-------+---------+----------|\n| MiniPairHandler | swapEthForTokens | 734   | 0       | 0        |\n|-----------------+------------------+-------+---------+----------|\n| MiniPairHandler | swapTokensForEth | 753   | 0       | 0        |\n╰-----------------+------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 21312904008639575850\n  Bound result 669716118281951715111139\n  Bound result 659918\n  Bound result 1000002\n  Bound result 9371376190865496477553943\n  Bound result 1575\n  Bound result 48411706838400345166\n  Bound result 700\n  Bound result 30\n  Bound result 50000000000000000000\n  Bound result 5000000000000000000000000\n  Bound result 1\n  Bound result 18\n  Bound result 5662\n  Bound result 4300\n  Bound result 124707766303292\n  Bound result 1988\n  Bound result 5050887938145132966\n  Bound result 5881782944965056650\n  Bound result 100000000000000000000\n  Bound result 955\n  Bound result 3\n  Bound result 100\n  Bound result 4529\n  Bound result 2\n  Bound result 1000000000000000000\n  Bound result 25136234884755115062\n  Bound result 7967188487366065212\n  Bound result 143985537760\n  Bound result 255\n  Bound result 1\n  Bound result 4534\n  Bound result 3\n  Bound result 2\n  Bound result 527535338631204\n  Bound result 500000000000000000000\n  Bound result 2\n  Bound result 76798759042\n  Bound result 1000000\n  Bound result 8116569381049\n  Bound result 61258423259662907622\n  Bound result 7743843574740348786172471\n  Bound result 95\n  Bound result 1569843286845891478\n  Bound result 127\n  Bound result 5320753844573525710\n  Bound result 6652\n  Bound result 929\n  Bound result 57218192\n  Bound result 4534897143749910114887404\n  Bound result 28603970491600686823\n  Bound result 49999999999999999999\n\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 603.82ms (1.79s CPU time)\n\nRan 9 test suites in 605.27ms (1.66s CPU time): 110 tests passed, 0 failed, 0 skipped (110 total tests)\n","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"5d234ca409a2dd983263112c18bb5d24a0d236459e10b899ef841c8ee817b34b","verifiedTreeHash":"8a1415acb6a87b62785d6166dfd9ec5def374c9e","verifierVersion":"0.1.0+ff982c0f"},{"checks":[],"detail":"paths and tree verified; no suite was run for this kind of work","evaluation":"structural","profile":"none","status":"accepted","submissionHash":"fa87858542c567ce32e003685c6d125b59b9ee1fe917aa0d74601f5ffb3c4d5f","verifiedTreeHash":"355dc21df2f4522f840865ca338a88be68b7803b","verifierVersion":"0.1.0+ff982c0f"}]}