{"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":"54ba8a3e-20b0-44ae-a59b-bf04926fe47e","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"c513b1043471f3bf834f4005d7a468c04fb3f3d7bca90eb33101c4a181d605b6","dependsOn":["audit_imported_code"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"2d7d84a1a9972f1497e5bc68a704cbf42294d08c62d2868f102ffe3b909b9b51","skillId":"adapt-contract-project","tools":[]},"key":"adapt_contract_project","kind":"code","role":"implement","skillHash":"2d7d84a1a9972f1497e5bc68a704cbf42294d08c62d2868f102ffe3b909b9b51","skillId":"adapt-contract-project","state":"accepted"},{"acceptedSubmissionHash":"8542701a0476ca450b4b92e5f67f47afbd36c22ac248bd81ec6a07bd0f66861c","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_economics","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"d48a7d95dad9b4116abb8c1823bc1fc95b539e6e1e633ef5ec0f39a920921536","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_flow","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"74fc57ea5a63bed9cd8c61f80ebae68aa7b3d31359821fc8a89acc810f5fc8f2","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"9897597976b0e72440db7ca402d225aea20f3d37205ba53e7df2400ff80f29cc","skillId":"audit-imported-code","tools":[]},"key":"audit_imported_code","kind":"code","role":"review","skillHash":"9897597976b0e72440db7ca402d225aea20f3d37205ba53e7df2400ff80f29cc","skillId":"audit-imported-code","state":"accepted"},{"acceptedSubmissionHash":"98a3f54a105dc8cec8e27bd63b2fdff7a615651cd642cdacf69a8fc77487bead","dependsOn":["adapt_contract_project","write_foundry_tests","manifest","audit_math","audit_permissions","audit_economics","audit_flow"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"af3aa01159bbf354f621cafa5c0006f6169e0938a8b015be508b7377dbf165bc","skillId":"audit-judge","tools":[]},"key":"audit_judge","kind":"code","role":"review","skillHash":"af3aa01159bbf354f621cafa5c0006f6169e0938a8b015be508b7377dbf165bc","skillId":"audit-judge","state":"accepted"},{"acceptedSubmissionHash":"9430ab9e73987fb44d314551e5b8e47d4849e8beb81c7448058462a9d96a562d","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_math","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"dd418c2d18596106d8505ec68219b043aa123f1a214cf1f13383de9e0e61fc4b","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_permissions","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"8f1eac636556b27715edebc5f61186e91afdb85effbc586164092eaf601bca35","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"462b50f056888571dd64c23399eaae93ef56790df5185cf322a347c2ab1c585e","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"73431852439ad3a343f3d2b7db1c43cd363b9f48f9bb51497374a0cf6d50b223","skillId":"write-foundry-tests","tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"73431852439ad3a343f3d2b7db1c43cd363b9f48f9bb51497374a0cf6d50b223","skillId":"write-foundry-tests","state":"accepted"}],"objective":"Launch imd/acc's RemoteStacker on Robinhood Chain (chain 4663) from this repository (the launch-robinhood branch, which is the robinhood branch without .github/workflows; do not add any workflow file): deploy only the RemoteStacker, exactly as launch.json lists it, wired to IMD on Robinhood Chain and to imd/acc's live StackReceiver on Ethereum. It is the Robinhood Chain end of imd/acc's multichain route: a project here calls the same credit(trader, imdAmount) as on Ethereum, the IMD waits per trader, and anyone flushes it to Ethereum through IMD's own LayerZero bridge, where the StackReceiver deposits it into the sIMD vault for each trader. imd/acc pays trading cashback to traders as staked IMD (sIMD), 0.25% to 1% of each trade at each project's choice, funded from the project's existing fees; only credits from listed projects earn points.\n\nDEPLOY (Robinhood Chain, one contract):\n\nRemoteStacker(imd, receiver, vault, dstEid) = (0x5f7bb59365ce557c26dbcaa4ee9d39a4b95b7127 IMD on Robinhood Chain, 0x1999a54f573dac75ce8ef62a555dba418c9b3d10 the live StackReceiver on Ethereum (launch #1529, block 26,181,997, source verified on Sourcify), 0x9efa934d9fad4ae28c998a40195646b965a97247 the Ethereum sIMD vault, named only so it is refused as a trader, 30101 Ethereum's LayerZero endpoint id). launch.json already lists exactly this.\nsrc/multichain/RemoteStacker.sol and src/multichain/LayerZero.sol stay as they are: no owner; the constructor makes no external call. credit(trader, imdAmount) pulls the IMD from the caller (the project), refuses a zero trader (ZeroTrader) and the contract itself, IMD, the receiver and the vault (InvalidTrader), returns 0 for a zero amount, and adds the amount to the trader's waiting balance with an amount-weighted arrival clock (waiting, waitingSince; a balance past the 12-hour cap counts as exactly 12 hours in the average, so new cashback never pays a tip at once), emitting Queued(project, trader, recipient, imd), the points record; projectQueued and totalQueued count on chain. A trader with code (a smart-contract wallet, which may not exist at the same address on Ethereum) is paid plain IMD here at once (Paid, no points) unless it has named an Ethereum recipient for itself with setEthereumRecipient (only the wallet itself can; zero clears it); an EIP-7702 delegation (23 bytes starting 0xef0100) is a plain wallet and goes through the queue. flush(recipients) (at most 50; a recipient listed twice or with nothing waiting is skipped) takes from each listed recipient only the whole bridge steps of their waiting IMD (the step read from IMD's decimalConversionRate, 0.000001 IMD; dust below a step stays waiting, untipped, until it adds up to one), pays the caller a tip from that part, 2% per 12 hours waited and at most 2% (tipBps), rounded down to a step, delivers the rest, and sends the total in one IMD.send to the receiver with the compose message abi.encode(recipients, amounts) and executor options the contract builds (lzReceive 250,000 gas; lzCompose 200,000 + 80,000 per recipient), paying the bridge fee from msg.value (quoteFlush gives it; the endpoint refunds the excess to the caller). If the send fails, nothing changes. Nobody can withdraw, redirect or freeze anything; the only way out is to the receiver fixed at deployment. nonReentrant; OpenZeppelin SafeERC20.\ntest/mocks and test/trial hold test doubles and trial contracts only. Keep foundry.toml as it is (solc 0.8.26, cancun, 10,000 runs, bytecode_hash none).\nFACTS (read on Robinhood Chain 2026-10-13, block 87,284,919): IMD there is a standard LayerZero OFT (oftVersion 0x02e49c2c, 1; endpoint 0x6F475642a6e85809B1c36Fa62763669b1b48DD5B, eid 30416; 6 shared decimals; peers(30101) is Ethereum's IMD 0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7; no msgInspector; no enforced options for send-and-call). Robinhood Chain fork with the live IMD and endpoint (test/RobinhoodFork.t.sol): a flush burns the IMD here and the endpoint accepts the packet and the options; the bridge fee quoted 0.00068 ETH for two traders and 0.00107 ETH for fifty; the RemoteStacker's runtime is 7,856 bytes before launch #1529's audit lows were fixed in this tree (a capped waiting clock for old balances; tips only on the whole steps that leave): now 7,915 bytes. The StackReceiver it sends to is live and verified (launch #1529, Ethereum block 26,181,997, Sourcify full match); src/multichain/StackReceiver.sol here is its code byte for byte.\n\nTESTS: forge test passes (321 tests: 298 run offline; 21 fork tests run when ETH_RPC_URL, SEPOLIA_RPC_URL and ROBINHOOD_RPC_URL are set; 2 Stacker-manifest checks skip because this launch.json lists the RemoteStacker). test/RemoteStacker.t.sol (credits, the clock and tips, contract wallets, flushes, atomicity, the 50 cap), test/MultichainFlow.t.sol (the whole route with invariants), test/RobinhoodFork.t.sol (the live token and endpoint), test/Deployment.t.sol (this manifest, the empty-chain rehearsal, EIP-170 and forbidden opcodes). Keep all of them passing.\n\nREADME: once live, add the RemoteStacker's address to a Robinhood Chain Deployments table.","parentJobId":null,"planHash":"0715774a27b2847e0c4eb570152c91f97c5a7866feadcc3963162452d6f877c1","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"54ba8a3e-20b0-44ae-a59b-bf04926fe47e","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-1537-launch-imd-acc-s-remotestacker-robinhood"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"52592","feedbackHash":"0e24546b0ad9cd98342d4cae6b1893ee83dd2f825cb2fd16bad17e4d19edf293","nodeKey":"adapt_contract_project","submissionHash":"c513b1043471f3bf834f4005d7a468c04fb3f3d7bca90eb33101c4a181d605b6","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52268","feedbackHash":"189c712a3fa5ff1ed88353b6f5125c27c0d0ca0037944c911c7fb0b4e1c5e3cf","nodeKey":"audit_economics","submissionHash":"8542701a0476ca450b4b92e5f67f47afbd36c22ac248bd81ec6a07bd0f66861c","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52192","feedbackHash":"b7e7212a1cb744f13ae67bc42f571801d51e18f9c8f3381f133a6c945afbe818","nodeKey":"audit_flow","submissionHash":"d48a7d95dad9b4116abb8c1823bc1fc95b539e6e1e633ef5ec0f39a920921536","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52733","feedbackHash":"0926842947aba21863015750fbe4ccd33f6daee7439ebf65a8bf9ca82ab8eee0","nodeKey":"audit_imported_code","submissionHash":"74fc57ea5a63bed9cd8c61f80ebae68aa7b3d31359821fc8a89acc810f5fc8f2","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52120","feedbackHash":"ef012a0436543b877e2ca0322f8f7b82a215ef6970dad46db393dc3eae3825e9","nodeKey":"audit_judge","submissionHash":"98a3f54a105dc8cec8e27bd63b2fdff7a615651cd642cdacf69a8fc77487bead","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52718","feedbackHash":"0b247cd2169f440f078a3be456088c59c7ba5de6980954bebd7eaf921647a7c0","nodeKey":"audit_math","submissionHash":"9430ab9e73987fb44d314551e5b8e47d4849e8beb81c7448058462a9d96a562d","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52272","feedbackHash":"bdcb243ebb6fddc5451872e0eef9ce7fd2bbe3dfe2f8905a7e5278a2069e18cc","nodeKey":"audit_permissions","submissionHash":"dd418c2d18596106d8505ec68219b043aa123f1a214cf1f13383de9e0e61fc4b","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52373","feedbackHash":"c4bcbb0c87afb9db4270e87da7d552cd646f39adee183a237fd7432d0169abc3","nodeKey":"manifest","submissionHash":"8f1eac636556b27715edebc5f61186e91afdb85effbc586164092eaf601bca35","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"52594","feedbackHash":"303a8235f1b4b998f696d8e106332f6f08015e84e4145180e14d823bdca32c0a","nodeKey":"write_foundry_tests","submissionHash":"462b50f056888571dd64c23399eaae93ef56790df5185cf322a347c2ab1c585e","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"b4d028c89846d76b2bb65f5da1a0eb9864955aeed422c5bc06947f8d3ea834cc","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"9d67c92cd09506b38b7ef323359d6d75d2df0a6a112bae4a82a7833a72088198","device":"30aa7b3ab4bbc8f3","findings":[],"hash":"462b50f056888571dd64c23399eaae93ef56790df5185cf322a347c2ab1c585e","nodeId":"7aeccae7-e86e-4d77-9059-a02c5eb6a5d6","outcome":"completed","summary":"Added failure-path, reentrancy, wallet-routing, rounding, and stateful invariant tests, plus live refund tests. All changes are under `test/`.\n\nValidation:\n- `forge build`: passed.\n- Offline suite: 322 passed, 28 skipped, zero failures.\n- Ethereum/Robinhood forks: 18 passed; six Sepolia tests skipped without RPC configuration.\n\nNo new implementation defect was reproduced. Coverage details are in `test/REMOTE_STACKER_TEST_COVERAGE.md`.","treeHash":"60abb2ef67c6084672d2076889d221567ae004b8","usage":{"cachedInputTokens":2838912,"inputTokens":124758,"model":"gpt-6-astra","outputTokens":31762,"runtime":"codex","turns":9,"wallClockMs":1388442}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"bda86649c05ae3bf","findings":[{"citation":"resolved","description":"The brief says `forge test` passes (321 tests, with 2 Stacker-manifest checks skipping because launch.json lists the RemoteStacker) and asks the adapter to keep every test passing. It does not pass. test/StackReceiverLaunch.t.sol, merged from main with the launch #1529 fix (commit bd3c312, merge 7ff4f06), asserts unconditionally that contracts[0].contract is \"StackReceiver\" and that its three constructor arguments are the Ethereum IMD, vault and endpoint. Its own header comment says a future RemoteStacker manifest must fail here. With this branch's launch.json (one RemoteStacker entry, four arguments) both tests in that file fail with `assertion failed: RemoteStacker != StackReceiver`, offline and with every RPC set. The two tests that do skip are elsewhere (Deployment.t.sol branches on the contract name). Any gate that runs the full suite on this tree reports a failure. The on-chain code is unaffected; the defect is in the test tree the launch is judged by. Fix for the adapter: make StackReceiverLaunchTest skip (vm.skip) or return when contracts[0].contract is not \"StackReceiver\", as Deployment.t.sol already does, or move its assertions under a RemoteStacker branch; do not change launch.json, which is correct for this launch.","line":29,"path":"test/StackReceiverLaunch.t.sol","reproduction":"State: this tree at 119d80b with its launch.json (contracts[0].contract = \"RemoteStacker\", 4 constructorArgs). Run `forge test --match-path test/StackReceiverLaunch.t.sol` (no env needed). Expected per the brief: pass or skip. Actual: `Suite result: FAILED. 0 passed; 2 failed` — test_manifestPinsExactlyTheMainnetReceiver and test_manifestFactoryDeploysOneContractWithNoExternalConstructorCalls both revert at line 29 with `assertion failed: RemoteStacker != StackReceiver`. Full run with ROBINHOOD_RPC_URL set: 300 passed, 2 failed, 19 skipped of 321.","severity":"medium","snippet":"        assertEq(vm.parseJsonString(json, \".contracts[0].contract\"), \"StackReceiver\");","title":"forge test fails on the delivered tree: StackReceiverLaunch.t.sol pins launch.json to a StackReceiver manifest"},{"citation":"resolved","description":"credit() refuses four addresses so that cashback is never delivered to a contract on Ethereum that can never move sIMD shares. The check mixes the two chains: RECEIVER and VAULT are Ethereum addresses (correct, since delivery happens on Ethereum), but address(IMD) is the Robinhood Chain token 0x5F7B...7127, which is nothing on Ethereum, while Ethereum's IMD token 0xD34a...63B7 (the OFT peer the brief names) and Ethereum's LayerZero endpoint 0x1a44...728c are accepted as traders. A credit for either is queued with points (Queued emitted), flushed, and the StackReceiver on Ethereum deposits it into the vault for that address: sIMD minted to the IMD token contract or the endpoint, unrecoverable, and the tip was paid on the way. The refusal list only protects against a project passing a nonsense trader, so impact is low, but as written it does not protect against the one dead address the design explicitly knows (the Ethereum IMD) while refusing one that does not matter on Ethereum. Fix: refuse the Ethereum-side addresses that matter (pass the Ethereum IMD as a fifth immutable or a constant, and apply the same set in setEthereumRecipient), or drop the Robinhood IMD from the list and document that the trader set is checked on Ethereum addresses only.","line":115,"path":"src/multichain/RemoteStacker.sol","reproduction":"Deploy RemoteStacker(mockOFT, 0x1999a54f573dAc75ce8Ef62A555dba418c9B3D10, 0x9Efa934D9fAd4AE28c998a40195646b965a97247, 30101); approve it and call credit(0xD34a99Bc0f67aE1bbd63C660e6d0b0dd03E263B7, 1e18) and credit(0x1a44076050125825900e736c501f859c50fE728c, 1e18). Expected (by the stated intent of refusing IMD so shares never land where they cannot move): revert InvalidTrader. Actual: both return 1e18, waiting[0xD34a...] == 1e18 and waiting[0x1a44...] == 1e18, Queued emitted; credit(address(mockOFT), 1e18) reverts InvalidTrader. Verified with test/scratch/EthereumDeadAddresses.t.sol (passes on this tree, i.e. the behaviour is as described). After flush, the StackReceiver's lzCompose deposits for those addresses on Ethereum.","severity":"low","snippet":"            trader == address(this) || trader == address(IMD) || trader == RECEIVER\n                || trader == VAULT","title":"InvalidTrader refuses this chain's IMD address but accepts Ethereum's IMD token and endpoint, where the sIMD is actually minted"},{"citation":"resolved","description":"The brief guarantees that new cashback never pays a tip at once: the amount-weighted clock is meant to move forward by exactly the fresh amount's share. The division floors to whole seconds, so when the fresh amount is small next to the waiting balance the forward shift (TIP_PERIOD * imdAmount / (before + imdAmount) seconds) rounds to zero and the clock does not move at all. tipBps then stays at its old value and the next flush takes that percentage of the whole leaving balance, fresh part included. The error is bounded: at most one second of clock, i.e. at most balance * TIP_BPS / BPS / TIP_PERIOD (about 4.6e-7 of the balance) per credit, never more than 2% of the fresh amount, and the trader still receives at least 98% of everything (testFuzz_flush_conservesEveryWei and a sequence fuzz confirm that). No profitable exploit: a flusher who credits a trader to inflate the tip gives away 98% of what they add. It is a rounding-direction defect against a stated guarantee, in the flusher's favour instead of the trader's. Fix: round the weighted clock up (ceiling division: `(since * before + block.timestamp * imdAmount + before + imdAmount - 1) / (before + imdAmount)`), which can never exceed block.timestamp and makes every rounding favour the trader; or document the one-second tolerance.","line":142,"path":"src/multichain/RemoteStacker.sol","reproduction":"credit(alice, 1_000_000e18) at t0; warp to t0 + 12h: quoteFlush([alice]).tip == 20_000e18 (2% of the old balance), waitingSince == t0. credit(alice, 1e15) (0.001 IMD) at t0 + 12h. Expected per the brief: the fresh 0.001 IMD pays no tip, so tip stays 20_000e18 (exact clock shift 0.0000432 s). Actual: waitingSince still == t0, tipBps == 200, quoteFlush([alice]).tip == 20_000e18 + 2e13: the fresh amount is tipped at the full 2% at once. test/scratch/ClockRounding.t.sol asserts this behaviour and passes on this tree; a fuzz (old up to 1e24, fresh up to 1e24, any wait) finds the same for any fresh amount below about balance / 43200.","severity":"low","snippet":"        waitingSince[recipient] =\n            uint64((since * before + block.timestamp * imdAmount) / (before + imdAmount));","title":"Weighted arrival clock floors to the second, so fresh cashback can be tipped at once (rounding favours the flusher)"},{"citation":"resolved","description":"By design nobody can withdraw, redirect or freeze; the only exit is IOFT.send to the receiver on eid 30101. That exit is owned by IMD's OFT owner on Robinhood Chain (owner() read live: 0x047F606fD5b2BaA5f5C6c4aB8958E45CB6B054B7), who can at any time call setPeer(30101, bytes32(0)) (send then reverts with NoPeer), setMsgInspector to a reverting inspector, or setEnforcedOptions with options the executor refuses. Every waiting balance would then be stuck in the RemoteStacker with no recovery path, and credit() would keep accepting new cashback into the same dead queue. This is the trust the brief embraces (IMD's own bridge), not a defect in this code; it is recorded so the adapter and the audit panel weigh it knowingly. Not changed by the requested design; a mitigation would need a new rule (for example letting a trader reclaim plain IMD here after a long failure window), which is a scope decision.","line":240,"path":"src/multichain/RemoteStacker.sol","reproduction":"State: a RemoteStacker with waiting balances. The IMD OFT owner calls setPeer(30101, bytes32(0)) on 0x5F7Bb59365ce557C26dbcAa4EE9d39A4b95B7127. Then any flush(recipients) reverts (OAppCore NoPeer(30101)) and quoteFlush reverts the same way; waiting[r] stays unchanged for every r, and there is no function that moves IMD out of the RemoteStacker other than flush. With the mock: MockOFT.setRefuseSend(true) reproduces the same stuck state (test_flush_isAtomic_sendFailureChangesNothing shows nothing changes, and nothing can change afterwards).","severity":"info","snippet":"        (MessagingReceipt memory receipt,) = IOFT(address(IMD)).send{value: msg.value}(","title":"Trust assumption: the IMD OFT owner (0x047F...54B7) can make flush revert forever, and the contract has no other exit"}],"hash":"74fc57ea5a63bed9cd8c61f80ebae68aa7b3d31359821fc8a89acc810f5fc8f2","nodeId":"9ab120f8-0771-42a6-8e90-77e01dca5986","outcome":"completed","summary":"Review complete. The findings file `.imd-findings.json` holds four entries, all verified against this tree.\n\n**What I read.** `src/multichain/RemoteStacker.sol` and `src/multichain/LayerZero.sol` in full, plus `src/multichain/StackReceiver.sol` (the Ethereum end it sends to), `launch.json`, the OpenZeppelin SafeERC20 and ReentrancyGuard paths, the mocks, and the RemoteStacker, MultichainFlow, RobinhoodFork, Deployment and StackReceiverLaunch tests. I also read the live Robinhood Chain IMD (OFT with no approval required, step 1e12, no inspector, no enforced options, owner 0x047F…54B7) and the ArbOS version, and ran the Robinhood fork tests against the live token. Nothing in scope was unreachable. I did not re-read `src/Stacker.sol` or `src/ProjectRegistry.sol` beyond the interface the receiver imports, since this launch deploys neither.\n\n**Findings, most severe first.**\n\n- **Medium, test tree.** `forge test` fails on this tree. The merged `test/StackReceiverLaunch.t.sol` asserts the manifest's first contract is a StackReceiver, so both of its tests fail with the RemoteStacker manifest. The brief's claim that two manifest checks skip is wrong. The adapter should make that test skip or branch on the contract name, not touch `launch.json`.\n- **Low.** The InvalidTrader list refuses the Robinhood IMD address, which means nothing on Ethereum, but accepts Ethereum's IMD token and endpoint as traders. Their sIMD would be minted to contracts that can never move it.\n- **Low.** The amount-weighted clock floors to whole seconds. A fresh credit that is small next to the waiting balance does not move the clock, so it is tipped at the full rate at once. Bounded to one second of clock and never more than 2% of the fresh amount. Rounding the clock up fixes the direction.\n- **Info, trust assumption.** IMD's OFT owner can remove the peer or add a reverting inspector, after which flush reverts forever and no other exit exists.\n\n**What held up.** Access control, reentrancy ordering, the step and tip arithmetic, conservation of every wei, the executor option encoding, the compose message layout, constructor purity, runtime size and the absence of forbidden opcodes all checked out, including a 2,000-run sequence fuzz over repeated credits and flushes. The manifest is schema-correct with the right four arguments. No critical or high finding, so no proof files were attached.","treeHash":null,"usage":{"cachedInputTokens":1098799,"inputTokens":386,"model":"claude-fable-5-1","outputTokens":43035,"runtime":"claude","turns":29,"wallClockMs":635829}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"ff35db055462d2ad","findings":[{"citation":"resolved","description":"credit(trader, imdAmount) is permissionless: anyone holding IMD may credit any plain address. The amount-weighted clock rounds the new arrival time UP (ceilDiv), which is correct for large credits, but for a credit of 1 wei against a large waiting balance the exact shift is (now - since) * 1 / (before + 1), far below one second, and ceilDiv turns it into exactly +1 second. So every 1-wei credit costs the recipient one second of accrued waiting time regardless of how small it is relative to the balance. Economic effect: the flusher's tip on that recipient is reduced by amount * 200 / 43200 / 10000 per second (0.46 IMD per second on a 1,000,000 IMD balance), and a griefer sending one 1-wei credit per second keeps tipBps at 0 indefinitely, so no third party has an incentive to flush that trader. No funds are lost: the trader keeps the IMD the flusher would have been tipped, the trader can always self-flush, and the griefer pays gas for every credit (about 65k gas each on Robinhood Chain) plus the wei credited. This is griefing of the flush incentive, not theft; the assignment promises 'anyone flushes it to Ethereum' as the liveness mechanism, and this lets a third party suppress the reward that makes that happen for a chosen trader. A minimal fix that preserves the trader-favouring rounding: compute the weighted clock in fixed point (e.g. scale timestamps by 1e18 before the ceilDiv) or skip the clock update when imdAmount * (block.timestamp - since) < before + imdAmount (the exact shift is below one second), so that dust-sized credits cannot move the clock.","line":150,"path":"src/multichain/RemoteStacker.sol","reproduction":"Setup: MockOFT imd; RemoteStacker rs = new RemoteStacker(imd, 0xACC0, 0x5A17, 30101); project approves rs; griefer holds 5 wei of IMD and approves rs. 1) vm.warp(1_700_000_000); project calls rs.credit(alice, 1_000_000e18) -> waitingSince[alice] = 1_700_000_000. 2) vm.warp(+6 hours); rs.tipBps(alice) == 100; rs.quoteFlush([alice]).tip == 10_000e18. 3) griefer calls rs.credit(alice, 1) five times in the same block (cost: 5 wei of IMD and gas). Expected (exact amount-weighted clock): waitingSince[alice] unchanged within a fraction of a second; tip still 10_000e18. Actual: waitingSince[alice] == 1_700_000_005 (one second per 1-wei credit), tipBps(alice) == 99, quoteFlush tip == 9_900e18. Repeating one 1-wei credit per second keeps block.timestamp - waitingSince[alice] constant, so tipBps never rises above its current value. Verified with test/scratch/Econ.t.sol::test_oneWeiCreditShiftsClockOneSecond (logs: tipBps after 5 wei: 99; tip after 5 wei: 9900000000000000000000).","severity":"low","snippet":"        waitingSince[recipient] =\n            uint64(Math.ceilDiv(since * before + block.timestamp * imdAmount, before + imdAmount));","title":"Any non-zero credit, even 1 wei, advances a recipient's waiting clock by a full second: a griefer can hold a trader's flush tip near zero at ~1 tx/second"}],"hash":"8542701a0476ca450b4b92e5f67f47afbd36c22ac248bd81ec6a07bd0f66861c","nodeId":"e68da21f-9e0a-427a-bc20-56e4a5641ffc","outcome":"completed","summary":"The review is complete and the findings file is written. Nothing else is needed from the tree, so no further tool calls.\n\n**Outcome: one low finding, no critical, high or medium defects in the economics of the Robinhood Chain RemoteStacker launch.** The findings file at `.imd-findings.json` holds that finding plus a coverage record answering all 13 listed entry points and 8 invariant or trust-assumption rows. No repository file was changed. The scratch test I used for verification is deleted and the tree is clean.\n\n**What I checked, against the Economic Security, Invariant and Flow Gap guides**\n\n- **Conservation.** The contract's IMD balance always equals the sum of waiting balances. Credit adds, flush removes, the contract-wallet Paid path is net zero. Direct donations are locked forever, which is the stated design.\n- **Tip bounds.** Each flush takes at most 2% of the whole steps that leave, rounded down to a step, and dust is never tipped. A trader always receives at least 98% of what leaves.\n- **Clock manipulation.** A fresh credit of any size leaves the absolute tip unchanged, so neither a project nor a flusher can profit by diluting or inflating a trader's clock. The 12-hour cap on old balances behaves as the brief specifies.\n- **Atomicity and bridge wiring.** State is reduced before the OFT send, so a bridge revert rolls everything back. The compose message amounts sum exactly to the bridged amount, matching the live StackReceiver's check. The manifest's four constructor arguments match the brief and the deployment test.\n- **Receiver side.** A paused vault turns deliveries into plain IMD rather than losing them. The vault's one-block hold stamp on a trader is a dust-level effect.\n- **Trust assumptions, recorded as coverage rows rather than defects.** The IMD OFT owner can freeze the only exit by clearing the Ethereum peer. The sIMD owner can pause or rescue after delivery. Both are documented and tested in the tree.\n\n**The one finding, low severity.** Because credit is permissionless and the weighted clock rounds the arrival time up, a 1-wei credit advances a trader's clock by exactly one second regardless of the balance. A griefer sending one such credit per second keeps the trader's tip rate at zero, removing any third party's incentive to flush that trader. No funds are lost: the trader keeps what would have been tipped and can self-flush. I verified the numbers with a scratch test, which showed five 1-wei credits cutting a 10,000 IMD tip to 9,900 IMD. The reproduction and a minimal fix that preserves the trader-favouring rounding are in the file.\n\n**Not reached.** The 21 fork tests could not run here because no RPC URLs are set in this environment, so the live-endpoint option acceptance and fee quotes rest on the assignment's stated facts. The Ethereum-side ProjectRegistry and Stacker are not deployed in this launch; I read their value flows and found nothing that touches the Robinhood route.","treeHash":null,"usage":{"cachedInputTokens":1519016,"inputTokens":386,"model":"claude-fable-5-1","outputTokens":43889,"runtime":"claude","turns":32,"wallClockMs":678715}},{"artifacts":[],"attempt":1,"bundleHash":"e8bf8bee5fe0e997f1a5402f6eeb769c1e1c0c6a5bde8fa30f1a4546460ccb99","device":"376bf206e3a19921","findings":[],"hash":"8f1eac636556b27715edebc5f61186e91afdb85effbc586164092eaf601bca35","nodeId":"a53fe63a-201b-401a-8f53-27de99bc1392","outcome":"completed","summary":"Updated only [launch.json](./launch.json), preserving the exact RemoteStacker constructor arguments and clarifying deployment notes.\n\nValidation passed:\n- Manifest schema and compiled ABI checks.\n- `forge build`.\n- `forge test`: 319 passed, 0 failed, 10 skipped—Sepolia RPC unset and checks for other manifest types. Ethereum and Robinhood fork tests passed.","treeHash":"e50c73fa348ec17e715e3f9fc4294d1c708fe7d6","usage":{"cachedInputTokens":362752,"inputTokens":41513,"model":"gpt-6-astra","outputTokens":4385,"runtime":"codex","turns":4,"wallClockMs":195861}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"f7df22fc14d72d4e","findings":[{"citation":"resolved","description":"The amount-weighted arrival clock is stored in whole seconds and rounded up with Math.ceilDiv. The exact shift a credit causes is (block.timestamp - since) * imdAmount / (before + imdAmount), which is a fraction of a second whenever the new amount is small next to the balance or the credits are close together, but the ceiling always rounds it to the next whole second. The error is therefore up to one full second per credit and it compounds across credits, because each credit rounds the already-rounded clock again (precision x invariant seam: the invariant 'tip in IMD is preserved by a credit' holds in real arithmetic but drifts in integers). Two consequences. (1) A trader credited often (a busy venue crediting per trade) has its whole balance's waiting time understated by about one second per credit: 3,600 credits of 1 IMD one second apart leave waitingSince at the last credit's timestamp, tipBps 0 and a quoted tip of 0, where the exact amount-weighted arrival is 1,800 s earlier, tipBps 8 and the tip 2.88 IMD. As long as credits keep arriving at one per second or faster the tip never rises above 0, so nobody is paid to flush that trader; the intended rule '2% per 12 hours waited' gives 1% for IMD that has waited six hours on average. (2) Anyone can call credit (there is no project allowlist on chain), so a 1-wei credit against a capped 1,000,000 IMD balance moves the clock forward one second (tipBps 200 -> 199): a griefer paying gas for one 1-wei credit per second can keep any chosen trader's tip at zero indefinitely, removing every third party's incentive to flush that trader. No funds are lost and the trader keeps at least 98% in every case (the rounding favors the trader, as the comment says), so this is low: it breaks the tip rule and the flush incentive, not custody. The existing tests only check single-credit rounding (testFuzz_clockRounding_doesNotChargeForFreshAge asserts at most one second of rounding per credit) and never call credit many times for one trader, so the compounding is untested. Minimal fix that keeps the design: keep the clock in higher precision, e.g. store the weighted sum (arrival x amount) in a uint256 accumulator, or store waitingSince scaled by 1e18 and divide only in tipBps; then the per-credit error is below 1e-18 s and cannot compound to a visible amount.","line":150,"path":"src/multichain/RemoteStacker.sol","reproduction":"Deploy RemoteStacker(MockOFT, 0xBEEF, 0xCAFE, 30101); vm.warp(1_700_000_000). Loop 3,600 times: credit(alice, 1e18) then warp +1 s (no warp after the last). State: waiting[alice] = 3600e18; waitingSince[alice] = t0 + 3599 (the last credit's timestamp); tipBps(alice) = 0; quoteFlush([alice]).tip = 0. Expected from the amount-weighted rule: arrival t0 + 1799.5 (ceil t0 + 1800), tipBps = 200 * 1800 / 43200 = 8, tip = 3600e18 * 8 / 10000 = 2.88e18. Second input: credit(alice, 1_000_000e18); warp +12 h (tipBps 200); credit(alice, 1) from any address: waitingSince moves from (now - 12 h) to (now - 12 h + 1) and tipBps drops to 199, although the exact shift is 12 h / (1e24 + 1), far below a second. Repeating that 1-wei credit every second keeps tipBps from ever reaching 200 and, started on a fresh balance, keeps it at 0. Run (both pass today and print the numbers): forge test --match-path test/scratch/ClockDrift.t.sol -vv --gas-limit 100000000000.\n\nProbe (passes today, prints the numbers; put it under test/scratch/ and run forge test --match-path test/scratch/X.t.sol -vv --gas-limit 100000000000):\n// SPDX-License-Identifier: MIT\npragma solidity 0.8.26;\nimport {Test} from \"forge-std/Test.sol\";\nimport {RemoteStacker} from \"src/multichain/RemoteStacker.sol\";\nimport {MockOFT} from \"test/mocks/MockOFT.sol\";\nimport {IERC20} from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\ncontract X is Test {\n  MockOFT imd; RemoteStacker rs; address alice = address(0xA11CE);\n  function setUp() public { vm.warp(1_700_000_000); imd = new MockOFT(); rs = new RemoteStacker(IERC20(address(imd)), address(0xBEEF), address(0xCAFE), 30101); imd.mint(address(this), 1e30); imd.approve(address(rs), type(uint256).max); }\n  function one(address a) internal pure returns (address[] memory l) { l = new address[](1); l[0] = a; }\n  function test_drift() public { uint256 t0 = block.timestamp; for (uint256 i; i < 3600; ++i) { rs.credit(alice, 1e18); if (i < 3599) vm.warp(block.timestamp + 1); }\n    assertEq(rs.waitingSince(alice) - t0, 3599); assertEq(rs.tipBps(alice), 0); (, uint256 tip,,,) = rs.quoteFlush(one(alice)); assertEq(tip, 0); /* exact rule: since t0+1800, tipBps 8, tip 2.88e18 */ }\n  function test_oneWei() public { rs.credit(alice, 1_000_000e18); vm.warp(block.timestamp + 12 hours); uint256 capped = block.timestamp - 12 hours; rs.credit(alice, 1);\n    assertEq(rs.waitingSince(alice) - capped, 1); assertEq(rs.tipBps(alice), 199); }\n}","severity":"low","snippet":"        waitingSince[recipient] =\n            uint64(Math.ceilDiv(since * before + block.timestamp * imdAmount, before + imdAmount));","title":"waitingSince rounds up a whole second on every credit, so frequent credits (or 1-wei credits) hold a trader's tip clock at zero regardless of how long the IMD has waited"},{"citation":"resolved","description":"The cap is applied by folding the old balance's age down to exactly 12 hours in the average, which keeps the tip in IMD unchanged at the moment of the credit (the tests check this). After that moment, though, the single clock keeps counting for the old balance too, even though its tip was already capped. With old balance B at the cap and new amount a, the combined tip after t more hours is 2% x (B + a) x min(1, (12h x B / (B + a) + t) / 12h), against 2% x B + 2% x a x min(1, t / 12h) under the stated rule '2% per 12 hours waited, at most 2%'. The excess is 2% x B x t / 12h until the combined clock hits the cap at t = 12h x a / (B + a), so at most 2% of min(B, a). For B = a the new cashback pays the full 2% after 6 hours. This is a consequence of the chosen single-clock design and is bounded by the 2% ceiling; the trader still receives at least 98% of what leaves, and the spec's explicit guarantee ('new cashback never pays a tip at once') holds. Reported as information so the author can decide whether 'per 12 hours waited' is meant per cashback or per balance; no fix is required if the balance-level reading is intended.","line":145,"path":"src/multichain/RemoteStacker.sol","reproduction":"Deploy RemoteStacker(MockOFT, 0xBEEF, 0xCAFE, 30101). credit(alice, 1000e18); warp +12 h; credit(alice, 1000e18): quoteFlush([alice]).tip = 20e18 (2% of the old 1,000 only, as intended). warp +6 h: tipBps(alice) = 200 and quoteFlush([alice]).tip = 40e18. Under a per-cashback reading of the rule the tip at this point would be 20e18 + 1000e18 x 200 x 6h / 12h / 10000 = 30e18. Run: forge test --match-path test/scratch/ClockProbe.t.sol --match-test test_newCashbackReachesCapEarly -vv.\n\nProbe (passes today, prints the numbers; put it under test/scratch/ and run forge test --match-path test/scratch/X.t.sol -vv --gas-limit 100000000000):\n// SPDX-License-Identifier: MIT\npragma solidity 0.8.26;\nimport {Test} from \"forge-std/Test.sol\";\nimport {RemoteStacker} from \"src/multichain/RemoteStacker.sol\";\nimport {MockOFT} from \"test/mocks/MockOFT.sol\";\nimport {IERC20} from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\ncontract X is Test {\n  MockOFT imd; RemoteStacker rs; address alice = address(0xA11CE);\n  function setUp() public { vm.warp(1_700_000_000); imd = new MockOFT(); rs = new RemoteStacker(IERC20(address(imd)), address(0xBEEF), address(0xCAFE), 30101); imd.mint(address(this), 1e30); imd.approve(address(rs), type(uint256).max); }\n  function one(address a) internal pure returns (address[] memory l) { l = new address[](1); l[0] = a; }\n  function test_capEarly() public { rs.credit(alice, 1000e18); vm.warp(block.timestamp + 12 hours); rs.credit(alice, 1000e18);\n    (, uint256 tip0,,,) = rs.quoteFlush(one(alice)); assertEq(tip0, 20e18); vm.warp(block.timestamp + 6 hours);\n    (, uint256 tip6,,,) = rs.quoteFlush(one(alice)); assertEq(tip6, 40e18); assertEq(rs.tipBps(alice), 200); /* per-cashback rule: 30e18 */ }\n}","severity":"info","snippet":"        if (before > 0 && block.timestamp - since > TIP_PERIOD) {\n            since = block.timestamp - TIP_PERIOD;\n        }","title":"One clock per recipient: cashback that joins a balance already at the 12-hour cap reaches the full 2% tip after 6 hours, not 12"}],"hash":"9430ab9e73987fb44d314551e5b8e47d4849e8beb81c7448058462a9d96a562d","nodeId":"4bd29dc8-4beb-4917-8837-021629f99886","outcome":"completed","summary":"The review is complete and the findings file is in place. The working tree is clean apart from the required .imd-findings.json.\n\n**Outcome:** the RemoteStacker's math holds for custody. Every wei is conserved across a flush, the tip never exceeds 2% of what leaves, amounts sent are exact bridge-step multiples so the live StackReceiver's strict sum check always passes, and no intermediate can overflow or truncate. I found one low defect and one informational design consequence, both in the waiting clock.\n\n**Findings written to .imd-findings.json**\n\n- **Low: the clock rounds up a whole second on every credit, and that compounds.** The exact shift from a credit is a fraction of a second, but ceilDiv always rounds to the next second. Reproduction: 3,600 credits of 1 IMD one second apart leave the clock at the last credit, tip 0, where the amount-weighted rule gives 8 bps and a 2.88 IMD tip. Since anyone may call credit, a 1-wei credit per second holds any trader's tip at zero, removing the incentive for third parties to flush them. No funds are lost and the trader always keeps at least 98%. Suggested fix keeps the design: store the clock with sub-second precision.\n- **Info: one clock per recipient lets new cashback reach the 2% cap in 6 hours** when it joins a balance already at the cap. Tip at the credit is preserved, as the tests check, but afterwards the old balance keeps counting. Bounded by the 2% ceiling; flagged so the author can confirm which reading of \"per 12 hours waited\" is intended.\n\n**Coverage:** all 13 listed entry points have rows, plus four invariant rows. Both RemoteStacker findings sit on credit; flush, setEthereumRecipient, StackReceiver.lzCompose and Stacker.credit hold on tracing. The registry rows are holds where only checked timestamp additions exist and unreached for claimBond and onOracleFailure, which are outside the math area and not deployed by this launch.\n\n**Not reached:** a live read of IMD's total supply to rule out the OFT's uint64 shared-decimal cast at absurd amounts (no RPC reachable from this machine; the limit is 18 trillion IMD per flush, far above any plausible supply).","treeHash":null,"usage":{"cachedInputTokens":1060836,"inputTokens":386,"model":"claude-fable-5-1","outputTokens":32291,"runtime":"claude","turns":25,"wallClockMs":476957}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"a5c5e95a2ed07117","findings":[{"citation":"resolved","description":"The amount-weighted arrival clock is stored in whole seconds and every credit rounds it up with Math.ceilDiv. The exact shift a credit causes is (block.timestamp - since) * imdAmount / (before + imdAmount); whenever that is a fraction of a second (a small credit next to the balance, or credits close together) it becomes a full second, and the error compounds because each credit rounds the already-rounded clock again. Two consequences, both reproduced. (1) A trader credited often loses about one second of waiting time per credit: 3,600 credits of 1 IMD one second apart leave waitingSince at the last credit's timestamp, tipBps 0 and quoteFlush tip 0, where the amount-weighted rule gives arrival t0 + 1799.5 s, tipBps 8 and a 2.88 IMD tip; as long as credits keep arriving about once a second the tip never leaves zero. (2) credit is permissionless, so a 1-wei credit against any balance moves that recipient's clock forward one second (tipBps 100 -> 99 after five 1-wei credits on a 1,000,000 IMD balance that waited 6 h); one 1-wei credit per second holds the tip wherever it is, and started on a fresh balance holds it at zero. No funds are lost and the trader keeps at least 98% in every case (the rounding favors the trader), so this is low: it breaks the stated '2% per 12 hours waited' rule and removes the third-party flush incentive for a chosen trader; the trader can still self-flush. Both specialists reported the same root cause; this is one finding. Existing tests (testFuzz_clockRounding_doesNotChargeForFreshAge) check only one credit's rounding and never credit one trader many times. Minimal fix preserving the design: keep the clock in higher precision (store the weighted arrival scaled by 1e18, or an accumulator of arrival x amount) and divide only in tipBps, so the per-credit error cannot compound; or skip the clock update when imdAmount * (block.timestamp - since) < before + imdAmount (the exact shift is under one second).","line":150,"path":"src/multichain/RemoteStacker.sol","proof":"// SPDX-License-Identifier: MIT\npragma solidity 0.8.26;\n\nimport {Test} from \"forge-std/Test.sol\";\nimport {RemoteStacker} from \"src/multichain/RemoteStacker.sol\";\nimport {MockOFT} from \"test/mocks/MockOFT.sol\";\nimport {IERC20} from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/// Fails on the current code: the waiting clock is stored in whole seconds and rounded up on\n/// every credit, so 3,600 credits of 1 IMD one second apart leave waitingSince at the last\n/// credit's timestamp (tipBps 0) although the amount-weighted arrival is t0 + 1799.5 (tipBps 8).\n/// Passes once the clock keeps sub-second precision (per-credit error well below one second).\ncontract ClockDriftProof is Test {\n    MockOFT imd;\n    RemoteStacker rs;\n    address alice = address(0xA11CE);\n\n    function setUp() public {\n        vm.warp(1_700_000_000);\n        imd = new MockOFT();\n        rs = new RemoteStacker(IERC20(address(imd)), address(0xBEEF), address(0xCAFE), 30101);\n        imd.mint(address(this), 1e30);\n        imd.approve(address(rs), type(uint256).max);\n    }\n\n    function test_frequentCreditsKeepTheirWaitingTime() public {\n        uint256 t0 = block.timestamp;\n        for (uint256 i; i < 3600; ++i) {\n            rs.credit(alice, 1e18);\n            if (i < 3599) vm.warp(block.timestamp + 1);\n        }\n        // Exact amount-weighted arrival: t0 + 1799.5 s; rounded up to a second, t0 + 1800.\n        // Waited at least 1799 s of the 43,200 s period: 200 * 1799 / 43200 = 8 bps.\n        uint256 since = rs.waitingSince(alice);\n        assertLe(since - t0, 1800, \"clock must not drift past the weighted arrival\");\n        assertGe(rs.tipBps(alice), 8, \"tip must reflect ~30 minutes of weighted waiting\");\n    }\n}","reproduction":"Deploy RemoteStacker(MockOFT, 0xBEEF, 0xCAFE, 30101); vm.warp(1_700_000_000); approve. Case A: loop 3,600 times { credit(alice, 1e18); warp +1 s (not after the last) }. Expected (amount-weighted rule): waitingSince ~ t0 + 1800, tipBps(alice) == 8, quoteFlush([alice]).tip == 2.88e18. Actual: waitingSince == t0 + 3599, tipBps == 0, tip == 0. Case B: credit(alice, 1_000_000e18); warp +6 h; tipBps == 100 and quoteFlush tip == 10_000e18; a griefer calls credit(alice, 1) five times in the same block. Expected: clock moves by a fraction of a second, tip unchanged. Actual: waitingSince advanced by exactly 5 s, tipBps == 99, tip == 9_900e18. Verified with test/scratch/ClockDrift.t.sol (passes today, logs the numbers) and the attached proof test/scratch/ClockDriftProof.t.sol, which fails today with 'clock must not drift past the weighted arrival: 3599 > 1800' (forge test --match-path test/scratch/ClockDriftProof.t.sol).","severity":"low","snippet":"        waitingSince[recipient] =\n            uint64(Math.ceilDiv(since * before + block.timestamp * imdAmount, before + imdAmount));","title":"Waiting clock rounds up a whole second on every credit, so frequent or 1-wei credits hold a trader's flush tip at zero (merged: audit_math + audit_economics)"},{"citation":"resolved","description":"The contract header, the first prose a points indexer reads, gives the points record as Queued(project, trader, imd). The event declared at line 83 and emitted at line 155 is Queued(address indexed project, address indexed trader, address recipient, uint256 imd): the third field is the Ethereum recipient and the amount is the fourth. launch.json's notes and the README give the four-field form. Code behaviour is correct; the line predates the recipient field. A consumer written from the header would decode the recipient word as the amount.","line":23,"path":"src/multichain/RemoteStacker.sol","reproduction":"Read src/multichain/RemoteStacker.sol line 23 against line 83 (event Queued(address indexed project, address indexed trader, address recipient, uint256 imd)) and line 155 (emit Queued(msg.sender, trader, recipient, imdAmount)). Expected: the header names the same four-field signature. Actual: it omits recipient. Documentation only; no on-chain input is affected.","severity":"info","snippet":"/// `Queued(project, trader, imd)` is emitted at once and is the points record on this chain.","title":"Header NatSpec names the points record as Queued(project, trader, imd); the event has four fields (recipient third)"},{"citation":"resolved","description":"The RemoteStacker has no owner and nobody can withdraw, redirect or freeze; that holds. The one privileged party is the owner (and LayerZero delegate) of the IMD OFT on Robinhood Chain: setPeer(30101, X) makes every flush burn here and deliver to OApp X on Ethereum, which then interprets the RECEIVER and the compose list; setPeer(30101, 0), a refusing msgInspector or enforced options that the executor rejects block flush entirely (atomically: credits keep accruing, nothing is lost, nothing leaves until restored). The Ethereum IMD owner likewise holds peers(30416). This is imd/acc's own token, so it is a trust assumption to state in the README's Robinhood Chain section, not a code defect; the brief's claim 'the only way out is to the receiver fixed at deployment' is true only while the OFT peer stays Ethereum's IMD.","line":248,"path":"src/multichain/RemoteStacker.sol","reproduction":"State: trader A has 100 IMD waiting for 12 h. The Robinhood IMD owner calls IMD.setPeer(30101, bytes32(0)). Anyone calls flush([A]) with the quoted fee. Expected by the brief: the IMD leaves for the StackReceiver. Actual: the OFT reverts NoPeer(30101) inside send and the whole flush reverts; waiting[A] stays 100 IMD (test/RobinhoodFork.t.sol test_fork_OFTPeerRemovalBlocksTheOnlyExitAtomically covers the atomic block). With setPeer(30101, X) for another OApp X, the same flush succeeds, burns 98 IMD here and X receives the message instead of IMD/StackReceiver.","severity":"info","snippet":"        (MessagingReceipt memory receipt,) = IOFT(address(IMD)).send{value: msg.value}(","title":"Trust assumption: the Robinhood IMD OFT's owner controls the only exit (peer, enforced options, msgInspector)"},{"citation":"resolved","description":"The launch job's TESTS line, which the next worker and the judge check against, says 321 tests with 298 offline and 23 skipped. On this tree, offline, forge test reports 322 passed, 0 failed, 28 skipped out of 350 (test/scratch excluded). Nothing fails; the counts are from an earlier revision (the audit_flow specialist measured 329 on a yet earlier state of the same branch).","line":10,"path":"jobs/15-robinhood-remotestacker-launch.md","reproduction":"Run `forge test --no-match-path 'test/scratch/*'` offline on commit 6c3c112. Expected per the job text: 321 total, 298 passed, 23 skipped. Actual: `Ran 51 test suites ...: 322 tests passed, 0 failed, 28 skipped (350 total tests)`.","severity":"info","snippet":"TESTS: forge test passes (321 tests: 298 run offline; 21 fork tests run when ETH_RPC_URL, SEPOLIA_RPC_URL and ROBINHOOD_RPC_URL are set; 2 Stacker-manifest checks skip because this launch.json lists the RemoteStacker). test/RemoteStacker.t.sol (credits, the clock and tips, contract wallets, flushes, atomicity, the 50 cap), test/MultichainFlow.t.sol (the whole route with invariants), test/RobinhoodFork.t.sol (the live token and endpoint), test/Deployment.t.sol (this manifest, the empty-chain rehearsal, EIP-170 and forbidden opcodes). Keep all of them passing.","title":"Job text's TESTS line is stale: forge test now runs 350 tests (322 offline, 28 skipped), not 321"}],"hash":"98a3f54a105dc8cec8e27bd63b2fdff7a615651cd642cdacf69a8fc77487bead","nodeId":"25846a9a-2c8c-4559-baf3-061813e820fe","outcome":"completed","summary":"The review is complete and `.imd-findings.json` holds the result: one low finding with a failing proof test, three informational notes, and a coverage row for all 13 entry points plus two invariants.\n\n**What I kept**\n\n- **Low, merged from two specialists:** the amount-weighted waiting clock in `credit` rounds up to a whole second on every credit, and the error compounds. I reproduced both shapes on the current code. 3,600 credits of 1 IMD one second apart leave the tip at zero where the stated rule gives 8 bps and a 2.88 IMD tip. Five 1-wei credits from a stranger knock a 1,000,000 IMD balance from 100 to 99 bps, so one such credit per second suppresses a chosen trader's flush incentive indefinitely. No funds are lost and the trader keeps at least 98%, hence low. The attached proof under `test/scratch/ClockDriftProof.t.sol` fails today with the message \"clock must not drift past the weighted arrival: 3599 > 1800\".\n- **Info:** the header NatSpec still names the points record as a three-field event while the declared event has four fields with the recipient third.\n- **Info:** the documented trust assumption that the Robinhood IMD OFT owner controls the only exit through its peer, enforced options and inspector settings.\n- **Info:** the job text's test counts are stale. The offline suite on this tree runs 350 tests with 322 passing and 28 skipped, and nothing fails.\n\n**What I dropped**\n\nThe \"extra refused addresses\" note is protective behaviour wider than the brief, not a defect. The \"single clock reaches the cap early\" note describes the chosen single-clock design and the author's stated guarantee still holds.\n\n**My own pass** found nothing further. The flush path settles state before the OFT send, forwards all of `msg.value` with the refund to the caller, cannot underflow, and reverts whole on a failed send. The compose message layout and executor options match LayerZero's codecs, the manifest matches the brief's addresses and endpoint id, and the constructor makes no external call. Static-analysis lines on divide-before-multiply, strict equality and locked ether are intentional step rounding and an interface declaration respectively.","treeHash":null,"usage":{"cachedInputTokens":1002805,"inputTokens":322,"model":"claude-fable-5-1","outputTokens":24944,"runtime":"claude","turns":22,"wallClockMs":455054}},{"artifacts":[],"attempt":1,"bundleHash":"5f26a120561e3c73fbfd8ad161dfe1c404298cd9e8f7703e00df4d8fdafb5ebc","device":"0be47287abf7c3bd","findings":[],"hash":"c513b1043471f3bf834f4005d7a468c04fb3f3d7bca90eb33101c4a181d605b6","nodeId":"a6b88c70-7ff8-4ace-8019-2a9cc5037c5e","outcome":"completed","summary":"Implemented all three reproduced fixes: manifest-test compatibility, Ethereum recipient exclusions, and trader-favoring clock rounding. Details and the bridge-owner trust assumption are in [ADAPTATION.md](/home/imd7/.identitymd/work/54ba8a3e-20b0-44ae-a59b-bf04926fe47e/a6b88c70-7ff8-4ace-8019-2a9cc5037c5e/ADAPTATION.md).\n\nValidation passed:\n\n- `forge build`\n- Offline tests: **303 passed, 26 skipped**\n- All RPCs enabled: **325 passed, 4 intentional skips**\n\nManifest, constructor arguments, configuration, and dependencies remain unchanged. README awaits IMD’s confirmed deployment address.","treeHash":"942f33941fb21afefff1afc516b6b45ef8d37620","usage":{"cachedInputTokens":2013696,"inputTokens":120015,"model":"gpt-6-astra","outputTokens":20308,"runtime":"codex","turns":6,"wallClockMs":864926}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"a7b8747ac077deb9","findings":[{"citation":"resolved","description":"The contract header, which is the prose an indexer or the points job reads first, says the points record is `Queued(project, trader, imd)`. The event declared at line 83 and emitted at line 155 is `Queued(address indexed project, address indexed trader, address recipient, uint256 imd)`: the third field is the Ethereum recipient (the trader, or the address a contract wallet registered with setEthereumRecipient), and the amount is the fourth. launch.json's notes and the README give the four-field form. Code behaviour is correct; only this line is stale (it predates the recipient field). A points consumer written from the header would decode the recipient word as the amount.","line":23,"path":"src/multichain/RemoteStacker.sol","reproduction":"Read src/multichain/RemoteStacker.sol:23 against :83 and :155. Expected: the header names the same signature as the declaration, `Queued(project, trader, recipient, imd)`. Actual: the header omits `recipient`. No on-chain input triggers anything; this is documentation drift on the one line that defines the points record.","severity":"info","snippet":"/// `Queued(project, trader, imd)` is emitted at once and is the points record on this chain.","title":"Header NatSpec describes the points record Queued with three fields; the event has four (recipient)"},{"citation":"resolved","description":"The launch job's TESTS line (the acceptance text the next worker and the judge check against) is stale: `forge test` on this tree runs 329 tests, 303 passing offline and 26 skipped (24 fork tests across MainnetFork, StackReceiverMainnetFork, RegistryMainnetFork, SepoliaFork, RegistrySepoliaFork and RobinhoodFork, plus the 2 Stacker-manifest checks). With ROBINHOOD_RPC_URL and ETH_RPC_URL set, RobinhoodFork (5) and StackReceiverMainnetFork (5) also pass against the live chains at Robinhood block 87,363,721. Nothing fails; the counts in the text are simply from an earlier revision.","line":10,"path":"jobs/15-robinhood-remotestacker-launch.md","reproduction":"Run `forge test` offline. Expected per the job text: 321 total, 298 passing, 23 skipped. Actual: `Ran 48 test suites: 303 tests passed, 0 failed, 26 skipped (329 total tests)`.","severity":"info","snippet":"TESTS: forge test passes (321 tests: 298 run offline; 21 fork tests run when ETH_RPC_URL, SEPOLIA_RPC_URL and ROBINHOOD_RPC_URL are set; 2 Stacker-manifest checks skip because this launch.json lists the RemoteStacker).","title":"Job text states 321 tests (298 offline); the tree has 329 (303 offline, 26 skipped)"}],"hash":"d48a7d95dad9b4116abb8c1823bc1fc95b539e6e1e633ef5ec0f39a920921536","nodeId":"7d5abcc7-90fa-4987-aa77-e5339347e7aa","outcome":"completed","summary":"The review is complete. The findings file is valid JSON, the working tree is clean apart from it, and the scratch directory is removed.\n\n**Outcome:** no defect found in the RemoteStacker's control flow. The file holds two info-level notes and a coverage row for every listed entry point.\n\n**What I covered in depth (Execution Trace, Periphery, First Principles):**\n- `credit`: guard order, the pull, contract-wallet and EIP-7702 detection, the Paid path, and the amount-weighted arrival clock with its 12-hour cap. I probed the clock numerically with a scratch test. Rounding always favours the trader, and the tip never exceeds 2% of the total.\n- `flush` and `_plan`: whole-step amounts so the OFT's dust removal cannot revert, state settled before the send, tip paid from a balance that always covers it, atomic rollback on a failed send, refund of excess fee to the flusher.\n- `LayerZero.sol`: the type-3 executor options and the compose-message offsets match LayerZero's own encoders byte for byte.\n- Live facts on both chains, read today with cast: both IMD tokens are 18-decimal OFTs with rate 1e12 and are peered to each other, the receiver's IMD, vault and endpoint match, the vault's asset is the Ethereum IMD, and no message inspector or enforced compose options exist. The Robinhood and Ethereum fork suites pass against public RPCs today.\n- The manifest matches the brief exactly. The offline suite passes with 303 tests and 26 skips.\n\n**Reported as info:**\n1. The header comment at `src/multichain/RemoteStacker.sol:23` names the points record with three fields, but the event carries four, including the recipient.\n2. The job text's test counts are stale. The tree has 329 tests, not 321.\n\n**Left out:** the OFT-as-sole-exit trust assumption, which the author already imported as a finding with a regression test. The ProjectRegistry entry points are not deployed in this launch and are marked as untouched by this area rather than traced.","treeHash":null,"usage":{"cachedInputTokens":1608008,"inputTokens":482,"model":"claude-fable-5-1","outputTokens":45078,"runtime":"claude","turns":26,"wallClockMs":844671}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"ef31844bb462de78","findings":[{"citation":"resolved","description":"The brief says credit refuses 'the contract itself, IMD, the receiver and the vault (InvalidTrader)'. The code additionally hard-codes Ethereum's IMD (0xD34a...63B7) and Ethereum's LayerZero endpoint (0x1a44...728c) as refused traders and refused setEthereumRecipient targets (lines 50-51, 121-123, 162-165). This is strictly protective: sIMD shares minted to either address on Ethereum could never move. It is a documented deviation from the brief's literal list, not a defect; recorded so the spec and the code are reconciled before the launch text is finalised. No change needed.","line":121,"path":"src/multichain/RemoteStacker.sol","reproduction":"Deploy RemoteStacker(imd, receiver, vault, 30101) as launch.json does; a project with IMD approved calls credit(0xD34a99Bc0f67aE1bbd63C660e6d0b0dd03E263B7, 1e18). Expected per the brief's four-item list: queued. Actual: revert InvalidTrader() before any transfer (test/RemoteStackerAuditRegression.t.sol test_credit_refusesEthereumTokenAndEndpointBeforePullingFunds asserts exactly this).","severity":"info","snippet":"            trader == address(this) || trader == address(IMD) || trader == RECEIVER\n                || trader == VAULT || trader == ETHEREUM_IMD || trader == ETHEREUM_ENDPOINT\n        ) revert InvalidTrader();","title":"credit refuses two Ethereum addresses the brief's InvalidTrader list does not name (wider than spec, protective)"},{"citation":"resolved","description":"The RemoteStacker itself has no owner and nobody can withdraw, redirect or freeze; that holds. The one privileged party outside it is the owner of the IMD OFT on Robinhood Chain (and its LayerZero delegate): setPeer(30101, X) makes every flush burn here and deliver to OApp X on Ethereum instead of IMD, so the RECEIVER address in the message is interpreted by X; setPeer(30101, 0) or a refusing msgInspector/enforced-options blocks flush entirely (the fork test test_fork_OFTPeerRemovalBlocksTheOnlyExitAtomically shows the block is atomic: credits keep accruing, nothing is lost, but nothing leaves until the peer is restored). The Ethereum IMD owner (0x047F606fD5b2BaA5f5C6c4aB8958E45CB6B054B7, read on chain) likewise holds peers(30416). This is imd/acc's own token, so it is a trust assumption to document in the README's Robinhood section, not a code defect. Verified by reading Ethereum (chain 1) on 2026-10-13:peers(30416) == Robinhood IMD 0x5f7b...7127, msgInspector == 0, StackReceiver 0x1999...3d10 immutables IMD/SIMD/ENDPOINT match the brief, and its runtime hash 0x459b83fc...8631 equals a local build of src/multichain/StackReceiver.sol with the same constructor args.","line":248,"path":"src/multichain/RemoteStacker.sol","reproduction":"State: trader A has 100 IMD waiting for 12h. IMD's owner on Robinhood Chain calls IMD.setPeer(30101, bytes32(0)). Anyone calls flush([A]) with the quoted fee. Expected by the brief's 'the only way out is to the receiver': the IMD leaves for the StackReceiver. Actual: the OFT reverts NoPeer(30101) inside send, the whole flush reverts, waiting[A] stays 100 IMD (atomic, no loss). With setPeer(30101, X) for an attacker OApp X instead, the same flush succeeds, burns 98 IMD here and the delivery is whatever X does with the message.","severity":"info","snippet":"        (MessagingReceipt memory receipt,) = IOFT(address(IMD)).send{value: msg.value}(\n            _sendParam(plan), MessagingFee(msg.value, 0), msg.sender\n        );","title":"Trust assumption: IMD's OFT owner on Robinhood Chain controls the only exit (peer, enforced options, inspector, endpoint delegate)"}],"hash":"dd418c2d18596106d8505ec68219b043aa123f1a214cf1f13383de9e0e61fc4b","nodeId":"239136fd-9f1b-4ad6-8a0e-f775c5f842a3","outcome":"completed","summary":"Review complete. The findings file is written at `.imd-findings.json` with two informational notes and 17 coverage rows. No exploitable defect was found in the assigned area.\n\n**What I checked, against the Access Control, Trust Gap and Asymmetry guides**\n\n- **Permission model of RemoteStacker.** There are no roles at all. `credit` is permissionless but only spends the caller's own IMD. `setEthereumRecipient` writes only the caller's slot, using the same refusal list `credit` uses, and already-queued balances keep their recipient, so no in-flight value can be redirected. `flush` is permissionless, pays at most 2% of whole steps to the flusher, settles state before the bridge call, and the only destination is the receiver fixed at deployment.\n- **Paired surfaces.** `quoteFlush` and `flush` share one plan. The contract-wallet \"paid here\" branch and the queued branch run identical validation. The clock cap plus ceiling division means a fresh credit can never inherit an aged tip, and dust below a step is never tipped twice. The EIP-7702 check cannot be faked by a contract, because EIP-3541 forbids deploying code that starts with 0xEF.\n- **Trust seams.** A flusher cannot raise its tip by any action, since credits only move a clock forward. Tips come only from the flushed trader's own balance. The endpoint's excess refund to the flusher re-enters nothing that is guarded.\n- **Live wiring.** I read Ethereum directly. The live StackReceiver's immutables match the brief, and a local build of this tree's StackReceiver with the same constructor args hashes identically to the deployed runtime. Ethereum IMD's peer for Robinhood's endpoint id is the Robinhood IMD listed in launch.json, and no message inspector is set.\n- **Manifest.** launch.json has one contract, four arguments in declaration order, schema keys only, and matches the brief's addresses.\n- **Tests.** The offline suite passed with 318 tests and 4 intentional skips. The 21 fork tests could not run here because no Robinhood RPC is available on this machine, which I recorded as unreached.\n\n**The two informational notes**\n\n1. `credit` and `setEthereumRecipient` also refuse Ethereum's IMD and Ethereum's LayerZero endpoint, which the brief's literal four-item list does not name. Strictly protective, already covered by a regression test, worth reconciling in the launch text.\n2. The IMD OFT owner on Robinhood Chain controls the only exit through LayerZero peers, enforced options and the inspector. A peer removal blocks flushes atomically without loss, and a peer change would redirect deliveries. That is imd/acc's own token, so it is a trust assumption to document, not a code defect.\n\nThe scratch test directory I used for the bytecode comparison has been removed, and no repository file was changed.","treeHash":null,"usage":{"cachedInputTokens":957120,"inputTokens":322,"model":"claude-fable-5-1","outputTokens":31524,"runtime":"claude","turns":29,"wallClockMs":538156}}],"verification":[{"checks":[{"durationMs":18180,"exitCode":0,"name":"build","output":"Compiling 112 files with Solc 0.8.26\nSolc 0.8.26 finished in 18.06s\nCompiler run successful!\n","passed":true},{"durationMs":10322,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/RegistrySepoliaFork.t.sol:RegistrySepoliaForkTest\n[SKIP] test_sepolia_applyPaysTheRealIntake_thenAnswerLists() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 321.97µs (46.60µs CPU time)\n\nRan 2 tests for test/MainnetLaunchRegression.t.sol:MainnetLaunchRegressionTest\n[SKIP] test_manifestCreate2WorksWithoutDependenciesOrInitialization() (gas: 0)\n[SKIP] test_manifestPinsExactlyOneMainnetStacker() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 2 skipped; finished in 485.42µs (278.80µs CPU time)\n\nRan 1 test for test/RegistryMainnetFork.t.sol:RegistryMainnetForkTest\n[SKIP] test_mainnet_ownerAppliesToTheRealIntake_listedThenDefended() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 308.34µs (25.60µs CPU time)\n\nRan 5 tests for test/MainnetFork.t.sol:MainnetForkTest\n[SKIP] test_fork_creditNewThenRepeatTrader() (gas: 0)\n[SKIP] test_fork_firstCreditNeedsInitializationGas() (gas: 0)\n[SKIP] test_fork_liveFacts() (gas: 0)\n[SKIP] test_fork_oneBlockHoldThenRedeem() (gas: 0)\n[SKIP] test_fork_readmeBudgetFundsColdFirstCredit() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 5 skipped; finished in 546.59µs (73.53µs CPU time)\n\nRan 2 tests for test/RemoteStackerRefundFork.t.sol:RemoteStackerRefundForkTest\n[SKIP] test_liveEndpointRefundCannotReenterCreditOrFlush() (gas: 0)\n[SKIP] test_liveEndpointRejectedRefundRollsBackBurnAndCanRetryExactFee() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 2 skipped; finished in 612.84µs (44.68µs CPU time)\n\nRan 5 tests for test/OracleConsumerConformance.t.sol:OracleConsumerConformanceTest\n[PASS] test_acceptsAFreshSignatureFromTheVectorKey() (gas: 181781)\n[PASS] test_callbackSelectorIsCanonical() (gas: 3671)\n[PASS] test_digestMatchesTheProtocol() (gas: 13686)\n[PASS] test_protocolSignaturePassesVerificationBeforePanelPolicy() (gas: 69545)\n[PASS] test_tamperingTheProtocolVectorFailsSignatureVerification() (gas: 64569)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 1.69ms (698.96µs CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdRejectionTest\n[PASS] test_coldApplicationNo_deliveredWithin200k() (gas: 156227)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.21ms (173.11µs CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdDelistingTest\n[PASS] test_coldDelistedChallenge_deliveredWithin200k() (gas: 171507)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.16ms (132.68µs CPU time)\n\nRan 2 tests for test/RegistryPolicyRevision.t.sol:RegistryPolicyRevisionTest\n[PASS] test_applicationAndChallengeRequireResolvedTraderAndExcludeLpFees() (gas: 6829118)\n[PASS] test_lpRebateDefeatsGrossFeeFloor() (gas: 5991)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.77ms (1.18ms CPU time)\n\nRan 9 tests for test/TrialVenue.t.sol:TrialVenueTest\n[PASS] test_buyCreditsHalfTheFeeAndBurnsTheOtherHalf() (gas: 434566)\n[PASS] test_gasIsCheckedBeforeTheCredit() (gas: 124458)\n[PASS] test_invalidTradersNeverResolve() (gas: 65332)\n[PASS] test_ownerCanOnlySeedOnce() (gas: 56951)\n[PASS] test_pausedVaultPaysPlainImd() (gas: 305091)\n[PASS] test_registryReadsTheOwner() (gas: 17255)\n[PASS] test_routerCallerResolvesToItsActiveCaller() (gas: 784096)\n[PASS] test_sellCreditsHalfTheFeeAndBurnsTheOtherHalf() (gas: 588348)\n[PASS] test_unknownContractCallerGetsNoCashbackItIsBurned() (gas: 572622)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 3.68ms (2.19ms CPU time)\n\nRan 1 test for test/FactoryRehearsal.t.sol:FactoryRehearsalTest\n[PASS] test_sepoliaFactoryDeploysBothInOrderOnAnEmptyChain() (gas: 419613)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.84ms (3.64ms CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdListingTest\n[PASS] test_coldApplicationYes_deliveredWithin200k() (gas: 162585)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.76ms (148.75µs CPU time)\n\nRan 2 tests for test/VaultTrustRegression.t.sol:VaultTrustRegressionTest\n[PASS] test_dustHoldThroughStackerAndDirectVault() (gas: 910632)\n[PASS] test_vaultOwnerCanSweepCashback() (gas: 637955)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.70ms (1.03ms CPU time)\n\nRan 6 tests for test/RegistrySelfBeneficiary.t.sol:RegistrySelfBeneficiaryTest\n[PASS] test_acceptedSelfChallengeHoldsSlotUntilAnswerWithoutNewCooldown() (gas: 9460831)\n[PASS] test_applicationRefusesRegistryBeforeFeeOrRequest() (gas: 171010)\n[PASS] test_contractBeneficiaryStillReceivesBondAndCanHandOff() (gas: 6434857)\n[PASS] test_handoffRefusesRegistryAndPreservesBondRecipient() (gas: 6367548)\n[PASS] test_registryOwnedProjectCannotApplyWithRegistryAsBeneficiary() (gas: 507127)\n[PASS] test_rejectedHandoffDoesNotConsumeDailyHandoff() (gas: 3287504)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 5.53ms (5.14ms CPU time)\n\nRan 8 tests for test/RegistryBondOwed.t.sol:RegistryBondOwedTest\n[PASS] test_blockedBeneficiary_signedYes_defendsAndOwesBond() (gas: 1111540)\n[PASS] test_blockedChallenger_expireClearsAndOwesBond() (gas: 939032)\n[PASS] test_blockedChallenger_failureClearsAndOwesBond() (gas: 1232683)\n[PASS] test_blockedChallenger_signedNo_delistsAndOwesBond() (gas: 1219736)\n[PASS] test_claimBond_refusesZeroAddressAndNothingOwed() (gas: 67159)\n[PASS] test_falseReturningToken_owesBond() (gas: 1052745)\n[PASS] test_owedBondsAccumulate() (gas: 1421953)\n[PASS] test_unblocked_paysAtOnce() (gas: 950815)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 7.36ms (6.68ms CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdDefenseTest\n[PASS] test_coldDefendedChallenge_deliveredWithin200k() (gas: 190510)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.80ms (138.68µs CPU time)\n\nRan 3 tests for test/RegistryCallbackGas.t.sol:RegistryColdFailureTest\n[PASS] test_coldChallengeAfterDeadline_canExpire() (gas: 128213)\n[PASS] test_coldDisagreedChallenge_deliveredWithin200k() (gas: 140179)\n[PASS] test_coldRefusedChallenge_deliveredWithin200k() (gas: 140262)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 13.74ms (373.33µs CPU time)\n\nRan 9 tests for test/RegistryApplicantGate.t.sol:RegistryApplicantGateTest\n[PASS] test_anyoneMayStillChallengeAnOwnedProject() (gas: 6420742)\n[PASS] test_misbehavingOwnerReadsAsNone() (gas: 15582598)\n[PASS] test_noOwnerFunctionOpenToAnyone() (gas: 3089189)\n[PASS] test_ownerChangeMovesTheRight() (gas: 3436229)\n[PASS] test_ownerMayApply() (gas: 3320997)\n[PASS] test_projectItselfMayApply() (gas: 3381856)\n[PASS] test_renouncedOwnerOpenToAnyone() (gas: 3284007)\n[PASS] test_squatterCannotBlockTheTeam() (gas: 3550174)\n[PASS] test_strangerRefusedBeforePaying() (gas: 390876)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 18.42ms (16.56ms CPU time)\n\nRan 7 tests for test/TraderResolution.t.sol:TraderResolutionTest\n[PASS] test_directNoCodeSenderCanBeResolvedWithoutTxOrigin() (gas: 303966)\n[PASS] test_emptyHookDataResolvesActiveMsgSenderAndCannotBeSwept() (gas: 381420)\n[PASS] test_hookDataTakesPrecedenceAndSupportsContractWallets() (gas: 477363)\n[PASS] test_invalidHookDataPaysPlainImdToKnownCallerNeverInvalidRecipient() (gas: 882426)\n[PASS] test_legacyEmptyHookDataCreditsRouterAndAnyoneCanSweep() (gas: 433080)\n[PASS] test_pausedVaultPaysPlainImdToResolvedMsgSender() (gas: 301439)\n[PASS] test_unknownContractOrInvalidMsgSenderNeverBecomesTheRecipient() (gas: 522893)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 36.23ms (1.38ms CPU time)\n\nRan 6 tests for test/RemoteStackerAuditRegression.t.sol:RemoteStackerAuditRegressionTest\n[PASS] testFuzz_clockRounding_doesNotChargeForFreshAge(uint96,uint96,uint32) (runs: 256, μ: 425176, ~: 427270)\nLogs:\n  Bound result 59374159315\n  Bound result 162514264337593543950333\n  Bound result 37170\n\n[PASS] test_bridgeRefusal_preservesCustodyAndContinuesAcceptingCredits() (gas: 1295421)\n[PASS] test_clockRounding_smallFreshCreditCannotInheritTheFullTip() (gas: 1269459)\n[PASS] test_clockRounding_uncappedBalanceAlsoFavorsTrader() (gas: 423477)\n[PASS] test_credit_refusesEthereumTokenAndEndpointBeforePullingFunds() (gas: 308594)\n[PASS] test_setEthereumRecipient_refusesEthereumTokenAndEndpoint() (gas: 400356)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 41.70ms (42.02ms CPU time)\n\nRan 1 test for test/RemoteStackerLaunch.t.sol:RemoteStackerLaunchTest\n[PASS] test_manifestDeploysOnlyRemoteStackerWithoutExternalConstructorCalls() (gas: 6020414)\nLogs:\n  RemoteStacker runtime bytes: 8182\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 48.63ms (48.47ms CPU time)\n\nRan 21 tests for test/RemoteStacker.t.sol:RemoteStackerTest\n[PASS] testFuzz_flush_conservesEveryWei(uint96,uint96,uint32) (runs: 256, μ: 663472, ~: 943769)\nLogs:\n  Bound result 59374159315\n  Bound result 2514264337593543950333\n\n[PASS] testFuzz_tip_neverAboveTwoPercent(uint64,uint96) (runs: 256, μ: 182631, ~: 182651)\nLogs:\n  Bound result 435\n\n[PASS] test_constructor_wiringWithoutExternalCalls() (gas: 3842)\n[PASS] test_credit_clockIsAmountWeighted() (gas: 292087)\n[PASS] test_credit_contractWalletPaidPlainUnlessRegistered() (gas: 665088)\n[PASS] test_credit_eip7702WalletGoesThroughTheQueue() (gas: 290204)\n[PASS] test_credit_queuesForPlainWallet() (gas: 226667)\n[PASS] test_credit_rejectsInvalidTraders() (gas: 172391)\n[PASS] test_credit_shortAllowanceOrBalanceReverts() (gas: 187984)\n[PASS] test_credit_zeroAmountMovesNothing() (gas: 58649)\n[PASS] test_flush_atMostFiftyRecipients() (gas: 85104)\n[PASS] test_flush_dustIsNeverTippedTwice() (gas: 875951)\n[PASS] test_flush_fiftyRecipients() (gas: 9487069)\n[PASS] test_flush_isAtomic_sendFailureChangesNothing() (gas: 425526)\n[PASS] test_flush_nothingToFlushReverts() (gas: 279365)\n[PASS] test_flush_sendsRoundedAmountsPaysTipAndRefundsExcess() (gas: 1082997)\n[PASS] test_flush_skipsEmptyAndDuplicateAndDustOnlyRecipients() (gas: 892843)\n[PASS] test_flush_traderCanFlushThemselvesAtOnce() (gas: 760986)\n[PASS] test_setEthereumRecipient_refusesInvalidAndIsPerCaller() (gas: 358628)\n[PASS] test_tip_growsLinearlyAndCapsAtTwoPercent() (gas: 249888)\n[PASS] test_tip_newCashbackNeverInheritsACappedClock() (gas: 296946)\nSuite result: ok. 21 passed; 0 failed; 0 skipped; finished in 61.81ms (63.40ms CPU time)\n\nRan 23 tests for test/ProjectRegistry.t.sol:ProjectRegistryTest\n[PASS] testFuzz_apply_nameIsSafeOrRefused(bytes) (runs: 256, μ: 320252, ~: 55837)\n[PASS] testFuzz_apply_rate(uint16) (runs: 256, μ: 359681, ~: 47867)\n[PASS] test_answer_freshnessAndPanelChecks() (gas: 3531117)\n[PASS] test_answer_mustBeSignedByTheOracleForThisContract() (gas: 3219851)\n[PASS] test_answer_onlyFromTheIntake_onlyForOurOpenRequest() (gas: 3229539)\n[PASS] test_apply_bodyIsTheOracleBody() (gas: 3317268)\n[PASS] test_apply_oneOpenQuestionAtATime_andNotWhenListed() (gas: 3227423)\n[PASS] test_apply_paysExactlyTheFeeAndAsks() (gas: 3117533)\n[PASS] test_apply_validation() (gas: 567226)\n[PASS] test_callbackOutOfGas_isRecoverableThroughExpire() (gas: 6062321)\n[PASS] test_challenge_defended_bondToBeneficiary_noNewCooldown() (gas: 6362238)\n[PASS] test_challenge_failureOrExpiry_returnsTheBond_projectStaysListed() (gas: 9363040)\n[PASS] test_challenge_lost_delistsFromThisBlock_bondBack() (gas: 9339341)\n[PASS] test_challenge_onlyListed_afterCooldown_oneAtATime() (gas: 6314280)\n[PASS] test_challenge_paysFeeAndBond_bodyNamesTheReason() (gas: 6469424)\n[PASS] test_constructor_rejectsZeroAddresses() (gas: 6519)\n[PASS] test_constructor_wiring() (gas: 74067)\n[PASS] test_expire_afterADay_orWhenTheIntakeCompletedWithoutAnAnswer() (gas: 6115895)\n[PASS] test_failure_clearsTheApplication_andNeverLists() (gas: 5990106)\n[PASS] test_failure_onlyFromTheIntake_onlyForOurOpenRequest() (gas: 3057732)\n[PASS] test_no_rejects_andTheProjectCanApplyAgain() (gas: 6171710)\n[PASS] test_setBeneficiary_onlyTheBeneficiaryOfAListedProject() (gas: 3319132)\n[PASS] test_yes_listsFromThisBlock() (gas: 3160454)\nSuite result: ok. 23 passed; 0 failed; 0 skipped; finished in 68.13ms (67.02ms CPU time)\n\nRan 5 tests for test/StackerAuditRegression.t.sol:StackerAuditRegressionTest\n[PASS] testFuzz_unreachableRecipientsRejectedBeforeAndAfterFirstCredit(uint256,bool) (runs: 256, μ: 1452105, ~: 1499757)\n[PASS] test_creditToImdTokenRevertsWithoutEffects() (gas: 362704)\n[PASS] test_creditToStackerRevertsWithoutEffects() (gas: 364669)\n[PASS] test_creditToVaultRevertsWithoutEffects() (gas: 364714)\n[PASS] test_zeroAmountStillRejectsUnreachableRecipients() (gas: 1092757)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 76.44ms (73.38ms CPU time)\n\nRan 20 tests for test/Stacker.t.sol:StackerTest\n[PASS] testFuzz_credit(address,uint256) (runs: 256, μ: 394589, ~: 394401)\nLogs:\n  Bound result 21\n\n[PASS] testFuzz_credit_shortAllowanceAlwaysReverts(uint256,uint256) (runs: 256, μ: 368161, ~: 368912)\nLogs:\n  Bound result 428\n  Bound result 400\n\n[PASS] testFuzz_credit_twoTradersProportional(uint256,uint256) (runs: 256, μ: 430340, ~: 430416)\nLogs:\n  Bound result 43200\n  Bound result 428\n\n[PASS] test_constructor_doesNotCallExistingVaultOrToken() (gas: 56148)\n[PASS] test_constructor_vaultWithoutCode_creditCannotMove() (gas: 131325)\n[PASS] test_constructor_wiringWithoutExternalCalls() (gas: 43846)\n[PASS] test_credit_manyProjectsAndTraders() (gas: 9375713)\n[PASS] test_credit_revertsOnShortAllowance() (gas: 378525)\n[PASS] test_credit_revertsOnShortBalance() (gas: 370632)\n[PASS] test_credit_revertsOnZeroShares() (gas: 383379)\n[PASS] test_credit_revertsWhenVaultPaused() (gas: 508239)\n[PASS] test_credit_sharesFollowVaultPrice() (gas: 617949)\n[PASS] test_credit_sharesGoOnlyToTrader() (gas: 374498)\n[PASS] test_credit_totalsAndEvent() (gas: 494195)\n[PASS] test_credit_zeroAmountReturnsZeroNoEvent() (gas: 80135)\n[PASS] test_credit_zeroTraderReverts() (gas: 66272)\n[PASS] test_failedFirstCredit_rollsBackApprovalAndRetriesValidation() (gas: 531891)\n[PASS] test_firstCredit_approvesOnce_andLaterCreditsStillWork() (gas: 397571)\n[PASS] test_firstCredit_revertsOnAssetMismatch() (gas: 791662)\n[PASS] test_integrator_tryCatchSurvivesPausedVault() (gas: 1053849)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 110.84ms (157.85ms CPU time)\n\nRan 16 tests for test/StackReceiver.t.sol:StackReceiverTest\n[PASS] testFuzz_delivery_mixedZeroAndPositiveShares(uint96,uint96,bool) (runs: 256, μ: 489409, ~: 489260)\nLogs:\n  Bound result 3922\n  Bound result 999998000000000197\n\n[PASS] testFuzz_delivery_sumExactlyDelivered(uint96,uint96) (runs: 256, μ: 380792, ~: 380796)\n[PASS] test_constructor_wiringWithoutExternalCalls() (gas: 8112)\n[PASS] test_delivery_assetMismatchRefusesTheFirstDelivery() (gas: 1930170)\n[PASS] test_delivery_depositsForEachTraderAndKeepsNothing() (gas: 552622)\n[PASS] test_delivery_inconsistentPreviewRollsBackInsteadOfSpendingOtherFunds() (gas: 626160)\n[PASS] test_delivery_listMustAddUpToTheAmountReceived() (gas: 363345)\n[PASS] test_delivery_onlyFromTheEndpointAndOnlyForIMD() (gas: 439485)\n[PASS] test_delivery_pausedVaultPaysPlainIMD() (gas: 584380)\n[PASS] test_delivery_rejectsNativeValueAndCanRetryWithoutIt() (gas: 556396)\n[PASS] test_delivery_revertingDepositPaysOnlyThatTraderPlainIMD() (gas: 416475)\n[PASS] test_delivery_revertingPreviewPaysOnlyThatTraderPlainIMD() (gas: 400333)\n[PASS] test_delivery_strayIMDIsNeverSpent() (gas: 344430)\n[PASS] test_delivery_zeroAmountEntryIsSkipped() (gas: 304641)\n[PASS] test_delivery_zeroSharesPaysPlainIMDWithoutDepositing() (gas: 465715)\n[PASS] test_vault_zeroShareDepositStillConsumesAssets() (gas: 275682)\nSuite result: ok. 16 passed; 0 failed; 0 skipped; finished in 81.58ms (81.09ms CPU time)\n\nRan 2 tests for test/StackReceiverLaunch.t.sol:StackReceiverLaunchTest\n[SKIP] test_manifestFactoryDeploysOneContractWithNoExternalConstructorCalls() (gas: 0)\n[SKIP] test_manifestPinsExactlyTheMainnetReceiver() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 2 skipped; finished in 249.70µs (139.04µs CPU time)\n\nRan 5 tests for test/StackReceiverMainnetFork.t.sol:StackReceiverMainnetForkTest\n[SKIP] test_fork_arrivalDepositsForEveryTrader() (gas: 0)\n[SKIP] test_fork_composeIsDeliveredOnceAndOnlyFromTheEndpoint() (gas: 0)\n[SKIP] test_fork_composeRejectsValueWithoutConsumingTheQueue() (gas: 0)\n[SKIP] test_fork_gasBudgetCoversOneTenAndFiftyTraders() (gas: 0)\n[SKIP] test_fork_liveFacts() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 5 skipped; finished in 290.58µs (39.72µs CPU time)\n\nRan 10 tests for test/RegistryAuditRegression.t.sol:RegistryAuditRegressionTest\n[PASS] testFuzz_applicationPaysCurrentPrice(uint96) (runs: 256, μ: 3106332, ~: 3106154)\nLogs:\n  Bound result 4737918046530699263\n\n[PASS] test_defendedChallengeFromAnotherWalletDoesNotRenewImmunity() (gas: 9334621)\n[PASS] test_defendedSelfChallengeDoesNotRenewImmunity() (gas: 21881719)\n[PASS] test_permissionlessApplicantCanOccupySlotUntilRejected() (gas: 6210874)\n[PASS] test_priceRiseAndFall_preserveBondAndExactPayment() (gas: 9528279)\n[PASS] test_retiredActionApplicationMovesNothing() (gas: 281247)\n[PASS] test_retiredActionRefusesBeforePaymentAndPreservesListing() (gas: 6409682)\n[PASS] test_signedAnswerMustReachItsOwnQuorum() (gas: 3221678)\n[PASS] test_stakingFaucetTokenCannotPayOracleFee() (gas: 4326584)\n[PASS] test_staleExactApprovalCannotSpendAnUnexpectedPriceIncrease() (gas: 345326)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 115.72ms (122.79ms CPU time)\n\nRan 5 tests for test/RobinhoodFork.t.sol:RobinhoodForkTest\n[SKIP] test_fork_OFTPeerRemovalBlocksTheOnlyExitAtomically() (gas: 0)\n[SKIP] test_fork_fiftyTradersQuoteAndFlush() (gas: 0)\n[SKIP] test_fork_flushBurnsHereAndTheEndpointAcceptsTheMessage() (gas: 0)\n[SKIP] test_fork_liveFacts() (gas: 0)\n[SKIP] test_fork_tooLittleFeeChangesNothing() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 5 skipped; finished in 487.24µs (60.58µs CPU time)\n\nRan 5 tests for test/SepoliaFork.t.sol:SepoliaForkTest\n[SKIP] test_sepolia_creditEventAndTotals() (gas: 0)\n[SKIP] test_sepolia_liveFacts() (gas: 0)\n[SKIP] test_sepolia_liveStackerValidCreditMatchesMainnetCandidate() (gas: 0)\n[SKIP] test_sepolia_mainnetCandidateRejectsLegacyUnreachableRecipients() (gas: 0)\n[SKIP] test_sepolia_pausedVaultRevertsThenRecovers() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 5 skipped; finished in 257.60µs (38.43µs CPU time)\n\nRan 3 tests for test/MultichainFlow.t.sol:MultichainFlowTest\n[PASS]\nMultichainFlowTest invariants:\n[PASS] invariant_receiverKeepsNothingAndVaultHoldsDeliveries\n[PASS] invariant_remoteStackerHoldsExactlyWhatIsWaiting\n MultichainFlowTest invariants (runs: 64, calls: 2048, reverts: 0)\n\n╭-------------------+----------+-------+---------+----------╮\n| Contract          | Selector | Calls | Reverts | Discards |\n+===========================================================+\n| MultichainHandler | credit   | 723   | 0       | 0        |\n|-------------------+----------+-------+---------+----------|\n| MultichainHandler | flush    | 665   | 0       | 0        |\n|-------------------+----------+-------+---------+----------|\n| MultichainHandler | pass     | 660   | 0       | 0        |\n╰-------------------+----------+-------+---------+----------╯\n\n[PASS] test_endToEnd_creditFlushDeliver() (gas: 1460013)\n[PASS] test_handlerReachesFlushes() (gas: 1419865)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 373.11ms (362.40ms CPU time)\n\nRan 1 test for test/StackerInvariant.t.sol:StackerInvariantTest\n[PASS]\nStackerInvariantTest invariants:\n[PASS] invariant_stackerHoldsNothing\n[PASS] invariant_totalsConsistent\n[PASS] invariant_vaultConservation\n StackerInvariantTest invariants (runs: 64, calls: 2048, reverts: 0)\n\n╭----------------+-------------+-------+---------+----------╮\n| Contract       | Selector    | Calls | Reverts | Discards |\n+===========================================================+\n| StackerHandler | advance     | 397   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | credit      | 429   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | donate      | 416   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | redeem      | 401   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | togglePause | 405   | 0       | 0        |\n╰----------------+-------------+-------+---------+----------╯\n\nLogs:\n  Bound result 2147\n  Bound result 410000\n  Bound result 160000\n  Bound result 87284919\n  Bound result 13955\n  Bound result 7\n  Bound result 1\n  Bound result 1\n  Bound result 362195330182504693112643\n  Bound result 868017403236753755454840\n  Bound result 754\n  Bound result 8839\n  Bound result 8034\n  Bound result 13\n  Bound result 10\n  Bound result 13\n  Bound result 2115\n  Bound result 420935819089309233818\n  Bound result 1\n  Bound result 920772754987996088986554\n  Bound result 324529450160185904572\n  Bound result 75\n  Bound result 564974\n  Bound result 1000000000000000000000000\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 747.91ms (745.11ms CPU time)\n\nRan 15 tests for test/StackReceiverAdversarial.t.sol:StackReceiverAdversarialTest\n[PASS] testFuzz_headerFieldsPreserveAmountSourceAndBeneficiaries(uint64,uint32,bytes32,bytes32,uint64) (runs: 1000, μ: 461532, ~: 461798)\nLogs:\n  Bound result 177000\n\n[PASS] testFuzz_shortOFTHeaderIsAtomic(uint8) (runs: 1000, μ: 428715, ~: 428483)\nLogs:\n  Bound result 71\n\n[PASS] testFuzz_truncatedListIsAtomic(uint16) (runs: 1000, μ: 455501, ~: 449603)\nLogs:\n  Bound result 223\n\n[PASS] test_failedApprovalLeavesFirstDeliveryRetryable() (gas: 833072)\n[PASS] test_forgedComposeCannotSpendAPendingArrival() (gas: 1110024)\n[PASS] test_initializationIsLazyAndApprovalIsNotRepeated() (gas: 983971)\n[PASS] test_lateTransferFailureRollsBackEarlierDepositAndCanRetry() (gas: 1034797)\n[PASS] test_maximumSharedDecimalArrivalCanBeDelivered() (gas: 435078)\n[PASS] test_nestedAuthenticatedComposeIsBlockedAndStillRetryable() (gas: 3325460)\n[PASS] test_nonCanonicalAddressInListIsRejectedAtomically() (gas: 438638)\n[PASS] test_oneWeiAllocationAndDuplicateTradersPreserveEveryWei() (gas: 467004)\n[PASS] test_overlistedMessageCannotUseAnotherMessagesReserve() (gas: 849597)\n[PASS] test_pendingArrivalsCanBeComposedOutOfOrderAndOnlyOnce() (gas: 1074045)\n[PASS] test_sumOverflowRevertsBeforeApprovalOrDelivery() (gas: 440856)\n[PASS] test_zeroArrivalDoesNotConsumeUnrelatedFundsOrStampTraders() (gas: 345109)\nSuite result: ok. 15 passed; 0 failed; 0 skipped; finished in 694.87ms (806.86ms CPU time)\n\nRan 8 tests for test/RegistryBodyProperties.t.sol:RegistryBodyPropertiesTest\n[PASS] testFuzz_applicationBodyRoundTripsValidText(bytes32,uint8,uint8,uint16) (runs: 1000, μ: 3613782, ~: 3581344)\nLogs:\n  Bound result 1\n  Bound result 65\n  Bound result 54\n\n[PASS] testFuzz_challengeBodyRoundTripsValidText(bytes32,uint16) (runs: 1000, μ: 6788292, ~: 6726313)\nLogs:\n  Bound result 49\n\n[PASS] test_applicationMaximumTextAndRate() (gas: 3862252)\n[PASS] test_applicationMinimumTextAndRate() (gas: 3504752)\n[PASS] test_challengeMaximumReason() (gas: 7118201)\n[PASS] test_challengeMinimumReason() (gas: 6643534)\n[PASS] test_everyForbiddenByteIsRejectedInEveryUserTextFieldBeforePayment() (gas: 53799580)\n[PASS] test_textLengthsJustOutsideLimitsAreAtomic() (gas: 3750569)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 818.30ms (1.10s CPU time)\n\nRan 17 tests for test/StackerDependencyFailures.t.sol:StackerDependencyFailuresTest\n[PASS] testFuzz_shortAssetReturnFailsBeforeAnyApproval(uint8) (runs: 1000, μ: 674624, ~: 674352)\nLogs:\n  Bound result 17\n\n[PASS] testFuzz_shortDepositReturnIsAtomic(uint8,bool,uint96) (runs: 1000, μ: 904107, ~: 885097)\nLogs:\n  Bound result 0\n  Bound result 1624591577\n\n[PASS] testFuzz_tokenFailureIsAtomic(uint8,uint96,bool) (runs: 1000, μ: 842597, ~: 840086)\nLogs:\n  Bound result 1\n  Bound result 11337210\n\n[PASS] testFuzz_vaultPullFailureIsAtomic(uint8,uint96,bool) (runs: 1000, μ: 877143, ~: 878139)\nLogs:\n  Bound result 1\n  Bound result 11337210\n\n[PASS] test_assetRevertDataBubblesAndDoesNotPrimeApproval() (gas: 670793)\n[PASS] test_dirtyAssetAddressIsRejectedBeforeAnyApproval() (gas: 673028)\n[PASS] test_falseApprovalRollsBackAndNextCreditRevalidates() (gas: 798887)\n[PASS] test_falsePullAfterMovingOneWeiRollsBackFirstApproval() (gas: 831737)\n[PASS] test_falseVaultPullRollsBackBothTransfersAndFirstApproval() (gas: 871106)\n[PASS] test_invalidBooleanApprovalRollsBack() (gas: 798824)\n[PASS] test_invalidBooleanPullRollsBack() (gas: 831884)\n[PASS] test_invalidBooleanVaultPullRollsBackEntireProjectBalance() (gas: 871365)\n[PASS] test_missingDepositReturnRollsBackActualMint() (gas: 936401)\n[PASS] test_oneByteShortDepositReturnRollsBackActualMintAndHold() (gas: 865107)\n[PASS] test_revertingApprovalRollsBackAndNextCreditRevalidates() (gas: 804553)\n[PASS] test_revertingPullBubblesErrorAfterAnEarlierCredit() (gas: 838492)\n[PASS] test_revertingVaultPullAfterEarlierCreditLeavesMatureSharesAlone() (gas: 867788)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 818.13ms (1.59s CPU time)\n\nRan 20 tests for test/RegistryAdversarial.t.sol:RegistryAdversarialTest\n[PASS] testFuzz_nonCanonicalBoolCannotDelist(uint256) (runs: 1000, μ: 6554669, ~: 6554629)\nLogs:\n  Bound result 999000000000000000000\n\n[PASS] testFuzz_oldCallbacksCannotCloseReplacementApplication(uint8) (runs: 1000, μ: 6640285, ~: 6646682)\nLogs:\n  Bound result 0\n\n[PASS] testFuzz_pendingDeadlineStillAllowsAnswerButNotExpiry(bool,bool) (runs: 1000, μ: 4985877, ~: 3434609)\n[PASS] testFuzz_shortBoolEncodingCannotReleaseBond(uint8) (runs: 1000, μ: 6433582, ~: 6433340)\nLogs:\n  Bound result 13\n\n[PASS] test_answerBeforeAskToleranceHasExactBoundary() (gas: 3414922)\n[PASS] test_attestationExpiryIsInclusive() (gas: 3405381)\n[PASS] test_beneficiaryHandoverWaitsForSettlementAndRevokesOldWallet() (gas: 9831731)\n[PASS] test_challengeCooldownHasExactBoundary() (gas: 6413357)\n[PASS] test_challengeShortAllowanceCannotBorrowDonatedFunds() (gas: 3592763)\n[PASS] test_emptyAndMalformedSignaturesCannotSettle() (gas: 4190907)\n[PASS] test_everySignedFieldIsAuthenticatedBeforeABondCanMove() (gas: 10613885)\n[PASS] test_futureIssuedAtToleranceHasExactBoundary() (gas: 3405670)\n[PASS] test_intakeRevertRollsBackFeeBondApprovalAndOpenRecord() (gas: 6686933)\n[PASS] test_maximumFeeAdditionRevertsWithoutChangingListing() (gas: 3529365)\n[PASS] test_oldChallengeCannotRefundTwiceOrCloseNewChallenge() (gas: 9956450)\n[PASS] test_oneSecondAfterDeadlineCannotReleaseBondToBeneficiary() (gas: 6561303)\n[PASS] test_signatureForSameAddressOnAnotherChainCannotReleaseBond() (gas: 6575234)\n[PASS] test_starvedChallengeCallbackRefundsOnlyChallenger() (gas: 6558379)\n[PASS] test_thirdPartyPaidQuestionCannotListOurProject() (gas: 3627102)\n[PASS] test_tokenReturningFalseCannotCreatePaidRequest() (gas: 3537524)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 818.30ms (2.25s CPU time)\n\nRan 8 tests for test/RegistryHandoffInterval.t.sol:RegistryHandoffIntervalTest\n[PASS] testFuzz_challengeNamingTheWalletInForceAlwaysFiles(uint64) (runs: 1000, μ: 6539339, ~: 6539487)\nLogs:\n  Bound result 82901\n\n[PASS] testFuzz_secondHandoffBoundary(uint64) (runs: 1000, μ: 3316092, ~: 3314072)\nLogs:\n  Bound result 1799\n\n[PASS] test_checksBeforeTheIntervalStillComeFirst() (gas: 6493598)\n[PASS] test_clockIsPerProject() (gas: 6503818)\n[PASS] test_expiredAndFailedQuestionsLeaveTheClockAlone() (gas: 9417371)\n[PASS] test_handoffEmitsEventAndStartsExactInterval() (gas: 3290917)\n[PASS] test_intervalRefusesAThirdWalletToo() (gas: 3333746)\n[PASS] test_relistingByApplicationNamesANewWalletWithoutAHandoff() (gas: 18821659)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 817.79ms (1.29s CPU time)\n\nRan 18 tests for test/RegistryRevisionRegression.t.sol:RegistryRevisionRegressionTest\n[PASS] testFuzz_answerIsConsumedAcrossApplications(bool) (runs: 256, μ: 9344862, ~: 9341940)\n[PASS] testFuzz_beneficiaryUnlocksAfterFailureOrExpiry(bool) (runs: 256, μ: 6339812, ~: 6334146)\n[PASS] testFuzz_challengeAllowsRateChangesWithinTheRules(uint16) (runs: 256, μ: 7327148, ~: 7327363)\nLogs:\n  Bound result 60\n\n[PASS] testFuzz_validCooldownCanList(uint64) (runs: 256, μ: 3240081, ~: 3239786)\nLogs:\n  Bound result 8001021\n\n[PASS] test_applicationAnswerCannotDefendAChallengeAndSpendItsBond() (gas: 6302462)\n[PASS] test_beneficiaryCannotBlockEveryChallengeByTogglingWallets() (gas: 6764366)\n[PASS] test_beneficiaryCannotTransferAfterChallengeDelists() (gas: 6302572)\n[PASS] test_challengeBodyLimitsAndConsumerDomain() (gas: 6723080)\n[PASS] test_constructorRefusesOverflowingAndExcessiveCooldowns() (gas: 16556)\n[PASS] test_handoffIntervalBoundaryAndRelisting() (gas: 12674465)\n[PASS] test_invalidAnswerDoesNotConsumeUUID() (gas: 3300977)\n[PASS] test_legacyChallengeCannotChargeAfterAnyBeneficiaryHandoff() (gas: 12666281)\n[PASS] test_openChallengeLocksBeneficiaryAndDefendedBondDestination() (gas: 6742710)\n[PASS] test_pinnedChallengePreservesCooldownAndSlotRules() (gas: 6415451)\n[PASS] test_pinnedChallengeRefusesFrontrunBeforeAnyPayment() (gas: 6854511)\n[PASS] test_selfChallengeOccupiesSlotOnlyUntilItSettles() (gas: 9349350)\n[PASS] test_settingSameBeneficiaryDoesNotDisableLegacyChallenge() (gas: 6329990)\n[PASS] test_zeroAndMaximumCooldownCanList() (gas: 6390657)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 818.27ms (2.19s CPU time)\n\nRan 5 tests for test/Deployment.t.sol:DeploymentTest\n[PASS] test_emptyChainRehearsal_constructorPasses() (gas: 25975)\n[PASS] test_launchManifest_knownShape() (gas: 19101)\n[PASS] test_multichain_emptyChainRehearsal_constructorsPass() (gas: 5728964)\n[PASS] test_registry_emptyChainRehearsal_constructorPasses() (gas: 8416629)\n[PASS] test_runtimeSizeAndNoEscapeOpcodes() (gas: 4294851)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 818.51ms (48.06ms CPU time)\n\nRan 8 tests for test/StackerGas.t.sol:StackerGasTest\n[PASS] testFuzz_readmeLateFailurePaysOnceAndNextCreditWorks(uint96,bool,bool) (runs: 1000, μ: 3268140, ~: 3268017)\nLogs:\n  Bound result 536811770893502923073\n\n[PASS] test_oldGasCapFailsRepeatedlyAndDoesNotPrimeVault() (gas: 600749)\n[PASS] test_readmeBudgetFundsColdFirstCredit() (gas: 359519)\n[PASS] test_readmeFallbackAfterFirstMintReturnsZeroShares() (gas: 3264309)\n[PASS] test_readmeFallbackAfterRepeatMintReverts() (gas: 3264412)\n[PASS] test_readmeFallbackHasGasEvenWhenCreditExhaustsItsBudget() (gas: 473042)\n[PASS] test_readmeFallbackPaysPlainImdWhenVaultFails() (gas: 272236)\n[PASS] test_readmeGasGuardRejectsLowEstimateBeforeFallback() (gas: 94010)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 818.44ms (815.87ms CPU time)\n\nRan 7 tests for test/StackerExternalCalls.t.sol:StackerExternalCallsTest\n[PASS] testFuzz_creditMatchesDirectDepositFromSameVaultState(uint96,uint96,uint96) (runs: 1000, μ: 976866, ~: 976865)\nLogs:\n  Bound result 99999000000000000001313\n  Bound result 5458\n  Bound result 2645\n\n[PASS] testFuzz_lateFailureRollsBackAllEffects(uint96,bool,bool) (runs: 1000, μ: 2935823, ~: 2941251)\nLogs:\n  Bound result 536811770893502923073\n\n[PASS] test_anotherCallersApprovalCannotBeSpent() (gas: 598595)\n[PASS] test_noReturnTokenStillMovesExactAssetsAndShares() (gas: 3117679)\n[PASS] test_oneWeiLateRevertRollsBackFirstApproval() (gas: 2937621)\n[PASS] test_tokenReentryDuringApprovalAndPullCannotCreateExtraCashback() (gas: 3738736)\n[PASS] test_zeroShareReturnRollsBackAnActualMint() (gas: 2925987)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 814.23ms (1.63s CPU time)\n\nRan 17 tests for test/RemoteStackerAdversarial.t.sol:RemoteStackerAdversarialTest\n[PASS] testFuzz_batchPermutationDuplicatesAndEventsPreserveEntitlements(uint96,uint96,uint32) (runs: 1000, μ: 1713887, ~: 1729794)\nLogs:\n  Bound result 99999999999000000000100\n  Bound result 99999999999000000002889\n  Bound result 13962\n  Bound result 13962\n\n[PASS] testFuzz_reentrancyRejectedAtPullPlainPaymentSendAndTip(uint8,bool) (runs: 1000, μ: 859103, ~: 709956)\nLogs:\n  Bound result 0\n\n[PASS] test_batchLimitCountsRawEntriesEvenWhenEveryEntryIsADuplicate() (gas: 1279539)\n[PASS] test_bridgeFailureAfterBurnRollsBackThenSameBatchCanBeRetried() (gas: 1873213)\n[PASS] test_delegationAndOrdinaryCodeRouteDifferentlyDespiteRegistration() (gas: 745039)\n[PASS] test_entireSupplyCanQueueWithExactAllowanceAndExit() (gas: 767755)\n[PASS] test_failedPlainPaymentRollsBackPullAllowanceAndTotalPaid() (gas: 1044225)\n[PASS] test_falseTransferFromRollsBackFiniteAllowanceAndExistingQueue() (gas: 832805)\n[PASS] test_noReturnTokenAcceptedForPullPlainPaymentAndTip() (gas: 875882)\n[PASS] test_quoteFailureBubblesButEmptyAndDustQueuesNeedNoBridgeQuote() (gas: 1332022)\n[PASS] test_recipientChangesAffectFutureCreditsOnlyAndCannotAlterAnotherWallet() (gas: 1332815)\n[PASS] test_refundCallbackCannotCreditOrFlushAndExcessGoesToCaller() (gas: 1641243)\n[PASS] test_rejectedRefundRevertsAtomicallyAndExactFeeStillWorks() (gas: 2531390)\n[PASS] test_revertingTransferFromBubblesErrorAndPreservesQueue() (gas: 832046)\n[PASS] test_tipRequiresBothOneBpsOfAgeAndOneWholeTipStep() (gas: 1226003)\n[PASS] test_tipTransferFailureUndoesBurnPacketFeesAndEveryQueueDebit() (gas: 1919714)\n[PASS] test_zeroCreditsDoNotCallTokenEmitPointsOrResetAnAgedClock() (gas: 1209458)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 818.50ms (1.61s CPU time)\n\nRan 19 tests for test/StackerEdges.t.sol:StackerEdgesTest\n[PASS] testFuzz_credit_pausedAlwaysRevertsAndMovesNothing(address,uint256) (runs: 1000, μ: 234706, ~: 234498)\nLogs:\n  Bound result 7\n\n[PASS] testFuzz_credit_repeatedCyclesExtractNoDust(uint256,uint8) (runs: 1000, μ: 1557643, ~: 1371088)\nLogs:\n  Bound result 9\n\n[PASS] testFuzz_credit_shortBalanceAlwaysReverts(uint256,uint256) (runs: 1000, μ: 388852, ~: 388806)\nLogs:\n  Bound result 10564554438645740053423\n  Bound result 7526129439458043994061\n\n[PASS] testFuzz_credit_thenRedeem_noFreeProfit(uint256,uint256,uint256) (runs: 1000, μ: 742366, ~: 761902)\nLogs:\n  Bound result 3600\n  Bound result 5222\n  Bound result 15523826358714172964865\n\n[PASS] testFuzz_credit_traderValueWithinOneShareOfAmount(uint256,uint256,uint256) (runs: 1000, μ: 682838, ~: 689000)\nLogs:\n  Bound result 3600\n  Bound result 5222\n  Bound result 15523826358714172964865\n\n[PASS] testFuzz_credit_zeroSharesGuardTracksVaultPreview(uint256,uint256) (runs: 1000, μ: 493155, ~: 510594)\nLogs:\n  Bound result 2536994029232965130\n  Bound result 554438645740053423\n\n[PASS] test_credit_allowanceConsumedExactly_secondCallReverts() (gas: 615815)\n[PASS] test_credit_astronomicalButRepresentable() (gas: 365250)\n[PASS] test_credit_balanceConsumedExactly_secondCallReverts() (gas: 591245)\n[PASS] test_credit_eventMatchesReturnAndBalanceDeltaAtNonUnitPrice() (gas: 662927)\n[PASS] test_credit_maxUint_revertsCleanlyInVaultMath() (gas: 238919)\n[PASS] test_credit_oneWei() (gas: 361849)\n[PASS] test_credit_pausedBeatsShortAllowance_nothingPulled() (gas: 468574)\n[PASS] test_credit_projectIsTrader_countedOnBothSides() (gas: 326778)\n[PASS] test_credit_reentrancyFromVaultIsBlocked() (gas: 737091)\n[PASS] test_credit_zeroAmountWhilePaused_returnsZeroWithoutTouchingVault() (gas: 91175)\n[PASS] test_credit_zeroTraderWhilePaused_stillZeroTrader() (gas: 89528)\n[PASS] test_credit_zeroTraderWithShortAllowance_stillZeroTrader() (gas: 285166)\n[PASS] test_strayImdInStacker_isNeverSpentByCredit() (gas: 522405)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 814.75ms (3.19s CPU time)\n\nRan 2 tests for test/ProjectRegistryInvariant.t.sol:ProjectRegistryInvariantTest\n[PASS]\nProjectRegistryInvariantTest invariants:\n[PASS] invariant_holdsOnlyOpenBonds\n[PASS] invariant_listingCounts\n[PASS] invariant_recordsConsistent\n ProjectRegistryInvariantTest invariants (runs: 64, calls: 2048, reverts: 0)\n\n╭-----------------+-------------------+-------+---------+----------╮\n| Contract        | Selector          | Calls | Reverts | Discards |\n+==================================================================+\n| RegistryHandler | answer            | 259   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | applyFor          | 280   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | challengeFor      | 248   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | completeAndExpire | 231   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | expireStale       | 260   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | failFor           | 245   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | handOver          | 277   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | passTime          | 248   | 0       | 0        |\n╰-----------------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 97\n  Bound result 14445\n  Bound result 85\n  Bound result 48879\n  Bound result 30000\n  Bound result 15\n  Bound result 10203\n\n[PASS] test_handlerReachesEveryOutcome() (gas: 18968878)\nLogs:\n  Bound result 50\n  Bound result 25\n  Bound result 100\n  Bound result 172800\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 867.75ms (862.02ms CPU time)\n\nRan 2 tests for test/StackerInvariantExtended.t.sol:StackerInvariantExtendedTest\n[PASS]\nStackerInvariantExtendedTest invariants:\n[PASS] invariant_imdSupplyConservation\n[PASS] invariant_pauseAndOwnershipStateMachine\n[PASS] invariant_stackerHoldsNothing\n[PASS] invariant_stackerTotals\n[PASS] invariant_vaultConservation\n[PASS] invariant_vaultSolvent\n StackerInvariantExtendedTest invariants (runs: 128, calls: 6144, reverts: 0)\n\n╭-----------------+----------------+-------+---------+----------╮\n| Contract        | Selector       | Calls | Reverts | Discards |\n+===============================================================+\n| ExtendedHandler | advance        | 502   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | credit         | 478   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | creditTiny     | 506   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | depositDirect  | 461   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | donate         | 450   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | faucet         | 459   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | redeem         | 472   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | renounce       | 440   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | rescue         | 484   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | setAllowance   | 469   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | togglePause    | 472   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | transferShares | 449   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | withdraw       | 502   | 0       | 0        |\n╰-----------------+----------------+-------+---------+----------╯\n\nLogs:\n  Bound result 523826358714172964864\n  Bound result 7802\n  Bound result 16355\n  Bound result 9990000000000000000000\n  Bound result 38437299515695226175692\n  Bound result 1560\n  Bound result 14076\n  Bound result 616630308160083109314\n  Bound result 155047\n  Bound result 8\n  Bound result 10000000000000000\n  Bound result 7602\n  Bound result 1000000000000\n  Bound result 10\n  Bound result 2452\n  Bound result 10\n  Bound result 2593\n  Bound result 10000000000000000007\n  Bound result 98\n  Bound result 18741\n  Bound result 1\n  Bound result 25500000000000000000\n  Bound result 1\n  Bound result 300000000000000000000\n  Bound result 912083\n  Bound result 1047\n  Bound result 206866\n  Bound result 10\n  Bound result 2287250\n  Bound result 3697\n\n[PASS] test_handlerReachesEveryCreditOutcome() (gas: 4540803)\nLogs:\n  Bound result 1000000000000000000\n  Bound result 5\n  Bound result 100000000000000000000\n  Bound result 1\n  Bound result 50000000000000000000\n  Bound result 7\n  Bound result 24000000000000000000000\n  Bound result 100000000000000000000\n  Bound result 10000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 372757101\n  Bound result 684498244\n  Bound result 1000000000000000000\n  Bound result 2949193105425070115\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 3.88s (3.87s CPU time)\n\nRan 3 tests for test/RegistryAccountingInvariant.t.sol:RegistryAccountingInvariantTest\n[PASS]\nRegistryAccountingInvariantTest invariants:\n[PASS] invariant_eachActorGetsExactlyTheirEntitlement\n[PASS] invariant_requestsAndListingsMatchIndependentHistory\n RegistryAccountingInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭---------------------------+----------------------+-------+---------+----------╮\n| Contract                  | Selector             | Calls | Reverts | Discards |\n+===============================================================================+\n| RegistryAccountingHandler | ask                  | 1760  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | donate               | 1796  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | expire               | 1753  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | handOver             | 1860  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | passTime             | 1895  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | reprice              | 1833  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | settle               | 1846  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | unauthorizedOrReplay | 1821  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | unsafeChallenge      | 1820  | 0       | 0        |\n╰---------------------------+----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 15844\n  Bound result 97\n  Bound result 3688193971\n  Bound result 18397\n  Bound result 27\n  Bound result 3907\n  Bound result 469\n  Bound result 44\n  Bound result 3774\n  Bound result 75850\n  Bound result 4\n  Bound result 564\n  Bound result 20414\n  Bound result 25\n  Bound result 32\n  Bound result 1504\n  Bound result 37\n  Bound result 1\n  Bound result 330483500089320296\n  Bound result 3964873043139\n  Bound result 4957\n  Bound result 1\n  Bound result 48077\n  Bound result 1\n  Bound result 1462\n  Bound result 24\n  Bound result 27780191835211298\n  Bound result 171238\n  Bound result 1\n  Bound result 100\n  Bound result 791112144\n  Bound result 1297\n  Bound result 22380\n  Bound result 165764\n  Bound result 1\n  Bound result 980477304808868910\n  Bound result 1710\n\n[PASS] test_handlerReachesAllPayoutsAndChecksAfterEachTransition() (gas: 40458439)\nLogs:\n  Bound result 25\n  Bound result 1\n  Bound result 100\n  Bound result 0\n  Bound result 50\n  Bound result 0\n  Bound result 50\n  Bound result 1\n  Bound result 50\n  Bound result 0\n  Bound result 50\n  Bound result 2\n  Bound result 50\n  Bound result 3\n  Bound result 50\n  Bound result 4\n  Bound result 50\n  Bound result 172800\n  Bound result 1\n  Bound result 0\n  Bound result 50\n  Bound result 123\n  Bound result 0\n  Bound result 50\n  Bound result 1\n  Bound result 50\n\n[PASS] test_handlerRetainsBeneficiaryPinAcrossHandoffsAndRelisting() (gas: 16504440)\nLogs:\n  Bound result 50\n  Bound result 0\n  Bound result 0\n  Bound result 50\n  Bound result 500000000000000000\n  Bound result 86400\n  Bound result 1\n  Bound result 50\n  Bound result 1\n  Bound result 100\n  Bound result 0\n  Bound result 50\n  Bound result 0\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 5.11s (5.13s CPU time)\n\nRan 4 tests for test/RegistryCooldownBoundary.t.sol:RegistryCooldownBoundaryTest\n[PASS] test_challengeExactlyAtCooldown_succeeds() (gas: 6106573)\n[PASS] test_challengeOneSecondBeforeCooldown_reverts() (gas: 3201501)\n[PASS] test_constructor_rejectsCooldownAboveMax() (gas: 14194)\n[PASS] test_keptChallenge_doesNotRestartCooldown() (gas: 9279267)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 5.12s (4.40ms CPU time)\n\nRan 2 tests for test/StackReceiverPendingInvariant.t.sol:StackReceiverPendingInvariantTest\n[PASS]\nStackReceiverPendingInvariantTest invariants:\n[PASS] invariant_countersCountOnlySuccessfulDeliveryOncePerSource\n[PASS] invariant_eachTraderReceivesOnlyTheirFundedAllocation\n[PASS] invariant_pendingAndUnsolicitedIMDAreFullyBacked\n StackReceiverPendingInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭------------------------+----------+-------+---------+----------╮\n| Contract               | Selector | Calls | Reverts | Discards |\n+================================================================+\n| ReceiverPendingHandler | arrive   | 3340  | 0       | 0        |\n|------------------------+----------+-------+---------+----------|\n| ReceiverPendingHandler | compose  | 3254  | 0       | 0        |\n|------------------------+----------+-------+---------+----------|\n| ReceiverPendingHandler | donate   | 3183  | 0       | 0        |\n|------------------------+----------+-------+---------+----------|\n| ReceiverPendingHandler | pause    | 3298  | 0       | 0        |\n|------------------------+----------+-------+---------+----------|\n| ReceiverPendingHandler | reject   | 3309  | 0       | 0        |\n╰------------------------+----------+-------+---------+----------╯\n\nLogs:\n  Bound result 3\n  Bound result 4\n  Bound result 1\n  Bound result 5\n  Bound result 312\n  Bound result 1\n  Bound result 6\n  Bound result 2376452954\n  Bound result 1\n  Bound result 6782\n  Bound result 6\n  Bound result 6446\n  Bound result 18382\n  Bound result 16950\n  Bound result 6\n  Bound result 5212\n  Bound result 2\n  Bound result 6957\n  Bound result 1795011124002376460048\n  Bound result 1155\n  Bound result 20510\n  Bound result 507179473218879397750532\n  Bound result 5\n  Bound result 6\n  Bound result 1\n  Bound result 3\n  Bound result 239406806127800940660985\n  Bound result 17661\n  Bound result 155930272711752398\n\n[PASS] test_handlerReachesRetriesMixedPayoutsReplayAndOutOfOrderDelivery() (gas: 4267751)\nLogs:\n  Bound result 3\n  Bound result 4\n  Bound result 7000000000000000000\n  Bound result 6\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 5.96s (5.96s CPU time)\n\nRan 3 tests for test/StackerHoldInvariant.t.sol:StackerHoldInvariantTest\n[PASS]\nStackerHoldInvariantTest invariants:\n[PASS] invariant_balancesAndHistoricalCashbackAreConserved\n[PASS] invariant_holdFollowsSharesAndCannotBeClearedByTimestamp\n StackerHoldInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭--------------------+----------------------+-------+---------+----------╮\n| Contract           | Selector             | Calls | Reverts | Discards |\n+========================================================================+\n| StackerHoldHandler | advance              | 2043  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | credit               | 2059  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | donate               | 2064  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | exit                 | 2051  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | probeRenouncedPowers | 2097  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | transferShares       | 2060  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | unauthorizedExit     | 1986  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | zeroAction           | 2024  | 0       | 0        |\n╰--------------------+----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 9835513476253348060722\n  Bound result 177000\n  Bound result 6787281008504784215233\n  Bound result 0\n  Bound result 378331\n  Bound result 27926008363454363927\n  Bound result 9999999999999999999998\n  Bound result 0\n  Bound result 8\n  Bound result 800000000000000000\n  Bound result 6\n  Bound result 25500000000000000000\n  Bound result 14060\n  Bound result 30\n  Bound result 0\n  Bound result 549\n  Bound result 10\n  Bound result 2535\n  Bound result 9699559653194653098387\n  Bound result 0\n  Bound result 5\n  Bound result 250000\n  Bound result 1230\n  Bound result 201\n  Bound result 13275\n  Bound result 2\n  Bound result 4\n  Bound result 2461\n  Bound result 512\n  Bound result 0\n  Bound result 53059364331971396258\n  Bound result 66\n  Bound result 3484782353\n  Bound result 126\n  Bound result 831019864853301887150\n  Bound result 357296\n  Bound result 9900\n  Bound result 2\n  Bound result 259200\n  Bound result 161\n\n[PASS] test_handlerExercisesHeldDelegatedAndMatureExits() (gas: 3851200)\nLogs:\n  Bound result 10000000000000000000\n  Bound result 2000000000000000000000000\n  Bound result 1000000000000000000000000\n  Bound result 1\n  Bound result 1000000000000000000\n  Bound result 1\n  Bound result 1000000000000000000\n  Bound result 1000000000000000000000000\n  Bound result 1000000000000000000\n  Bound result 1000000000000000000000000\n  Bound result 1000000000000000000000000\n\n[PASS] test_handlerExercisesZeroSharesFailureBeforeInitialization() (gas: 2872846)\nLogs:\n  Bound result 1000000000000000000\n  Bound result 1\n  Bound result 10000000000000000000\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 6.45s (6.44s CPU time)\n\nRan 2 tests for test/RemoteStackerStateful.t.sol:RemoteStackerStatefulTest\n[PASS]\nRemoteStackerStatefulTest invariants:\n[PASS] invariant_burnTipsAndNativeFeesMatchActualTransfers\n[PASS] invariant_everyRecipientAndProjectRetainsItsOwnAccounting\n RemoteStackerStatefulTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭--------------------+--------------+-------+---------+----------╮\n| Contract           | Selector     | Calls | Reverts | Discards |\n+================================================================+\n| RemoteQueueHandler | credit       | 2381  | 0       | 0        |\n|--------------------+--------------+-------+---------+----------|\n| RemoteQueueHandler | donate       | 2264  | 0       | 0        |\n|--------------------+--------------+-------+---------+----------|\n| RemoteQueueHandler | elapse       | 2323  | 0       | 0        |\n|--------------------+--------------+-------+---------+----------|\n| RemoteQueueHandler | failFlush    | 2416  | 0       | 0        |\n|--------------------+--------------+-------+---------+----------|\n| RemoteQueueHandler | flush        | 2307  | 0       | 0        |\n|--------------------+--------------+-------+---------+----------|\n| RemoteQueueHandler | register     | 2390  | 0       | 0        |\n|--------------------+--------------+-------+---------+----------|\n| RemoteQueueHandler | rejectCredit | 2303  | 0       | 0        |\n╰--------------------+--------------+-------+---------+----------╯\n\nLogs:\n  Bound result 163232\n  Bound result 62655\n  Bound result 0\n  Bound result 19570\n  Bound result 23331625826942562047\n  Bound result 24138\n  Bound result 11066\n  Bound result 1000000000000000000\n  Bound result 13\n  Bound result 1000000000000000000\n  Bound result 4776\n  Bound result 185593\n  Bound result 45\n  Bound result 149116\n  Bound result 741105178168243183\n  Bound result 22\n  Bound result 1000000000000000000\n  Bound result 1000000000000000000\n  Bound result 8107\n  Bound result 9369\n  Bound result 1000000000000000000\n  Bound result 193383\n  Bound result 1754\n  Bound result 247525\n  Bound result 3512579866\n  Bound result 1000000000000000000\n  Bound result 1000000000000000000\n  Bound result 1000000000000000000\n  Bound result 27\n  Bound result 34\n  Bound result 11\n  Bound result 6\n  Bound result 7282\n  Bound result 48\n  Bound result 1000000000000000000\n  Bound result 52784\n  Bound result 9127\n  Bound result 1000000000000000000\n  Bound result 1000000000000000000\n  Bound result 2282\n  Bound result 153410\n  Bound result 999999999999999999999998\n  Bound result 19438\n  Bound result 6401\n  Bound result 17110\n  Bound result 1791068014\n  Bound result 1019\n\n[PASS] test_handlerReachesRoutingDustDonationsFailuresAndPaidFlushes() (gas: 5799198)\nLogs:\n  Bound result 7000000000000000000\n  Bound result 100000000000000000000\n  Bound result 200000000000000000000\n  Bound result 3000000000000000000\n  Bound result 9000000000000000000\n  Bound result 1000000000000000000\n  Bound result 1000000000000000000\n  Bound result 1000000000000000000\n  Bound result 4000000000000000000\n  Bound result 43200\n  Bound result 50\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 10.21s (10.21s CPU time)\n\nRan 51 test suites in 10.21s (48.30s CPU time): 322 tests passed, 0 failed, 28 skipped (350 total tests)\n","passed":true},{"durationMs":92,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"ProjectRegistry.applyListing(address,string,string,uint16,address)\",\"ProjectRegistry.challenge(address,string)\",\"ProjectRegistry.challengeForBeneficiary(address,string,address)\",\"ProjectRegistry.claimBond(address)\",\"ProjectRegistry.expire(address)\",\"ProjectRegistry.onOracleFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"ProjectRegistry.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"ProjectRegistry.setBeneficiary(address,address)\",\"RemoteStacker.credit(address,uint256)\",\"RemoteStacker.flush(address[])\",\"RemoteStacker.setEthereumRecipient(address)\",\"StackReceiver.lzCompose(address,bytes32,bytes,address,bytes)\",\"Stacker.credit(address,uint256)\"],\"files\":{\".github/ISSUE_TEMPLATE/listing-application.yml\":88,\".gitignore\":5,\"ADAPTATION.md\":60,\"NEXT_SESSION.md\":71,\"README.md\":317,\"app.js\":2393,\"docs/data-api.md\":97,\"docs/design.md\":323,\"docs/explainer.html\":247,\"docs/history.md\":455,\"docs/launches.md\":51,\"docs/listing.md\":97,\"docs/panel-rules-v2-rehearsal-body.json\":28,\"docs/panel-rules-v2.md\":90,\"docs/plea-handoff.md\":73,\"docs/plea-test-run-2.md\":34,\"favicon.svg\":11,\"foundry.toml\":26,\"index.html\":171,\"jobs/1-sepolia-launch.md\":23,\"jobs/10-sepolia-v4-launch.md\":13,\"jobs/11-sepolia-v5-launch.md\":13,\"jobs/12-mainnet-registry-launch.md\":14,\"jobs/13-sepolia-v6-launch.md\":13,\"jobs/14-mainnet-stackreceiver-launch.md\":13,\"jobs/15-robinhood-remotestacker-launch.md\":12,\"jobs/2-sepolia-site.md\":18,\"jobs/3-list-plea.md\":21,\"jobs/4-mainnet-launch.md\":16,\"jobs/5-sepolia-v2-launch.md\":12,\"jobs/5-sepolia-v2-site.md\":10,\"jobs/6-sepolia-v2-site.md\":30,\"jobs/7-sepolia-v2-site-pages.md\":22,\"jobs/8-sepolia-v3-launch.md\":13,\"jobs/9-sepolia-v3-relaunch.md\":13,\"jobs/requests/10-sepolia-v4-launch.json\":31,\"jobs/requests/11-sepolia-v5-launch.json\":31,\"jobs/requests/12-mainnet-registry-launch.json\":31,\"jobs/requests/13-sepolia-v6-launch.json\":31,\"jobs/requests/14-mainnet-stackreceiver-launch.json\":31,\"jobs/requests/3-list-plea.json\":10,\"jobs/requests/4-mainnet-launch.json\":31,\"jobs/requests/5-sepolia-v2-launch-only.json\":31,\"jobs/requests/5-sepolia-v2-workflow.json\":50,\"jobs/requests/6-sepolia-v2-site.json\":15,\"jobs/requests/7-sepolia-v2-site-pages.json\":15,\"jobs/requests/8-sepolia-v3-launch.json\":31,\"jobs/requests/9-sepolia-v3-relaunch.json\":31,\"launch.json\":15,\"listings/sepolia.json\":1,\"llms.txt\":48,\"remappings.txt\":3,\"src/ProjectRegistry.sol\":713,\"src/Stacker.sol\":104,\"src/multichain/LayerZero.sol\":112,\"src/multichain/RemoteStacker.sol\":314,\"src/multichain/StackReceiver.sol\":157,\"src/oracle/OracleAttestation.sol\":265,\"style.css\":1666,\"test/ADVERSARIAL_COVERAGE.md\":42,\"test/Base.t.sol\":58,\"test/Deployment.t.sol\":194,\"test/FactoryRehearsal.t.sol\":47,\"test/MAINNET_TEST_COVERAGE.md\":45,\"test/MainnetFork.t.sol\":141,\"test/MainnetLaunchRegression.t.sol\":99,\"test/MultichainFlow.t.sol\":184,\"test/OracleConsumerConformance.t.sol\":140,\"test/ProjectRegistry.t.sol\":596,\"test/ProjectRegistryInvariant.t.sol\":238,\"test/REMOTE_STACKER_TEST_COVERAGE.md\":45,\"test/RegistryAccountingInvariant.t.sol\":552,\"test/RegistryAdversarial.t.sol\":446,\"test/RegistryApplicantGate.t.sol\":166,\"test/RegistryAuditRegression.t.sol\":157,\"test/RegistryBodyProperties.t.sol\":224,\"test/RegistryBondOwed.t.sol\":290,\"test/RegistryCallbackGas.t.sol\":111,\"test/RegistryCooldownBoundary.t.sol\":44,\"test/RegistryHandoffInterval.t.sol\":235,\"test/RegistryMainnetFork.t.sol\":110,\"test/RegistryPolicyRevision.t.sol\":50,\"test/RegistryRevisionRegression.t.sol\":418,\"test/RegistrySelfBeneficiary.t.sol\":148,\"test/RegistrySepoliaFork.t.sol\":113,\"test/RemoteStacker.t.sol\":424,\"test/RemoteStackerAdversarial.t.sol\":560,\"test/RemoteStackerAuditRegression.t.sol\":182,\"test/RemoteStackerLaunch.t.sol\":105,\"test/RemoteStackerRefundFork.t.sol\":96,\"test/RemoteStackerStateful.t.sol\":522,\"test/RobinhoodFork.t.sol\":184,\"test/SepoliaFork.t.sol\":141,\"test/StackReceiver.t.sol\":344,\"test/StackReceiverAdversarial.t.sol\":321,\"test/StackReceiverCoverage.md\":61,\"test/StackReceiverLaunch.t.sol\":118,\"test/StackReceiverMainnetFork.t.sol\":255,\"test/StackReceiverPendingInvariant.t.sol\":331,\"test/Stacker.t.sol\":423,\"test/StackerAuditRegression.t.sol\":99,\"test/StackerDependencyFailures.t.sol\":288,\"test/StackerEdges.t.sol\":391,\"test/StackerExternalCalls.t.sol\":257,\"test/StackerGas.t.sol\":186,\"test/StackerHoldInvariant.t.sol\":346,\"test/StackerInvariant.t.sol\":148,\"test/StackerInvariantExtended.t.sol\":495,\"test/TraderResolution.t.sol\":229,\"test/TrialVenue.t.sol\":147,\"test/VaultTrustRegression.t.sol\":41,\"test/helpers/StackReceiverFixture.sol\":101,\"test/mocks/MockIntake.sol\":108,\"test/mocks/MockOFT.sol\":138,\"test/mocks/QueuedComposeEndpoint.sol\":40,\"test/mocks/RemoteAdversarialOFT.sol\":148,\"test/mocks/TestIMD.sol\":41,\"test/mocks/TestSIMD.sol\":178,\"test/trial/SelfCredit.sol\":35,\"test/trial/TrialVenue.sol\":222,\"tools/site-check/.gitignore\":2,\"tools/site-check/README.md\":35,\"tools/site-check/behavior.mjs\":124,\"tools/site-check/flows.mjs\":173,\"tools/site-check/fork-answer.sh\":27,\"tools/site-check/layout.mjs\":88,\"tools/site-check/lib.mjs\":181,\"tools/site-check/package-lock.json\":22,\"tools/site-check/package.json\":9,\"tools/site-check/refresh-bug.mjs\":50,\"tools/site-check/trial.mjs\":158,\"tools/snapshot/build.mjs\":291,\"tools/snapshot/chains.json\":29,\"tools/snapshot/test.sh\":57},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"462b50f056888571dd64c23399eaae93ef56790df5185cf322a347c2ab1c585e","verifiedTreeHash":"60abb2ef67c6084672d2076889d221567ae004b8","verifierVersion":"0.1.0+327e1e9f"},{"checks":[{"durationMs":16732,"exitCode":0,"name":"build","output":"Compiling 108 files with Solc 0.8.26\nSolc 0.8.26 finished in 16.61s\nCompiler run successful!\n","passed":true},{"durationMs":6619,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 2 tests for test/MainnetLaunchRegression.t.sol:MainnetLaunchRegressionTest\n[SKIP] test_manifestCreate2WorksWithoutDependenciesOrInitialization() (gas: 0)\n[SKIP] test_manifestPinsExactlyOneMainnetStacker() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 2 skipped; finished in 521.67µs (316.18µs CPU time)\n\nRan 5 tests for test/MainnetFork.t.sol:MainnetForkTest\n[SKIP] test_fork_creditNewThenRepeatTrader() (gas: 0)\n[SKIP] test_fork_firstCreditNeedsInitializationGas() (gas: 0)\n[SKIP] test_fork_liveFacts() (gas: 0)\n[SKIP] test_fork_oneBlockHoldThenRedeem() (gas: 0)\n[SKIP] test_fork_readmeBudgetFundsColdFirstCredit() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 5 skipped; finished in 700.78µs (70.67µs CPU time)\n\nRan 1 test for test/FactoryRehearsal.t.sol:FactoryRehearsalTest\n[PASS] test_sepoliaFactoryDeploysBothInOrderOnAnEmptyChain() (gas: 419613)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 906.83µs (766.60µs CPU time)\n\nRan 1 test for test/RegistrySepoliaFork.t.sol:RegistrySepoliaForkTest\n[SKIP] test_sepolia_applyPaysTheRealIntake_thenAnswerLists() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 118.50µs (18.34µs CPU time)\n\nRan 5 tests for test/RobinhoodFork.t.sol:RobinhoodForkTest\n[SKIP] test_fork_OFTPeerRemovalBlocksTheOnlyExitAtomically() (gas: 0)\n[SKIP] test_fork_fiftyTradersQuoteAndFlush() (gas: 0)\n[SKIP] test_fork_flushBurnsHereAndTheEndpointAcceptsTheMessage() (gas: 0)\n[SKIP] test_fork_liveFacts() (gas: 0)\n[SKIP] test_fork_tooLittleFeeChangesNothing() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 5 skipped; finished in 587.02µs (78.66µs CPU time)\n\nRan 5 tests for test/SepoliaFork.t.sol:SepoliaForkTest\n[SKIP] test_sepolia_creditEventAndTotals() (gas: 0)\n[SKIP] test_sepolia_liveFacts() (gas: 0)\n[SKIP] test_sepolia_liveStackerValidCreditMatchesMainnetCandidate() (gas: 0)\n[SKIP] test_sepolia_mainnetCandidateRejectsLegacyUnreachableRecipients() (gas: 0)\n[SKIP] test_sepolia_pausedVaultRevertsThenRecovers() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 5 skipped; finished in 720.37µs (90.14µs CPU time)\n\nRan 2 tests for test/VaultTrustRegression.t.sol:VaultTrustRegressionTest\n[PASS] test_dustHoldThroughStackerAndDirectVault() (gas: 910632)\n[PASS] test_vaultOwnerCanSweepCashback() (gas: 637955)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 2.22ms (1.68ms CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdDelistingTest\n[PASS] test_coldDelistedChallenge_deliveredWithin200k() (gas: 171507)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.50ms (139.50µs CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdRejectionTest\n[PASS] test_coldApplicationNo_deliveredWithin200k() (gas: 156227)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.91ms (306.95µs CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdListingTest\n[PASS] test_coldApplicationYes_deliveredWithin200k() (gas: 162585)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.60ms (236.48µs CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdDefenseTest\n[PASS] test_coldDefendedChallenge_deliveredWithin200k() (gas: 190510)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.85ms (130.36µs CPU time)\n\nRan 7 tests for test/TraderResolution.t.sol:TraderResolutionTest\n[PASS] test_directNoCodeSenderCanBeResolvedWithoutTxOrigin() (gas: 303966)\n[PASS] test_emptyHookDataResolvesActiveMsgSenderAndCannotBeSwept() (gas: 381420)\n[PASS] test_hookDataTakesPrecedenceAndSupportsContractWallets() (gas: 477363)\n[PASS] test_invalidHookDataPaysPlainImdToKnownCallerNeverInvalidRecipient() (gas: 882426)\n[PASS] test_legacyEmptyHookDataCreditsRouterAndAnyoneCanSweep() (gas: 433080)\n[PASS] test_pausedVaultPaysPlainImdToResolvedMsgSender() (gas: 301439)\n[PASS] test_unknownContractOrInvalidMsgSenderNeverBecomesTheRecipient() (gas: 522893)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 4.14ms (2.46ms CPU time)\n\nRan 9 tests for test/TrialVenue.t.sol:TrialVenueTest\n[PASS] test_buyCreditsHalfTheFeeAndBurnsTheOtherHalf() (gas: 434566)\n[PASS] test_gasIsCheckedBeforeTheCredit() (gas: 124458)\n[PASS] test_invalidTradersNeverResolve() (gas: 65332)\n[PASS] test_ownerCanOnlySeedOnce() (gas: 56951)\n[PASS] test_pausedVaultPaysPlainImd() (gas: 305091)\n[PASS] test_registryReadsTheOwner() (gas: 17255)\n[PASS] test_routerCallerResolvesToItsActiveCaller() (gas: 784096)\n[PASS] test_sellCreditsHalfTheFeeAndBurnsTheOtherHalf() (gas: 588348)\n[PASS] test_unknownContractCallerGetsNoCashbackItIsBurned() (gas: 572622)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 4.90ms (2.75ms CPU time)\n\nRan 1 test for test/RegistryMainnetFork.t.sol:RegistryMainnetForkTest\n[SKIP] test_mainnet_ownerAppliesToTheRealIntake_listedThenDefended() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 263.62µs (13.76µs CPU time)\n\nRan 2 tests for test/RegistryPolicyRevision.t.sol:RegistryPolicyRevisionTest\n[PASS] test_applicationAndChallengeRequireResolvedTraderAndExcludeLpFees() (gas: 6829118)\n[PASS] test_lpRebateDefeatsGrossFeeFloor() (gas: 5991)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.63ms (1.06ms CPU time)\n\nRan 4 tests for test/RegistryCooldownBoundary.t.sol:RegistryCooldownBoundaryTest\n[PASS] test_challengeExactlyAtCooldown_succeeds() (gas: 6106573)\n[PASS] test_challengeOneSecondBeforeCooldown_reverts() (gas: 3201501)\n[PASS] test_constructor_rejectsCooldownAboveMax() (gas: 14194)\n[PASS] test_keptChallenge_doesNotRestartCooldown() (gas: 9279267)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 5.25ms (4.05ms CPU time)\n\nRan 5 tests for test/OracleConsumerConformance.t.sol:OracleConsumerConformanceTest\n[PASS] test_acceptsAFreshSignatureFromTheVectorKey() (gas: 181781)\n[PASS] test_callbackSelectorIsCanonical() (gas: 3671)\n[PASS] test_digestMatchesTheProtocol() (gas: 13686)\n[PASS] test_protocolSignaturePassesVerificationBeforePanelPolicy() (gas: 69545)\n[PASS] test_tamperingTheProtocolVectorFailsSignatureVerification() (gas: 64569)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 8.56ms (1.25ms CPU time)\n\nRan 2 tests for test/StackReceiverLaunch.t.sol:StackReceiverLaunchTest\n[SKIP] test_manifestFactoryDeploysOneContractWithNoExternalConstructorCalls() (gas: 0)\n[SKIP] test_manifestPinsExactlyTheMainnetReceiver() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 2 skipped; finished in 295.58µs (154.13µs CPU time)\n\nRan 5 tests for test/StackReceiverMainnetFork.t.sol:StackReceiverMainnetForkTest\n[SKIP] test_fork_arrivalDepositsForEveryTrader() (gas: 0)\n[SKIP] test_fork_composeIsDeliveredOnceAndOnlyFromTheEndpoint() (gas: 0)\n[SKIP] test_fork_composeRejectsValueWithoutConsumingTheQueue() (gas: 0)\n[SKIP] test_fork_gasBudgetCoversOneTenAndFiftyTraders() (gas: 0)\n[SKIP] test_fork_liveFacts() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 5 skipped; finished in 1.52ms (146.65µs CPU time)\n\nRan 1 test for test/RemoteStackerLaunch.t.sol:RemoteStackerLaunchTest\n[PASS] test_manifestDeploysOnlyRemoteStackerWithoutExternalConstructorCalls() (gas: 6022720)\nLogs:\n  RemoteStacker runtime bytes: 8182\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 26.24ms (26.07ms CPU time)\n\nRan 8 tests for test/RegistryBondOwed.t.sol:RegistryBondOwedTest\n[PASS] test_blockedBeneficiary_signedYes_defendsAndOwesBond() (gas: 1111540)\n[PASS] test_blockedChallenger_expireClearsAndOwesBond() (gas: 939032)\n[PASS] test_blockedChallenger_failureClearsAndOwesBond() (gas: 1232683)\n[PASS] test_blockedChallenger_signedNo_delistsAndOwesBond() (gas: 1219736)\n[PASS] test_claimBond_refusesZeroAddressAndNothingOwed() (gas: 67159)\n[PASS] test_falseReturningToken_owesBond() (gas: 1052745)\n[PASS] test_owedBondsAccumulate() (gas: 1421953)\n[PASS] test_unblocked_paysAtOnce() (gas: 950815)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 37.53ms (6.61ms CPU time)\n\nRan 6 tests for test/RemoteStackerAuditRegression.t.sol:RemoteStackerAuditRegressionTest\n[PASS] testFuzz_clockRounding_doesNotChargeForFreshAge(uint96,uint96,uint32) (runs: 256, μ: 424607, ~: 421654)\nLogs:\n  Bound result 503\n  Bound result 1089\n  Bound result 172800\n\n[PASS] test_bridgeRefusal_preservesCustodyAndContinuesAcceptingCredits() (gas: 1295421)\n[PASS] test_clockRounding_smallFreshCreditCannotInheritTheFullTip() (gas: 1269459)\n[PASS] test_clockRounding_uncappedBalanceAlsoFavorsTrader() (gas: 423477)\n[PASS] test_credit_refusesEthereumTokenAndEndpointBeforePullingFunds() (gas: 308594)\n[PASS] test_setEthereumRecipient_refusesEthereumTokenAndEndpoint() (gas: 400356)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 39.48ms (39.60ms CPU time)\n\nRan 3 tests for test/RegistryCallbackGas.t.sol:RegistryColdFailureTest\n[PASS] test_coldChallengeAfterDeadline_canExpire() (gas: 128213)\n[PASS] test_coldDisagreedChallenge_deliveredWithin200k() (gas: 140179)\n[PASS] test_coldRefusedChallenge_deliveredWithin200k() (gas: 140262)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 52.28ms (323.00µs CPU time)\n\nRan 21 tests for test/RemoteStacker.t.sol:RemoteStackerTest\n[PASS] testFuzz_flush_conservesEveryWei(uint96,uint96,uint32) (runs: 256, μ: 612570, ~: 305079)\nLogs:\n  Bound result 4294967296\n  Bound result 3828840556\n\n[PASS] testFuzz_tip_neverAboveTwoPercent(uint64,uint96) (runs: 256, μ: 182649, ~: 182651)\nLogs:\n  Bound result 291793625716911010643\n\n[PASS] test_constructor_wiringWithoutExternalCalls() (gas: 3842)\n[PASS] test_credit_clockIsAmountWeighted() (gas: 292087)\n[PASS] test_credit_contractWalletPaidPlainUnlessRegistered() (gas: 665088)\n[PASS] test_credit_eip7702WalletGoesThroughTheQueue() (gas: 290204)\n[PASS] test_credit_queuesForPlainWallet() (gas: 226667)\n[PASS] test_credit_rejectsInvalidTraders() (gas: 172391)\n[PASS] test_credit_shortAllowanceOrBalanceReverts() (gas: 187984)\n[PASS] test_credit_zeroAmountMovesNothing() (gas: 58649)\n[PASS] test_flush_atMostFiftyRecipients() (gas: 85104)\n[PASS] test_flush_dustIsNeverTippedTwice() (gas: 875951)\n[PASS] test_flush_fiftyRecipients() (gas: 9487069)\n[PASS] test_flush_isAtomic_sendFailureChangesNothing() (gas: 425526)\n[PASS] test_flush_nothingToFlushReverts() (gas: 279365)\n[PASS] test_flush_sendsRoundedAmountsPaysTipAndRefundsExcess() (gas: 1082997)\n[PASS] test_flush_skipsEmptyAndDuplicateAndDustOnlyRecipients() (gas: 892843)\n[PASS] test_flush_traderCanFlushThemselvesAtOnce() (gas: 760986)\n[PASS] test_setEthereumRecipient_refusesInvalidAndIsPerCaller() (gas: 358628)\n[PASS] test_tip_growsLinearlyAndCapsAtTwoPercent() (gas: 249888)\n[PASS] test_tip_newCashbackNeverInheritsACappedClock() (gas: 296946)\nSuite result: ok. 21 passed; 0 failed; 0 skipped; finished in 52.30ms (57.89ms CPU time)\n\nRan 23 tests for test/ProjectRegistry.t.sol:ProjectRegistryTest\n[PASS] testFuzz_apply_nameIsSafeOrRefused(bytes) (runs: 256, μ: 407861, ~: 55837)\n[PASS] testFuzz_apply_rate(uint16) (runs: 256, μ: 394331, ~: 47867)\n[PASS] test_answer_freshnessAndPanelChecks() (gas: 3531117)\n[PASS] test_answer_mustBeSignedByTheOracleForThisContract() (gas: 3219851)\n[PASS] test_answer_onlyFromTheIntake_onlyForOurOpenRequest() (gas: 3229539)\n[PASS] test_apply_bodyIsTheOracleBody() (gas: 3317268)\n[PASS] test_apply_oneOpenQuestionAtATime_andNotWhenListed() (gas: 3227423)\n[PASS] test_apply_paysExactlyTheFeeAndAsks() (gas: 3117533)\n[PASS] test_apply_validation() (gas: 567226)\n[PASS] test_callbackOutOfGas_isRecoverableThroughExpire() (gas: 6062321)\n[PASS] test_challenge_defended_bondToBeneficiary_noNewCooldown() (gas: 6362238)\n[PASS] test_challenge_failureOrExpiry_returnsTheBond_projectStaysListed() (gas: 9363040)\n[PASS] test_challenge_lost_delistsFromThisBlock_bondBack() (gas: 9339341)\n[PASS] test_challenge_onlyListed_afterCooldown_oneAtATime() (gas: 6314280)\n[PASS] test_challenge_paysFeeAndBond_bodyNamesTheReason() (gas: 6469424)\n[PASS] test_constructor_rejectsZeroAddresses() (gas: 6519)\n[PASS] test_constructor_wiring() (gas: 74067)\n[PASS] test_expire_afterADay_orWhenTheIntakeCompletedWithoutAnAnswer() (gas: 6115895)\n[PASS] test_failure_clearsTheApplication_andNeverLists() (gas: 5990106)\n[PASS] test_failure_onlyFromTheIntake_onlyForOurOpenRequest() (gas: 3057732)\n[PASS] test_no_rejects_andTheProjectCanApplyAgain() (gas: 6171710)\n[PASS] test_setBeneficiary_onlyTheBeneficiaryOfAListedProject() (gas: 3319132)\n[PASS] test_yes_listsFromThisBlock() (gas: 3160454)\nSuite result: ok. 23 passed; 0 failed; 0 skipped; finished in 60.68ms (67.16ms CPU time)\n\nRan 5 tests for test/Deployment.t.sol:DeploymentTest\n[PASS] test_emptyChainRehearsal_constructorPasses() (gas: 25975)\n[PASS] test_launchManifest_knownShape() (gas: 19853)\n[PASS] test_multichain_emptyChainRehearsal_constructorsPass() (gas: 5728964)\n[PASS] test_registry_emptyChainRehearsal_constructorPasses() (gas: 8416629)\n[PASS] test_runtimeSizeAndNoEscapeOpcodes() (gas: 4294851)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 63.08ms (62.77ms CPU time)\n\nRan 16 tests for test/StackReceiver.t.sol:StackReceiverTest\n[PASS] testFuzz_delivery_mixedZeroAndPositiveShares(uint96,uint96,bool) (runs: 256, μ: 489381, ~: 489262)\nLogs:\n  Bound result 752\n  Bound result 906277593543950335\n\n[PASS] testFuzz_delivery_sumExactlyDelivered(uint96,uint96) (runs: 256, μ: 380791, ~: 380784)\n[PASS] test_constructor_wiringWithoutExternalCalls() (gas: 8112)\n[PASS] test_delivery_assetMismatchRefusesTheFirstDelivery() (gas: 1930170)\n[PASS] test_delivery_depositsForEachTraderAndKeepsNothing() (gas: 552622)\n[PASS] test_delivery_inconsistentPreviewRollsBackInsteadOfSpendingOtherFunds() (gas: 626160)\n[PASS] test_delivery_listMustAddUpToTheAmountReceived() (gas: 363345)\n[PASS] test_delivery_onlyFromTheEndpointAndOnlyForIMD() (gas: 439485)\n[PASS] test_delivery_pausedVaultPaysPlainIMD() (gas: 584380)\n[PASS] test_delivery_rejectsNativeValueAndCanRetryWithoutIt() (gas: 556396)\n[PASS] test_delivery_revertingDepositPaysOnlyThatTraderPlainIMD() (gas: 416475)\n[PASS] test_delivery_revertingPreviewPaysOnlyThatTraderPlainIMD() (gas: 400333)\n[PASS] test_delivery_strayIMDIsNeverSpent() (gas: 344430)\n[PASS] test_delivery_zeroAmountEntryIsSkipped() (gas: 304641)\n[PASS] test_delivery_zeroSharesPaysPlainIMDWithoutDepositing() (gas: 465715)\n[PASS] test_vault_zeroShareDepositStillConsumesAssets() (gas: 275682)\nSuite result: ok. 16 passed; 0 failed; 0 skipped; finished in 105.17ms (103.95ms CPU time)\n\nRan 3 tests for test/MultichainFlow.t.sol:MultichainFlowTest\n[PASS]\nMultichainFlowTest invariants:\n[PASS] invariant_receiverKeepsNothingAndVaultHoldsDeliveries\n[PASS] invariant_remoteStackerHoldsExactlyWhatIsWaiting\n MultichainFlowTest invariants (runs: 64, calls: 2048, reverts: 0)\n\n╭-------------------+----------+-------+---------+----------╮\n| Contract          | Selector | Calls | Reverts | Discards |\n+===========================================================+\n| MultichainHandler | credit   | 703   | 0       | 0        |\n|-------------------+----------+-------+---------+----------|\n| MultichainHandler | flush    | 669   | 0       | 0        |\n|-------------------+----------+-------+---------+----------|\n| MultichainHandler | pass     | 676   | 0       | 0        |\n╰-------------------+----------+-------+---------+----------╯\n\n[PASS] test_endToEnd_creditFlushDeliver() (gas: 1460013)\n[PASS] test_handlerReachesFlushes() (gas: 1419865)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 444.70ms (444.59ms CPU time)\n\nRan 1 test for test/StackerInvariant.t.sol:StackerInvariantTest\n[PASS]\nStackerInvariantTest invariants:\n[PASS] invariant_stackerHoldsNothing\n[PASS] invariant_totalsConsistent\n[PASS] invariant_vaultConservation\n StackerInvariantTest invariants (runs: 64, calls: 2048, reverts: 0)\n\n╭----------------+-------------+-------+---------+----------╮\n| Contract       | Selector    | Calls | Reverts | Discards |\n+===========================================================+\n| StackerHandler | advance     | 407   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | credit      | 434   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | donate      | 360   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | redeem      | 442   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | togglePause | 405   | 0       | 0        |\n╰----------------+-------------+-------+---------+----------╯\n\nLogs:\n  Bound result 729205602839880369949661\n  Bound result 1000000000000\n  Bound result 8\n  Bound result 10\n  Bound result 999990000000000000000000\n  Bound result 2592000\n  Bound result 13046\n  Bound result 944284506514834886437\n  Bound result 10\n  Bound result 10\n  Bound result 1000000\n  Bound result 4872\n  Bound result 1093\n  Bound result 15685\n  Bound result 10\n  Bound result 1\n  Bound result 10\n  Bound result 1\n  Bound result 11000000\n  Bound result 6\n  Bound result 10\n  Bound result 6\n  Bound result 5\n  Bound result 10\n  Bound result 1\n  Bound result 10\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 681.66ms (678.57ms CPU time)\n\nRan 2 tests for test/ProjectRegistryInvariant.t.sol:ProjectRegistryInvariantTest\n[PASS]\nProjectRegistryInvariantTest invariants:\n[PASS] invariant_holdsOnlyOpenBonds\n[PASS] invariant_listingCounts\n[PASS] invariant_recordsConsistent\n ProjectRegistryInvariantTest invariants (runs: 64, calls: 2048, reverts: 0)\n\n╭-----------------+-------------------+-------+---------+----------╮\n| Contract        | Selector          | Calls | Reverts | Discards |\n+==================================================================+\n| RegistryHandler | answer            | 245   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | applyFor          | 276   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | challengeFor      | 247   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | completeAndExpire | 253   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | expireStale       | 261   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | failFor           | 260   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | handOver          | 257   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | passTime          | 249   | 0       | 0        |\n╰-----------------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 3691\n  Bound result 3649\n  Bound result 84\n  Bound result 20497\n  Bound result 86\n  Bound result 64000\n\n[PASS] test_handlerReachesEveryOutcome() (gas: 18968878)\nLogs:\n  Bound result 50\n  Bound result 25\n  Bound result 100\n  Bound result 172800\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 685.14ms (686.29ms CPU time)\n\nRan 18 tests for test/RegistryRevisionRegression.t.sol:RegistryRevisionRegressionTest\n[PASS] testFuzz_answerIsConsumedAcrossApplications(bool) (runs: 256, μ: 9345137, ~: 9345137)\n[PASS] testFuzz_beneficiaryUnlocksAfterFailureOrExpiry(bool) (runs: 256, μ: 6340345, ~: 6340345)\n[PASS] testFuzz_challengeAllowsRateChangesWithinTheRules(uint16) (runs: 256, μ: 7327210, ~: 7327363)\nLogs:\n  Bound result 82\n\n[PASS] testFuzz_validCooldownCanList(uint64) (runs: 256, μ: 3240089, ~: 3239786)\nLogs:\n  Bound result 26271151\n\n[PASS] test_applicationAnswerCannotDefendAChallengeAndSpendItsBond() (gas: 6302462)\n[PASS] test_beneficiaryCannotBlockEveryChallengeByTogglingWallets() (gas: 6764366)\n[PASS] test_beneficiaryCannotTransferAfterChallengeDelists() (gas: 6302572)\n[PASS] test_challengeBodyLimitsAndConsumerDomain() (gas: 6723080)\n[PASS] test_constructorRefusesOverflowingAndExcessiveCooldowns() (gas: 16556)\n[PASS] test_handoffIntervalBoundaryAndRelisting() (gas: 12674465)\n[PASS] test_invalidAnswerDoesNotConsumeUUID() (gas: 3300977)\n[PASS] test_legacyChallengeCannotChargeAfterAnyBeneficiaryHandoff() (gas: 12666281)\n[PASS] test_openChallengeLocksBeneficiaryAndDefendedBondDestination() (gas: 6742710)\n[PASS] test_pinnedChallengePreservesCooldownAndSlotRules() (gas: 6415451)\n[PASS] test_pinnedChallengeRefusesFrontrunBeforeAnyPayment() (gas: 6854511)\n[PASS] test_selfChallengeOccupiesSlotOnlyUntilItSettles() (gas: 9349350)\n[PASS] test_settingSameBeneficiaryDoesNotDisableLegacyChallenge() (gas: 6329990)\n[PASS] test_zeroAndMaximumCooldownCanList() (gas: 6390657)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 758.05ms (1.59s CPU time)\n\nRan 5 tests for test/StackerAuditRegression.t.sol:StackerAuditRegressionTest\n[PASS] testFuzz_unreachableRecipientsRejectedBeforeAndAfterFirstCredit(uint256,bool) (runs: 256, μ: 1450871, ~: 1499757)\n[PASS] test_creditToImdTokenRevertsWithoutEffects() (gas: 362704)\n[PASS] test_creditToStackerRevertsWithoutEffects() (gas: 364669)\n[PASS] test_creditToVaultRevertsWithoutEffects() (gas: 364714)\n[PASS] test_zeroAmountStillRejectsUnreachableRecipients() (gas: 1092757)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 766.06ms (765.46ms CPU time)\n\nRan 17 tests for test/StackerDependencyFailures.t.sol:StackerDependencyFailuresTest\n[PASS] testFuzz_shortAssetReturnFailsBeforeAnyApproval(uint8) (runs: 1000, μ: 674632, ~: 674352)\nLogs:\n  Bound result 1\n\n[PASS] testFuzz_shortDepositReturnIsAtomic(uint8,bool,uint96) (runs: 1000, μ: 904305, ~: 931057)\nLogs:\n  Bound result 13\n  Bound result 3588\n\n[PASS] testFuzz_tokenFailureIsAtomic(uint8,uint96,bool) (runs: 1000, μ: 842980, ~: 845538)\nLogs:\n  Bound result 1\n  Bound result 1986623040\n\n[PASS] testFuzz_vaultPullFailureIsAtomic(uint8,uint96,bool) (runs: 1000, μ: 876959, ~: 876199)\nLogs:\n  Bound result 1\n  Bound result 1986623040\n\n[PASS] test_assetRevertDataBubblesAndDoesNotPrimeApproval() (gas: 670793)\n[PASS] test_dirtyAssetAddressIsRejectedBeforeAnyApproval() (gas: 673028)\n[PASS] test_falseApprovalRollsBackAndNextCreditRevalidates() (gas: 798887)\n[PASS] test_falsePullAfterMovingOneWeiRollsBackFirstApproval() (gas: 831737)\n[PASS] test_falseVaultPullRollsBackBothTransfersAndFirstApproval() (gas: 871106)\n[PASS] test_invalidBooleanApprovalRollsBack() (gas: 798824)\n[PASS] test_invalidBooleanPullRollsBack() (gas: 831884)\n[PASS] test_invalidBooleanVaultPullRollsBackEntireProjectBalance() (gas: 871365)\n[PASS] test_missingDepositReturnRollsBackActualMint() (gas: 936401)\n[PASS] test_oneByteShortDepositReturnRollsBackActualMintAndHold() (gas: 865107)\n[PASS] test_revertingApprovalRollsBackAndNextCreditRevalidates() (gas: 804553)\n[PASS] test_revertingPullBubblesErrorAfterAnEarlierCredit() (gas: 838492)\n[PASS] test_revertingVaultPullAfterEarlierCreditLeavesMatureSharesAlone() (gas: 867788)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 765.99ms (2.01s CPU time)\n\nRan 15 tests for test/StackReceiverAdversarial.t.sol:StackReceiverAdversarialTest\n[PASS] testFuzz_headerFieldsPreserveAmountSourceAndBeneficiaries(uint64,uint32,bytes32,bytes32,uint64) (runs: 1000, μ: 461516, ~: 461774)\nLogs:\n  Bound result 30000\n\n[PASS] testFuzz_shortOFTHeaderIsAtomic(uint8) (runs: 1000, μ: 428721, ~: 428483)\nLogs:\n  Bound result 1\n\n[PASS] testFuzz_truncatedListIsAtomic(uint16) (runs: 1000, μ: 454847, ~: 448873)\nLogs:\n  Bound result 5\n\n[PASS] test_failedApprovalLeavesFirstDeliveryRetryable() (gas: 833072)\n[PASS] test_forgedComposeCannotSpendAPendingArrival() (gas: 1110024)\n[PASS] test_initializationIsLazyAndApprovalIsNotRepeated() (gas: 983971)\n[PASS] test_lateTransferFailureRollsBackEarlierDepositAndCanRetry() (gas: 1034797)\n[PASS] test_maximumSharedDecimalArrivalCanBeDelivered() (gas: 435078)\n[PASS] test_nestedAuthenticatedComposeIsBlockedAndStillRetryable() (gas: 3325460)\n[PASS] test_nonCanonicalAddressInListIsRejectedAtomically() (gas: 438638)\n[PASS] test_oneWeiAllocationAndDuplicateTradersPreserveEveryWei() (gas: 467004)\n[PASS] test_overlistedMessageCannotUseAnotherMessagesReserve() (gas: 849597)\n[PASS] test_pendingArrivalsCanBeComposedOutOfOrderAndOnlyOnce() (gas: 1074045)\n[PASS] test_sumOverflowRevertsBeforeApprovalOrDelivery() (gas: 440856)\n[PASS] test_zeroArrivalDoesNotConsumeUnrelatedFundsOrStampTraders() (gas: 345109)\nSuite result: ok. 15 passed; 0 failed; 0 skipped; finished in 731.55ms (1.03s CPU time)\n\nRan 6 tests for test/RegistrySelfBeneficiary.t.sol:RegistrySelfBeneficiaryTest\n[PASS] test_acceptedSelfChallengeHoldsSlotUntilAnswerWithoutNewCooldown() (gas: 9460831)\n[PASS] test_applicationRefusesRegistryBeforeFeeOrRequest() (gas: 171010)\n[PASS] test_contractBeneficiaryStillReceivesBondAndCanHandOff() (gas: 6434857)\n[PASS] test_handoffRefusesRegistryAndPreservesBondRecipient() (gas: 6367548)\n[PASS] test_registryOwnedProjectCannotApplyWithRegistryAsBeneficiary() (gas: 507127)\n[PASS] test_rejectedHandoffDoesNotConsumeDailyHandoff() (gas: 3287504)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 777.83ms (8.44ms CPU time)\n\nRan 7 tests for test/StackerExternalCalls.t.sol:StackerExternalCallsTest\n[PASS] testFuzz_creditMatchesDirectDepositFromSameVaultState(uint96,uint96,uint96) (runs: 1000, μ: 976874, ~: 976865)\nLogs:\n  Bound result 99999043968731161697195\n  Bound result 13988925851786066769583\n  Bound result 5452666987774890341\n\n[PASS] testFuzz_lateFailureRollsBackAllEffects(uint96,bool,bool) (runs: 1000, μ: 2935636, ~: 2930480)\nLogs:\n  Bound result 4519775\n\n[PASS] test_anotherCallersApprovalCannotBeSpent() (gas: 598595)\n[PASS] test_noReturnTokenStillMovesExactAssetsAndShares() (gas: 3117679)\n[PASS] test_oneWeiLateRevertRollsBackFirstApproval() (gas: 2937621)\n[PASS] test_tokenReentryDuringApprovalAndPullCannotCreateExtraCashback() (gas: 3738736)\n[PASS] test_zeroShareReturnRollsBackAnActualMint() (gas: 2925987)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 778.42ms (1.49s CPU time)\n\nRan 8 tests for test/RegistryHandoffInterval.t.sol:RegistryHandoffIntervalTest\n[PASS] testFuzz_challengeNamingTheWalletInForceAlwaysFiles(uint64) (runs: 1000, μ: 6539329, ~: 6539487)\nLogs:\n  Bound result 14053\n\n[PASS] testFuzz_secondHandoffBoundary(uint64) (runs: 1000, μ: 3316083, ~: 3314072)\nLogs:\n  Bound result 14053\n\n[PASS] test_checksBeforeTheIntervalStillComeFirst() (gas: 6493598)\n[PASS] test_clockIsPerProject() (gas: 6503818)\n[PASS] test_expiredAndFailedQuestionsLeaveTheClockAlone() (gas: 9417371)\n[PASS] test_handoffEmitsEventAndStartsExactInterval() (gas: 3290917)\n[PASS] test_intervalRefusesAThirdWalletToo() (gas: 3333746)\n[PASS] test_relistingByApplicationNamesANewWalletWithoutAHandoff() (gas: 18821659)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 772.12ms (1.50s CPU time)\n\nRan 10 tests for test/RegistryAuditRegression.t.sol:RegistryAuditRegressionTest\n[PASS] testFuzz_applicationPaysCurrentPrice(uint96) (runs: 256, μ: 3106315, ~: 3106154)\nLogs:\n  Bound result 1\n\n[PASS] test_defendedChallengeFromAnotherWalletDoesNotRenewImmunity() (gas: 9334621)\n[PASS] test_defendedSelfChallengeDoesNotRenewImmunity() (gas: 21881719)\n[PASS] test_permissionlessApplicantCanOccupySlotUntilRejected() (gas: 6210874)\n[PASS] test_priceRiseAndFall_preserveBondAndExactPayment() (gas: 9528279)\n[PASS] test_retiredActionApplicationMovesNothing() (gas: 281247)\n[PASS] test_retiredActionRefusesBeforePaymentAndPreservesListing() (gas: 6409682)\n[PASS] test_signedAnswerMustReachItsOwnQuorum() (gas: 3221678)\n[PASS] test_stakingFaucetTokenCannotPayOracleFee() (gas: 4326584)\n[PASS] test_staleExactApprovalCannotSpendAnUnexpectedPriceIncrease() (gas: 345326)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 778.42ms (787.70ms CPU time)\n\nRan 9 tests for test/RegistryApplicantGate.t.sol:RegistryApplicantGateTest\n[PASS] test_anyoneMayStillChallengeAnOwnedProject() (gas: 6420742)\n[PASS] test_misbehavingOwnerReadsAsNone() (gas: 15582598)\n[PASS] test_noOwnerFunctionOpenToAnyone() (gas: 3089189)\n[PASS] test_ownerChangeMovesTheRight() (gas: 3436229)\n[PASS] test_ownerMayApply() (gas: 3320997)\n[PASS] test_projectItselfMayApply() (gas: 3381856)\n[PASS] test_renouncedOwnerOpenToAnyone() (gas: 3284007)\n[PASS] test_squatterCannotBlockTheTeam() (gas: 3550174)\n[PASS] test_strangerRefusedBeforePaying() (gas: 390876)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 778.54ms (10.53ms CPU time)\n\nRan 20 tests for test/RegistryAdversarial.t.sol:RegistryAdversarialTest\n[PASS] testFuzz_nonCanonicalBoolCannotDelist(uint256) (runs: 1000, μ: 6554665, ~: 6554617)\nLogs:\n  Bound result 152175226342525609376590633691705320419345570086392825101533654348714170657\n\n[PASS] testFuzz_oldCallbacksCannotCloseReplacementApplication(uint8) (runs: 1000, μ: 6639239, ~: 6646149)\nLogs:\n  Bound result 1\n\n[PASS] testFuzz_pendingDeadlineStillAllowsAnswerButNotExpiry(bool,bool) (runs: 1000, μ: 5042680, ~: 6568873)\n[PASS] testFuzz_shortBoolEncodingCannotReleaseBond(uint8) (runs: 1000, μ: 6433593, ~: 6433340)\nLogs:\n  Bound result 11\n\n[PASS] test_answerBeforeAskToleranceHasExactBoundary() (gas: 3414922)\n[PASS] test_attestationExpiryIsInclusive() (gas: 3405381)\n[PASS] test_beneficiaryHandoverWaitsForSettlementAndRevokesOldWallet() (gas: 9831731)\n[PASS] test_challengeCooldownHasExactBoundary() (gas: 6413357)\n[PASS] test_challengeShortAllowanceCannotBorrowDonatedFunds() (gas: 3592763)\n[PASS] test_emptyAndMalformedSignaturesCannotSettle() (gas: 4190907)\n[PASS] test_everySignedFieldIsAuthenticatedBeforeABondCanMove() (gas: 10613885)\n[PASS] test_futureIssuedAtToleranceHasExactBoundary() (gas: 3405670)\n[PASS] test_intakeRevertRollsBackFeeBondApprovalAndOpenRecord() (gas: 6686933)\n[PASS] test_maximumFeeAdditionRevertsWithoutChangingListing() (gas: 3529365)\n[PASS] test_oldChallengeCannotRefundTwiceOrCloseNewChallenge() (gas: 9956450)\n[PASS] test_oneSecondAfterDeadlineCannotReleaseBondToBeneficiary() (gas: 6561303)\n[PASS] test_signatureForSameAddressOnAnotherChainCannotReleaseBond() (gas: 6575234)\n[PASS] test_starvedChallengeCallbackRefundsOnlyChallenger() (gas: 6558379)\n[PASS] test_thirdPartyPaidQuestionCannotListOurProject() (gas: 3627102)\n[PASS] test_tokenReturningFalseCannotCreatePaidRequest() (gas: 3537524)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 778.64ms (2.46s CPU time)\n\nRan 8 tests for test/RegistryBodyProperties.t.sol:RegistryBodyPropertiesTest\n[PASS] testFuzz_applicationBodyRoundTripsValidText(bytes32,uint8,uint8,uint16) (runs: 1000, μ: 3617975, ~: 3581793)\nLogs:\n  Bound result 8\n  Bound result 51\n  Bound result 44\n\n[PASS] testFuzz_challengeBodyRoundTripsValidText(bytes32,uint16) (runs: 1000, μ: 6791237, ~: 6725331)\nLogs:\n  Bound result 34\n\n[PASS] test_applicationMaximumTextAndRate() (gas: 3862252)\n[PASS] test_applicationMinimumTextAndRate() (gas: 3504752)\n[PASS] test_challengeMaximumReason() (gas: 7118201)\n[PASS] test_challengeMinimumReason() (gas: 6643534)\n[PASS] test_everyForbiddenByteIsRejectedInEveryUserTextFieldBeforePayment() (gas: 53799580)\n[PASS] test_textLengthsJustOutsideLimitsAreAtomic() (gas: 3750569)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 778.49ms (1.15s CPU time)\n\nRan 19 tests for test/StackerEdges.t.sol:StackerEdgesTest\n[PASS] testFuzz_credit_pausedAlwaysRevertsAndMovesNothing(address,uint256) (runs: 1000, μ: 234712, ~: 234498)\nLogs:\n  Bound result 475647107799728831768269\n\n[PASS] testFuzz_credit_repeatedCyclesExtractNoDust(uint256,uint8) (runs: 1000, μ: 1514735, ~: 1370404)\nLogs:\n  Bound result 10\n\n[PASS] testFuzz_credit_shortBalanceAlwaysReverts(uint256,uint256) (runs: 1000, μ: 388853, ~: 388806)\nLogs:\n  Bound result 50000000000000000\n  Bound result 0\n\n[PASS] testFuzz_credit_thenRedeem_noFreeProfit(uint256,uint256,uint256) (runs: 1000, μ: 741422, ~: 761926)\nLogs:\n  Bound result 11155111\n  Bound result 8118\n  Bound result 280\n\n[PASS] testFuzz_credit_traderValueWithinOneShareOfAmount(uint256,uint256,uint256) (runs: 1000, μ: 683480, ~: 689024)\nLogs:\n  Bound result 48404160204153879891780\n  Bound result 51287685935265711930024\n  Bound result 38692410472946495279461\n\n[PASS] testFuzz_credit_zeroSharesGuardTracksVaultPreview(uint256,uint256) (runs: 1000, μ: 489872, ~: 510594)\nLogs:\n  Bound result 9999999999999999981\n  Bound result 50000000000000000\n\n[PASS] test_credit_allowanceConsumedExactly_secondCallReverts() (gas: 615815)\n[PASS] test_credit_astronomicalButRepresentable() (gas: 365250)\n[PASS] test_credit_balanceConsumedExactly_secondCallReverts() (gas: 591245)\n[PASS] test_credit_eventMatchesReturnAndBalanceDeltaAtNonUnitPrice() (gas: 662927)\n[PASS] test_credit_maxUint_revertsCleanlyInVaultMath() (gas: 238919)\n[PASS] test_credit_oneWei() (gas: 361849)\n[PASS] test_credit_pausedBeatsShortAllowance_nothingPulled() (gas: 468574)\n[PASS] test_credit_projectIsTrader_countedOnBothSides() (gas: 326778)\n[PASS] test_credit_reentrancyFromVaultIsBlocked() (gas: 737091)\n[PASS] test_credit_zeroAmountWhilePaused_returnsZeroWithoutTouchingVault() (gas: 91175)\n[PASS] test_credit_zeroTraderWhilePaused_stillZeroTrader() (gas: 89528)\n[PASS] test_credit_zeroTraderWithShortAllowance_stillZeroTrader() (gas: 285166)\n[PASS] test_strayImdInStacker_isNeverSpentByCredit() (gas: 522405)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 778.66ms (3.04s CPU time)\n\nRan 8 tests for test/StackerGas.t.sol:StackerGasTest\n[PASS] testFuzz_readmeLateFailurePaysOnceAndNextCreditWorks(uint96,bool,bool) (runs: 1000, μ: 3268156, ~: 3268041)\nLogs:\n  Bound result 3213315632288304\n\n[PASS] test_oldGasCapFailsRepeatedlyAndDoesNotPrimeVault() (gas: 600749)\n[PASS] test_readmeBudgetFundsColdFirstCredit() (gas: 359519)\n[PASS] test_readmeFallbackAfterFirstMintReturnsZeroShares() (gas: 3264309)\n[PASS] test_readmeFallbackAfterRepeatMintReverts() (gas: 3264412)\n[PASS] test_readmeFallbackHasGasEvenWhenCreditExhaustsItsBudget() (gas: 473042)\n[PASS] test_readmeFallbackPaysPlainImdWhenVaultFails() (gas: 272236)\n[PASS] test_readmeGasGuardRejectsLowEstimateBeforeFallback() (gas: 94010)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 774.56ms (776.81ms CPU time)\n\nRan 2 tests for test/StackerInvariantExtended.t.sol:StackerInvariantExtendedTest\n[PASS]\nStackerInvariantExtendedTest invariants:\n[PASS] invariant_imdSupplyConservation\n[PASS] invariant_pauseAndOwnershipStateMachine\n[PASS] invariant_stackerHoldsNothing\n[PASS] invariant_stackerTotals\n[PASS] invariant_vaultConservation\n[PASS] invariant_vaultSolvent\n StackerInvariantExtendedTest invariants (runs: 128, calls: 6144, reverts: 0)\n\n╭-----------------+----------------+-------+---------+----------╮\n| Contract        | Selector       | Calls | Reverts | Discards |\n+===============================================================+\n| ExtendedHandler | advance        | 488   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | credit         | 496   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | creditTiny     | 453   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | depositDirect  | 457   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | donate         | 458   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | faucet         | 487   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | redeem         | 497   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | renounce       | 436   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | rescue         | 462   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | setAllowance   | 484   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | togglePause    | 455   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | transferShares | 498   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | withdraw       | 473   | 0       | 0        |\n╰-----------------+----------------+-------+---------+----------╯\n\nLogs:\n  Bound result 3855608150\n  Bound result 75\n  Bound result 11864\n  Bound result 99951\n  Bound result 3\n  Bound result 6\n  Bound result 357456\n  Bound result 0\n  Bound result 999998\n  Bound result 49\n  Bound result 4182603235430818214450\n  Bound result 6887\n  Bound result 12380\n  Bound result 30466\n  Bound result 1\n  Bound result 43455739469370640322345\n  Bound result 1\n  Bound result 7499\n  Bound result 10\n  Bound result 7551728368828094850965\n  Bound result 4200000\n  Bound result 45\n  Bound result 5000000000000000000000\n  Bound result 20203\n  Bound result 5284\n  Bound result 10\n  Bound result 899\n  Bound result 93\n  Bound result 8\n  Bound result 2416\n\n[PASS] test_handlerReachesEveryCreditOutcome() (gas: 4540803)\nLogs:\n  Bound result 1000000000000000000\n  Bound result 5\n  Bound result 100000000000000000000\n  Bound result 1\n  Bound result 50000000000000000000\n  Bound result 7\n  Bound result 24000000000000000000000\n  Bound result 100000000000000000000\n  Bound result 10000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 372757101\n  Bound result 684498244\n  Bound result 1000000000000000000\n  Bound result 2949193105425070115\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 3.99s (3.99s CPU time)\n\nRan 20 tests for test/Stacker.t.sol:StackerTest\n[PASS] testFuzz_credit(address,uint256) (runs: 256, μ: 394595, ~: 394401)\nLogs:\n  Bound result 999999999999999999999997\n\n[PASS] testFuzz_credit_shortAllowanceAlwaysReverts(uint256,uint256) (runs: 256, μ: 368089, ~: 368914)\nLogs:\n  Bound result 389252719309078400616203\n  Bound result 697\n\n[PASS] testFuzz_credit_twoTradersProportional(uint256,uint256) (runs: 256, μ: 430344, ~: 430416)\nLogs:\n  Bound result 697\n  Bound result 389252719309078400616203\n\n[PASS] test_constructor_doesNotCallExistingVaultOrToken() (gas: 56148)\n[PASS] test_constructor_vaultWithoutCode_creditCannotMove() (gas: 131325)\n[PASS] test_constructor_wiringWithoutExternalCalls() (gas: 43846)\n[PASS] test_credit_manyProjectsAndTraders() (gas: 9375713)\n[PASS] test_credit_revertsOnShortAllowance() (gas: 378525)\n[PASS] test_credit_revertsOnShortBalance() (gas: 370632)\n[PASS] test_credit_revertsOnZeroShares() (gas: 383379)\n[PASS] test_credit_revertsWhenVaultPaused() (gas: 508239)\n[PASS] test_credit_sharesFollowVaultPrice() (gas: 617949)\n[PASS] test_credit_sharesGoOnlyToTrader() (gas: 374498)\n[PASS] test_credit_totalsAndEvent() (gas: 494195)\n[PASS] test_credit_zeroAmountReturnsZeroNoEvent() (gas: 80135)\n[PASS] test_credit_zeroTraderReverts() (gas: 66272)\n[PASS] test_failedFirstCredit_rollsBackApprovalAndRetriesValidation() (gas: 531891)\n[PASS] test_firstCredit_approvesOnce_andLaterCreditsStillWork() (gas: 397571)\n[PASS] test_firstCredit_revertsOnAssetMismatch() (gas: 791662)\n[PASS] test_integrator_tryCatchSurvivesPausedVault() (gas: 1053849)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 4.01s (277.29ms CPU time)\n\nRan 3 tests for test/RegistryAccountingInvariant.t.sol:RegistryAccountingInvariantTest\n[PASS]\nRegistryAccountingInvariantTest invariants:\n[PASS] invariant_eachActorGetsExactlyTheirEntitlement\n[PASS] invariant_requestsAndListingsMatchIndependentHistory\n RegistryAccountingInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭---------------------------+----------------------+-------+---------+----------╮\n| Contract                  | Selector             | Calls | Reverts | Discards |\n+===============================================================================+\n| RegistryAccountingHandler | ask                  | 1874  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | donate               | 1745  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | expire               | 1821  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | handOver             | 1795  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | passTime             | 1808  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | reprice              | 1884  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | settle               | 1801  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | unauthorizedOrReplay | 1816  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | unsafeChallenge      | 1840  | 0       | 0        |\n╰---------------------------+----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 93\n  Bound result 90393\n  Bound result 64\n  Bound result 516768912249235603\n  Bound result 1796170851023826156\n  Bound result 1540278585265204448\n  Bound result 8933\n  Bound result 63\n  Bound result 76\n  Bound result 13033\n  Bound result 4\n  Bound result 15332\n  Bound result 21\n  Bound result 415\n  Bound result 371318859558289409\n  Bound result 35307\n  Bound result 76980\n  Bound result 24\n  Bound result 981549962599167077\n  Bound result 90\n  Bound result 417847008382185846\n  Bound result 8877\n  Bound result 16384\n  Bound result 29\n  Bound result 980477286938948062\n  Bound result 3516\n  Bound result 980477304808868873\n  Bound result 21\n  Bound result 28\n  Bound result 5647\n  Bound result 6033\n  Bound result 122321\n  Bound result 20\n\n[PASS] test_handlerReachesAllPayoutsAndChecksAfterEachTransition() (gas: 40458439)\nLogs:\n  Bound result 25\n  Bound result 1\n  Bound result 100\n  Bound result 0\n  Bound result 50\n  Bound result 0\n  Bound result 50\n  Bound result 1\n  Bound result 50\n  Bound result 0\n  Bound result 50\n  Bound result 2\n  Bound result 50\n  Bound result 3\n  Bound result 50\n  Bound result 4\n  Bound result 50\n  Bound result 172800\n  Bound result 1\n  Bound result 0\n  Bound result 50\n  Bound result 123\n  Bound result 0\n  Bound result 50\n  Bound result 1\n  Bound result 50\n\n[PASS] test_handlerRetainsBeneficiaryPinAcrossHandoffsAndRelisting() (gas: 16504440)\nLogs:\n  Bound result 50\n  Bound result 0\n  Bound result 0\n  Bound result 50\n  Bound result 500000000000000000\n  Bound result 86400\n  Bound result 1\n  Bound result 50\n  Bound result 1\n  Bound result 100\n  Bound result 0\n  Bound result 50\n  Bound result 0\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 5.26s (5.27s CPU time)\n\nRan 2 tests for test/StackReceiverPendingInvariant.t.sol:StackReceiverPendingInvariantTest\n[PASS]\nStackReceiverPendingInvariantTest invariants:\n[PASS] invariant_countersCountOnlySuccessfulDeliveryOncePerSource\n[PASS] invariant_eachTraderReceivesOnlyTheirFundedAllocation\n[PASS] invariant_pendingAndUnsolicitedIMDAreFullyBacked\n StackReceiverPendingInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭------------------------+----------+-------+---------+----------╮\n| Contract               | Selector | Calls | Reverts | Discards |\n+================================================================+\n| ReceiverPendingHandler | arrive   | 3346  | 0       | 0        |\n|------------------------+----------+-------+---------+----------|\n| ReceiverPendingHandler | compose  | 3283  | 0       | 0        |\n|------------------------+----------+-------+---------+----------|\n| ReceiverPendingHandler | donate   | 3301  | 0       | 0        |\n|------------------------+----------+-------+---------+----------|\n| ReceiverPendingHandler | pause    | 3264  | 0       | 0        |\n|------------------------+----------+-------+---------+----------|\n| ReceiverPendingHandler | reject   | 3190  | 0       | 0        |\n╰------------------------+----------+-------+---------+----------╯\n\nLogs:\n  Bound result 3\n  Bound result 4\n  Bound result 5\n  Bound result 6\n  Bound result 45061860\n  Bound result 2\n  Bound result 267672000856197964\n  Bound result 127\n  Bound result 1\n  Bound result 5369\n  Bound result 708\n  Bound result 2\n  Bound result 4810\n  Bound result 6\n  Bound result 92301838913526971407624\n  Bound result 318496720918\n  Bound result 5\n  Bound result 2\n  Bound result 159\n  Bound result 41870239\n  Bound result 2\n  Bound result 8145\n  Bound result 114190941197065612410903\n  Bound result 5252262217147\n  Bound result 2739\n  Bound result 5\n  Bound result 135\n  Bound result 2092273683\n  Bound result 5\n\n[PASS] test_handlerReachesRetriesMixedPayoutsReplayAndOutOfOrderDelivery() (gas: 4267751)\nLogs:\n  Bound result 3\n  Bound result 4\n  Bound result 7000000000000000000\n  Bound result 6\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 6.09s (6.09s CPU time)\n\nRan 3 tests for test/StackerHoldInvariant.t.sol:StackerHoldInvariantTest\n[PASS]\nStackerHoldInvariantTest invariants:\n[PASS] invariant_balancesAndHistoricalCashbackAreConserved\n[PASS] invariant_holdFollowsSharesAndCannotBeClearedByTimestamp\n StackerHoldInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭--------------------+----------------------+-------+---------+----------╮\n| Contract           | Selector             | Calls | Reverts | Discards |\n+========================================================================+\n| StackerHoldHandler | advance              | 2014  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | credit               | 2076  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | donate               | 2155  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | exit                 | 2047  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | probeRenouncedPowers | 2003  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | transferShares       | 2071  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | unauthorizedExit     | 2008  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | zeroAction           | 2010  | 0       | 0        |\n╰--------------------+----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 6\n  Bound result 50\n  Bound result 9316562965220958072377\n  Bound result 0\n  Bound result 3\n  Bound result 10\n  Bound result 2065\n  Bound result 9999999999999999999501\n  Bound result 215\n  Bound result 143\n  Bound result 10\n  Bound result 180\n  Bound result 801\n  Bound result 9\n  Bound result 5\n  Bound result 0\n  Bound result 55\n  Bound result 2\n  Bound result 43200\n  Bound result 11843\n  Bound result 10\n  Bound result 281\n  Bound result 11155111\n  Bound result 5\n  Bound result 0\n  Bound result 3774213539027554919205\n  Bound result 374021026042401469537\n  Bound result 0\n  Bound result 26\n  Bound result 0\n  Bound result 1851080550\n\n[PASS] test_handlerExercisesHeldDelegatedAndMatureExits() (gas: 3851200)\nLogs:\n  Bound result 10000000000000000000\n  Bound result 2000000000000000000000000\n  Bound result 1000000000000000000000000\n  Bound result 1\n  Bound result 1000000000000000000\n  Bound result 1\n  Bound result 1000000000000000000\n  Bound result 1000000000000000000000000\n  Bound result 1000000000000000000\n  Bound result 1000000000000000000000000\n  Bound result 1000000000000000000000000\n\n[PASS] test_handlerExercisesZeroSharesFailureBeforeInitialization() (gas: 2872846)\nLogs:\n  Bound result 1000000000000000000\n  Bound result 1\n  Bound result 10000000000000000000\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 6.47s (6.47s CPU time)\n\nRan 48 test suites in 6.48s (38.14s CPU time): 303 tests passed, 0 failed, 26 skipped (329 total tests)\n","passed":true},{"durationMs":94,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"ProjectRegistry.applyListing(address,string,string,uint16,address)\",\"ProjectRegistry.challenge(address,string)\",\"ProjectRegistry.challengeForBeneficiary(address,string,address)\",\"ProjectRegistry.claimBond(address)\",\"ProjectRegistry.expire(address)\",\"ProjectRegistry.onOracleFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"ProjectRegistry.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"ProjectRegistry.setBeneficiary(address,address)\",\"RemoteStacker.credit(address,uint256)\",\"RemoteStacker.flush(address[])\",\"RemoteStacker.setEthereumRecipient(address)\",\"StackReceiver.lzCompose(address,bytes32,bytes,address,bytes)\",\"Stacker.credit(address,uint256)\"],\"files\":{\".github/ISSUE_TEMPLATE/listing-application.yml\":88,\".gitignore\":5,\"ADAPTATION.md\":60,\"NEXT_SESSION.md\":71,\"README.md\":317,\"app.js\":2393,\"docs/data-api.md\":97,\"docs/design.md\":323,\"docs/explainer.html\":247,\"docs/history.md\":455,\"docs/launches.md\":51,\"docs/listing.md\":97,\"docs/panel-rules-v2-rehearsal-body.json\":28,\"docs/panel-rules-v2.md\":90,\"docs/plea-handoff.md\":73,\"docs/plea-test-run-2.md\":34,\"favicon.svg\":11,\"foundry.toml\":26,\"index.html\":171,\"jobs/1-sepolia-launch.md\":23,\"jobs/10-sepolia-v4-launch.md\":13,\"jobs/11-sepolia-v5-launch.md\":13,\"jobs/12-mainnet-registry-launch.md\":14,\"jobs/13-sepolia-v6-launch.md\":13,\"jobs/14-mainnet-stackreceiver-launch.md\":13,\"jobs/15-robinhood-remotestacker-launch.md\":12,\"jobs/2-sepolia-site.md\":18,\"jobs/3-list-plea.md\":21,\"jobs/4-mainnet-launch.md\":16,\"jobs/5-sepolia-v2-launch.md\":12,\"jobs/5-sepolia-v2-site.md\":10,\"jobs/6-sepolia-v2-site.md\":30,\"jobs/7-sepolia-v2-site-pages.md\":22,\"jobs/8-sepolia-v3-launch.md\":13,\"jobs/9-sepolia-v3-relaunch.md\":13,\"jobs/requests/10-sepolia-v4-launch.json\":31,\"jobs/requests/11-sepolia-v5-launch.json\":31,\"jobs/requests/12-mainnet-registry-launch.json\":31,\"jobs/requests/13-sepolia-v6-launch.json\":31,\"jobs/requests/14-mainnet-stackreceiver-launch.json\":31,\"jobs/requests/3-list-plea.json\":10,\"jobs/requests/4-mainnet-launch.json\":31,\"jobs/requests/5-sepolia-v2-launch-only.json\":31,\"jobs/requests/5-sepolia-v2-workflow.json\":50,\"jobs/requests/6-sepolia-v2-site.json\":15,\"jobs/requests/7-sepolia-v2-site-pages.json\":15,\"jobs/requests/8-sepolia-v3-launch.json\":31,\"jobs/requests/9-sepolia-v3-relaunch.json\":31,\"launch.json\":15,\"listings/sepolia.json\":1,\"llms.txt\":48,\"remappings.txt\":3,\"src/ProjectRegistry.sol\":713,\"src/Stacker.sol\":104,\"src/multichain/LayerZero.sol\":112,\"src/multichain/RemoteStacker.sol\":314,\"src/multichain/StackReceiver.sol\":157,\"src/oracle/OracleAttestation.sol\":265,\"style.css\":1666,\"test/ADVERSARIAL_COVERAGE.md\":42,\"test/Base.t.sol\":58,\"test/Deployment.t.sol\":194,\"test/FactoryRehearsal.t.sol\":47,\"test/MAINNET_TEST_COVERAGE.md\":45,\"test/MainnetFork.t.sol\":141,\"test/MainnetLaunchRegression.t.sol\":99,\"test/MultichainFlow.t.sol\":184,\"test/OracleConsumerConformance.t.sol\":140,\"test/ProjectRegistry.t.sol\":596,\"test/ProjectRegistryInvariant.t.sol\":238,\"test/RegistryAccountingInvariant.t.sol\":552,\"test/RegistryAdversarial.t.sol\":446,\"test/RegistryApplicantGate.t.sol\":166,\"test/RegistryAuditRegression.t.sol\":157,\"test/RegistryBodyProperties.t.sol\":224,\"test/RegistryBondOwed.t.sol\":290,\"test/RegistryCallbackGas.t.sol\":111,\"test/RegistryCooldownBoundary.t.sol\":44,\"test/RegistryHandoffInterval.t.sol\":235,\"test/RegistryMainnetFork.t.sol\":110,\"test/RegistryPolicyRevision.t.sol\":50,\"test/RegistryRevisionRegression.t.sol\":418,\"test/RegistrySelfBeneficiary.t.sol\":148,\"test/RegistrySepoliaFork.t.sol\":113,\"test/RemoteStacker.t.sol\":424,\"test/RemoteStackerAuditRegression.t.sol\":182,\"test/RemoteStackerLaunch.t.sol\":105,\"test/RobinhoodFork.t.sol\":184,\"test/SepoliaFork.t.sol\":141,\"test/StackReceiver.t.sol\":344,\"test/StackReceiverAdversarial.t.sol\":321,\"test/StackReceiverCoverage.md\":61,\"test/StackReceiverLaunch.t.sol\":118,\"test/StackReceiverMainnetFork.t.sol\":255,\"test/StackReceiverPendingInvariant.t.sol\":331,\"test/Stacker.t.sol\":423,\"test/StackerAuditRegression.t.sol\":99,\"test/StackerDependencyFailures.t.sol\":288,\"test/StackerEdges.t.sol\":391,\"test/StackerExternalCalls.t.sol\":257,\"test/StackerGas.t.sol\":186,\"test/StackerHoldInvariant.t.sol\":346,\"test/StackerInvariant.t.sol\":148,\"test/StackerInvariantExtended.t.sol\":495,\"test/TraderResolution.t.sol\":229,\"test/TrialVenue.t.sol\":147,\"test/VaultTrustRegression.t.sol\":41,\"test/helpers/StackReceiverFixture.sol\":101,\"test/mocks/MockIntake.sol\":108,\"test/mocks/MockOFT.sol\":138,\"test/mocks/QueuedComposeEndpoint.sol\":40,\"test/mocks/TestIMD.sol\":41,\"test/mocks/TestSIMD.sol\":178,\"test/trial/SelfCredit.sol\":35,\"test/trial/TrialVenue.sol\":222,\"tools/site-check/.gitignore\":2,\"tools/site-check/README.md\":35,\"tools/site-check/behavior.mjs\":124,\"tools/site-check/flows.mjs\":173,\"tools/site-check/fork-answer.sh\":27,\"tools/site-check/layout.mjs\":88,\"tools/site-check/lib.mjs\":181,\"tools/site-check/package-lock.json\":22,\"tools/site-check/package.json\":9,\"tools/site-check/refresh-bug.mjs\":50,\"tools/site-check/trial.mjs\":158,\"tools/snapshot/build.mjs\":291,\"tools/snapshot/chains.json\":29,\"tools/snapshot/test.sh\":57},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"8f1eac636556b27715edebc5f61186e91afdb85effbc586164092eaf601bca35","verifiedTreeHash":"e50c73fa348ec17e715e3f9fc4294d1c708fe7d6","verifierVersion":"0.1.0+327e1e9f"},{"checks":[{"durationMs":19873,"exitCode":0,"name":"build","output":"Compiling 108 files with Solc 0.8.26\nSolc 0.8.26 finished in 19.73s\nCompiler run successful!\n","passed":true},{"durationMs":8080,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/RegistrySepoliaFork.t.sol:RegistrySepoliaForkTest\n[SKIP] test_sepolia_applyPaysTheRealIntake_thenAnswerLists() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 332.92µs (79.57µs CPU time)\n\nRan 2 tests for test/StackReceiverLaunch.t.sol:StackReceiverLaunchTest\n[SKIP] test_manifestFactoryDeploysOneContractWithNoExternalConstructorCalls() (gas: 0)\n[SKIP] test_manifestPinsExactlyTheMainnetReceiver() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 2 skipped; finished in 443.84µs (271.21µs CPU time)\n\nRan 2 tests for test/MainnetLaunchRegression.t.sol:MainnetLaunchRegressionTest\n[SKIP] test_manifestCreate2WorksWithoutDependenciesOrInitialization() (gas: 0)\n[SKIP] test_manifestPinsExactlyOneMainnetStacker() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 2 skipped; finished in 432.36µs (270.64µs CPU time)\n\nRan 1 test for test/RegistryMainnetFork.t.sol:RegistryMainnetForkTest\n[SKIP] test_mainnet_ownerAppliesToTheRealIntake_listedThenDefended() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 490.72µs (21.62µs CPU time)\n\nRan 5 tests for test/SepoliaFork.t.sol:SepoliaForkTest\n[SKIP] test_sepolia_creditEventAndTotals() (gas: 0)\n[SKIP] test_sepolia_liveFacts() (gas: 0)\n[SKIP] test_sepolia_liveStackerValidCreditMatchesMainnetCandidate() (gas: 0)\n[SKIP] test_sepolia_mainnetCandidateRejectsLegacyUnreachableRecipients() (gas: 0)\n[SKIP] test_sepolia_pausedVaultRevertsThenRecovers() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 5 skipped; finished in 610.94µs (79.34µs CPU time)\n\nRan 1 test for test/FactoryRehearsal.t.sol:FactoryRehearsalTest\n[PASS] test_sepoliaFactoryDeploysBothInOrderOnAnEmptyChain() (gas: 419613)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 784.04µs (617.98µs CPU time)\n\nRan 5 tests for test/MainnetFork.t.sol:MainnetForkTest\n[SKIP] test_fork_creditNewThenRepeatTrader() (gas: 0)\n[SKIP] test_fork_firstCreditNeedsInitializationGas() (gas: 0)\n[SKIP] test_fork_liveFacts() (gas: 0)\n[SKIP] test_fork_oneBlockHoldThenRedeem() (gas: 0)\n[SKIP] test_fork_readmeBudgetFundsColdFirstCredit() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 5 skipped; finished in 780.78µs (194.02µs CPU time)\n\nRan 5 tests for test/StackReceiverMainnetFork.t.sol:StackReceiverMainnetForkTest\n[SKIP] test_fork_arrivalDepositsForEveryTrader() (gas: 0)\n[SKIP] test_fork_composeIsDeliveredOnceAndOnlyFromTheEndpoint() (gas: 0)\n[SKIP] test_fork_composeRejectsValueWithoutConsumingTheQueue() (gas: 0)\n[SKIP] test_fork_gasBudgetCoversOneTenAndFiftyTraders() (gas: 0)\n[SKIP] test_fork_liveFacts() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 5 skipped; finished in 388.31µs (58.09µs CPU time)\n\nRan 7 tests for test/TraderResolution.t.sol:TraderResolutionTest\n[PASS] test_directNoCodeSenderCanBeResolvedWithoutTxOrigin() (gas: 303966)\n[PASS] test_emptyHookDataResolvesActiveMsgSenderAndCannotBeSwept() (gas: 381420)\n[PASS] test_hookDataTakesPrecedenceAndSupportsContractWallets() (gas: 477363)\n[PASS] test_invalidHookDataPaysPlainImdToKnownCallerNeverInvalidRecipient() (gas: 882426)\n[PASS] test_legacyEmptyHookDataCreditsRouterAndAnyoneCanSweep() (gas: 433080)\n[PASS] test_pausedVaultPaysPlainImdToResolvedMsgSender() (gas: 301439)\n[PASS] test_unknownContractOrInvalidMsgSenderNeverBecomesTheRecipient() (gas: 522893)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 2.79ms (1.67ms CPU time)\n\nRan 9 tests for test/TrialVenue.t.sol:TrialVenueTest\n[PASS] test_buyCreditsHalfTheFeeAndBurnsTheOtherHalf() (gas: 434566)\n[PASS] test_gasIsCheckedBeforeTheCredit() (gas: 124458)\n[PASS] test_invalidTradersNeverResolve() (gas: 65332)\n[PASS] test_ownerCanOnlySeedOnce() (gas: 56951)\n[PASS] test_pausedVaultPaysPlainImd() (gas: 305091)\n[PASS] test_registryReadsTheOwner() (gas: 17255)\n[PASS] test_routerCallerResolvesToItsActiveCaller() (gas: 784096)\n[PASS] test_sellCreditsHalfTheFeeAndBurnsTheOtherHalf() (gas: 588348)\n[PASS] test_unknownContractCallerGetsNoCashbackItIsBurned() (gas: 572622)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 2.83ms (1.38ms CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdListingTest\n[PASS] test_coldApplicationYes_deliveredWithin200k() (gas: 162585)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.31ms (1.58ms CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdRejectionTest\n[PASS] test_coldApplicationNo_deliveredWithin200k() (gas: 156227)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.86ms (2.18ms CPU time)\n\nRan 5 tests for test/OracleConsumerConformance.t.sol:OracleConsumerConformanceTest\n[PASS] test_acceptsAFreshSignatureFromTheVectorKey() (gas: 181781)\n[PASS] test_callbackSelectorIsCanonical() (gas: 3671)\n[PASS] test_digestMatchesTheProtocol() (gas: 13686)\n[PASS] test_protocolSignaturePassesVerificationBeforePanelPolicy() (gas: 69545)\n[PASS] test_tamperingTheProtocolVectorFailsSignatureVerification() (gas: 64569)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 3.53ms (1.58ms CPU time)\n\nRan 3 tests for test/RegistryCallbackGas.t.sol:RegistryColdFailureTest\n[PASS] test_coldChallengeAfterDeadline_canExpire() (gas: 128213)\n[PASS] test_coldDisagreedChallenge_deliveredWithin200k() (gas: 140179)\n[PASS] test_coldRefusedChallenge_deliveredWithin200k() (gas: 140262)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 4.52ms (223.78µs CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdDelistingTest\n[PASS] test_coldDelistedChallenge_deliveredWithin200k() (gas: 171507)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 4.62ms (169.39µs CPU time)\n\nRan 2 tests for test/RegistryPolicyRevision.t.sol:RegistryPolicyRevisionTest\n[PASS] test_applicationAndChallengeRequireResolvedTraderAndExcludeLpFees() (gas: 6829118)\n[PASS] test_lpRebateDefeatsGrossFeeFloor() (gas: 5991)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 4.82ms (3.82ms CPU time)\n\nRan 2 tests for test/VaultTrustRegression.t.sol:VaultTrustRegressionTest\n[PASS] test_dustHoldThroughStackerAndDirectVault() (gas: 910632)\n[PASS] test_vaultOwnerCanSweepCashback() (gas: 637955)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 1.41ms (989.73µs CPU time)\n\nRan 4 tests for test/RegistryCooldownBoundary.t.sol:RegistryCooldownBoundaryTest\n[PASS] test_challengeExactlyAtCooldown_succeeds() (gas: 6106573)\n[PASS] test_challengeOneSecondBeforeCooldown_reverts() (gas: 3201501)\n[PASS] test_constructor_rejectsCooldownAboveMax() (gas: 14194)\n[PASS] test_keptChallenge_doesNotRestartCooldown() (gas: 9279267)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 6.82ms (5.55ms CPU time)\n\nRan 6 tests for test/RegistrySelfBeneficiary.t.sol:RegistrySelfBeneficiaryTest\n[PASS] test_acceptedSelfChallengeHoldsSlotUntilAnswerWithoutNewCooldown() (gas: 9460831)\n[PASS] test_applicationRefusesRegistryBeforeFeeOrRequest() (gas: 171010)\n[PASS] test_contractBeneficiaryStillReceivesBondAndCanHandOff() (gas: 6434857)\n[PASS] test_handoffRefusesRegistryAndPreservesBondRecipient() (gas: 6367548)\n[PASS] test_registryOwnedProjectCannotApplyWithRegistryAsBeneficiary() (gas: 507127)\n[PASS] test_rejectedHandoffDoesNotConsumeDailyHandoff() (gas: 3287504)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 8.42ms (7.28ms CPU time)\n\nRan 1 test for test/RegistryCallbackGas.t.sol:RegistryColdDefenseTest\n[PASS] test_coldDefendedChallenge_deliveredWithin200k() (gas: 190510)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.89ms (151.96µs CPU time)\n\nRan 9 tests for test/RegistryApplicantGate.t.sol:RegistryApplicantGateTest\n[PASS] test_anyoneMayStillChallengeAnOwnedProject() (gas: 6420742)\n[PASS] test_misbehavingOwnerReadsAsNone() (gas: 15582598)\n[PASS] test_noOwnerFunctionOpenToAnyone() (gas: 3089189)\n[PASS] test_ownerChangeMovesTheRight() (gas: 3436229)\n[PASS] test_ownerMayApply() (gas: 3320997)\n[PASS] test_projectItselfMayApply() (gas: 3381856)\n[PASS] test_renouncedOwnerOpenToAnyone() (gas: 3284007)\n[PASS] test_squatterCannotBlockTheTeam() (gas: 3550174)\n[PASS] test_strangerRefusedBeforePaying() (gas: 390876)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 11.25ms (5.54ms CPU time)\n\nRan 8 tests for test/RegistryBondOwed.t.sol:RegistryBondOwedTest\n[PASS] test_blockedBeneficiary_signedYes_defendsAndOwesBond() (gas: 1111540)\n[PASS] test_blockedChallenger_expireClearsAndOwesBond() (gas: 939032)\n[PASS] test_blockedChallenger_failureClearsAndOwesBond() (gas: 1232683)\n[PASS] test_blockedChallenger_signedNo_delistsAndOwesBond() (gas: 1219736)\n[PASS] test_claimBond_refusesZeroAddressAndNothingOwed() (gas: 67159)\n[PASS] test_falseReturningToken_owesBond() (gas: 1052745)\n[PASS] test_owedBondsAccumulate() (gas: 1421953)\n[PASS] test_unblocked_paysAtOnce() (gas: 950815)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 24.14ms (11.28ms CPU time)\n\nRan 1 test for test/RemoteStackerLaunch.t.sol:RemoteStackerLaunchTest\n[PASS] test_manifestDeploysOnlyRemoteStackerWithoutExternalConstructorCalls() (gas: 6020414)\nLogs:\n  RemoteStacker runtime bytes: 8182\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 23.45ms (23.35ms CPU time)\n\nRan 5 tests for test/RobinhoodFork.t.sol:RobinhoodForkTest\n[SKIP] test_fork_OFTPeerRemovalBlocksTheOnlyExitAtomically() (gas: 0)\n[SKIP] test_fork_fiftyTradersQuoteAndFlush() (gas: 0)\n[SKIP] test_fork_flushBurnsHereAndTheEndpointAcceptsTheMessage() (gas: 0)\n[SKIP] test_fork_liveFacts() (gas: 0)\n[SKIP] test_fork_tooLittleFeeChangesNothing() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 5 skipped; finished in 364.99µs (53.95µs CPU time)\n\nRan 5 tests for test/Deployment.t.sol:DeploymentTest\n[PASS] test_emptyChainRehearsal_constructorPasses() (gas: 25975)\n[PASS] test_launchManifest_knownShape() (gas: 19101)\n[PASS] test_multichain_emptyChainRehearsal_constructorsPass() (gas: 5728964)\n[PASS] test_registry_emptyChainRehearsal_constructorPasses() (gas: 8416629)\n[PASS] test_runtimeSizeAndNoEscapeOpcodes() (gas: 4294851)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 37.05ms (40.29ms CPU time)\n\nRan 6 tests for test/RemoteStackerAuditRegression.t.sol:RemoteStackerAuditRegressionTest\n[PASS] testFuzz_clockRounding_doesNotChargeForFreshAge(uint96,uint96,uint32) (runs: 256, μ: 425100, ~: 426259)\nLogs:\n  Bound result 7098\n  Bound result 1\n  Bound result 2239345\n\n[PASS] test_bridgeRefusal_preservesCustodyAndContinuesAcceptingCredits() (gas: 1295421)\n[PASS] test_clockRounding_smallFreshCreditCannotInheritTheFullTip() (gas: 1269459)\n[PASS] test_clockRounding_uncappedBalanceAlsoFavorsTrader() (gas: 423477)\n[PASS] test_credit_refusesEthereumTokenAndEndpointBeforePullingFunds() (gas: 308594)\n[PASS] test_setEthereumRecipient_refusesEthereumTokenAndEndpoint() (gas: 400356)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 41.68ms (42.52ms CPU time)\n\nRan 23 tests for test/ProjectRegistry.t.sol:ProjectRegistryTest\n[PASS] testFuzz_apply_nameIsSafeOrRefused(bytes) (runs: 256, μ: 358363, ~: 55898)\n[PASS] testFuzz_apply_rate(uint16) (runs: 256, μ: 290383, ~: 47867)\n[PASS] test_answer_freshnessAndPanelChecks() (gas: 3531117)\n[PASS] test_answer_mustBeSignedByTheOracleForThisContract() (gas: 3219851)\n[PASS] test_answer_onlyFromTheIntake_onlyForOurOpenRequest() (gas: 3229539)\n[PASS] test_apply_bodyIsTheOracleBody() (gas: 3317268)\n[PASS] test_apply_oneOpenQuestionAtATime_andNotWhenListed() (gas: 3227423)\n[PASS] test_apply_paysExactlyTheFeeAndAsks() (gas: 3117533)\n[PASS] test_apply_validation() (gas: 567226)\n[PASS] test_callbackOutOfGas_isRecoverableThroughExpire() (gas: 6062321)\n[PASS] test_challenge_defended_bondToBeneficiary_noNewCooldown() (gas: 6362238)\n[PASS] test_challenge_failureOrExpiry_returnsTheBond_projectStaysListed() (gas: 9363040)\n[PASS] test_challenge_lost_delistsFromThisBlock_bondBack() (gas: 9339341)\n[PASS] test_challenge_onlyListed_afterCooldown_oneAtATime() (gas: 6314280)\n[PASS] test_challenge_paysFeeAndBond_bodyNamesTheReason() (gas: 6469424)\n[PASS] test_constructor_rejectsZeroAddresses() (gas: 6519)\n[PASS] test_constructor_wiring() (gas: 74067)\n[PASS] test_expire_afterADay_orWhenTheIntakeCompletedWithoutAnAnswer() (gas: 6115895)\n[PASS] test_failure_clearsTheApplication_andNeverLists() (gas: 5990106)\n[PASS] test_failure_onlyFromTheIntake_onlyForOurOpenRequest() (gas: 3057732)\n[PASS] test_no_rejects_andTheProjectCanApplyAgain() (gas: 6171710)\n[PASS] test_setBeneficiary_onlyTheBeneficiaryOfAListedProject() (gas: 3319132)\n[PASS] test_yes_listsFromThisBlock() (gas: 3160454)\nSuite result: ok. 23 passed; 0 failed; 0 skipped; finished in 61.69ms (68.29ms CPU time)\n\nRan 10 tests for test/RegistryAuditRegression.t.sol:RegistryAuditRegressionTest\n[PASS] testFuzz_applicationPaysCurrentPrice(uint96) (runs: 256, μ: 3106360, ~: 3106154)\nLogs:\n  Bound result 157198258\n\n[PASS] test_defendedChallengeFromAnotherWalletDoesNotRenewImmunity() (gas: 9334621)\n[PASS] test_defendedSelfChallengeDoesNotRenewImmunity() (gas: 21881719)\n[PASS] test_permissionlessApplicantCanOccupySlotUntilRejected() (gas: 6210874)\n[PASS] test_priceRiseAndFall_preserveBondAndExactPayment() (gas: 9528279)\n[PASS] test_retiredActionApplicationMovesNothing() (gas: 281247)\n[PASS] test_retiredActionRefusesBeforePaymentAndPreservesListing() (gas: 6409682)\n[PASS] test_signedAnswerMustReachItsOwnQuorum() (gas: 3221678)\n[PASS] test_stakingFaucetTokenCannotPayOracleFee() (gas: 4326584)\n[PASS] test_staleExactApprovalCannotSpendAnUnexpectedPriceIncrease() (gas: 345326)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 127.87ms (130.14ms CPU time)\n\nRan 20 tests for test/Stacker.t.sol:StackerTest\n[PASS] testFuzz_credit(address,uint256) (runs: 256, μ: 394606, ~: 394413)\nLogs:\n  Bound result 2\n\n[PASS] testFuzz_credit_shortAllowanceAlwaysReverts(uint256,uint256) (runs: 256, μ: 367924, ~: 368918)\nLogs:\n  Bound result 2\n  Bound result 0\n\n[PASS] testFuzz_credit_twoTradersProportional(uint256,uint256) (runs: 256, μ: 430353, ~: 430416)\nLogs:\n  Bound result 406940710783159695540378\n  Bound result 2\n\n[PASS] test_constructor_doesNotCallExistingVaultOrToken() (gas: 56148)\n[PASS] test_constructor_vaultWithoutCode_creditCannotMove() (gas: 131325)\n[PASS] test_constructor_wiringWithoutExternalCalls() (gas: 43846)\n[PASS] test_credit_manyProjectsAndTraders() (gas: 9375713)\n[PASS] test_credit_revertsOnShortAllowance() (gas: 378525)\n[PASS] test_credit_revertsOnShortBalance() (gas: 370632)\n[PASS] test_credit_revertsOnZeroShares() (gas: 383379)\n[PASS] test_credit_revertsWhenVaultPaused() (gas: 508239)\n[PASS] test_credit_sharesFollowVaultPrice() (gas: 617949)\n[PASS] test_credit_sharesGoOnlyToTrader() (gas: 374498)\n[PASS] test_credit_totalsAndEvent() (gas: 494195)\n[PASS] test_credit_zeroAmountReturnsZeroNoEvent() (gas: 80135)\n[PASS] test_credit_zeroTraderReverts() (gas: 66272)\n[PASS] test_failedFirstCredit_rollsBackApprovalAndRetriesValidation() (gas: 531891)\n[PASS] test_firstCredit_approvesOnce_andLaterCreditsStillWork() (gas: 397571)\n[PASS] test_firstCredit_revertsOnAssetMismatch() (gas: 791662)\n[PASS] test_integrator_tryCatchSurvivesPausedVault() (gas: 1053849)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 235.99ms (247.96ms CPU time)\n\nRan 5 tests for test/StackerAuditRegression.t.sol:StackerAuditRegressionTest\n[PASS] testFuzz_unreachableRecipientsRejectedBeforeAndAfterFirstCredit(uint256,bool) (runs: 256, μ: 1451661, ~: 1499757)\n[PASS] test_creditToImdTokenRevertsWithoutEffects() (gas: 362704)\n[PASS] test_creditToStackerRevertsWithoutEffects() (gas: 364669)\n[PASS] test_creditToVaultRevertsWithoutEffects() (gas: 364714)\n[PASS] test_zeroAmountStillRejectsUnreachableRecipients() (gas: 1092757)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 240.77ms (240.72ms CPU time)\n\nRan 3 tests for test/MultichainFlow.t.sol:MultichainFlowTest\n[PASS]\nMultichainFlowTest invariants:\n[PASS] invariant_receiverKeepsNothingAndVaultHoldsDeliveries\n[PASS] invariant_remoteStackerHoldsExactlyWhatIsWaiting\n MultichainFlowTest invariants (runs: 64, calls: 2048, reverts: 0)\n\n╭-------------------+----------+-------+---------+----------╮\n| Contract          | Selector | Calls | Reverts | Discards |\n+===========================================================+\n| MultichainHandler | credit   | 657   | 0       | 0        |\n|-------------------+----------+-------+---------+----------|\n| MultichainHandler | flush    | 685   | 0       | 0        |\n|-------------------+----------+-------+---------+----------|\n| MultichainHandler | pass     | 706   | 0       | 0        |\n╰-------------------+----------+-------+---------+----------╯\n\n[PASS] test_endToEnd_creditFlushDeliver() (gas: 1460013)\n[PASS] test_handlerReachesFlushes() (gas: 1419865)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 490.10ms (489.60ms CPU time)\n\nRan 2 tests for test/ProjectRegistryInvariant.t.sol:ProjectRegistryInvariantTest\n[PASS]\nProjectRegistryInvariantTest invariants:\n[PASS] invariant_holdsOnlyOpenBonds\n[PASS] invariant_listingCounts\n[PASS] invariant_recordsConsistent\n ProjectRegistryInvariantTest invariants (runs: 64, calls: 2048, reverts: 0)\n\n╭-----------------+-------------------+-------+---------+----------╮\n| Contract        | Selector          | Calls | Reverts | Discards |\n+==================================================================+\n| RegistryHandler | answer            | 269   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | applyFor          | 251   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | challengeFor      | 244   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | completeAndExpire | 253   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | expireStale       | 230   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | failFor           | 270   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | handOver          | 248   | 0       | 0        |\n|-----------------+-------------------+-------+---------+----------|\n| RegistryHandler | passTime          | 283   | 0       | 0        |\n╰-----------------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 171492\n  Bound result 87\n  Bound result 66383\n  Bound result 156777\n  Bound result 40\n  Bound result 131207\n\n[PASS] test_handlerReachesEveryOutcome() (gas: 18968878)\nLogs:\n  Bound result 50\n  Bound result 25\n  Bound result 100\n  Bound result 172800\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 809.50ms (811.11ms CPU time)\n\nRan 1 test for test/StackerInvariant.t.sol:StackerInvariantTest\n[PASS]\nStackerInvariantTest invariants:\n[PASS] invariant_stackerHoldsNothing\n[PASS] invariant_totalsConsistent\n[PASS] invariant_vaultConservation\n StackerInvariantTest invariants (runs: 64, calls: 2048, reverts: 0)\n\n╭----------------+-------------+-------+---------+----------╮\n| Contract       | Selector    | Calls | Reverts | Discards |\n+===========================================================+\n| StackerHandler | advance     | 393   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | credit      | 479   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | donate      | 381   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | redeem      | 400   | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| StackerHandler | togglePause | 395   | 0       | 0        |\n╰----------------+-------------+-------+---------+----------╯\n\nLogs:\n  Bound result 2750\n  Bound result 6\n  Bound result 9998000000000000000000\n  Bound result 1800000000\n  Bound result 8\n  Bound result 8\n  Bound result 10\n  Bound result 1\n  Bound result 4\n  Bound result 100000\n  Bound result 4\n  Bound result 1\n  Bound result 1000000000000000000000000\n  Bound result 2161\n  Bound result 994399626782175450630913\n  Bound result 3\n  Bound result 682\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 822.01ms (819.70ms CPU time)\n\nRan 17 tests for test/StackerDependencyFailures.t.sol:StackerDependencyFailuresTest\n[PASS] testFuzz_shortAssetReturnFailsBeforeAnyApproval(uint8) (runs: 1000, μ: 674653, ~: 674352)\nLogs:\n  Bound result 0\n\n[PASS] testFuzz_shortDepositReturnIsAtomic(uint8,bool,uint96) (runs: 1000, μ: 906414, ~: 931093)\nLogs:\n  Bound result 0\n  Bound result 1986\n\n[PASS] testFuzz_tokenFailureIsAtomic(uint8,uint96,bool) (runs: 1000, μ: 842877, ~: 845430)\nLogs:\n  Bound result 3\n  Bound result 5603\n\n[PASS] testFuzz_vaultPullFailureIsAtomic(uint8,uint96,bool) (runs: 1000, μ: 877040, ~: 876271)\nLogs:\n  Bound result 3\n  Bound result 5603\n\n[PASS] test_assetRevertDataBubblesAndDoesNotPrimeApproval() (gas: 670793)\n[PASS] test_dirtyAssetAddressIsRejectedBeforeAnyApproval() (gas: 673028)\n[PASS] test_falseApprovalRollsBackAndNextCreditRevalidates() (gas: 798887)\n[PASS] test_falsePullAfterMovingOneWeiRollsBackFirstApproval() (gas: 831737)\n[PASS] test_falseVaultPullRollsBackBothTransfersAndFirstApproval() (gas: 871106)\n[PASS] test_invalidBooleanApprovalRollsBack() (gas: 798824)\n[PASS] test_invalidBooleanPullRollsBack() (gas: 831884)\n[PASS] test_invalidBooleanVaultPullRollsBackEntireProjectBalance() (gas: 871365)\n[PASS] test_missingDepositReturnRollsBackActualMint() (gas: 936401)\n[PASS] test_oneByteShortDepositReturnRollsBackActualMintAndHold() (gas: 865107)\n[PASS] test_revertingApprovalRollsBackAndNextCreditRevalidates() (gas: 804553)\n[PASS] test_revertingPullBubblesErrorAfterAnEarlierCredit() (gas: 838492)\n[PASS] test_revertingVaultPullAfterEarlierCreditLeavesMatureSharesAlone() (gas: 867788)\nSuite result: ok. 17 passed; 0 failed; 0 skipped; finished in 836.56ms (1.62s CPU time)\n\nRan 16 tests for test/StackReceiver.t.sol:StackReceiverTest\n[PASS] testFuzz_delivery_mixedZeroAndPositiveShares(uint96,uint96,bool) (runs: 256, μ: 489421, ~: 489260)\nLogs:\n  Bound result 6998\n  Bound result 999998000000014818\n\n[PASS] testFuzz_delivery_sumExactlyDelivered(uint96,uint96) (runs: 256, μ: 380796, ~: 380784)\n[PASS] test_constructor_wiringWithoutExternalCalls() (gas: 8112)\n[PASS] test_delivery_assetMismatchRefusesTheFirstDelivery() (gas: 1930170)\n[PASS] test_delivery_depositsForEachTraderAndKeepsNothing() (gas: 552622)\n[PASS] test_delivery_inconsistentPreviewRollsBackInsteadOfSpendingOtherFunds() (gas: 626160)\n[PASS] test_delivery_listMustAddUpToTheAmountReceived() (gas: 363345)\n[PASS] test_delivery_onlyFromTheEndpointAndOnlyForIMD() (gas: 439485)\n[PASS] test_delivery_pausedVaultPaysPlainIMD() (gas: 584380)\n[PASS] test_delivery_rejectsNativeValueAndCanRetryWithoutIt() (gas: 556396)\n[PASS] test_delivery_revertingDepositPaysOnlyThatTraderPlainIMD() (gas: 416475)\n[PASS] test_delivery_revertingPreviewPaysOnlyThatTraderPlainIMD() (gas: 400333)\n[PASS] test_delivery_strayIMDIsNeverSpent() (gas: 344430)\n[PASS] test_delivery_zeroAmountEntryIsSkipped() (gas: 304641)\n[PASS] test_delivery_zeroSharesPaysPlainIMDWithoutDepositing() (gas: 465715)\n[PASS] test_vault_zeroShareDepositStillConsumesAssets() (gas: 275682)\nSuite result: ok. 16 passed; 0 failed; 0 skipped; finished in 913.15ms (1.76s CPU time)\n\nRan 18 tests for test/RegistryRevisionRegression.t.sol:RegistryRevisionRegressionTest\n[PASS] testFuzz_answerIsConsumedAcrossApplications(bool) (runs: 256, μ: 9345062, ~: 9341940)\n[PASS] testFuzz_beneficiaryUnlocksAfterFailureOrExpiry(bool) (runs: 256, μ: 6340199, ~: 6334146)\n[PASS] testFuzz_challengeAllowsRateChangesWithinTheRules(uint16) (runs: 256, μ: 7327188, ~: 7327363)\nLogs:\n  Bound result 26\n\n[PASS] testFuzz_validCooldownCanList(uint64) (runs: 256, μ: 3240068, ~: 3239786)\nLogs:\n  Bound result 2\n\n[PASS] test_applicationAnswerCannotDefendAChallengeAndSpendItsBond() (gas: 6302462)\n[PASS] test_beneficiaryCannotBlockEveryChallengeByTogglingWallets() (gas: 6764366)\n[PASS] test_beneficiaryCannotTransferAfterChallengeDelists() (gas: 6302572)\n[PASS] test_challengeBodyLimitsAndConsumerDomain() (gas: 6723080)\n[PASS] test_constructorRefusesOverflowingAndExcessiveCooldowns() (gas: 16556)\n[PASS] test_handoffIntervalBoundaryAndRelisting() (gas: 12674465)\n[PASS] test_invalidAnswerDoesNotConsumeUUID() (gas: 3300977)\n[PASS] test_legacyChallengeCannotChargeAfterAnyBeneficiaryHandoff() (gas: 12666281)\n[PASS] test_openChallengeLocksBeneficiaryAndDefendedBondDestination() (gas: 6742710)\n[PASS] test_pinnedChallengePreservesCooldownAndSlotRules() (gas: 6415451)\n[PASS] test_pinnedChallengeRefusesFrontrunBeforeAnyPayment() (gas: 6854511)\n[PASS] test_selfChallengeOccupiesSlotOnlyUntilItSettles() (gas: 9349350)\n[PASS] test_settingSameBeneficiaryDoesNotDisableLegacyChallenge() (gas: 6329990)\n[PASS] test_zeroAndMaximumCooldownCanList() (gas: 6390657)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 948.97ms (1.74s CPU time)\n\nRan 8 tests for test/RegistryHandoffInterval.t.sol:RegistryHandoffIntervalTest\n[PASS] testFuzz_challengeNamingTheWalletInForceAlwaysFiles(uint64) (runs: 1000, μ: 6539345, ~: 6539487)\nLogs:\n  Bound result 10813\n\n[PASS] testFuzz_secondHandoffBoundary(uint64) (runs: 1000, μ: 3316289, ~: 3314072)\nLogs:\n  Bound result 57179\n\n[PASS] test_checksBeforeTheIntervalStillComeFirst() (gas: 6493598)\n[PASS] test_clockIsPerProject() (gas: 6503818)\n[PASS] test_expiredAndFailedQuestionsLeaveTheClockAlone() (gas: 9417371)\n[PASS] test_handoffEmitsEventAndStartsExactInterval() (gas: 3290917)\n[PASS] test_intervalRefusesAThirdWalletToo() (gas: 3333746)\n[PASS] test_relistingByApplicationNamesANewWalletWithoutAHandoff() (gas: 18821659)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 949.20ms (1.67s CPU time)\n\nRan 7 tests for test/StackerExternalCalls.t.sol:StackerExternalCallsTest\n[PASS] testFuzz_creditMatchesDirectDepositFromSameVaultState(uint96,uint96,uint96) (runs: 1000, μ: 976883, ~: 976865)\nLogs:\n  Bound result 31667095553067255107401\n  Bound result 1745083202\n  Bound result 905940478\n\n[PASS] testFuzz_lateFailureRollsBackAllEffects(uint96,bool,bool) (runs: 1000, μ: 2935821, ~: 2941287)\nLogs:\n  Bound result 3260\n\n[PASS] test_anotherCallersApprovalCannotBeSpent() (gas: 598595)\n[PASS] test_noReturnTokenStillMovesExactAssetsAndShares() (gas: 3117679)\n[PASS] test_oneWeiLateRevertRollsBackFirstApproval() (gas: 2937621)\n[PASS] test_tokenReentryDuringApprovalAndPullCannotCreateExtraCashback() (gas: 3738736)\n[PASS] test_zeroShareReturnRollsBackAnActualMint() (gas: 2925987)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 949.35ms (1.08s CPU time)\n\nRan 21 tests for test/RemoteStacker.t.sol:RemoteStackerTest\n[PASS] testFuzz_flush_conservesEveryWei(uint96,uint96,uint32) (runs: 256, μ: 657448, ~: 943721)\nLogs:\n  Bound result 1950\n  Bound result 5290\n\n[PASS] testFuzz_tip_neverAboveTwoPercent(uint64,uint96) (runs: 256, μ: 182631, ~: 182651)\nLogs:\n  Bound result 2\n\n[PASS] test_constructor_wiringWithoutExternalCalls() (gas: 3842)\n[PASS] test_credit_clockIsAmountWeighted() (gas: 292087)\n[PASS] test_credit_contractWalletPaidPlainUnlessRegistered() (gas: 665088)\n[PASS] test_credit_eip7702WalletGoesThroughTheQueue() (gas: 290204)\n[PASS] test_credit_queuesForPlainWallet() (gas: 226667)\n[PASS] test_credit_rejectsInvalidTraders() (gas: 172391)\n[PASS] test_credit_shortAllowanceOrBalanceReverts() (gas: 187984)\n[PASS] test_credit_zeroAmountMovesNothing() (gas: 58649)\n[PASS] test_flush_atMostFiftyRecipients() (gas: 85104)\n[PASS] test_flush_dustIsNeverTippedTwice() (gas: 875951)\n[PASS] test_flush_fiftyRecipients() (gas: 9487069)\n[PASS] test_flush_isAtomic_sendFailureChangesNothing() (gas: 425526)\n[PASS] test_flush_nothingToFlushReverts() (gas: 279365)\n[PASS] test_flush_sendsRoundedAmountsPaysTipAndRefundsExcess() (gas: 1082997)\n[PASS] test_flush_skipsEmptyAndDuplicateAndDustOnlyRecipients() (gas: 892843)\n[PASS] test_flush_traderCanFlushThemselvesAtOnce() (gas: 760986)\n[PASS] test_setEthereumRecipient_refusesInvalidAndIsPerCaller() (gas: 358628)\n[PASS] test_tip_growsLinearlyAndCapsAtTwoPercent() (gas: 249888)\n[PASS] test_tip_newCashbackNeverInheritsACappedClock() (gas: 296946)\nSuite result: ok. 21 passed; 0 failed; 0 skipped; finished in 949.00ms (978.66ms CPU time)\n\nRan 15 tests for test/StackReceiverAdversarial.t.sol:StackReceiverAdversarialTest\n[PASS] testFuzz_headerFieldsPreserveAmountSourceAndBeneficiaries(uint64,uint32,bytes32,bytes32,uint64) (runs: 1000, μ: 461553, ~: 461816)\nLogs:\n  Bound result 388\n\n[PASS] testFuzz_shortOFTHeaderIsAtomic(uint8) (runs: 1000, μ: 428753, ~: 428483)\nLogs:\n  Bound result 8\n\n[PASS] testFuzz_truncatedListIsAtomic(uint16) (runs: 1000, μ: 455355, ~: 450120)\nLogs:\n  Bound result 160\n\n[PASS] test_failedApprovalLeavesFirstDeliveryRetryable() (gas: 833072)\n[PASS] test_forgedComposeCannotSpendAPendingArrival() (gas: 1110024)\n[PASS] test_initializationIsLazyAndApprovalIsNotRepeated() (gas: 983971)\n[PASS] test_lateTransferFailureRollsBackEarlierDepositAndCanRetry() (gas: 1034797)\n[PASS] test_maximumSharedDecimalArrivalCanBeDelivered() (gas: 435078)\n[PASS] test_nestedAuthenticatedComposeIsBlockedAndStillRetryable() (gas: 3325460)\n[PASS] test_nonCanonicalAddressInListIsRejectedAtomically() (gas: 438638)\n[PASS] test_oneWeiAllocationAndDuplicateTradersPreserveEveryWei() (gas: 467004)\n[PASS] test_overlistedMessageCannotUseAnotherMessagesReserve() (gas: 849597)\n[PASS] test_pendingArrivalsCanBeComposedOutOfOrderAndOnlyOnce() (gas: 1074045)\n[PASS] test_sumOverflowRevertsBeforeApprovalOrDelivery() (gas: 440856)\n[PASS] test_zeroArrivalDoesNotConsumeUnrelatedFundsOrStampTraders() (gas: 345109)\nSuite result: ok. 15 passed; 0 failed; 0 skipped; finished in 945.58ms (1.37s CPU time)\n\nRan 20 tests for test/RegistryAdversarial.t.sol:RegistryAdversarialTest\n[PASS] testFuzz_nonCanonicalBoolCannotDelist(uint256) (runs: 1000, μ: 6554669, ~: 6554617)\nLogs:\n  Bound result 718\n\n[PASS] testFuzz_oldCallbacksCannotCloseReplacementApplication(uint8) (runs: 1000, μ: 6639542, ~: 6646682)\nLogs:\n  Bound result 1\n\n[PASS] testFuzz_pendingDeadlineStillAllowsAnswerButNotExpiry(bool,bool) (runs: 1000, μ: 5111989, ~: 6568873)\n[PASS] testFuzz_shortBoolEncodingCannotReleaseBond(uint8) (runs: 1000, μ: 6433609, ~: 6433340)\nLogs:\n  Bound result 0\n\n[PASS] test_answerBeforeAskToleranceHasExactBoundary() (gas: 3414922)\n[PASS] test_attestationExpiryIsInclusive() (gas: 3405381)\n[PASS] test_beneficiaryHandoverWaitsForSettlementAndRevokesOldWallet() (gas: 9831731)\n[PASS] test_challengeCooldownHasExactBoundary() (gas: 6413357)\n[PASS] test_challengeShortAllowanceCannotBorrowDonatedFunds() (gas: 3592763)\n[PASS] test_emptyAndMalformedSignaturesCannotSettle() (gas: 4190907)\n[PASS] test_everySignedFieldIsAuthenticatedBeforeABondCanMove() (gas: 10613885)\n[PASS] test_futureIssuedAtToleranceHasExactBoundary() (gas: 3405670)\n[PASS] test_intakeRevertRollsBackFeeBondApprovalAndOpenRecord() (gas: 6686933)\n[PASS] test_maximumFeeAdditionRevertsWithoutChangingListing() (gas: 3529365)\n[PASS] test_oldChallengeCannotRefundTwiceOrCloseNewChallenge() (gas: 9956450)\n[PASS] test_oneSecondAfterDeadlineCannotReleaseBondToBeneficiary() (gas: 6561303)\n[PASS] test_signatureForSameAddressOnAnotherChainCannotReleaseBond() (gas: 6575234)\n[PASS] test_starvedChallengeCallbackRefundsOnlyChallenger() (gas: 6558379)\n[PASS] test_thirdPartyPaidQuestionCannotListOurProject() (gas: 3627102)\n[PASS] test_tokenReturningFalseCannotCreatePaidRequest() (gas: 3537524)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 949.42ms (2.02s CPU time)\n\nRan 8 tests for test/StackerGas.t.sol:StackerGasTest\n[PASS] testFuzz_readmeLateFailurePaysOnceAndNextCreditWorks(uint96,bool,bool) (runs: 1000, μ: 3268136, ~: 3268017)\nLogs:\n  Bound result 2083\n\n[PASS] test_oldGasCapFailsRepeatedlyAndDoesNotPrimeVault() (gas: 600749)\n[PASS] test_readmeBudgetFundsColdFirstCredit() (gas: 359519)\n[PASS] test_readmeFallbackAfterFirstMintReturnsZeroShares() (gas: 3264309)\n[PASS] test_readmeFallbackAfterRepeatMintReverts() (gas: 3264412)\n[PASS] test_readmeFallbackHasGasEvenWhenCreditExhaustsItsBudget() (gas: 473042)\n[PASS] test_readmeFallbackPaysPlainImdWhenVaultFails() (gas: 272236)\n[PASS] test_readmeGasGuardRejectsLowEstimateBeforeFallback() (gas: 94010)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 949.41ms (950.36ms CPU time)\n\nRan 19 tests for test/StackerEdges.t.sol:StackerEdgesTest\n[PASS] testFuzz_credit_pausedAlwaysRevertsAndMovesNothing(address,uint256) (runs: 1000, μ: 234723, ~: 234510)\nLogs:\n  Bound result 821302322922237110812744\n\n[PASS] testFuzz_credit_repeatedCyclesExtractNoDust(uint256,uint8) (runs: 1000, μ: 1523270, ~: 1370398)\nLogs:\n  Bound result 1\n\n[PASS] testFuzz_credit_shortBalanceAlwaysReverts(uint256,uint256) (runs: 1000, μ: 388856, ~: 388788)\nLogs:\n  Bound result 182422319596\n  Bound result 164518065397\n\n[PASS] testFuzz_credit_thenRedeem_noFreeProfit(uint256,uint256,uint256) (runs: 1000, μ: 737025, ~: 761926)\nLogs:\n  Bound result 99999999999999990000001\n  Bound result 9000000000000000000\n  Bound result 87777680170677855896573\n\n[PASS] testFuzz_credit_traderValueWithinOneShareOfAmount(uint256,uint256,uint256) (runs: 1000, μ: 682104, ~: 689024)\nLogs:\n  Bound result 99999999999999990000001\n  Bound result 9000000000000000000\n  Bound result 87777680170677855896573\n\n[PASS] testFuzz_credit_zeroSharesGuardTracksVaultPreview(uint256,uint256) (runs: 1000, μ: 488559, ~: 510594)\nLogs:\n  Bound result 3674345000195162462\n  Bound result 182422319596\n\n[PASS] test_credit_allowanceConsumedExactly_secondCallReverts() (gas: 615815)\n[PASS] test_credit_astronomicalButRepresentable() (gas: 365250)\n[PASS] test_credit_balanceConsumedExactly_secondCallReverts() (gas: 591245)\n[PASS] test_credit_eventMatchesReturnAndBalanceDeltaAtNonUnitPrice() (gas: 662927)\n[PASS] test_credit_maxUint_revertsCleanlyInVaultMath() (gas: 238919)\n[PASS] test_credit_oneWei() (gas: 361849)\n[PASS] test_credit_pausedBeatsShortAllowance_nothingPulled() (gas: 468574)\n[PASS] test_credit_projectIsTrader_countedOnBothSides() (gas: 326778)\n[PASS] test_credit_reentrancyFromVaultIsBlocked() (gas: 737091)\n[PASS] test_credit_zeroAmountWhilePaused_returnsZeroWithoutTouchingVault() (gas: 91175)\n[PASS] test_credit_zeroTraderWhilePaused_stillZeroTrader() (gas: 89528)\n[PASS] test_credit_zeroTraderWithShortAllowance_stillZeroTrader() (gas: 285166)\n[PASS] test_strayImdInStacker_isNeverSpentByCredit() (gas: 522405)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 949.42ms (4.49s CPU time)\n\nRan 8 tests for test/RegistryBodyProperties.t.sol:RegistryBodyPropertiesTest\n[PASS] testFuzz_applicationBodyRoundTripsValidText(bytes32,uint8,uint8,uint16) (runs: 1000, μ: 3624311, ~: 3583664)\nLogs:\n  Bound result 3\n  Bound result 15\n  Bound result 32\n\n[PASS] testFuzz_challengeBodyRoundTripsValidText(bytes32,uint16) (runs: 1000, μ: 6794577, ~: 6730514)\nLogs:\n  Bound result 29\n\n[PASS] test_applicationMaximumTextAndRate() (gas: 3862252)\n[PASS] test_applicationMinimumTextAndRate() (gas: 3504752)\n[PASS] test_challengeMaximumReason() (gas: 7118201)\n[PASS] test_challengeMinimumReason() (gas: 6643534)\n[PASS] test_everyForbiddenByteIsRejectedInEveryUserTextFieldBeforePayment() (gas: 53799580)\n[PASS] test_textLengthsJustOutsideLimitsAreAtomic() (gas: 3750569)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 949.51ms (1.88s CPU time)\n\nRan 2 tests for test/StackerInvariantExtended.t.sol:StackerInvariantExtendedTest\n[PASS]\nStackerInvariantExtendedTest invariants:\n[PASS] invariant_imdSupplyConservation\n[PASS] invariant_pauseAndOwnershipStateMachine\n[PASS] invariant_stackerHoldsNothing\n[PASS] invariant_stackerTotals\n[PASS] invariant_vaultConservation\n[PASS] invariant_vaultSolvent\n StackerInvariantExtendedTest invariants (runs: 128, calls: 6144, reverts: 0)\n\n╭-----------------+----------------+-------+---------+----------╮\n| Contract        | Selector       | Calls | Reverts | Discards |\n+===============================================================+\n| ExtendedHandler | advance        | 486   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | credit         | 464   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | creditTiny     | 476   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | depositDirect  | 486   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | donate         | 454   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | faucet         | 492   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | redeem         | 484   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | renounce       | 466   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | rescue         | 461   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | setAllowance   | 463   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | togglePause    | 489   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | transferShares | 453   | 0       | 0        |\n|-----------------+----------------+-------+---------+----------|\n| ExtendedHandler | withdraw       | 470   | 0       | 0        |\n╰-----------------+----------------+-------+---------+----------╯\n\nLogs:\n  Bound result 600000000000000000\n  Bound result 5000\n  Bound result 10461\n  Bound result 834077487701345015948\n  Bound result 46659901\n  Bound result 300\n  Bound result 4999999999999999999997\n  Bound result 4\n  Bound result 2583896720532731514909\n  Bound result 51\n  Bound result 1000000000000000\n  Bound result 350000\n  Bound result 5000000000000000000\n  Bound result 7409\n  Bound result 988555528\n  Bound result 1294\n  Bound result 336990199\n  Bound result 6109\n  Bound result 10\n  Bound result 113403918\n  Bound result 3795\n  Bound result 1780\n  Bound result 24999999999999999999999\n  Bound result 1800000000\n  Bound result 1009\n  Bound result 104801936\n  Bound result 9894902418916765200567\n  Bound result 2\n\n[PASS] test_handlerReachesEveryCreditOutcome() (gas: 4540803)\nLogs:\n  Bound result 1000000000000000000\n  Bound result 5\n  Bound result 100000000000000000000\n  Bound result 1\n  Bound result 50000000000000000000\n  Bound result 7\n  Bound result 24000000000000000000000\n  Bound result 100000000000000000000\n  Bound result 10000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 372757101\n  Bound result 684498244\n  Bound result 1000000000000000000\n  Bound result 2949193105425070115\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 5.04s (5.04s CPU time)\n\nRan 3 tests for test/RegistryAccountingInvariant.t.sol:RegistryAccountingInvariantTest\n[PASS]\nRegistryAccountingInvariantTest invariants:\n[PASS] invariant_eachActorGetsExactlyTheirEntitlement\n[PASS] invariant_requestsAndListingsMatchIndependentHistory\n RegistryAccountingInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭---------------------------+----------------------+-------+---------+----------╮\n| Contract                  | Selector             | Calls | Reverts | Discards |\n+===============================================================================+\n| RegistryAccountingHandler | ask                  | 1831  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | donate               | 1782  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | expire               | 1805  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | handOver             | 1800  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | passTime             | 1881  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | reprice              | 1868  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | settle               | 1807  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | unauthorizedOrReplay | 1812  | 0       | 0        |\n|---------------------------+----------------------+-------+---------+----------|\n| RegistryAccountingHandler | unsafeChallenge      | 1798  | 0       | 0        |\n╰---------------------------+----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 1681\n  Bound result 85456\n  Bound result 46\n  Bound result 167368\n  Bound result 31\n  Bound result 495701523396558847\n  Bound result 1\n  Bound result 28\n  Bound result 134537\n  Bound result 1\n  Bound result 14124\n  Bound result 11216\n  Bound result 26\n  Bound result 22487\n  Bound result 993949379993476706\n  Bound result 5416\n  Bound result 13070\n  Bound result 11619\n  Bound result 48\n  Bound result 791112145\n  Bound result 16344\n  Bound result 5\n  Bound result 1387\n  Bound result 1\n  Bound result 48\n  Bound result 91\n  Bound result 9004\n  Bound result 18\n  Bound result 2075\n  Bound result 46\n  Bound result 159658\n  Bound result 2\n  Bound result 10800\n  Bound result 33\n  Bound result 2\n  Bound result 4\n  Bound result 791112146\n  Bound result 25\n  Bound result 14569\n  Bound result 73\n  Bound result 264337593543950335\n  Bound result 22798\n  Bound result 25\n\n[PASS] test_handlerReachesAllPayoutsAndChecksAfterEachTransition() (gas: 40458439)\nLogs:\n  Bound result 25\n  Bound result 1\n  Bound result 100\n  Bound result 0\n  Bound result 50\n  Bound result 0\n  Bound result 50\n  Bound result 1\n  Bound result 50\n  Bound result 0\n  Bound result 50\n  Bound result 2\n  Bound result 50\n  Bound result 3\n  Bound result 50\n  Bound result 4\n  Bound result 50\n  Bound result 172800\n  Bound result 1\n  Bound result 0\n  Bound result 50\n  Bound result 123\n  Bound result 0\n  Bound result 50\n  Bound result 1\n  Bound result 50\n\n[PASS] test_handlerRetainsBeneficiaryPinAcrossHandoffsAndRelisting() (gas: 16504440)\nLogs:\n  Bound result 50\n  Bound result 0\n  Bound result 0\n  Bound result 50\n  Bound result 500000000000000000\n  Bound result 86400\n  Bound result 1\n  Bound result 50\n  Bound result 1\n  Bound result 100\n  Bound result 0\n  Bound result 50\n  Bound result 0\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 6.13s (6.14s CPU time)\n\nRan 2 tests for test/StackReceiverPendingInvariant.t.sol:StackReceiverPendingInvariantTest\n[PASS]\nStackReceiverPendingInvariantTest invariants:\n[PASS] invariant_countersCountOnlySuccessfulDeliveryOncePerSource\n[PASS] invariant_eachTraderReceivesOnlyTheirFundedAllocation\n[PASS] invariant_pendingAndUnsolicitedIMDAreFullyBacked\n StackReceiverPendingInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭------------------------+----------+-------+---------+----------╮\n| Contract               | Selector | Calls | Reverts | Discards |\n+================================================================+\n| ReceiverPendingHandler | arrive   | 3375  | 0       | 0        |\n|------------------------+----------+-------+---------+----------|\n| ReceiverPendingHandler | compose  | 3227  | 0       | 0        |\n|------------------------+----------+-------+---------+----------|\n| ReceiverPendingHandler | donate   | 3232  | 0       | 0        |\n|------------------------+----------+-------+---------+----------|\n| ReceiverPendingHandler | pause    | 3322  | 0       | 0        |\n|------------------------+----------+-------+---------+----------|\n| ReceiverPendingHandler | reject   | 3228  | 0       | 0        |\n╰------------------------+----------+-------+---------+----------╯\n\nLogs:\n  Bound result 3\n  Bound result 4\n  Bound result 4746\n  Bound result 3597254113\n  Bound result 3\n  Bound result 6\n  Bound result 6763896310867958321642\n  Bound result 3116\n  Bound result 6\n  Bound result 6296\n  Bound result 5213\n  Bound result 5928\n  Bound result 17828\n  Bound result 1\n  Bound result 2\n  Bound result 1\n  Bound result 124\n  Bound result 2042\n  Bound result 3\n  Bound result 15816\n  Bound result 1856\n  Bound result 1\n  Bound result 5\n  Bound result 49\n  Bound result 2\n  Bound result 4\n  Bound result 302730467259148399216177\n  Bound result 2\n\n[PASS] test_handlerReachesRetriesMixedPayoutsReplayAndOutOfOrderDelivery() (gas: 4267751)\nLogs:\n  Bound result 3\n  Bound result 4\n  Bound result 7000000000000000000\n  Bound result 6\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 7.51s (7.51s CPU time)\n\nRan 3 tests for test/StackerHoldInvariant.t.sol:StackerHoldInvariantTest\n[PASS]\nStackerHoldInvariantTest invariants:\n[PASS] invariant_balancesAndHistoricalCashbackAreConserved\n[PASS] invariant_holdFollowsSharesAndCannotBeClearedByTimestamp\n StackerHoldInvariantTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭--------------------+----------------------+-------+---------+----------╮\n| Contract           | Selector             | Calls | Reverts | Discards |\n+========================================================================+\n| StackerHoldHandler | advance              | 2062  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | credit               | 2032  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | donate               | 2084  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | exit                 | 2007  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | probeRenouncedPowers | 2028  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | transferShares       | 2067  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | unauthorizedExit     | 2114  | 0       | 0        |\n|--------------------+----------------------+-------+---------+----------|\n| StackerHoldHandler | zeroAction           | 1990  | 0       | 0        |\n╰--------------------+----------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 7039\n  Bound result 0\n  Bound result 5\n  Bound result 2019\n  Bound result 9532\n  Bound result 0\n  Bound result 9999999999999999999996\n  Bound result 10\n  Bound result 1612\n  Bound result 0\n  Bound result 0\n  Bound result 8\n  Bound result 0\n  Bound result 5642422059044503281882\n  Bound result 0\n  Bound result 118201\n  Bound result 0\n  Bound result 4\n  Bound result 2827\n  Bound result 50\n  Bound result 8\n  Bound result 0\n  Bound result 12345\n  Bound result 5\n  Bound result 50000000000000000\n  Bound result 8\n  Bound result 161088742\n  Bound result 24576\n  Bound result 1\n  Bound result 5369\n  Bound result 0\n  Bound result 2176139945407464162187\n  Bound result 7\n  Bound result 0\n  Bound result 3658119787084322032923\n  Bound result 7\n\n[PASS] test_handlerExercisesHeldDelegatedAndMatureExits() (gas: 3851200)\nLogs:\n  Bound result 10000000000000000000\n  Bound result 2000000000000000000000000\n  Bound result 1000000000000000000000000\n  Bound result 1\n  Bound result 1000000000000000000\n  Bound result 1\n  Bound result 1000000000000000000\n  Bound result 1000000000000000000000000\n  Bound result 1000000000000000000\n  Bound result 1000000000000000000000000\n  Bound result 1000000000000000000000000\n\n[PASS] test_handlerExercisesZeroSharesFailureBeforeInitialization() (gas: 2872846)\nLogs:\n  Bound result 1000000000000000000\n  Bound result 1\n  Bound result 10000000000000000000\n\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 7.93s (7.93s CPU time)\n\nRan 48 test suites in 7.93s (39.88s CPU time): 303 tests passed, 0 failed, 26 skipped (329 total tests)\n","passed":true},{"durationMs":142,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"ProjectRegistry.applyListing(address,string,string,uint16,address)\",\"ProjectRegistry.challenge(address,string)\",\"ProjectRegistry.challengeForBeneficiary(address,string,address)\",\"ProjectRegistry.claimBond(address)\",\"ProjectRegistry.expire(address)\",\"ProjectRegistry.onOracleFailure(bytes32,uint8,bytes32,uint16,uint16,bytes)\",\"ProjectRegistry.onOracleResult(bytes32,(bytes32,uint256,bytes32,uint8,bytes,uint256,uint64,uint64,bytes32,bytes32,uint16,uint16,uint16,uint64,uint64),bytes)\",\"ProjectRegistry.setBeneficiary(address,address)\",\"RemoteStacker.credit(address,uint256)\",\"RemoteStacker.flush(address[])\",\"RemoteStacker.setEthereumRecipient(address)\",\"StackReceiver.lzCompose(address,bytes32,bytes,address,bytes)\",\"Stacker.credit(address,uint256)\"],\"files\":{\".github/ISSUE_TEMPLATE/listing-application.yml\":88,\".gitignore\":5,\"ADAPTATION.md\":60,\"NEXT_SESSION.md\":71,\"README.md\":317,\"app.js\":2393,\"docs/data-api.md\":97,\"docs/design.md\":323,\"docs/explainer.html\":247,\"docs/history.md\":455,\"docs/launches.md\":51,\"docs/listing.md\":97,\"docs/panel-rules-v2-rehearsal-body.json\":28,\"docs/panel-rules-v2.md\":90,\"docs/plea-handoff.md\":73,\"docs/plea-test-run-2.md\":34,\"favicon.svg\":11,\"foundry.toml\":26,\"index.html\":171,\"jobs/1-sepolia-launch.md\":23,\"jobs/10-sepolia-v4-launch.md\":13,\"jobs/11-sepolia-v5-launch.md\":13,\"jobs/12-mainnet-registry-launch.md\":14,\"jobs/13-sepolia-v6-launch.md\":13,\"jobs/14-mainnet-stackreceiver-launch.md\":13,\"jobs/15-robinhood-remotestacker-launch.md\":12,\"jobs/2-sepolia-site.md\":18,\"jobs/3-list-plea.md\":21,\"jobs/4-mainnet-launch.md\":16,\"jobs/5-sepolia-v2-launch.md\":12,\"jobs/5-sepolia-v2-site.md\":10,\"jobs/6-sepolia-v2-site.md\":30,\"jobs/7-sepolia-v2-site-pages.md\":22,\"jobs/8-sepolia-v3-launch.md\":13,\"jobs/9-sepolia-v3-relaunch.md\":13,\"jobs/requests/10-sepolia-v4-launch.json\":31,\"jobs/requests/11-sepolia-v5-launch.json\":31,\"jobs/requests/12-mainnet-registry-launch.json\":31,\"jobs/requests/13-sepolia-v6-launch.json\":31,\"jobs/requests/14-mainnet-stackreceiver-launch.json\":31,\"jobs/requests/3-list-plea.json\":10,\"jobs/requests/4-mainnet-launch.json\":31,\"jobs/requests/5-sepolia-v2-launch-only.json\":31,\"jobs/requests/5-sepolia-v2-workflow.json\":50,\"jobs/requests/6-sepolia-v2-site.json\":15,\"jobs/requests/7-sepolia-v2-site-pages.json\":15,\"jobs/requests/8-sepolia-v3-launch.json\":31,\"jobs/requests/9-sepolia-v3-relaunch.json\":31,\"launch.json\":15,\"listings/sepolia.json\":1,\"llms.txt\":48,\"remappings.txt\":3,\"src/ProjectRegistry.sol\":713,\"src/Stacker.sol\":104,\"src/multichain/LayerZero.sol\":112,\"src/multichain/RemoteStacker.sol\":314,\"src/multichain/StackReceiver.sol\":157,\"src/oracle/OracleAttestation.sol\":265,\"style.css\":1666,\"test/ADVERSARIAL_COVERAGE.md\":42,\"test/Base.t.sol\":58,\"test/Deployment.t.sol\":194,\"test/FactoryRehearsal.t.sol\":47,\"test/MAINNET_TEST_COVERAGE.md\":45,\"test/MainnetFork.t.sol\":141,\"test/MainnetLaunchRegression.t.sol\":99,\"test/MultichainFlow.t.sol\":184,\"test/OracleConsumerConformance.t.sol\":140,\"test/ProjectRegistry.t.sol\":596,\"test/ProjectRegistryInvariant.t.sol\":238,\"test/RegistryAccountingInvariant.t.sol\":552,\"test/RegistryAdversarial.t.sol\":446,\"test/RegistryApplicantGate.t.sol\":166,\"test/RegistryAuditRegression.t.sol\":157,\"test/RegistryBodyProperties.t.sol\":224,\"test/RegistryBondOwed.t.sol\":290,\"test/RegistryCallbackGas.t.sol\":111,\"test/RegistryCooldownBoundary.t.sol\":44,\"test/RegistryHandoffInterval.t.sol\":235,\"test/RegistryMainnetFork.t.sol\":110,\"test/RegistryPolicyRevision.t.sol\":50,\"test/RegistryRevisionRegression.t.sol\":418,\"test/RegistrySelfBeneficiary.t.sol\":148,\"test/RegistrySepoliaFork.t.sol\":113,\"test/RemoteStacker.t.sol\":424,\"test/RemoteStackerAuditRegression.t.sol\":182,\"test/RemoteStackerLaunch.t.sol\":105,\"test/RobinhoodFork.t.sol\":184,\"test/SepoliaFork.t.sol\":141,\"test/StackReceiver.t.sol\":344,\"test/StackReceiverAdversarial.t.sol\":321,\"test/StackReceiverCoverage.md\":61,\"test/StackReceiverLaunch.t.sol\":118,\"test/StackReceiverMainnetFork.t.sol\":255,\"test/StackReceiverPendingInvariant.t.sol\":331,\"test/Stacker.t.sol\":423,\"test/StackerAuditRegression.t.sol\":99,\"test/StackerDependencyFailures.t.sol\":288,\"test/StackerEdges.t.sol\":391,\"test/StackerExternalCalls.t.sol\":257,\"test/StackerGas.t.sol\":186,\"test/StackerHoldInvariant.t.sol\":346,\"test/StackerInvariant.t.sol\":148,\"test/StackerInvariantExtended.t.sol\":495,\"test/TraderResolution.t.sol\":229,\"test/TrialVenue.t.sol\":147,\"test/VaultTrustRegression.t.sol\":41,\"test/helpers/StackReceiverFixture.sol\":101,\"test/mocks/MockIntake.sol\":108,\"test/mocks/MockOFT.sol\":138,\"test/mocks/QueuedComposeEndpoint.sol\":40,\"test/mocks/TestIMD.sol\":41,\"test/mocks/TestSIMD.sol\":178,\"test/trial/SelfCredit.sol\":35,\"test/trial/TrialVenue.sol\":222,\"tools/site-check/.gitignore\":2,\"tools/site-check/README.md\":35,\"tools/site-check/behavior.mjs\":124,\"tools/site-check/flows.mjs\":173,\"tools/site-check/fork-answer.sh\":27,\"tools/site-check/layout.mjs\":88,\"tools/site-check/lib.mjs\":181,\"tools/site-check/package-lock.json\":22,\"tools/site-check/package.json\":9,\"tools/site-check/refresh-bug.mjs\":50,\"tools/site-check/trial.mjs\":158,\"tools/snapshot/build.mjs\":291,\"tools/snapshot/chains.json\":29,\"tools/snapshot/test.sh\":57},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":2611,"exitCode":0,"name":"slither","output":"[medium/medium] divide-before-multiply at src/multichain/RemoteStacker.sol:262: RemoteStacker._plan(address[]) (src/multichain/RemoteStacker.sol#262-292) performs a multiplication on the result of a division:\n[medium/medium] divide-before-multiply at src/multichain/RemoteStacker.sol:262: RemoteStacker._plan(address[]) (src/multichain/RemoteStacker.sol#262-292) performs a multiplication on the result of a division:\n[medium/high] incorrect-equality at src/multichain/RemoteStacker.sol:262: RemoteStacker._plan(address[]) (src/multichain/RemoteStacker.sol#262-292) uses a dangerous strict equality:\n[medium/high] locked-ether at src/multichain/LayerZero.sol:52: Contract locking ether found:\n[medium/medium] uninitialized-local at src/multichain/StackReceiver.sol:104: StackReceiver._check(address[],uint256[],uint256).sum (src/multichain/StackReceiver.sol#104) is a local variable never initialized\n[medium/medium] unused-return at src/multichain/RemoteStacker.sol:232: RemoteStacker.flush(address[]) (src/multichain/RemoteStacker.sol#232-258) ignores return value by (receipt,None) = IOFT(address(IMD)).send{value: msg.value}(_sendParam(plan),MessagingFee(msg.value,0),msg.sender) (src/multichain/RemoteStacker.sol#248-250)\n[medium/medium] unused-return at src/oracle/OracleAttestation.sol:171: OracleAttestationConsumer._verifyAttestation(OracleAttestation.Attestation,bytes) (src/oracle/OracleAttestation.sol#171-189) ignores return value by (recovered,err,None) = ECDSA.tryRecover(digest,signature) (src/oracle/OracleAttestation.sol#184)\n[medium/medium] unused-return at src/ProjectRegistry.sol:442: ProjectRegistry.expire(address) (src/ProjectRegistry.sol#442-451) ignores return value by (None,None,None,completed) = intake.requests(intakeId) (src/ProjectRegistry.sol#447)\n[low/medium] calls-loop at src/multichain/StackReceiver.sol:140: StackReceiver._tryDeposit(uint256,address) (src/multichain/StackReceiver.sol#140-156) has external calls inside a loop: shares = SIMD.deposit(amount,trader) (src/multichain/StackReceiver.sol#147-155)\n[low/medium] calls-loop at src/multichain/StackReceiver.sol:140: StackReceiver._tryDeposit(uint256,address) (src/multichain/StackReceiver.sol#140-156) has external calls inside a loop: preview = IStakedIMDPreview(address(SIMD)).previewDeposit(amount) (src/multichain/StackReceiver.sol#142-146)\n[low/medium] reentrancy-benign at src/ProjectRegistry.sol:344: Reentrancy in ProjectRegistry._ask(address,ProjectRegistry.Project,string,uint256) (src/ProjectRegistry.sol#344-362):\n[low/medium] reentrancy-benign at src/Stacker.sol:74: Reentrancy in Stacker.credit(address,uint256) (src/Stacker.sol#74-103):\n[low/medium] reentrancy-benign at src/multichain/StackReceiver.sol:80: Reentrancy in StackReceiver.lzCompose(address,bytes32,bytes,address,bytes) (src/multichain/StackReceiver.sol#80-97):\n[low/medium] timestamp at src/multichain/RemoteStacker.sol:262: RemoteStacker._plan(address[]) (src/multichain/RemoteStacker.sol#262-292) uses timestamp for comparisons\n[low/medium] timestamp at src/multichain/RemoteStacker.sol:118: RemoteStacker.credit(address,uint256) (src/multichain/RemoteStacker.sol#118-157) uses timestamp for comparisons\n[low/medium] timestamp at src/ProjectRegistry.sol:368: ProjectRegistry.onOracleResult(bytes32,OracleAttestation.Attestation,bytes) (src/ProjectRegistry.sol#368-420) uses timestamp for comparisons\n[low/medium] timestamp at src/ProjectRegistry.sol:317: ProjectRegistry._challenge(address,string,address) (src/ProjectRegistry.sol#317-335) uses timestamp for comparisons\n[low/medium] timestamp at src/ProjectRegistry.sol:516: ProjectRegistry.setBeneficiary(address,address) (src/ProjectRegistry.sol#516-531) uses timestamp for comparisons\n[low/medium] timestamp at src/oracle/OracleAttestation.sol:171: OracleAttestationConsumer._verifyAttestation(OracleAttestation.Attestation,bytes) (src/oracle/OracleAttestation.sol#171-189) uses timestamp for comparisons\n[low/medium] timestamp at src/ProjectRegistry.sol:442: ProjectRegistry.expire(address) (src/ProjectRegistry.sol#442-451) uses timestamp for comparisons\n[low/medium] timestamp at src/multichain/RemoteStacker.sol:189: RemoteStacker.tipBps(address) (src/multichain/RemoteStacker.sol#189-194) uses timestamp for comparisons","passed":true},{"durationMs":604,"exitCode":0,"name":"aderyn","output":"[high] contract-locks-ether at src/multichain/RemoteStacker.sol:35: Contract locks Ether without a withdraw function (2 places)\n[high] reentrancy-state-change at src/Stacker.sol:86: Reentrancy: State change after external call (2 places)\n[low] costly-loop at src/multichain/RemoteStacker.sol:241: Costly operations inside loop\n[low] division-before-multiplication at src/multichain/RemoteStacker.sol:273: Incorrect Order of Division and Multiplication (2 places)\n[low] internal-function-used-once at src/oracle/OracleAttestation.sol:209: Internal Function Used Only Once\n[low] large-numeric-literal at src/ProjectRegistry.sol:100: Large Numeric Literal (5 places)\n[low] require-revert-in-loop at src/ProjectRegistry.sol:706: Loop Contains `require`/`revert` (2 places)\n[low] uninitialized-local-variable at src/ProjectRegistry.sol:706: Uninitialized Local Variable (7 places)\n[low] unsafe-erc20-operation at src/ProjectRegistry.sol:482: Unsafe ERC20 Operation\n[low] unused-public-function at src/ProjectRegistry.sol:536: Public Function Not Used Internally","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"c513b1043471f3bf834f4005d7a468c04fb3f3d7bca90eb33101c4a181d605b6","verifiedTreeHash":"942f33941fb21afefff1afc516b6b45ef8d37620","verifierVersion":"0.1.0+327e1e9f"}]}