{"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":"d5c70987-c954-4b03-aa79-e40999b3bf1b","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"41c78ca39a3638cf0027e2e9e3fbf9c0168f21ea2854d6b09e014b0b08f1083c","dependsOn":["audit_imported_code"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"ea5db8ea23a93d7611f9ab749d6255ad6596ee76a985c1261d43e63612dfc3cf","skillId":"adapt-contract-project","tools":[]},"key":"adapt_contract_project","kind":"code","role":"implement","skillHash":"ea5db8ea23a93d7611f9ab749d6255ad6596ee76a985c1261d43e63612dfc3cf","skillId":"adapt-contract-project","state":"accepted"},{"acceptedSubmissionHash":"e601ed78cf11b5f8b0d98971fdeb5414ca1a0f9a22011990e35405bb8453a7e0","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","subagents":3,"tools":[]},"key":"audit_economics","kind":"code","role":"review","skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"9c3785ee63a5ec000d1d4f7f711728f90831a2b9afe62901ec2987dce662bd60","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","subagents":3,"tools":[]},"key":"audit_flow","kind":"code","role":"review","skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"827e556fc1e000b86da4ac1f8177b11c148a6e736bc49860249d6797ab5a2d46","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"b72293c3366fff3f0b93151bca72cc6cbd189dad31d1ccd1d34dd483f2165a36","skillId":"audit-imported-code","subagents":4,"tools":[]},"key":"audit_imported_code","kind":"code","role":"review","skillHash":"b72293c3366fff3f0b93151bca72cc6cbd189dad31d1ccd1d34dd483f2165a36","skillId":"audit-imported-code","state":"accepted"},{"acceptedSubmissionHash":"b11a4670f9ab647da1758e770d40fdd28c6b4f167e0a921b53b21c4dd9905c49","dependsOn":["adapt_contract_project","write_foundry_tests","manifest","audit_math","audit_permissions","audit_economics","audit_flow"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"b89279670f5a00f5d26286edee00c97dd158b997031350a01cafe6e0329ad227","skillId":"audit-judge","subagents":4,"tools":[]},"key":"audit_judge","kind":"code","role":"review","skillHash":"b89279670f5a00f5d26286edee00c97dd158b997031350a01cafe6e0329ad227","skillId":"audit-judge","state":"accepted"},{"acceptedSubmissionHash":"ec4d893f9ed508a090364e57b225df69fd9680e8783cc9d734fe6924ec4fc9c5","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","subagents":3,"tools":[]},"key":"audit_math","kind":"code","role":"review","skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"a397255c20f47989892fec4d065b7a21133eb452db7a2e0e043c3e06d6e0b92f","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","subagents":3,"tools":[]},"key":"audit_permissions","kind":"code","role":"review","skillHash":"bc5bfc8455464381f2db18badb2b55cf8bec1e535c019349a0378fa990741171","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"71db17802a5386d25cd97ae50b43db9a6168afac087d328946b509c265762748","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"35d519aaa960d7fd8d6270abc717e147260b1890823546d29687444ca5bd5988","dependsOn":["adapt_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"606842ccca0e7c5d3017a54684625438eab9b351eb51dcf0cf88c43d1ea41464","skillId":"write-foundry-tests","subagents":4,"tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"606842ccca0e7c5d3017a54684625438eab9b351eb51dcf0cf88c43d1ea41464","skillId":"write-foundry-tests","state":"accepted"}],"objective":"Launch Box from this repository: an application-contracts-only launch on Ethereum mainnet (kind evm_contracts: no token, no pool, no reward distributor; $token does not resolve).\n\nOne contract: Box, constructorArgs [0x61aaf8a992a3143e2b0c9cb0030b9fe702854a25, 0x6ac8ff96fb8dcf5d79a8ef1e59d9ac23f2bd27bc, 0xfe0bac821272c9b905bac995bf4af2122b9ba741, 0xb5d3289a90868da0a8d5a4283902a0a907a29ddf]: imdUSD v1 (plain ERC-20, 18 decimals, no permit), the imdUSD Treasury, the FLOAT (the operator wallet that pays the swarm) and the SIGNER (signs settlements). All four are static addresses; the last two are EOAs.\n\nWhat it is (README.md): a user pays for an off-chain-quoted order in imdUSD. pay() sends the first request's cost to FLOAT, a buffer to TREASURY and holds the rest as escrow; escrow leaves only by settle/settleMany (an EIP-712 Settlement signed by SIGNER that must sum to the order's escrow; anyone may execute) or by the payer's reclaim() 60 days after payment. Orders are keyed by keccak256(payer, orderId). It has no owner, no admin, no pause and no upgrade path. The constructor makes no external calls and runs on an empty chain.\n\nAudit it as it arrived. Questions to answer with a reproduction or a clear no: can anyone move more than an order's own escrow, or to an address other than TREASURY, FLOAT or that order's payer, or leave funds stuck; settlement signature replay or malleability (across orders, contracts, chains, after reclaim, duplicate keys in one settleMany); settle vs reclaim at the 60-day boundary; can the balance fall below the sum of open escrows; uint128/uint64 packing; is anything missing in Paid for an operator who sends only orders whose Paid matches its quote; is a SIGNER compromise limited to misdirecting open escrow among the three recipients.\n\nThe repository's tests must keep passing: forge test --no-match-contract BoxForkTest, and with MAINNET_RPC_URL set, forge test --match-contract BoxForkTest (the same suite against live imdUSD and the real Treasury).\n\nAdapt only what the launch rules or a reproduced audit finding require, and record each change in ADAPTATION.md. Do not add an owner, a pause, a setter, a configurable recipient or any new way for funds to leave, and do not change who receives what.","parentJobId":null,"planHash":"4f38873439e043b7194bfa2de46a5a3a107f2718162d32fc96d3e1577b2f1ad3","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"d5c70987-c954-4b03-aa79-e40999b3bf1b","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-2657-launch-box-repository-application-contra"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51447","feedbackHash":"91e348211617741cbb6fb8d2803f453c97bac29dc6c06e5a894bbd79a680a911","nodeKey":"adapt_contract_project","submissionHash":"41c78ca39a3638cf0027e2e9e3fbf9c0168f21ea2854d6b09e014b0b08f1083c","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51753","feedbackHash":"380ced31580d78f524962f10ced9c6a6e3d7d7ae9c50e80508c6ce7bf3c5835b","nodeKey":"audit_economics","submissionHash":"e601ed78cf11b5f8b0d98971fdeb5414ca1a0f9a22011990e35405bb8453a7e0","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51752","feedbackHash":"ab4d2799936446d72aac431dfd4b68c37762795874b719c4b41bc4e592af5a88","nodeKey":"audit_flow","submissionHash":"9c3785ee63a5ec000d1d4f7f711728f90831a2b9afe62901ec2987dce662bd60","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"54234","feedbackHash":"35a1aa390f0fa5e279ddccebeb852eff92e796f294091c909e7854283d4f812d","nodeKey":"audit_imported_code","submissionHash":"827e556fc1e000b86da4ac1f8177b11c148a6e736bc49860249d6797ab5a2d46","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51241","feedbackHash":"651b3e210525208bcd22eeb0e8503c5edcc9f8497517a9631285b3e7b587ec24","nodeKey":"audit_judge","submissionHash":"b11a4670f9ab647da1758e770d40fdd28c6b4f167e0a921b53b21c4dd9905c49","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51184","feedbackHash":"715213391fee8bbfd73e49a1ea0e6c90c32b46f051d244ec769b836929d43c5a","nodeKey":"audit_math","submissionHash":"ec4d893f9ed508a090364e57b225df69fd9680e8783cc9d734fe6924ec4fc9c5","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52212","feedbackHash":"87364c8ae32efe4a60026e89d52d173f9a4a96594ad2dc8bf9fadce6c8e274d3","nodeKey":"audit_permissions","submissionHash":"a397255c20f47989892fec4d065b7a21133eb452db7a2e0e043c3e06d6e0b92f","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51537","feedbackHash":"2d364c50bf024797afbf5a032ccae11077e66c803c37defedfccf5704e3b17af","nodeKey":"manifest","submissionHash":"71db17802a5386d25cd97ae50b43db9a6168afac087d328946b509c265762748","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"51751","feedbackHash":"9f17bbd476657a27aca12df1f2251aca6d2f6b4241b051fbb77a7f6970f64dea","nodeKey":"write_foundry_tests","submissionHash":"35d519aaa960d7fd8d6270abc717e147260b1890823546d29687444ca5bd5988","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"eeb9ff394b12b9b4898cf7d59a8dc06eb8e754f7a7f90cfb3d05971b7d61a1af","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"dbe7bf3656e441d907f96b3b9e64ea7a49598ce9cef8ccfe4d2ed57dde6dbfe2","device":"500cef6ec1073663","findings":[],"hash":"35d519aaa960d7fd8d6270abc717e147260b1890823546d29687444ca5bd5988","nodeId":"dbf261e1-e37a-47fc-97fa-1815019a874c","outcome":"completed","summary":"Implemented failure-path, signature, boundary, launch, and independent stateful invariant tests under `test/`.\n\nVerified with the supplied seed:\n\n- `forge build`: passed.\n- Local suite: 64 passed.\n- Plain `forge test`: 64 passed; expected fork skip without RPC.\n- Live mainnet fork: 57 passed.\n- New invariant campaign: 32,768 calls, no unexpected reverts.\n\nNo new implementation defect reproduced. Audit answers and known limitations are recorded in [test/ADAPTATION.md](/root/.identitymd/work/d5c70987-c954-4b03-aa79-e40999b3bf1b/dbf261e1-e37a-47fc-97fa-1815019a874c/test/ADAPTATION.md).","treeHash":"1bc1f30e3dc42ec310875d0ed95089f62e891bd0","usage":{"cachedInputTokens":2516608,"inputTokens":86700,"model":"gpt-6-astra","outputTokens":36691,"runtime":"codex","turns":9,"wallClockMs":1249869}},{"artifacts":[],"attempt":1,"bundleHash":"dd087ff37cb3dcf3c6635d89a2616660fe075429f60121fb5228add42fdd5626","device":"e0f64c10e30e33e2","findings":[],"hash":"41c78ca39a3638cf0027e2e9e3fbf9c0168f21ea2854d6b09e014b0b08f1083c","nodeId":"c26baaaa-b507-4ce0-a466-a06e0176e929","outcome":"completed","summary":"I fixed the check that failed: a plain `forge test` now passes when `MAINNET_RPC_URL` isn't set.\n\n**Cause:** `BoxForkTest.setUp` read the variable with `vm.envString`, which reverts when the variable is missing. That made the whole fork suite fail in an empty environment. The code as it arrived did the same thing.\n\n**Fix:** in `test/Box.t.sol` (`BoxForkTest.setUp`), the fork suite now reads the variable with `vm.envOr` and skips itself when it's empty. When the variable is set, it forks mainnet and runs exactly as before. I added a line for this change to ADAPTATION.md.\n\n**Checks, run with the verifier's fuzz seed:**\n- **No `MAINNET_RPC_URL`:** `forge test` gives 36 passed, 0 failed, 1 skipped (the fork suite).\n- **`MAINNET_RPC_URL` set to a public endpoint:** `forge test --match-contract BoxForkTest` passes all 35 tests against live imdUSD and the real Treasury.\n- **`forge build`:** succeeds. It printed lint notes but no errors.\n\nEverything else from the earlier work is unchanged. That includes the `settleMany` fix for audit finding ca391bf9: a batch now skips an order that is already closed instead of reverting. It also includes the new tests, the invariant test, the README notes and the audit write-up in ADAPTATION.md.\n\nI couldn't commit: git has no author name or email set on this machine, and I didn't set one. The two edited files, `ADAPTATION.md` and `test/Box.t.sol`, are uncommitted in the working tree for the submission step to pick up.","treeHash":"ef394caecd43abd391bb105bcebafe922564470e","usage":{"cachedInputTokens":884524,"inputTokens":42,"model":"claude-opus-5-5","outputTokens":21488,"runtime":"claude","turns":27,"wallClockMs":397227}},{"artifacts":[],"attempt":1,"bundleHash":"d4a8a05ff0d01952260ac9d769b53c175dda7cdf55971bd7764e045990a11ea6","device":"1da032f42d59f73b","findings":[],"hash":"71db17802a5386d25cd97ae50b43db9a6168afac087d328946b509c265762748","nodeId":"cab74d6a-cce7-4ed9-8fbb-011e83b7fb2c","outcome":"completed","summary":"I wrote `launch.json` for one contract, `Box`, and changed no other file.\n\n```json\n{\n  \"kind\": \"evm_contracts\",\n  \"contracts\": [{ \"contract\": \"Box\", \"constructorArgs\": [\n    \"0x61aaf8a992a3143e2b0c9cb0030b9fe702854a25\",\n    \"0x6ac8ff96fb8dcf5d79a8ef1e59d9ac23f2bd27bc\",\n    \"0xfe0bac821272c9b905bac995bf4af2122b9ba741\",\n    \"0xb5d3289a90868da0a8d5a4283902a0a907a29ddf\"\n  ]}],\n  \"notes\": \"…\"\n}\n```\n\n- **Arguments:** these are the four addresses from the brief, in the order the constructor takes them (`src/Box.sol:69`): imdUSD v1, the Treasury, FLOAT, then SIGNER.\n- **Owner:** Box has no owner, admin, pause, setter or upgrade path, so `$owner` is not used. SIGNER is an outside address from the brief, not an owner role. Nothing is assigned from `msg.sender` or `tx.origin`, and no argument is a zero address.\n- **Notes:** a plain description of Box taken from the source, 891 characters (the limit is 4,000).\n\n**Checks:**\n- **Manifest:** a JSON parse confirms the file has only `kind`, `contracts` and `notes`; nothing else validates the manifest before submission.\n- **Build:** `forge build` passes.\n- **Tests:** `forge test --no-match-contract BoxForkTest` with the verifier's fuzz seed passed all 36 tests.\n- **Not run:** I didn't run the fork suite (`BoxForkTest`). It needs `MAINNET_RPC_URL`, and no source or test file changed in this task. The earlier contributor's `ADAPTATION.md` records it passing against live imdUSD and the real Treasury.\n- **Working tree:** `git status` shows `launch.json` as the only change. I haven't committed it, since you didn't ask me to.","treeHash":"46ed7979f843299b3e6ba091d7be40b06a07162a","usage":{"cachedInputTokens":104189,"inputTokens":10,"model":"claude-opus-5-5","outputTokens":2415,"runtime":"claude","turns":6,"wallClockMs":52325}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"2042b7cb7b952e30","findings":[{"citation":"resolved","description":"settleMany reverts the entire batch when any single entry reverts (documented as 'Reverts if any fails'). Because settle is public and a settlement needs no caller permission, and because reclaim becomes available 60 days after payment, an unprivileged party can make an already-broadcast batch fail: (a) the payer of any entry older than 60 days calls reclaim(orderId) ahead of the batch; (b) anyone copies one (Settlement, signature) pair from the pending settleMany calldata and submits it alone ahead of the batch; (c) the same key appears twice in one batch. In each case the batch reverts with OrderClosed and the keeper pays the gas and must rebuild and resend. Funds are never lost or misdirected; the harm is the keeper's gas and delayed settlement of the other entries. This matters most for the weekly run: one stale order in a long batch costs the full batch. Minimal fix that keeps the design: have settleMany skip entries whose order is already closed (continue when o.closed) instead of reverting, or let the keeper submit per-order settle calls. Either is a design choice for the author; the adapter should not add any new recipient or role.","line":136,"path":"src/Box.sol","reproduction":"State: alice paid ORDER with escrow 1e18, mallory paid order-2 with escrow 2e18; both are more than 60 days old. Keeper broadcasts settleMany([S1=(keyA,1e18,0,0), S2=(keyM,2e18,0,0)], [sigA, sigM]) with valid SIGNER signatures. Input: alice sends reclaim(ORDER) in the same block before the batch (or anyone sends settle(S1, sigA) alone). Expected: at least S2 settles. Actual: settleMany reverts with OrderClosed(); nothing settles; the keeper must resend without S1. Verified by test/scratch/BoxEdges.t.sol test_payerReclaimFrontRunsAndRevertsWholeBatch, test_anyoneExecutingOneSettlementRevertsWholeBatch and test_duplicateKeyInOneSettleManyReverts (all pass on the current code, documenting the behaviour).","severity":"low","snippet":"            settle(s[i], signatures[i]);","title":"settleMany is all-or-nothing, so any third party can make the keeper's whole batch revert"},{"citation":"resolved","description":"Keying orders by (payer, orderId) prevents mempool squatting of an id, as intended, but it also means the contract accepts the same orderId any number of times from different wallets, and each such payment sends toFloat and toTreasury out immediately. For an operator that 'sends only orders whose Paid matches its quote', Paid carries everything the quote states (orderId, commitment, toFloat, toTreasury, escrow) plus payer, key and ref; nothing needed is missing, but the match must include the payer, because two Paid events for one quote are otherwise indistinguishable. If a user pays the same quote from two wallets (or a front-runner copies a pending pay with the same orderId, commitment and amounts), the operator sees two matching Paid events for one quote, and the duplicate's first-request cost and buffer are already at FLOAT and TREASURY; only its escrow can be returned by a SIGNER settlement, and only if escrow was non-zero. A related consequence: a payer who mis-pays a quote (wrong amounts under the right orderId) cannot retry that orderId at all, because OrderExists is permanent even after the order is closed; the operator must issue a fresh orderId. No on-chain change is recommended (keying by orderId alone would reintroduce squatting); the operator's quote should bind the payer address and its matcher should check Paid.payer, and the quoting side should know that an orderId is burned for that payer after one pay.","line":101,"path":"src/Box.sol","reproduction":"State: operator quoted orderId ORDER as (toFloat 1e18, toTreasury 0.05e18, escrow 2e18, commitment BODY). Inputs: alice.pay(ORDER, BODY, 1e18, 0.05e18, 2e18, 0) then mallory.pay(ORDER, BODY, 1e18, 0.05e18, 2e18, 0). Expected (from a quote-matching operator's view): one order per quote. Actual: both calls succeed under different keys; both Paid events have identical orderId, commitment and amounts; FLOAT holds 2e18 and TREASURY 0.1e18; the most a settlement can return to mallory is the 2e18 escrow, leaving 1.05e18 unrecoverable on-chain. Then alice.pay(ORDER, BODY, 2.28e18, 0.114e18, 4.56e18, 0) after a mis-payment of ORDER reverts OrderExists(). Verified by test/scratch/BoxEdges.t.sol test_twoWalletsCanPayTheSameOrderIdWithIdenticalPaidData and test_misPaidOrderIdCannotBeRetriedByTheSamePayer.","severity":"low","snippet":"        key = keyOf(msg.sender, orderId);","title":"An orderId is unique only per payer: a second wallet paying the same quote emits a Paid that matches it, and its toFloat/toTreasury can never be returned by the contract"},{"citation":"resolved","description":"Every outflow is bounded to exactly one order's escrow: settle requires the split to sum to o.escrow and reclaim pays o.escrow. Any imdUSD that reaches the contract by direct transfer (a user sending to the Box address instead of calling pay, or a mistaken refund by the operator) is not attached to any order and cannot leave, since there is no sweep and the launch rules forbid adding one. The same holds for any other ERC-20 sent to the address; ETH cannot be sent (no receive/fallback). This is the expected consequence of the 'no new way for funds to leave' rule and is listed so the README can warn users not to transfer to the contract directly. No code change is recommended.","line":117,"path":"src/Box.sol","reproduction":"Inputs: mallory calls usd.transfer(box, 5e18); alice pays ORDER with escrow 1e18; SIGNER-signed Settlement(keyA, 0, 0, 1e18) is executed. Expected: contract holds only open escrow. Actual: box balance stays 5e18 with no open orders; a settlement Settlement(keyM, 6e18, 0, 0) for a 1e18-escrow order reverts WrongTotal(), so the surplus is unreachable. Verified by test/scratch/BoxEdges.t.sol test_directTransferToBoxIsStuck.","severity":"low","snippet":"        if (s.toTreasury + s.toFloat + s.toPayer != o.escrow) revert WrongTotal();","title":"imdUSD sent to the Box outside pay() is stuck forever; no path can move it"},{"citation":"resolved","description":"The Box itself keeps balance == sum of open escrow under every sequence of pay/settle/reclaim (stateful invariant run, 128,000 calls, test/scratch/BoxInvariant.t.sol). The only way the balance can fall below open escrow is the token. The live imdUSD at 0x61aAF8a992A3143e2B0C9cB0030b9fE702854a25 (code read via public RPC) exposes mint(address,uint256), burn(address,uint256), vault() and setVault(address). burn and mint revert Unauthorized() for a random caller and succeed when called from vault() = 0x0b69F8DA8D8cE521d74Ea69a7A3475B77302EF82; setVault reverts AlreadyInitialized(). No pause, blacklist, fee or transfer hook selectors are present, so SafeERC20 transfers behave as plain transfers and reentrancy is not reachable. The vault's own code (about 23.5 KB) was not read. Trust assumption to record, not a Box defect: whoever controls the imdUSD vault can burn a Box's escrow, after which the last settlements or reclaims revert for lack of balance.","line":20,"path":"src/Box.sol","reproduction":"Mainnet fork: deploy Box(imdUSD, Treasury, FLOAT, SIGNER); alice pays order 'o' with escrow 10e18 (box balance 10e18). prank(vault) imdUSD.burn(box, 10e18). Expected if the token were plain: impossible. Actual: box balance 0 while order 'o' is open with escrow 10e18; alice's reclaim after 60 days reverts. Verified by test/scratch/BoxForkVault.t.sol test_vaultCanBurnBoxEscrow and test_randomCannotBurnOrMint with MAINNET_RPC_URL set.","severity":"info","snippet":"    IERC20 public immutable IMDUSD;","title":"Live imdUSD is not fully plain: its vault can burn or mint any holder's balance, including the Box's escrow"},{"citation":"resolved","description":"Answers to the brief's trust questions, verified against the code. (1) A SIGNER compromise is limited to splitting each open order's escrow among TREASURY, FLOAT and that order's payer: settle reads the recipients from immutables and o.payer and requires the split to equal o.escrow, so no other address and no other amount is reachable, and escrow already settled or reclaimed, or sent at pay time to FLOAT/TREASURY, is out of reach. (2) A settlement has no deadline: once signed it can be executed by anyone at any later time until the order is closed, including after the 60-day boundary, where it races the payer's reclaim; whichever lands first wins, and there is no off-by-one (reclaim is allowed from exactly paidAt + 60 days). (3) Loss of the SIGNER key cannot be recovered on-chain: every open escrow then goes back to its payer via reclaim after 60 days, so the operator forfeits the chained-step revenue of serviced orders. (4) Loss or compromise of the FLOAT key is not recoverable either: every future pay still sends toFloat there. (5) uint64 paidAt and uint128 escrow are safe: escrow is bounded by EscrowTooLarge before the cast and a max-uint128 escrow round-trips through pay and reclaim; the Order struct occupies two slots (address+uint64+bool = 29 bytes, then uint128), which is the minimum for these fields. None of this is a defect; the launch rules forbid adding rotation or expiry, so it is recorded for the README.","line":23,"path":"src/Box.sol","reproduction":"Settlement without expiry: alice pays ORDER with escrow 2e18; SIGNER signs Settlement(key, 2e18, 0, 0); warp 400 days; anyone calls settle -> TREASURY receives 2e18 and alice's reclaim reverts OrderClosed. At exactly paidAt + 60 days both settle and reclaim are accepted; the first to execute closes the order. Verified by test/scratch/BoxEdges.t.sol test_settleLongAfterBoundary, test_settleStillValidAtAndAfterBoundaryUntilReclaim and test_uint128EscrowBoundaryAndUint64Timestamp; signature replay across chain id, across another Box with the same key, after reclaim, with a high-s malleated signature, with a 64-byte compact signature and with v not in {27,28} all revert (test_replayOnOtherChainIdRejected, test_replayOnOtherBoxRejected, test_settlementReplayAfterReclaimRejected, test_highSMalleatedSignatureRejected, test_compact64ByteSignatureRejected, test_badVRejected).","severity":"info","snippet":"    address public immutable SIGNER;","title":"Trust assumptions: immutable SIGNER and FLOAT EOAs, and settlements never expire"},{"citation":"resolved","description":"WrongTotal is documented by settle as 'the split does not add up to the order's escrow'. settleMany reuses it for s.length != signatures.length, so a keeper debugging a failed batch sees a misleading reason. Cosmetic; a dedicated error (for example LengthMismatch) would be clearer. No funds impact.","line":134,"path":"src/Box.sol","reproduction":"Input: settleMany(new Settlement[](1), new bytes[](0)). Expected: a length-mismatch error. Actual: reverts WrongTotal(). Shown by the repository's own test_settleManyLengthMismatch.","severity":"info","snippet":"        if (s.length != signatures.length) revert WrongTotal();","title":"settleMany reports an array-length mismatch as WrongTotal"},{"citation":"resolved","description":"test/Box.t.sol covers the happy paths, the main reverts and a stateless fuzz of balance vs open escrow. It does not test: the same key twice in one settleMany; a malleated (high-s) or 64-byte compact signature; v outside 27/28; replay on another chain id or on a second Box with the same (payer, orderId) key; a settlement signed before pay; settle at or long after the 60-day boundary; a payer reclaiming or a third party pre-executing an entry of a pending batch; two wallets paying the same orderId; a direct token transfer to the contract; max-uint128 escrow with a near-max uint64 timestamp; and a stateful invariant across random interleavings of pay/settle/reclaim/warp. All of these were run in test/scratch/BoxEdges.t.sol and test/scratch/BoxInvariant.t.sol and hold on the current code; the author may want to carry them into the suite. test/scratch is not kept.","line":155,"path":"test/Box.t.sol","reproduction":"Run: forge test --match-path test/scratch/BoxEdges.t.sol (16 pass) and forge test --match-path test/scratch/BoxInvariant.t.sol (invariant_balanceEqualsSumOfOpenEscrow and invariant_recipientsReceiveExactlyGhost hold over 256 runs x 500 calls). Expected and actual agree: no defect, only missing coverage.","severity":"info","snippet":"    function test_settleManyAllOrNothing() public {","title":"Edges the repository suite does not exercise (covered by the reviewer's scratch tests, which all pass)"},{"citation":"resolved","description":"Read in full: src/Box.sol (every external/public function: pay, settle, settleMany, reclaim, keyOf, domainSeparator, constructor; no receive/fallback), test/Box.t.sol, README.md, foundry.toml, remappings.txt, and the vendored OpenZeppelin 5.0.2 ECDSA, EIP712 and SafeERC20 used by Box. Reached on mainnet through a public RPC (publicnode): imdUSD 0x61aAF8a992A3143e2B0C9cB0030b9fE702854a25 (2583-byte runtime, selectors enumerated: name, symbol, decimals=18, totalSupply, balanceOf, allowance, approve, transfer, transferFrom, mint, burn, vault, setVault; no pause/blacklist/hooks), Treasury 0x6Ac8fF96Fb8DCF5d79A8eF1E59D9AC23f2BD27Bc (has code, 12592 bytes, not read: Box only transfers to it and plain ERC-20 transfers call no hook), FLOAT 0xfe0bac82...ba741 and SIGNER 0xb5d3289a...9ddf (both confirmed EOAs with no code). Not read: the imdUSD vault contract 0x0b69F8DA8D8cE521d74Ea69a7A3475B77302EF82 (47 KB, outside scope beyond its burn/mint power), and the floor file ../../floor/OwnerChecks.sol imported by Owners.protected.t.sol, which is not in the tree; Box exposes no owner() so it has nothing for that check to flag. Verdict per question: nobody can move more than an order's own escrow, or to an address other than TREASURY, FLOAT or that order's payer (settle: recipients are immutables plus o.payer, split must equal o.escrow; reclaim: msg.sender-derived key, pays o.escrow; CEI holds everywhere, closed is set before transfers); funds cannot be stuck for a payer who can call reclaim, only surplus sent outside pay is stuck; signatures cannot be replayed across orders (key in the typed data), contracts (address(this) in the domain), chains (chainid in the domain, rebuilt on a fork), after reclaim (closed), or via duplicate keys in one settleMany (second entry reverts OrderClosed); high-s and compact signatures are rejected by OZ ECDSA, ecrecover's zero result is caught by the error check and SIGNER is non-zero; at the 60-day boundary reclaim opens at exactly paidAt + 60 days while settle never closes, so the two race with no off-by-one; the balance cannot fall below open escrow by Box's own logic (stateful invariant), only by the imdUSD vault burning it; uint128/uint64 packing is safe; Paid lacks nothing the operator needs provided the quote binds the payer; a SIGNER compromise is limited to misdirecting open escrow among the three recipients. Both test commands pass: forge test --no-match-contract BoxForkTest (21 pass) and, with MAINNET_RPC_URL set to a public endpoint, forge test --match-contract BoxForkTest (21 pass). The launch's forbidden features are absent: no owner, pause, blacklist, mint, DELEGATECALL, CALLCODE, SELFDESTRUCT, proxy or initializer; the constructor makes no external call and only rejects zero addresses, so it runs on an empty chain; constructor arguments are the four static addresses the brief states. No critical, high or medium defect was reproduced, so no finding carries a proof file.","line":17,"path":"src/Box.sol","reproduction":"Not a defect. The commands above were run on this tree on 2026-10-29 with forge 1.8.3 and solc 0.8.30; all listed results are as stated.","severity":"info","snippet":"contract Box is EIP712 {","title":"Review scope and verdict: what was read, what was reached, and the answers to the brief's questions"}],"hash":"827e556fc1e000b86da4ac1f8177b11c148a6e736bc49860249d6797ab5a2d46","nodeId":"4a779c76-31b5-4f20-8acd-0c8e71eabda9","outcome":"completed","summary":"The review is complete. The findings file is written and validated, no tracked file was changed, and the reviewer scratch files live only under the ignored `test/scratch/` directory.\n\n**Verdict: no critical, high or medium defect in Box.** Every question in the brief gets a clear no, backed by tests that pass on the current code. The file holds three low findings and five informational entries, each with a concrete input and the test that shows it.\n\n**Low findings**\n- **Batch atomicity is griefable.** A payer whose order is past 60 days can front-run the keeper's weekly `settleMany` with `reclaim`, and anyone can copy one entry out of a pending batch and execute it alone. Either reverts the whole batch with `OrderClosed`, costing the keeper gas and a resend. No funds move wrongly.\n- **An orderId is unique only per payer.** Two wallets can pay the same quote with identical `Paid` data; the duplicate's first-request cost and buffer go straight to FLOAT and TREASURY and cannot be returned by the contract. The operator's quote matcher must check the payer. A payer who mis-pays an orderId also cannot retry it, since `OrderExists` is permanent.\n- **Tokens sent outside pay() are stuck.** Every outflow is pinned to one order's escrow, so direct transfers to the Box address have no exit. Expected under the launch rules, but worth a README warning.\n\n**Informational**\n- **Live imdUSD is not entirely plain.** Its vault address can burn or mint any holder's balance, including a Box's escrow. Random callers get `Unauthorized()`. No pause, blacklist or hook selectors exist. This is the only path by which the balance can fall under open escrow.\n- **Trust assumptions** on the immutable SIGNER and FLOAT EOAs, and the fact that a signed settlement never expires, so settle races reclaim after day 60 with no off-by-one. A SIGNER compromise is confirmed limited to splitting open escrow among the three recipients.\n- **Cosmetic**: `settleMany` reports a length mismatch as `WrongTotal`.\n- **Untested edges** in the repository suite, now covered by the scratch tests.\n- **Scope entry** listing what was read and reached.\n\n**What was read and reached.** Box.sol, its tests, README, config and the vendored OpenZeppelin 5.0.2 ECDSA, EIP712 and SafeERC20 were read in full. Live imdUSD bytecode was fetched through a public RPC and its selectors enumerated. The Treasury has code but was not read since Box only transfers to it. FLOAT and SIGNER are confirmed EOAs. Not read: the imdUSD vault contract and the floor `OwnerChecks.sol` that the protected owners test imports, which is not in the tree.\n\n**Checks run.** The unit suite and the fork suite against live imdUSD both pass with 21 tests each. The 16 scratch edge tests pass, and a stateful invariant run of 128,000 calls kept balance equal to open escrow and every recipient's balance equal to its ghost total.","treeHash":null,"usage":{"cachedInputTokens":1227534,"inputTokens":514,"model":"claude-fable-5-1","outputTokens":44723,"runtime":"claude","turns":43,"wallClockMs":1525467}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"7143d892ed24d728","findings":[],"hash":"9c3785ee63a5ec000d1d4f7f711728f90831a2b9afe62901ec2987dce662bd60","nodeId":"def3d334-e660-49d2-907a-a3653c4c185a","outcome":"completed","summary":"No substantiated defects found. All four entry points are covered in [.imd-findings.json](/root/.identitymd/work/d5c70987-c954-4b03-aa79-e40999b3bf1b/def3d334-e660-49d2-907a-a3653c4c185a/.imd-findings.json).\n\nBoth required suites passed: 36 local checks and 35 mainnet fork tests. Another 30 targeted checks passed.\n\nNo production, test or configuration files changed.","treeHash":null,"usage":{"cachedInputTokens":1552640,"inputTokens":116152,"model":"gpt-6-astra","outputTokens":16254,"runtime":"codex","turns":6,"wallClockMs":563133}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"68fdf4cb027a7a1f","findings":[],"hash":"a397255c20f47989892fec4d065b7a21133eb452db7a2e0e043c3e06d6e0b92f","nodeId":"0baa362b-968e-4859-b5b3-91c039bcfa3e","outcome":"completed","summary":"No new reproducible defects found. Recorded all four entry points and invariant coverage in [.imd-findings.json](/root/.identitymd/work/d5c70987-c954-4b03-aa79-e40999b3bf1b/0baa362b-968e-4859-b5b3-91c039bcfa3e/.imd-findings.json).\n\nPassed: 36 unit/invariant tests, 35 mainnet-fork tests, and 13 additional review checks. Temporary tests removed; contracts unchanged.","treeHash":null,"usage":{"cachedInputTokens":1883648,"inputTokens":97891,"model":"gpt-6-astra","outputTokens":16748,"runtime":"codex","turns":7,"wallClockMs":542893}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"b6e7758e5e0349d3","findings":[],"hash":"b11a4670f9ab647da1758e770d40fdd28c6b4f167e0a921b53b21c4dd9905c49","nodeId":"ebed19ea-f592-456d-96ff-3f8f85582cd5","outcome":"completed","summary":"Wrote [.imd-findings.json](.imd-findings.json): no reproducible defects, with all four entry points covered.\n\nChecks passed: 64 local tests, 57 mainnet fork tests, manifest validation, and deployment constraints. Implementation files remain unchanged.","treeHash":null,"usage":{"cachedInputTokens":1400704,"inputTokens":116547,"model":"gpt-6-astra","outputTokens":9008,"runtime":"codex","turns":6,"wallClockMs":413294}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"da7ed792c3bf5b80","findings":[],"hash":"d6fb327fbfed1c0f7478473698ccc3b6a1454ea6cc01c40df95c0d60b3cf3ae9","nodeId":"c26baaaa-b507-4ce0-a466-a06e0176e929","outcome":"failed","summary":"runtime reported Claude-5.5-opus-premium, not the required premium model claude-opus-5-5","treeHash":null,"usage":{"cachedInputTokens":68450,"inputTokens":299422,"model":"Claude-5.5-opus-premium","outputTokens":17786,"runtime":"claude","turns":10,"wallClockMs":270910}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"6de2de551e41049f","findings":[],"hash":"e601ed78cf11b5f8b0d98971fdeb5414ca1a0f9a22011990e35405bb8453a7e0","nodeId":"d97ef196-6c1d-4050-afbb-1a62f4730a21","outcome":"completed","summary":"Completed the audit: no new substantiated defects.\n\n[Findings and coverage](./.imd-findings.json) records all four entry points. Checks passed: 36 local tests, 35 mainnet fork tests, and four targeted checks.\n\nConfirmed documented limits: direct transfers remain stranded, token-vault burns can cause shortfalls, and settlement races reclaim from the 60-day boundary onward. Implementation unchanged.","treeHash":null,"usage":{"cachedInputTokens":933632,"inputTokens":82483,"model":"gpt-6-astra","outputTokens":11876,"runtime":"codex","turns":6,"wallClockMs":442368}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"540f6378761dba26","findings":[],"hash":"ec4d893f9ed508a090364e57b225df69fd9680e8783cc9d734fe6924ec4fc9c5","nodeId":"2bc559d3-0eb9-4341-b44a-4c403c73d53c","outcome":"completed","summary":"Saved [.imd-findings.json](/root/.identitymd/work/d5c70987-c954-4b03-aa79-e40999b3bf1b/2bc559d3-0eb9-4341-b44a-4c403c73d53c/.imd-findings.json) with **no substantiated defects** and coverage for all four entry points.\n\nPassed 36 unit/invariant tests, 35 live-token fork tests, and 20 additional boundary tests, including 2,000 fuzz cases.\n\nConfirmed documented limitations: direct deposits remain unrecoverable; the token vault can burn escrow backing; settlement and reclaim race at the 60-day boundary.\n\nImplementation files remain unchanged.","treeHash":null,"usage":{"cachedInputTokens":1162752,"inputTokens":90512,"model":"gpt-6-astra","outputTokens":16637,"runtime":"codex","turns":6,"wallClockMs":688532}}],"verification":[{"checks":[{"durationMs":4112,"exitCode":0,"name":"build","output":"Compiling 41 files with Solc 0.8.30\nSolc 0.8.30 finished in 4.02s\nCompiler run successful!\n","passed":true},{"durationMs":13356,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/Box.t.sol:BoxForkTest\n[SKIP: skipped] setUp() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 844.64µs (0.00ns CPU time)\n\nRan 5 tests for test/BoxLaunch.t.sol:BoxLaunchTest\n[PASS] test_approvedStaticArgumentsDeployFromFactoryOnEmptyChain() (gas: 1804966)\n[PASS] test_deploymentAndPublicEntrypointsRejectNativeValue() (gas: 554894)\n[PASS] test_eachZeroConstructorArgumentIsRejected() (gas: 4198)\n[PASS] test_emptyChainTokenIsRejectedOnFirstUseWithoutCreatingAnOrder() (gas: 66597)\n[PASS] test_factoryAndSignerHaveNoAdministrativeEntrypoints() (gas: 2098757)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 4.77ms (3.43ms CPU time)\n\nRan 56 tests for test/Box.t.sol:BoxTest\n[PASS] testFuzz_PaidCanBeMatchedAgainstEveryQuoteField(bytes32,bytes32,bytes32,uint96,uint96,uint96) (runs: 1000, μ: 206512, ~: 207901)\nLogs:\n  Bound result 42133\n  Bound result 764921\n  Bound result 25947\n\n[PASS] testFuzz_badBatchEntryRollsBackEveryEarlierEntry(uint8,uint8) (runs: 256, μ: 1043625, ~: 1047954)\nLogs:\n  Bound result 1\n  Bound result 1\n\n[PASS] testFuzz_balanceEqualsOpenEscrow(uint96,uint96,uint96) (runs: 256, μ: 332489, ~: 333518)\nLogs:\n  Bound result 394303960780213576547\n  Bound result 345980489820657710980\n  Bound result 1\n\n[PASS] testFuzz_compromisedSignerCanOnlySplitOneEscrow(uint128,uint128,uint128) (runs: 1000, μ: 692852, ~: 699261)\nLogs:\n  Bound result 1080219326883\n  Bound result 802629444198\n  Bound result 121595816182\n\n[PASS] testFuzz_malformedSignatureLengthsDoNotConsumeEscrow(uint8) (runs: 256, μ: 392522, ~: 392315)\nLogs:\n  Bound result 0\n\n[PASS] testFuzz_packedFieldsAndReclaimDeadline(uint64,uint128) (runs: 256, μ: 487897, ~: 487869)\nLogs:\n  Bound result 14\n\n[PASS] test_closedOrderIdsNeverReopenAfterEitherExit() (gas: 400164)\n[PASS] test_compactAndBadVSignaturesRejected() (gas: 186988)\n[PASS] test_constructorRejectsZero() (gas: 10169)\n[PASS] test_directTransferIsNotEscrowAndCannotLeave() (gas: 256835)\n[PASS] test_domainMatchesOperatorEncodingAndRefreshesOnChainChange() (gas: 43764)\n[PASS] test_emptyBatchAndClosedEntriesAreHarmless() (gas: 390543)\n[PASS] test_escrowTooLargeReverts() (gas: 35735)\n[PASS] test_falseReturnAtEachPaymentLegIsAtomicAndRetryable() (gas: 1411915)\n[PASS] test_frontRunCannotSquatOrderId() (gas: 182737)\n[PASS] test_highSMalleatedSignatureRejected() (gas: 220604)\n[PASS] test_immediatePaymentLegsKeepFullUint256Precision() (gas: 479474)\n[PASS] test_lateBatchTransferFailureRollsBackEarlierOrders() (gas: 703071)\n[PASS] test_maxPackedValuesPreservedWhenDeadlineExceedsUint64() (gas: 487862)\nLogs:\n  Bound result 340282366920938463463374607431768211455\n\n[PASS] test_maxUint128EscrowAndLateTimestamp() (gas: 426551)\n[PASS] test_noEscrowOrderIsClosedAtOnce() (gas: 165747)\n[PASS] test_nothingPaidReverts() (gas: 35625)\n[PASS] test_payEmitsCommitment() (gas: 138681)\n[PASS] test_payRoutesFunds() (gas: 275006)\n[PASS] test_payTotalOverflowCannotCreateAnOrder() (gas: 452264)\n[PASS] test_paymentFailuresAtEachLegRollBackBalancesAllowanceAndOrder() (gas: 4851506)\n[PASS] test_reclaimAfter60Days() (gas: 272793)\n[PASS] test_reclaimOnlyByPayer() (gas: 172552)\n[PASS] test_reclaimTransferFailureDoesNotConsumeClaim() (gas: 412484)\n[PASS] test_reclaimedOrderCannotBeSettled() (gas: 221282)\n[PASS] test_replayOnOtherBoxRejected() (gas: 321313)\n[PASS] test_replayOnOtherChainIdRejected() (gas: 156746)\n[PASS] test_sameOrderIdTwiceReverts() (gas: 125121)\n[PASS] test_settleAndReclaimBothOpenAtBoundary() (gas: 288566)\n[PASS] test_settleBadSignerReverts() (gas: 180580)\n[PASS] test_settleLongAfterBoundary() (gas: 214083)\n[PASS] test_settleManyAllOrNothing() (gas: 428997)\n[PASS] test_settleManyDuplicateKeySettlesOnce() (gas: 352856)\n[PASS] test_settleManyLengthMismatch() (gas: 32649)\n[PASS] test_settleManySkipsOrderReclaimedAhead() (gas: 424138)\n[PASS] test_settleManySkipsOrderSettledAhead() (gas: 429703)\n[PASS] test_settleManyStillRevertsOnUnknownOrWrongTotal() (gas: 186015)\n[PASS] test_settleSignatureBoundToKeyAndAmounts() (gas: 310519)\n[PASS] test_settleSplitsEscrow() (gas: 318596)\n[PASS] test_settleTwiceReverts() (gas: 227332)\n[PASS] test_settleUnknownReverts() (gas: 39325)\n[PASS] test_settleWrongTotalReverts() (gas: 178258)\n[PASS] test_settledOrderCannotBeReclaimed() (gas: 242282)\n[PASS] test_settlementSignedBeforePayStillBoundToEscrow() (gas: 187555)\n[PASS] test_settlementTransferFailuresAreAtomicAndRetryable() (gas: 1955028)\n[PASS] test_signerCannotConsumeOtherEscrowEvenWhenBoxHasEnoughBalance() (gas: 416750)\n[PASS] test_twoWalletsPayingSameOrderIdAreSeparateOrders() (gas: 320108)\n[PASS] test_validSignerCannotPartiallySettleOrWrapTheTotal() (gas: 914154)\n[PASS] test_zeroOrderIdAndOneWeiEscrowRoundTrip() (gas: 209705)\n[PASS] test_zeroPaymentLegsDoNotCallToken() (gas: 362223)\n[PASS] test_zeroRecoveryAndPersonalSignAreRejected() (gas: 241589)\nSuite result: ok. 56 passed; 0 failed; 0 skipped; finished in 93.61ms (486.23ms CPU time)\n\nRan 1 test for test/BoxInvariant.t.sol:BoxInvariantTest\n[PASS]\nBoxInvariantTest invariants:\n[PASS] invariant_balanceEqualsSumOfOpenEscrow\n[PASS] invariant_recipientsReceiveExactlyGhost\n BoxInvariantTest invariants (runs: 64, calls: 6400, reverts: 0)\n\n╭------------+------------+-------+---------+----------╮\n| Contract   | Selector   | Calls | Reverts | Discards |\n+======================================================+\n| BoxHandler | pay        | 1286  | 0       | 0        |\n|------------+------------+-------+---------+----------|\n| BoxHandler | reclaim    | 1293  | 0       | 0        |\n|------------+------------+-------+---------+----------|\n| BoxHandler | settle     | 1332  | 0       | 0        |\n|------------+------------+-------+---------+----------|\n| BoxHandler | settleMany | 1242  | 0       | 0        |\n|------------+------------+-------+---------+----------|\n| BoxHandler | warp       | 1247  | 0       | 0        |\n╰------------+------------+-------+---------+----------╯\n\nLogs:\n  Bound result 5509\n  Bound result 5000000000000000000\n  Bound result 24576\n  Bound result 255\n  Bound result 233\n  Bound result 1\n  Bound result 203\n  Bound result 36\n  Bound result 1000000000000000000\n  Bound result 28\n  Bound result 3000000000000000001\n  Bound result 1433403\n  Bound result 1680904\n  Bound result 939\n  Bound result 28\n  Bound result 200\n  Bound result 5\n  Bound result 213490821448585880051750\n  Bound result 34865568090600008839454\n  Bound result 445479148950433006100882\n  Bound result 212425\n  Bound result 68\n  Bound result 103865\n  Bound result 2272988681\n  Bound result 2036\n  Bound result 213496821448588153040431\n  Bound result 18446744073704281215\n  Bound result 34560000\n  Bound result 2828\n  Bound result 400000000000000000000\n  Bound result 3594\n  Bound result 249948106074487509408870\n  Bound result 5000000000000000000\n  Bound result 6000000000000000000\n  Bound result 3687\n  Bound result 18\n  Bound result 922760199935611661696447\n  Bound result 535\n  Bound result 157198258\n  Bound result 18958254\n  Bound result 535\n  Bound result 67\n  Bound result 49152\n  Bound result 129\n  Bound result 17\n  Bound result 235\n  Bound result 1\n  Bound result 26302609\n  Bound result 32\n  Bound result 3976\n  Bound result 9608\n  Bound result 9608\n  Bound result 3976\n  Bound result 24836\n  Bound result 24\n  Bound result 6547\n  Bound result 81\n  Bound result 151\n  Bound result 5517\n  Bound result 205\n  Bound result 3\n  Bound result 6204\n  Bound result 157\n  Bound result 101\n  Bound result 1560000000000000099\n  Bound result 0\n  Bound result 101\n  Bound result 2583173\n  Bound result 255\n  Bound result 2394000000000000000\n  Bound result 6839\n  Bound result 999999999999999734\n  Bound result 1699306291152935503\n  Bound result 2756831150486792578\n  Bound result 1090231509875486971\n  Bound result 2303\n  Bound result 579\n  Bound result 99\n  Bound result 743064622595627069771017\n  Bound result 700025477030772799267438\n  Bound result 320133292780745223757226\n  Bound result 1895\n  Bound result 1228\n  Bound result 31\n  Bound result 30\n  Bound result 3000000000000000001\n  Bound result 31\n  Bound result 70\n  Bound result 102\n  Bound result 3783\n  Bound result 382296\n  Bound result 5588\n  Bound result 4327\n  Bound result 31\n  Bound result 65\n  Bound result 65\n  Bound result 31\n  Bound result 798603978893056776488459\n  Bound result 885668893698090397658946\n  Bound result 610706062077444880757737\n  Bound result 657362378012844385939232\n  Bound result 132572365111050053589481\n  Bound result 790516812074684760483958\n  Bound result 1142746\n  Bound result 467935165093477262633459\n  Bound result 252621865567342860561376\n  Bound result 503858169310411869413508\n  Bound result 24\n  Bound result 3000000000000000001\n  Bound result 1930782494\n  Bound result 1908413808327\n  Bound result 111286821021220193295165\n  Bound result 1218769\n  Bound result 956332005732447301710838\n  Bound result 400000000000000000000\n  Bound result 1000000000000000000000000\n  Bound result 86398\n  Bound result 41\n  Bound result 5812\n  Bound result 28\n  Bound result 442577504109357332157351\n  Bound result 18446744073709551615\n  Bound result 1800000000\n  Bound result 1500000000000000000\n  Bound result 29743097\n  Bound result 4816902\n  Bound result 229622\n  Bound result 7911\n  Bound result 1029333\n  Bound result 101\n  Bound result 5579200\n  Bound result 0\n  Bound result 101\n  Bound result 2313341\n  Bound result 654349300134973827\n  Bound result 4020094217260093357\n  Bound result 87007674680848095516739\n  Bound result 72370813034429977194611\n  Bound result 3\n  Bound result 192\n  Bound result 17\n  Bound result 24576\n  Bound result 9\n  Bound result 8\n  Bound result 53\n  Bound result 0\n  Bound result 41\n  Bound result 4360\n  Bound result 783934626499377453288650\n  Bound result 18446744073704281215\n  Bound result 463463374267149401290517\n  Bound result 531927451822307432183033\n  Bound result 952\n  Bound result 245928091504310282606361\n  Bound result 400000000000000000000\n  Bound result 157\n  Bound result 4\n  Bound result 500000000000000000\n  Bound result 426993642897176306080864\n  Bound result 665\n  Bound result 3568\n  Bound result 4560000000000000000\n  Bound result 3000000000000000001\n  Bound result 4360\n  Bound result 4360\n  Bound result 3000000000000000001\n  Bound result 110\n  Bound result 71\n  Bound result 1203729855381148988\n  Bound result 59959322391755374\n  Bound result 16\n  Bound result 6614\n  Bound result 6614\n  Bound result 16\n  Bound result 3429\n  Bound result 27\n  Bound result 6257\n  Bound result 6603\n  Bound result 62\n  Bound result 3382\n  Bound result 10160\n  Bound result 62\n  Bound result 1035249804455405773\n  Bound result 663408605658257\n  Bound result 231856443289933417925728\n  Bound result 1973\n  Bound result 1314\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.41s (1.40s CPU time)\n\nRan 2 tests for test/BoxModelInvariant.t.sol:BoxModelInvariantTest\n[PASS]\nBoxModelInvariantTest invariants:\n[PASS] invariant_balancesFollowIndependentLedger\n[PASS] invariant_ordersAreImmutableAndCloseExactlyOnce\n BoxModelInvariantTest invariants (runs: 256, calls: 32768, reverts: 0)\n\n╭-----------------+---------------------+-------+---------+----------╮\n| Contract        | Selector            | Calls | Reverts | Discards |\n+====================================================================+\n| BoxModelHandler | advanceTime         | 2965  | 0       | 0        |\n|-----------------+---------------------+-------+---------+----------|\n| BoxModelHandler | donate              | 3017  | 0       | 0        |\n|-----------------+---------------------+-------+---------+----------|\n| BoxModelHandler | invalidBatch        | 2961  | 0       | 0        |\n|-----------------+---------------------+-------+---------+----------|\n| BoxModelHandler | invalidSettlement   | 2945  | 0       | 0        |\n|-----------------+---------------------+-------+---------+----------|\n| BoxModelHandler | pay                 | 2969  | 0       | 0        |\n|-----------------+---------------------+-------+---------+----------|\n| BoxModelHandler | payWithoutAllowance | 3046  | 0       | 0        |\n|-----------------+---------------------+-------+---------+----------|\n| BoxModelHandler | reclaim             | 2982  | 0       | 0        |\n|-----------------+---------------------+-------+---------+----------|\n| BoxModelHandler | replayClosed        | 3004  | 0       | 0        |\n|-----------------+---------------------+-------+---------+----------|\n| BoxModelHandler | roundTrip           | 3017  | 0       | 0        |\n|-----------------+---------------------+-------+---------+----------|\n| BoxModelHandler | settle              | 2912  | 0       | 0        |\n|-----------------+---------------------+-------+---------+----------|\n| BoxModelHandler | settleMany          | 2950  | 0       | 0        |\n╰-----------------+---------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 11\n  Bound result 13\n  Bound result 0\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 3107907\n  Bound result 37\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 4\n  Bound result 65\n  Bound result 8\n  Bound result 16939\n  Bound result 0\n  Bound result 0\n  Bound result 1\n  Bound result 1\n  Bound result 1\n  Bound result 18\n  Bound result 0\n  Bound result 0\n  Bound result 1\n  Bound result 1\n  Bound result 0\n  Bound result 1\n  Bound result 3000000000000000001\n  Bound result 3000000000000000000\n  Bound result 5132\n  Bound result 1\n  Bound result 1\n  Bound result 4\n  Bound result 6\n  Bound result 0\n  Bound result 0\n  Bound result 24173\n  Bound result 0\n  Bound result 0\n  Bound result 19\n  Bound result 0\n  Bound result 0\n  Bound result 16321\n  Bound result 0\n  Bound result 0\n  Bound result 1\n  Bound result 1\n  Bound result 10409\n  Bound result 34560000\n  Bound result 6072\n  Bound result 1800000000\n  Bound result 0\n  Bound result 0\n  Bound result 6392\n  Bound result 5049\n  Bound result 128\n  Bound result 0\n  Bound result 0\n  Bound result 124753\n  Bound result 0\n  Bound result 0\n  Bound result 17\n  Bound result 18446744073704281215\n  Bound result 0\n  Bound result 0\n  Bound result 17\n  Bound result 17\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 1\n  Bound result 1\n  Bound result 2186984\n  Bound result 36\n  Bound result 1\n  Bound result 0\n  Bound result 0\n  Bound result 817\n  Bound result 500000000000000000\n  Bound result 500000000000000000\n  Bound result 500000000000000000\n  Bound result 817\n  Bound result 817\n  Bound result 500000000000000000\n  Bound result 817\n  Bound result 5092\n  Bound result 1\n  Bound result 1\n  Bound result 1\n  Bound result 1\n  Bound result 3564\n  Bound result 400000000000000000000\n  Bound result 213\n  Bound result 1221\n  Bound result 2\n  Bound result 6\n  Bound result 213\n  Bound result 1600\n  Bound result 2\n  Bound result 0\n  Bound result 699440\n  Bound result 353215\n  Bound result 16\n  Bound result 14579\n  Bound result 14\n  Bound result 12\n  Bound result 2360\n  Bound result 9309\n  Bound result 0\n  Bound result 0\n  Bound result 2360\n  Bound result 7140\n  Bound result 0\n  Bound result 0\n  Bound result 4\n  Bound result 18017\n  Bound result 0\n  Bound result 0\n  Bound result 500000000000000000\n  Bound result 0\n  Bound result 0\n  Bound result 24576\n  Bound result 12939\n  Bound result 1136\n  Bound result 5692\n  Bound result 1\n  Bound result 1\n  Bound result 6\n  Bound result 26\n  Bound result 7\n  Bound result 103\n  Bound result 9\n  Bound result 26\n  Bound result 4\n  Bound result 103\n  Bound result 12\n  Bound result 2\n  Bound result 9\n  Bound result 0\n  Bound result 0\n  Bound result 340282366920938463447927863358063928412\n  Bound result 0\n  Bound result 0\n  Bound result 4461\n  Bound result 463463374267149401290517\n  Bound result 336\n  Bound result 930\n  Bound result 0\n  Bound result 7\n  Bound result 7\n  Bound result 7\n  Bound result 0\n  Bound result 0\n  Bound result 7\n  Bound result 255\n  Bound result 0\n  Bound result 0\n  Bound result 13335249173621985048765454940374631498\n  Bound result 24\n  Bound result 24\n  Bound result 24\n  Bound result 13335249173621985048765454940374631498\n  Bound result 229343101446297168454234664364004330556\n  Bound result 24\n  Bound result 6166\n  Bound result 3000000000000000001\n  Bound result 5000000000000000000\n  Bound result 6001\n  Bound result 1871\n  Bound result 0\n  Bound result 0\n  Bound result 2673\n  Bound result 124759962045612318017193479176180257976\n  Bound result 1\n  Bound result 0\n  Bound result 2673\n  Bound result 2673\n  Bound result 1\n  Bound result 1\n  Bound result 1275\n  Bound result 515\n  Bound result 3887\n  Bound result 1\n  Bound result 1\n  Bound result 7\n  Bound result 7\n  Bound result 453999999999999987\n  Bound result 25492354674888464\n  Bound result 13\n  Bound result 2\n  Bound result 453999999999999987\n  Bound result 7999999999997886\n  Bound result 13\n  Bound result 0\n  Bound result 24\n  Bound result 70\n  Bound result 4660\n  Bound result 25070\n  Bound result 3271\n  Bound result 31\n  Bound result 3033\n  Bound result 5270400\n  Bound result 40\n  Bound result 7\n  Bound result 7\n  Bound result 7\n  Bound result 40\n  Bound result 2\n  Bound result 7\n  Bound result 9767\n  Bound result 66\n  Bound result 8\n  Bound result 9668\n  Bound result 5624\n  Bound result 66\n  Bound result 6\n  Bound result 9668\n  Bound result 2760\n  Bound result 1\n  Bound result 1\n  Bound result 5\n  Bound result 8\n  Bound result 16940\n  Bound result 6954000000000000000\n\n[PASS] test_modelExercisesRejectionsRecipientsAndBothExits() (gas: 2822639)\nLogs:\n  Bound result 11\n  Bound result 13\n  Bound result 0\n  Bound result 0\n  Bound result 1\n  Bound result 0\n  Bound result 1\n  Bound result 1\n  Bound result 0\n  Bound result 0\n  Bound result 1\n  Bound result 1\n  Bound result 3\n  Bound result 5\n  Bound result 0\n  Bound result 0\n  Bound result 5184000\n  Bound result 1\n  Bound result 2\n  Bound result 2\n  Bound result 1\n  Bound result 11\n  Bound result 13\n  Bound result 13\n  Bound result 13\n  Bound result 11\n  Bound result 11\n  Bound result 13\n  Bound result 11\n  Bound result 340282366920938463463374607431768211455\n  Bound result 0\n  Bound result 0\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 13.21s (13.21s CPU time)\n\nRan 5 test suites in 13.22s (14.72s CPU time): 64 tests passed, 0 failed, 1 skipped (65 total tests)\n","passed":true},{"durationMs":74,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"Box.pay(bytes32,bytes32,uint256,uint256,uint256,bytes32)\",\"Box.reclaim(bytes32)\",\"Box.settle((bytes32,uint256,uint256,uint256),bytes)\",\"Box.settleMany((bytes32,uint256,uint256,uint256)[],bytes[])\"],\"files\":{\".gitignore\":3,\"ADAPTATION.md\":76,\"LICENSE\":9,\"README.md\":56,\"foundry.toml\":13,\"remappings.txt\":2,\"src/Box.sol\":156,\"test/ADAPTATION.md\":72,\"test/Box.t.sol\":997,\"test/BoxInvariant.t.sol\":154,\"test/BoxLaunch.t.sol\":115,\"test/BoxModelInvariant.t.sol\":431,\"test/helpers/BoxSigning.sol\":36},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"35d519aaa960d7fd8d6270abc717e147260b1890823546d29687444ca5bd5988","verifiedTreeHash":"1bc1f30e3dc42ec310875d0ed95089f62e891bd0","verifierVersion":"0.1.0+d372f99e"},{"checks":[{"durationMs":1938,"exitCode":0,"name":"build","output":"Compiling 38 files with Solc 0.8.30\nSolc 0.8.30 finished in 1.87s\nCompiler run successful!\n","passed":true},{"durationMs":1202,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/Box.t.sol:BoxForkTest\n[SKIP: skipped] setUp() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 652.34µs (0.00ns CPU time)\n\nRan 35 tests for test/Box.t.sol:BoxTest\n[PASS] testFuzz_balanceEqualsOpenEscrow(uint96,uint96,uint96) (runs: 256, μ: 342779, ~: 343725)\nLogs:\n  Bound result 394303960780213576547\n  Bound result 345980489820657710980\n  Bound result 1\n\n[PASS] test_compactAndBadVSignaturesRejected() (gas: 199607)\n[PASS] test_constructorRejectsZero() (gas: 10169)\n[PASS] test_directTransferIsNotEscrowAndCannotLeave() (gas: 288707)\n[PASS] test_escrowTooLargeReverts() (gas: 35757)\n[PASS] test_frontRunCannotSquatOrderId() (gas: 182657)\n[PASS] test_highSMalleatedSignatureRejected() (gas: 233273)\n[PASS] test_maxUint128EscrowAndLateTimestamp() (gas: 426408)\n[PASS] test_noEscrowOrderIsClosedAtOnce() (gas: 165660)\n[PASS] test_nothingPaidReverts() (gas: 35603)\n[PASS] test_payEmitsCommitment() (gas: 138659)\n[PASS] test_payRoutesFunds() (gas: 274970)\n[PASS] test_reclaimAfter60Days() (gas: 272381)\n[PASS] test_reclaimOnlyByPayer() (gas: 172546)\n[PASS] test_reclaimedOrderCannotBeSettled() (gas: 233951)\n[PASS] test_replayOnOtherBoxRejected() (gas: 333982)\n[PASS] test_replayOnOtherChainIdRejected() (gas: 169415)\n[PASS] test_sameOrderIdTwiceReverts() (gas: 125099)\n[PASS] test_settleAndReclaimBothOpenAtBoundary() (gas: 309772)\n[PASS] test_settleBadSignerReverts() (gas: 193293)\n[PASS] test_settleLongAfterBoundary() (gas: 224758)\n[PASS] test_settleManyAllOrNothing() (gas: 471547)\n[PASS] test_settleManyDuplicateKeySettlesOnce() (gas: 380227)\n[PASS] test_settleManyLengthMismatch() (gas: 32627)\n[PASS] test_settleManySkipsOrderReclaimedAhead() (gas: 451503)\n[PASS] test_settleManySkipsOrderSettledAhead() (gas: 455074)\n[PASS] test_settleManyStillRevertsOnUnknownOrWrongTotal() (gas: 213387)\n[PASS] test_settleSignatureBoundToKeyAndAmounts() (gas: 323204)\n[PASS] test_settleSplitsEscrow() (gas: 329321)\n[PASS] test_settleTwiceReverts() (gas: 239985)\n[PASS] test_settleUnknownReverts() (gas: 49501)\n[PASS] test_settleWrongTotalReverts() (gas: 190933)\n[PASS] test_settledOrderCannotBeReclaimed() (gas: 256950)\n[PASS] test_settlementSignedBeforePayStillBoundToEscrow() (gas: 197775)\n[PASS] test_twoWalletsPayingSameOrderIdAreSeparateOrders() (gas: 319970)\nSuite result: ok. 35 passed; 0 failed; 0 skipped; finished in 13.44ms (26.27ms CPU time)\n\nRan 1 test for test/BoxInvariant.t.sol:BoxInvariantTest\n[PASS]\nBoxInvariantTest invariants:\n[PASS] invariant_balanceEqualsSumOfOpenEscrow\n[PASS] invariant_recipientsReceiveExactlyGhost\n BoxInvariantTest invariants (runs: 64, calls: 6400, reverts: 0)\n\n╭------------+------------+-------+---------+----------╮\n| Contract   | Selector   | Calls | Reverts | Discards |\n+======================================================+\n| BoxHandler | pay        | 1286  | 0       | 0        |\n|------------+------------+-------+---------+----------|\n| BoxHandler | reclaim    | 1293  | 0       | 0        |\n|------------+------------+-------+---------+----------|\n| BoxHandler | settle     | 1332  | 0       | 0        |\n|------------+------------+-------+---------+----------|\n| BoxHandler | settleMany | 1242  | 0       | 0        |\n|------------+------------+-------+---------+----------|\n| BoxHandler | warp       | 1247  | 0       | 0        |\n╰------------+------------+-------+---------+----------╯\n\nLogs:\n  Bound result 5509\n  Bound result 1500000000000000000\n  Bound result 18446744073704281215\n  Bound result 463463374267149401290518\n  Bound result 392888905772948628970034\n  Bound result 3919851007513547\n  Bound result 3919851007513547\n  Bound result 396369361081774944919069\n  Bound result 1000000000000000000000000\n  Bound result 1\n  Bound result 2394000000000000000\n  Bound result 1433403\n  Bound result 235\n  Bound result 941\n  Bound result 1\n  Bound result 6000000000000000000\n  Bound result 4428\n  Bound result 213490821448585880051750\n  Bound result 34865568090600008839454\n  Bound result 445479148950433006100882\n  Bound result 212425\n  Bound result 69\n  Bound result 103865\n  Bound result 2272988681\n  Bound result 2038\n  Bound result 427772920607622342194568\n  Bound result 3000000000000000000\n  Bound result 3000000000000000000\n  Bound result 423827431481978159120939\n  Bound result 50000000000000000\n  Bound result 9512\n  Bound result 35684453659527059095948\n  Bound result 1500000000000000000\n  Bound result 3000000000000000001\n  Bound result 3688\n  Bound result 720393523466676017434295\n  Bound result 922760199935611661696449\n  Bound result 534\n  Bound result 157198260\n  Bound result 157198260\n  Bound result 534\n  Bound result 4042\n  Bound result 446744073709575855\n  Bound result 3061\n  Bound result 5055\n  Bound result 5055\n  Bound result 3061\n  Bound result 1500000000000000000\n  Bound result 6000000000000000000\n  Bound result 3946\n  Bound result 9970\n  Bound result 457\n  Bound result 3946\n  Bound result 170327070723887700297327\n  Bound result 2\n  Bound result 6333\n  Bound result 4584\n  Bound result 2394000000000000000\n  Bound result 5711\n  Bound result 6\n  Bound result 3000000000000000000\n  Bound result 3000000000000000000\n  Bound result 0\n  Bound result 27\n  Bound result 1000000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 27\n  Bound result 2583173\n  Bound result 463463374267149401290518\n  Bound result 1000000000000000000000000\n  Bound result 2691\n  Bound result 50000000000000000\n  Bound result 2095075303424365901\n  Bound result 1033808289277919417\n  Bound result 50000000000000000\n  Bound result 2303\n  Bound result 579\n  Bound result 99\n  Bound result 743064622595627069771017\n  Bound result 700025477030772799267438\n  Bound result 320133292780745223757226\n  Bound result 1679\n  Bound result 22\n  Bound result 64\n  Bound result 6274\n  Bound result 2394000000000000000\n  Bound result 64\n  Bound result 460192\n  Bound result 3382\n  Bound result 1743\n  Bound result 2486822\n  Bound result 5715\n  Bound result 1000000001904331429\n  Bound result 64\n  Bound result 28\n  Bound result 28\n  Bound result 64\n  Bound result 798603978893056776488459\n  Bound result 885668893698090397658946\n  Bound result 610706062077444880757737\n  Bound result 657362378012844385939232\n  Bound result 132572365111050053589481\n  Bound result 790516812074684760483958\n  Bound result 1142744\n  Bound result 467935165093477262633459\n  Bound result 252621865567342860561376\n  Bound result 503858169310411869413508\n  Bound result 2\n  Bound result 1100\n  Bound result 1930782494\n  Bound result 1908413808327\n  Bound result 111286821021220193295165\n  Bound result 2447125\n  Bound result 956332005732447301710838\n  Bound result 50000000000000000\n  Bound result 463463374267149401290517\n  Bound result 839487\n  Bound result 2283075\n  Bound result 5812\n  Bound result 1\n  Bound result 422254262465995302721408\n  Bound result 500000000000000000\n  Bound result 3\n  Bound result 6954000000000000000\n  Bound result 661928230821063551\n  Bound result 2338071769178936448\n  Bound result 229622\n  Bound result 7911\n  Bound result 1029333\n  Bound result 446488059255112420006381\n  Bound result 3000000000000000001\n  Bound result 606000000000000000\n  Bound result 119586717750823749\n  Bound result 1486539\n  Bound result 646980776618619609\n  Bound result 1756575276027435449\n  Bound result 115291471311077617022092\n  Bound result 174146278904358977036144\n  Bound result 193805779098838477660812\n  Bound result 148185069283782969652051\n  Bound result 1631416\n  Bound result 18446744073704281215\n  Bound result 1000000000000000000000000\n  Bound result 1000000000000000000000000\n  Bound result 64\n  Bound result 2591999\n  Bound result 400000000000000000000\n  Bound result 4361\n  Bound result 5270400\n  Bound result 500000000000000000\n  Bound result 0\n  Bound result 5000000000000000000\n  Bound result 6602\n  Bound result 0\n  Bound result 50000000000000000\n  Bound result 9212\n  Bound result 3250\n  Bound result 6954000000000000000\n  Bound result 466222456602813963542415\n  Bound result 9224\n  Bound result 3735\n  Bound result 1000000000000000000000\n  Bound result 2394000000000000000\n  Bound result 2062\n  Bound result 2062\n  Bound result 0\n  Bound result 59959322391755374\n  Bound result 20045703729855381162351\n  Bound result 4275729855381159469\n  Bound result 59959322391755374\n  Bound result 117235587849142614968460\n  Bound result 1461\n  Bound result 1461\n  Bound result 3027968\n  Bound result 4064\n  Bound result 5270400\n  Bound result 28979638916305\n  Bound result 1379\n  Bound result 5571\n  Bound result 10510\n  Bound result 4176\n  Bound result 1255\n  Bound result 1035249804455405773\n  Bound result 663408605658257\n  Bound result 231856443289933417925728\n  Bound result 9461\n  Bound result 517440283\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.11s (1.11s CPU time)\n\nRan 3 test suites in 1.11s (1.12s CPU time): 36 tests passed, 0 failed, 1 skipped (37 total tests)\n","passed":true},{"durationMs":77,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"Box.pay(bytes32,bytes32,uint256,uint256,uint256,bytes32)\",\"Box.reclaim(bytes32)\",\"Box.settle((bytes32,uint256,uint256,uint256),bytes)\",\"Box.settleMany((bytes32,uint256,uint256,uint256)[],bytes[])\"],\"files\":{\".gitignore\":3,\"ADAPTATION.md\":76,\"LICENSE\":9,\"README.md\":56,\"foundry.toml\":13,\"remappings.txt\":2,\"src/Box.sol\":156,\"test/Box.t.sol\":507,\"test/BoxInvariant.t.sol\":154},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":854,"exitCode":0,"name":"slither","output":"[medium/medium] unused-return at src/Box.sol:110: Box.settle(Box.Settlement,bytes) (src/Box.sol#110-126) ignores return value by (recovered,err,None) = ECDSA.tryRecover(digest,signature) (src/Box.sol#117)\n[low/medium] reentrancy-events at src/Box.sol:140: Reentrancy in Box.reclaim(bytes32) (src/Box.sol#140-150):\n[low/medium] reentrancy-events at src/Box.sol:110: Reentrancy in Box.settle(Box.Settlement,bytes) (src/Box.sol#110-126):\n[low/medium] reentrancy-events at src/Box.sol:91: Reentrancy in Box.pay(bytes32,bytes32,uint256,uint256,uint256,bytes32) (src/Box.sol#91-107):\n[low/medium] timestamp at src/Box.sol:140: Box.reclaim(bytes32) (src/Box.sol#140-150) uses timestamp for comparisons","passed":true},{"durationMs":321,"exitCode":0,"name":"aderyn","output":"[low] costly-loop at src/Box.sol:132: Costly operations inside loop\n[low] require-revert-in-loop at src/Box.sol:132: Loop Contains `require`/`revert`\n[low] uninitialized-local-variable at src/Box.sol:132: Uninitialized Local Variable","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"41c78ca39a3638cf0027e2e9e3fbf9c0168f21ea2854d6b09e014b0b08f1083c","verifiedTreeHash":"ef394caecd43abd391bb105bcebafe922564470e","verifierVersion":"0.1.0+d372f99e"},{"checks":[{"durationMs":2021,"exitCode":0,"name":"build","output":"Compiling 38 files with Solc 0.8.30\nSolc 0.8.30 finished in 1.95s\nCompiler run successful!\n","passed":true},{"durationMs":1211,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/Box.t.sol:BoxForkTest\n[SKIP: skipped] setUp() (gas: 0)\nSuite result: ok. 0 passed; 0 failed; 1 skipped; finished in 609.00µs (0.00ns CPU time)\n\nRan 35 tests for test/Box.t.sol:BoxTest\n[PASS] testFuzz_balanceEqualsOpenEscrow(uint96,uint96,uint96) (runs: 256, μ: 342779, ~: 343725)\nLogs:\n  Bound result 370478332161460171160\n  Bound result 429017240014304\n  Bound result 10114689\n\n[PASS] test_compactAndBadVSignaturesRejected() (gas: 199607)\n[PASS] test_constructorRejectsZero() (gas: 10169)\n[PASS] test_directTransferIsNotEscrowAndCannotLeave() (gas: 288707)\n[PASS] test_escrowTooLargeReverts() (gas: 35757)\n[PASS] test_frontRunCannotSquatOrderId() (gas: 182657)\n[PASS] test_highSMalleatedSignatureRejected() (gas: 233273)\n[PASS] test_maxUint128EscrowAndLateTimestamp() (gas: 426408)\n[PASS] test_noEscrowOrderIsClosedAtOnce() (gas: 165660)\n[PASS] test_nothingPaidReverts() (gas: 35603)\n[PASS] test_payEmitsCommitment() (gas: 138659)\n[PASS] test_payRoutesFunds() (gas: 274970)\n[PASS] test_reclaimAfter60Days() (gas: 272381)\n[PASS] test_reclaimOnlyByPayer() (gas: 172546)\n[PASS] test_reclaimedOrderCannotBeSettled() (gas: 233951)\n[PASS] test_replayOnOtherBoxRejected() (gas: 333982)\n[PASS] test_replayOnOtherChainIdRejected() (gas: 169415)\n[PASS] test_sameOrderIdTwiceReverts() (gas: 125099)\n[PASS] test_settleAndReclaimBothOpenAtBoundary() (gas: 309772)\n[PASS] test_settleBadSignerReverts() (gas: 193293)\n[PASS] test_settleLongAfterBoundary() (gas: 224758)\n[PASS] test_settleManyAllOrNothing() (gas: 471547)\n[PASS] test_settleManyDuplicateKeySettlesOnce() (gas: 380227)\n[PASS] test_settleManyLengthMismatch() (gas: 32627)\n[PASS] test_settleManySkipsOrderReclaimedAhead() (gas: 451503)\n[PASS] test_settleManySkipsOrderSettledAhead() (gas: 455074)\n[PASS] test_settleManyStillRevertsOnUnknownOrWrongTotal() (gas: 213387)\n[PASS] test_settleSignatureBoundToKeyAndAmounts() (gas: 323204)\n[PASS] test_settleSplitsEscrow() (gas: 329321)\n[PASS] test_settleTwiceReverts() (gas: 239985)\n[PASS] test_settleUnknownReverts() (gas: 49501)\n[PASS] test_settleWrongTotalReverts() (gas: 190933)\n[PASS] test_settledOrderCannotBeReclaimed() (gas: 256950)\n[PASS] test_settlementSignedBeforePayStillBoundToEscrow() (gas: 197775)\n[PASS] test_twoWalletsPayingSameOrderIdAreSeparateOrders() (gas: 319970)\nSuite result: ok. 35 passed; 0 failed; 0 skipped; finished in 16.77ms (31.00ms CPU time)\n\nRan 1 test for test/BoxInvariant.t.sol:BoxInvariantTest\n[PASS]\nBoxInvariantTest invariants:\n[PASS] invariant_balanceEqualsSumOfOpenEscrow\n[PASS] invariant_recipientsReceiveExactlyGhost\n BoxInvariantTest invariants (runs: 64, calls: 6400, reverts: 0)\n\n╭------------+------------+-------+---------+----------╮\n| Contract   | Selector   | Calls | Reverts | Discards |\n+======================================================+\n| BoxHandler | pay        | 1286  | 0       | 0        |\n|------------+------------+-------+---------+----------|\n| BoxHandler | reclaim    | 1293  | 0       | 0        |\n|------------+------------+-------+---------+----------|\n| BoxHandler | settle     | 1332  | 0       | 0        |\n|------------+------------+-------+---------+----------|\n| BoxHandler | settleMany | 1242  | 0       | 0        |\n|------------+------------+-------+---------+----------|\n| BoxHandler | warp       | 1247  | 0       | 0        |\n╰------------+------------+-------+---------+----------╯\n\nLogs:\n  Bound result 5509\n  Bound result 1500000000000000000\n  Bound result 18446744073704281215\n  Bound result 463463374267149401290518\n  Bound result 392888905772948628970034\n  Bound result 3919851007513547\n  Bound result 3919851007513547\n  Bound result 396369361081774944919069\n  Bound result 1000000000000000000000000\n  Bound result 1\n  Bound result 2394000000000000000\n  Bound result 1433403\n  Bound result 235\n  Bound result 941\n  Bound result 1\n  Bound result 6000000000000000000\n  Bound result 4428\n  Bound result 213490821448585880051750\n  Bound result 34865568090600008839454\n  Bound result 445479148950433006100882\n  Bound result 212425\n  Bound result 69\n  Bound result 103865\n  Bound result 2272988681\n  Bound result 2038\n  Bound result 427772920607622342194568\n  Bound result 3000000000000000000\n  Bound result 3000000000000000000\n  Bound result 423827431481978159120939\n  Bound result 50000000000000000\n  Bound result 9512\n  Bound result 328500228116934412089785\n  Bound result 1500000000000000000\n  Bound result 3000000000000000001\n  Bound result 3688\n  Bound result 720393523466676017434295\n  Bound result 922760199935611661696449\n  Bound result 534\n  Bound result 157198260\n  Bound result 157198260\n  Bound result 534\n  Bound result 4042\n  Bound result 446744073709575855\n  Bound result 3061\n  Bound result 5055\n  Bound result 5055\n  Bound result 3061\n  Bound result 1500000000000000000\n  Bound result 6000000000000000000\n  Bound result 3946\n  Bound result 9970\n  Bound result 457\n  Bound result 3946\n  Bound result 689467046654344094168776\n  Bound result 2\n  Bound result 6333\n  Bound result 4584\n  Bound result 2394000000000000000\n  Bound result 5711\n  Bound result 6\n  Bound result 3000000000000000000\n  Bound result 3000000000000000000\n  Bound result 0\n  Bound result 27\n  Bound result 1000000000000000000000\n  Bound result 1000000000000000000000\n  Bound result 27\n  Bound result 2583173\n  Bound result 463463374267149401290518\n  Bound result 1000000000000000000000000\n  Bound result 2691\n  Bound result 50000000000000000\n  Bound result 2095075303424365901\n  Bound result 2438384423110836788\n  Bound result 50000000000000000\n  Bound result 2303\n  Bound result 579\n  Bound result 99\n  Bound result 743064622595627069771017\n  Bound result 700025477030772799267438\n  Bound result 320133292780745223757226\n  Bound result 1679\n  Bound result 22\n  Bound result 64\n  Bound result 6274\n  Bound result 2394000000000000000\n  Bound result 64\n  Bound result 460192\n  Bound result 3382\n  Bound result 1743\n  Bound result 2486822\n  Bound result 5715\n  Bound result 1000000001904331429\n  Bound result 64\n  Bound result 28\n  Bound result 28\n  Bound result 64\n  Bound result 798603978893056776488459\n  Bound result 885668893698090397658946\n  Bound result 610706062077444880757737\n  Bound result 657362378012844385939232\n  Bound result 132572365111050053589481\n  Bound result 790516812074684760483958\n  Bound result 1142744\n  Bound result 467935165093477262633459\n  Bound result 252621865567342860561376\n  Bound result 503858169310411869413508\n  Bound result 2\n  Bound result 1100\n  Bound result 1930782494\n  Bound result 1908413808327\n  Bound result 111286821021220193295165\n  Bound result 2447125\n  Bound result 956332005732447301710838\n  Bound result 50000000000000000\n  Bound result 463463374267149401290517\n  Bound result 839487\n  Bound result 2283075\n  Bound result 5812\n  Bound result 1\n  Bound result 547688666204320023344720\n  Bound result 500000000000000000\n  Bound result 3\n  Bound result 6954000000000000000\n  Bound result 661928230821063551\n  Bound result 2338071769178936448\n  Bound result 229622\n  Bound result 7911\n  Bound result 1029333\n  Bound result 446488059255112420006381\n  Bound result 3000000000000000001\n  Bound result 606000000000000000\n  Bound result 119586717750823749\n  Bound result 1486539\n  Bound result 646980776618619609\n  Bound result 1756575276027435449\n  Bound result 55658104868754943706333\n  Bound result 169841528835638776715147\n  Bound result 193805779098838477660812\n  Bound result 148185069283782969652051\n  Bound result 1631416\n  Bound result 18446744073704281215\n  Bound result 1000000000000000000000000\n  Bound result 1000000000000000000000000\n  Bound result 64\n  Bound result 2591999\n  Bound result 400000000000000000000\n  Bound result 4361\n  Bound result 5270400\n  Bound result 500000000000000000\n  Bound result 0\n  Bound result 5000000000000000000\n  Bound result 6602\n  Bound result 0\n  Bound result 50000000000000000\n  Bound result 9212\n  Bound result 3250\n  Bound result 953999999999999998\n  Bound result 1246048479161799161\n  Bound result 1507\n  Bound result 3250\n  Bound result 1000000000000000000000\n  Bound result 2394000000000000000\n  Bound result 4359\n  Bound result 4359\n  Bound result 2394000000000000000\n  Bound result 59959322391755374\n  Bound result 20045703729855381162351\n  Bound result 4275729855381159469\n  Bound result 59959322391755374\n  Bound result 117235587849142614968460\n  Bound result 1461\n  Bound result 1461\n  Bound result 3027968\n  Bound result 4064\n  Bound result 5270400\n  Bound result 6501\n  Bound result 9839\n  Bound result 5571\n  Bound result 10510\n  Bound result 4176\n  Bound result 1255\n  Bound result 1035249804455405773\n  Bound result 663408605658257\n  Bound result 231856443289933417925728\n  Bound result 9461\n  Bound result 517440283\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.09s (1.09s CPU time)\n\nRan 3 test suites in 1.09s (1.11s CPU time): 36 tests passed, 0 failed, 1 skipped (37 total tests)\n","passed":true},{"durationMs":35,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"Box.pay(bytes32,bytes32,uint256,uint256,uint256,bytes32)\",\"Box.reclaim(bytes32)\",\"Box.settle((bytes32,uint256,uint256,uint256),bytes)\",\"Box.settleMany((bytes32,uint256,uint256,uint256)[],bytes[])\"],\"files\":{\".gitignore\":3,\"ADAPTATION.md\":76,\"LICENSE\":9,\"README.md\":56,\"foundry.toml\":13,\"launch.json\":15,\"remappings.txt\":2,\"src/Box.sol\":156,\"test/Box.t.sol\":507,\"test/BoxInvariant.t.sol\":154},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"71db17802a5386d25cd97ae50b43db9a6168afac087d328946b509c265762748","verifiedTreeHash":"46ed7979f843299b3e6ba091d7be40b06a07162a","verifierVersion":"0.1.0+d372f99e"}]}