{"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":"416e1862-53a2-4f3d-bfd8-e0475ab52ac9","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"ac0a6e990b99e28be4eb0f815626dabebba4528ad3925fabb6b3df9de3072058","dependsOn":["build_contract_project","manifest"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"c26edc76dc7a76e09a42c3634054429c1679c6e247747d647a03f77e5b332d7e","skillId":"adversarial-review","tools":[]},"key":"adversarial_review","kind":"code","role":"review","skillHash":"c26edc76dc7a76e09a42c3634054429c1679c6e247747d647a03f77e5b332d7e","skillId":"adversarial-review","state":"accepted"},{"acceptedSubmissionHash":"8ce0d0f6eb0fb40f00bdd76067daeb6e1e64982a40881d1e3a0d41401f1a9aa5","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"fb6887b34514bcb194265fa403f0195c6a83eaef269da1e6189e1e9c4b372a7d","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"fb6887b34514bcb194265fa403f0195c6a83eaef269da1e6189e1e9c4b372a7d","skillId":"build-contract-project","state":"accepted"},{"acceptedSubmissionHash":"5822680b5394adbcb77eab5656b5dcc80d52ea2ca9d31daec15d223c509347f4","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"}],"objective":"Build and independently review Two Party Escrow: token Escrow (ESCR) and contract TwoPartyEscrow, where a buyer deposits ESCR naming a seller and a deadline; the buyer may release to the seller at any time, the seller may refund the buyer at any time, and after the deadline the buyer may reclaim an unreleased deposit; no third party. Follow the evm-project-launch guidance for a Sepolia project launch: a fixed-supply ERC-20 with 18 decimals, a zero-argument constructor minting the whole supply to its deployer and no mint backdoor, plus one application contract whose only constructor argument is the token address passed as $token. No owner, no admin, no upgradeability, no fee; checks-effects-interactions; events for every state change; thorough Foundry tests including a malicious reentrant token and token permission failures. The manifest names the token and the contract with the $token argument. Independent review before deployment. Contributors never broadcast; the admitted release goes through the deployer.","parentJobId":null,"planHash":"f7ad24faa5edec9bdff15885382ee2d7417e2b1b9dbde3fa4c2eaa50a2038d87","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"416e1862-53a2-4f3d-bfd8-e0475ab52ac9","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/Identity-md/launch-61-build-independently-review-two"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"50906","feedbackHash":"3dfe4809ad16701dae7b0bce89cca70c9807d6d612bf03f1af2bf4f69f90d260","nodeKey":"adversarial_review","submissionHash":"ac0a6e990b99e28be4eb0f815626dabebba4528ad3925fabb6b3df9de3072058","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"50903","feedbackHash":"d91425b2bf8a904e9713a3654d2967ede9f4e1d3e18c62e72095dc5b5664a578","nodeKey":"build_contract_project","submissionHash":"8ce0d0f6eb0fb40f00bdd76067daeb6e1e64982a40881d1e3a0d41401f1a9aa5","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"50968","feedbackHash":"ce8dfa1dd2920bc897df130cf586cf1ac81a71086e49ae308514903e1ad0911c","nodeKey":"manifest","submissionHash":"5822680b5394adbcb77eab5656b5dcc80d52ea2ca9d31daec15d223c509347f4","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"72fb2911ce352aa88c3b4accdc23107b2be8796812890924929e7ddaa3a2f877","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"21b2ffd7fc5b401f5edae8aaee1225583c497e41cc9e8924b090f0264e4b3a84","device":"5b3b071249317936","findings":[],"hash":"5822680b5394adbcb77eab5656b5dcc80d52ea2ca9d31daec15d223c509347f4","nodeId":"5256d4cc-c628-4d0b-a5dd-77f6042cc7b8","outcome":"completed","summary":"Updated `launch.json` to match `Token` (Escrow/ESCR) and `TwoPartyEscrow($token)`, with explicit independent review before deployment.\n\nVerified manifest constraints and compiled constructor ABIs. Foundry build succeeded with lint warnings; all 17 tests passed using scratch compiler/cache paths.\n\nOnly `launch.json` changed.","treeHash":"a44aeeb40c17417a7a3e6912a8c4db12bec0278d","usage":{"cachedInputTokens":343936,"inputTokens":23415,"model":null,"outputTokens":2121,"runtime":"codex","turns":4,"wallClockMs":101290}},{"artifacts":[],"attempt":1,"bundleHash":"334cb992e739ca22aa62029a0ac10d55dd88a4d2a92aa20d3bf566ef241a2812","device":"c4f696e22e7a36f7","findings":[],"hash":"8ce0d0f6eb0fb40f00bdd76067daeb6e1e64982a40881d1e3a0d41401f1a9aa5","nodeId":"654cf1aa-9492-449f-b129-a9e3b3032fd3","outcome":"completed","summary":"Implemented the complete Two Party Escrow Foundry project.\n\nKey deliverables:\n\n- Fixed-supply 1B ESCR ERC-20: [Token.sol](/root/.identitymd/work/416e1862-53a2-4f3d-bfd8-e0475ab52ac9/654cf1aa-9492-449f-b129-a9e3b3032fd3/src/Token.sol)\n- Buyer/seller escrow contract: [TwoPartyEscrow.sol](/root/.identitymd/work/416e1862-53a2-4f3d-bfd8-e0475ab52ac9/654cf1aa-9492-449f-b129-a9e3b3032fd3/src/TwoPartyEscrow.sol)\n- Sepolia launch manifest: [launch.json](/root/.identitymd/work/416e1862-53a2-4f3d-bfd8-e0475ab52ac9/654cf1aa-9492-449f-b129-a9e3b3032fd3/launch.json)\n- Operational documentation: [README.md](/root/.identitymd/work/416e1862-53a2-4f3d-bfd8-e0475ab52ac9/654cf1aa-9492-449f-b129-a9e3b3032fd3/README.md)\n- Independent adversarial review: [REVIEW.md](/root/.identitymd/work/416e1862-53a2-4f3d-bfd8-e0475ab52ac9/654cf1aa-9492-449f-b129-a9e3b3032fd3/REVIEW.md)\n\nThe independent review identified and repaired the escrow-self seller edge case. Malformed ERC-20 return handling was also hardened.\n\nValidation passed offline:\n\n- `forge fmt --check`\n- `forge build --offline`\n- `forge test --offline`: 17/17 tests\n- Extended fuzz run: 1,000 iterations, all passing\n- `git diff --check`\n- Manifest JSON validation\n\nTests cover authorization, all settlement paths, deadline boundaries, accounting conservation, repeated actions, token permission failures, false/reverting/malformed token responses, non-exact transfers, and reentrant callbacks. No transactions were broadcast.","treeHash":"ea72dac47e041bc0608fed8ffda75ea67c46765a","usage":{"cachedInputTokens":885248,"inputTokens":54302,"model":null,"outputTokens":15420,"runtime":"codex","turns":6,"wallClockMs":412382}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"90f1f5c3374333a0","findings":[],"hash":"ac0a6e990b99e28be4eb0f815626dabebba4528ad3925fabb6b3df9de3072058","nodeId":"a6ff7ab6-00b9-49be-9d39-13e6da68f792","outcome":"completed","summary":"Wrote `{\"findings\":[]}` to `.imd-findings.json`.\n\nNo substantiated defects found after reviewing contracts, tests, protected checks, and manifest. Project files remain unchanged. This was a static review; tests were not rerun.","treeHash":null,"usage":{"cachedInputTokens":104192,"inputTokens":24219,"model":null,"outputTokens":967,"runtime":"codex","turns":3,"wallClockMs":50923}}],"verification":[{"checks":[{"durationMs":948,"exitCode":0,"name":"build","output":"Compiling 24 files with Solc 0.8.26\nSolc 0.8.26 finished in 874.06ms\nCompiler run successful!\nwarning[block-timestamp]: usage of `block.timestamp` in a comparison may be manipulated by validators\n   ╭▸ src/TwoPartyEscrow.sol:75:13\n   │\n75 │         if (deadline <= block.timestamp || deadline > type(uint64).max) revert InvalidDeadline();\n   │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#block-timestamp\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/Token.t.sol:25:9\n   │\n25 │         token.transfer(alice, 10 ether);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/Token.t.sol:28:9\n   │\n28 │         token.transferFrom(alice, bob, 3 ether);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[unsafe-typecast]: typecasts that can truncate values should be checked\n   ╭▸ test/Adversarial.t.sol:58:55\n   │\n58 │         reentryBlocked = !ok && result.length >= 4 && bytes4(result) == TwoPartyEscrow.Reentrancy.selector;\n   │                                                       ━━━━━━━━━━━━━━\n   │\n   ├ note: consider disabling this lint if you're certain the cast is safe\n   │       \n   │       // casting to 'bytes4' is safe because [explain why]\n   │       // forge-lint: disable-next-line(unsafe-typecast)\n   │       \n   │       \n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#unsafe-typecast\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/Token.t.sol:36:9\n   │\n36 │         token.transfer(alice, 1 ether);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/Token.t.sol:39:9\n   │\n39 │         token.transferFrom(alice, bob, 1 ether);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/TwoPartyEscrow.t.sol:18:9\n   │\n18 │         token.transfer(buyer, 1_000 ether);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/Token.t.sol:45:9\n   │\n45 │         token.transferFrom(alice, bob, 1);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/Token.t.sol:48:9\n   │\n48 │         token.transfer(bob, 1);\n   │         ━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/Token.t.sol:50:9\n   │\n50 │         token.transfer(address(0), 1);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[block-timestamp]: usage of `block.timestamp` in a comparison may be manipulated by validators\n    ╭▸ src/TwoPartyEscrow.sol:117:13\n    │\n117 │         if (block.timestamp <= item.deadline) revert DeadlineNotPassed();\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#block-timestamp\n\nwarning[unsafe-typecast]: typecasts that can truncate values should be checked\n   ╭▸ src/TwoPartyEscrow.sol:81:21\n   │\n81 │             amount: uint128(amount),\n   │                     ━━━━━━━━━━━━━━━\n   │\n   ├ note: consider disabling this lint if you're certain the cast is safe\n   │       \n   │       // casting to 'uint128' is safe because [explain why]\n   │       // forge-lint: disable-next-line(unsafe-typecast)\n   │       \n   │       \n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#unsafe-typecast\n\nwarning[unsafe-typecast]: typecasts that can truncate values should be checked\n   ╭▸ src/TwoPartyEscrow.sol:82:23\n   │\n82 │             deadline: uint64(deadline),\n   │                       ━━━━━━━━━━━━━━━━\n   │\n   ├ note: consider disabling this lint if you're certain the cast is safe\n   │       \n   │       // casting to 'uint64' is safe because [explain why]\n   │       // forge-lint: disable-next-line(unsafe-typecast)\n   │       \n   │       \n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#unsafe-typecast\n\n","passed":true},{"durationMs":113,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 4 tests for test/Token.t.sol:TokenTest\n[PASS] test_InfiniteAllowanceIsNotReduced() (gas: 75151)\n[PASS] test_MetadataAndFixedSupply() (gas: 18752)\n[PASS] test_RevertsForPermissionBalanceAndZeroReceiver() (gas: 22746)\n[PASS] test_TransferApproveAndTransferFrom() (gas: 101410)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 722.70µs (591.80µs CPU time)\n\nRan 5 tests for test/Adversarial.t.sol:AdversarialTest\n[PASS] test_FailedPayoutLeavesDepositActiveAndSolvent() (gas: 191624)\n[PASS] test_FalseAndRevertingTransferFromRollBackAllState() (gas: 294945)\n[PASS] test_MalformedBooleanReturnIsRejectedAtomically() (gas: 1156773)\n[PASS] test_NonExactFundingIsRejectedAtomically() (gas: 203627)\n[PASS] test_ReentrantFundingAndPayoutCallbacksAreBlocked() (gas: 198228)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 778.64µs (904.51µs CPU time)\n\nRan 8 tests for test/TwoPartyEscrow.t.sol:TwoPartyEscrowTest\n[PASS] testFuzz_IndependentDepositsConserveFunds(uint96,uint96,bool) (runs: 256, μ: 258817, ~: 259259)\nLogs:\n  Bound result 3419\n  Bound result 12606\n\n[PASS] test_BuyerReclaimsStrictlyAfterDeadline() (gas: 153824)\n[PASS] test_ConstructorRejectsInvalidToken() (gas: 116580)\n[PASS] test_DepositAndBuyerReleaseAtAnyTime() (gas: 178777)\n[PASS] test_NoThirdPartyAndRolesCannotSwap() (gas: 195182)\n[PASS] test_RejectsInvalidCreationAndTokenPermissions() (gas: 334351)\n[PASS] test_RejectsMissingAndRepeatedSettlement() (gas: 186957)\n[PASS] test_SellerRefundAtAnyTime() (gas: 149606)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 16.38ms (17.93ms CPU time)\n\nRan 3 test suites in 17.36ms (17.88ms CPU time): 17 tests passed, 0 failed, 0 skipped (17 total tests)\n","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"5822680b5394adbcb77eab5656b5dcc80d52ea2ca9d31daec15d223c509347f4","verifiedTreeHash":"a44aeeb40c17417a7a3e6912a8c4db12bec0278d","verifierVersion":"0.1.0+1308af71"},{"checks":[{"durationMs":1114,"exitCode":0,"name":"build","output":"Compiling 24 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.01s\nCompiler run successful!\nwarning[block-timestamp]: usage of `block.timestamp` in a comparison may be manipulated by validators\n   ╭▸ src/TwoPartyEscrow.sol:75:13\n   │\n75 │         if (deadline <= block.timestamp || deadline > type(uint64).max) revert InvalidDeadline();\n   │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#block-timestamp\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/Token.t.sol:25:9\n   │\n25 │         token.transfer(alice, 10 ether);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/Token.t.sol:28:9\n   │\n28 │         token.transferFrom(alice, bob, 3 ether);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/Token.t.sol:36:9\n   │\n36 │         token.transfer(alice, 1 ether);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/TwoPartyEscrow.t.sol:18:9\n   │\n18 │         token.transfer(buyer, 1_000 ether);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[unsafe-typecast]: typecasts that can truncate values should be checked\n   ╭▸ test/Adversarial.t.sol:58:55\n   │\n58 │         reentryBlocked = !ok && result.length >= 4 && bytes4(result) == TwoPartyEscrow.Reentrancy.selector;\n   │                                                       ━━━━━━━━━━━━━━\n   │\n   ├ note: consider disabling this lint if you're certain the cast is safe\n   │       \n   │       // casting to 'bytes4' is safe because [explain why]\n   │       // forge-lint: disable-next-line(unsafe-typecast)\n   │       \n   │       \n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#unsafe-typecast\n\nwarning[block-timestamp]: usage of `block.timestamp` in a comparison may be manipulated by validators\n    ╭▸ src/TwoPartyEscrow.sol:117:13\n    │\n117 │         if (block.timestamp <= item.deadline) revert DeadlineNotPassed();\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#block-timestamp\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/Token.t.sol:39:9\n   │\n39 │         token.transferFrom(alice, bob, 1 ether);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/Token.t.sol:45:9\n   │\n45 │         token.transferFrom(alice, bob, 1);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/Token.t.sol:48:9\n   │\n48 │         token.transfer(bob, 1);\n   │         ━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/Token.t.sol:50:9\n   │\n50 │         token.transfer(address(0), 1);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[unsafe-typecast]: typecasts that can truncate values should be checked\n   ╭▸ src/TwoPartyEscrow.sol:81:21\n   │\n81 │             amount: uint128(amount),\n   │                     ━━━━━━━━━━━━━━━\n   │\n   ├ note: consider disabling this lint if you're certain the cast is safe\n   │       \n   │       // casting to 'uint128' is safe because [explain why]\n   │       // forge-lint: disable-next-line(unsafe-typecast)\n   │       \n   │       \n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#unsafe-typecast\n\nwarning[unsafe-typecast]: typecasts that can truncate values should be checked\n   ╭▸ src/TwoPartyEscrow.sol:82:23\n   │\n82 │             deadline: uint64(deadline),\n   │                       ━━━━━━━━━━━━━━━━\n   │\n   ├ note: consider disabling this lint if you're certain the cast is safe\n   │       \n   │       // casting to 'uint64' is safe because [explain why]\n   │       // forge-lint: disable-next-line(unsafe-typecast)\n   │       \n   │       \n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#unsafe-typecast\n\n","passed":true},{"durationMs":124,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 4 tests for test/Token.t.sol:TokenTest\n[PASS] test_InfiniteAllowanceIsNotReduced() (gas: 75151)\n[PASS] test_MetadataAndFixedSupply() (gas: 18752)\n[PASS] test_RevertsForPermissionBalanceAndZeroReceiver() (gas: 22746)\n[PASS] test_TransferApproveAndTransferFrom() (gas: 101410)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 2.10ms (646.50µs CPU time)\n\nRan 5 tests for test/Adversarial.t.sol:AdversarialTest\n[PASS] test_FailedPayoutLeavesDepositActiveAndSolvent() (gas: 191624)\n[PASS] test_FalseAndRevertingTransferFromRollBackAllState() (gas: 294945)\n[PASS] test_MalformedBooleanReturnIsRejectedAtomically() (gas: 1156773)\n[PASS] test_NonExactFundingIsRejectedAtomically() (gas: 203627)\n[PASS] test_ReentrantFundingAndPayoutCallbacksAreBlocked() (gas: 198228)\nSuite result: ok. 5 passed; 0 failed; 0 skipped; finished in 2.23ms (1.06ms CPU time)\n\nRan 8 tests for test/TwoPartyEscrow.t.sol:TwoPartyEscrowTest\n[PASS] testFuzz_IndependentDepositsConserveFunds(uint96,uint96,bool) (runs: 256, μ: 257873, ~: 248572)\nLogs:\n  Bound result 1\n  Bound result 114264337593543950333\n\n[PASS] test_BuyerReclaimsStrictlyAfterDeadline() (gas: 153824)\n[PASS] test_ConstructorRejectsInvalidToken() (gas: 116580)\n[PASS] test_DepositAndBuyerReleaseAtAnyTime() (gas: 178777)\n[PASS] test_NoThirdPartyAndRolesCannotSwap() (gas: 195182)\n[PASS] test_RejectsInvalidCreationAndTokenPermissions() (gas: 334351)\n[PASS] test_RejectsMissingAndRepeatedSettlement() (gas: 186957)\n[PASS] test_SellerRefundAtAnyTime() (gas: 149606)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 22.75ms (24.96ms CPU time)\n\nRan 3 test suites in 23.90ms (27.08ms CPU time): 17 tests passed, 0 failed, 0 skipped (17 total tests)\n","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"8ce0d0f6eb0fb40f00bdd76067daeb6e1e64982a40881d1e3a0d41401f1a9aa5","verifiedTreeHash":"ea72dac47e041bc0608fed8ffda75ea67c46765a","verifierVersion":"0.1.0+1308af71"}]}