{"assessments":[],"deployments":[{"attestationHash":"7fc61a372229621687f90fdf9f848f01b2daf0dfcdd3f9e4c5f095345008da62","chainId":11155111,"contracts":[{"address":"0xe0bcca0331d341c652cf816edfc23bce34132f8e","blockNumber":11747076,"name":"MerkleDistributor","role":"distributor","txHash":"0xef331e5aa911c8e9cea583851fbe4a54d10b2aaa51cc60ddf00cfd96fc7e85f9"},{"address":"0x1e20f2b82f4a0b5231787422471a9a6c5a836903","blockNumber":11747076,"name":"SealedBidAuction","role":"other","txHash":"0xef331e5aa911c8e9cea583851fbe4a54d10b2aaa51cc60ddf00cfd96fc7e85f9"},{"address":"0x050d11b58ec5db886f0ae611c0c5eca0ac573948","blockNumber":11747076,"name":"Bid","role":"token","txHash":"0xef331e5aa911c8e9cea583851fbe4a54d10b2aaa51cc60ddf00cfd96fc7e85f9"}],"id":"d7473650-915a-43a8-95f2-e2bbcb09a0f5","manifestHash":"2f64c2f357db3d8d3bfabb3c603a0c3b686277c94719935bf5020c12b1e27e25","status":"live"}],"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":"e645958e-4ff8-449a-8ceb-afd6dde013ef","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"56360045a582c0c81f6f615cc42c01b734423c457eec26c419e1901ca9dd3fb8","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":"cbb889bcdaf26ca80aea569fc2273b11727146d1735553d0683f0ba07e27b996","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":"07d6f8e2a01ae18fe1a7b232ba1687eef5cf9c98a399d3773489df669fe2f2d7","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 Sealed Bid Auction: token Bid (BID) and contract SealedBidAuction, where a seller lists an item id with a reserve and a deadline; bidders commit a hash and lock BID, reveal after the deadline, the highest valid revealed bid wins and pays the seller, and every other bidder withdraws their lock. 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":"3025cdccce8ed6360d1588b9619757d42a820c8a8348a3bd2ded74b98900bc9a","previousHash":"e25f6f306da91af3e40840ba6d083c0eecec2367de01c01c48e745f46a5081e9","projectId":"e645958e-4ff8-449a-8ceb-afd6dde013ef","publication":{"commit":"aa88ab38e08a56b77844cce45df438272080df4a","deliveredAt":"2026-09-20T22:44:56.896Z","repoUrl":"https://github.com/Identity-md/launch-57-build-independently-review-sealed"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[],"site":null,"snapshotHash":"b3957bb55ca963a23975ad466d34f41dea47892c75e834dd6a01963077501b67","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"51ef20fe900bd77c3cd95e2073e1675cdbc421fa5c2333ba2600f43083ad270e","device":"693a98443cff7807","findings":[],"hash":"07d6f8e2a01ae18fe1a7b232ba1687eef5cf9c98a399d3773489df669fe2f2d7","nodeId":"b5ebb18c-9e48-4af4-b183-1dfc53f367e9","outcome":"completed","summary":"Updated only `launch.json` to match the required schema and accepted constructor ABIs.\n\nValidation passed. `forge build` succeeded; all 15 tests passed, including reentrancy and token permission failures.\n\nThe manifest requires independent review before deployment through the authorized deployer. No transactions were broadcast.","treeHash":"144202dcd85204663272a14caa56fa9d20c45b39","usage":{"cachedInputTokens":129536,"inputTokens":22154,"model":null,"outputTokens":1892,"runtime":"codex","turns":3,"wallClockMs":72707}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"90f1f5c3374333a0","findings":[],"hash":"56360045a582c0c81f6f615cc42c01b734423c457eec26c419e1901ca9dd3fb8","nodeId":"29a15cc3-8812-41e0-a37a-121902bd8cbd","outcome":"completed","summary":"No substantiated defects found in the contracts, tests, protected checks, or manifest.\n\nWrote `{\"findings\":[]}` to [.imd-findings.json](/Users/surf/.identitymd/work/e645958e-4ff8-449a-8ceb-afd6dde013ef/29a15cc3-8812-41e0-a37a-121902bd8cbd/.imd-findings.json). Existing files were unchanged. This was a static review; tests were not rerun.","treeHash":null,"usage":{"cachedInputTokens":126720,"inputTokens":20168,"model":null,"outputTokens":871,"runtime":"codex","turns":3,"wallClockMs":50902}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"f5dec78d5893d9dc","findings":[],"hash":"7163d550e86d04e310f05715242b79427793ed0f64edbff6a09e8b7a923c8a5f","nodeId":"873026ff-0e2e-4144-8cfe-97ec1382ea35","outcome":"failed","summary":"solc: solc is pinned to a path (.toolchain/svm/0.8.26/solc-0.8.26) rather than a version","treeHash":null,"usage":{"cachedInputTokens":854016,"inputTokens":86081,"model":null,"outputTokens":16792,"runtime":"codex","turns":9,"wallClockMs":629082}},{"artifacts":[],"attempt":2,"bundleHash":"024ebef90382ef6f8c9c5204c89f4edbb4e9c18ebc61a05472e3faf26c43fecd","device":"f5dec78d5893d9dc","findings":[],"hash":"cbb889bcdaf26ca80aea569fc2273b11727146d1735553d0683f0ba07e27b996","nodeId":"873026ff-0e2e-4144-8cfe-97ec1382ea35","outcome":"completed","summary":"Implemented BID, SealedBidAuction, launch manifest, vendored dependencies, tests, and operational documentation.\n\nVerified offline:\n- `forge build` passes.\n- `forge test`: 15 passed, including 256 fuzz runs.\n- `forge fmt --check` passes.\n\nIndependent review is recorded in `REVIEW.md`, with no open findings. Item delivery remains off-chain; sellers withdraw credited proceeds. No transactions were broadcast.","treeHash":"f5fab3919fdc0c81b05f4d6989dc1c9ba34eacff","usage":{"cachedInputTokens":553728,"inputTokens":28438,"model":null,"outputTokens":10461,"runtime":"codex","turns":5,"wallClockMs":390206}}],"verification":[{"checks":[{"durationMs":1111,"exitCode":0,"name":"build","output":"Compiling 23 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.04s\nCompiler run successful!\nwarning[block-timestamp]: usage of `block.timestamp` in a comparison may be manipulated by validators\n   ╭▸ src/SealedBidAuction.sol:68:17\n   │\n68 │         require(deadline > block.timestamp, \"deadline\");\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/Bid.t.sol:24:9\n   │\n24 │         token.transferFrom(address(this), address(2), 60);\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/SealedBidAuction.sol:85:43\n   │\n85 │         require(a.seller != address(0) && block.timestamp < a.deadline, \"commit phase\");\n   │                                           ━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#block-timestamp\n\nwarning[block-timestamp]: usage of `block.timestamp` in a comparison may be manipulated by validators\n    ╭▸ src/SealedBidAuction.sol:100:39\n    │\n100 │             a.seller != address(0) && block.timestamp >= a.deadline && block.timestamp < a.revealDeadline,\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/Bid.t.sol:29:9\n   │\n29 │         token.transferFrom(address(this), address(2), 41);\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/SealedBidAuction.sol:100:72\n    │\n100 │             a.seller != address(0) && block.timestamp >= a.deadline && block.timestamp < a.revealDeadline,\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/Bid.t.sol:32:9\n   │\n32 │         token.transferFrom(address(this), address(2), 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/Bid.t.sol:35:9\n   │\n35 │         token.transfer(address(this), 10);\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/Auction.t.sol:23:27\n   │\n23 │         id = auction.list(bytes32(\"item\"), 10, end);\n   │                           ━━━━━━━━━━━━━━━\n   │\n   ├ note: consider disabling this lint if you're certain the cast is safe\n   │       \n   │       // casting to 'bytes32' 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/Bid.t.sol:38:9\n   │\n38 │         token.transfer(address(0), 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/Bid.t.sol:41:9\n   │\n41 │         token.transfer(address(3), 62);\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/Bid.t.sol:42:9\n   │\n42 │         token.transfer(address(3), 0);\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/SealedBidAuction.sol:120:43\n    │\n120 │         require(a.seller != address(0) && block.timestamp >= a.revealDeadline, \"settlement phase\");\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/Auction.t.sol:24:9\n   │\n24 │         token.transfer(alice, 1000);\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/Auction.t.sol:25:9\n   │\n25 │         token.transfer(bob, 1000);\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/Auction.t.sol:108:38\n    │\n108 │         uint256 empty = auction.list(bytes32(\"empty\"), 0, end);\n    │                                      ━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'bytes32' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#unsafe-typecast\n\nwarning[unsafe-typecast]: typecasts that can truncate values should be checked\n    ╭▸ test/Auction.t.sol:110:27\n    │\n110 │         id = auction.list(bytes32(\"zero\"), 0, end);\n    │                           ━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'bytes32' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#unsafe-typecast\n\nwarning[unsafe-typecast]: typecasts that can truncate values should be checked\n    ╭▸ test/Auction.t.sol:222:39\n    │\n222 │         uint256 second = auction.list(bytes32(\"other\"), 0, end);\n    │                                       ━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'bytes32' 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":86,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 3 tests for test/Bid.t.sol:BidTest\n[PASS] testMetadataAndSupply() (gas: 17171)\n[PASS] testNoMintOrAdmin() (gas: 19898)\n[PASS] testTransferAndAllowances() (gas: 101009)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 510.05µs (209.58µs CPU time)\n\nRan 2 tests for test/Auction.t.sol:HostileTokenTest\n[PASS] testFalseAndRevertingTransfersRollbackAndRetry() (gas: 639530)\n[PASS] testReentrantTokenCannotEnterAnyMutation() (gas: 793326)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 2.90ms (866.56µs CPU time)\n\nRan 10 tests for test/Auction.t.sol:AuctionTest\n[PASS] testEmptyAuctionAndZeroBid() (gas: 450587)\n[PASS] testFuzzConservation(uint96,uint96) (runs: 256, μ: 505528, ~: 505590)\nLogs:\n  Bound result 34\n  Bound result 144\n\n[PASS] testHashDomainSeparation() (gas: 939448)\n[PASS] testInvalidTokenConstructor() (gas: 36949)\n[PASS] testMultipleAuctionsRemainIsolated() (gas: 704446)\n[PASS] testNoRevealAndInvalidRevealRefund() (gas: 356149)\n[PASS] testPermissionsAndInvalidInputs() (gas: 450361)\n[PASS] testPhaseAndDuplicateFailures() (gas: 492890)\n[PASS] testTieUsesCommitOrderNotRevealOrder() (gas: 410661)\n[PASS] testWinnerLoserAndExcessConservation() (gas: 553839)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 15.88ms (17.26ms CPU time)\n\nRan 3 test suites in 16.70ms (19.29ms CPU time): 15 tests passed, 0 failed, 0 skipped (15 total tests)\n","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"07d6f8e2a01ae18fe1a7b232ba1687eef5cf9c98a399d3773489df669fe2f2d7","verifiedTreeHash":"144202dcd85204663272a14caa56fa9d20c45b39","verifierVersion":"0.1.0+1308af71"},{"checks":[{"durationMs":1322,"exitCode":0,"name":"build","output":"Compiling 23 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.25s\nCompiler run successful!\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/Bid.t.sol:24:9\n   │\n24 │         token.transferFrom(address(this), address(2), 60);\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/SealedBidAuction.sol:68:17\n   │\n68 │         require(deadline > block.timestamp, \"deadline\");\n   │                 ━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#block-timestamp\n\nwarning[block-timestamp]: usage of `block.timestamp` in a comparison may be manipulated by validators\n   ╭▸ src/SealedBidAuction.sol:85:43\n   │\n85 │         require(a.seller != address(0) && block.timestamp < a.deadline, \"commit phase\");\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/Bid.t.sol:29:9\n   │\n29 │         token.transferFrom(address(this), address(2), 41);\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/Bid.t.sol:32:9\n   │\n32 │         token.transferFrom(address(this), address(2), 1);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[unsafe-typecast]: typecasts that can truncate values should be checked\n   ╭▸ test/Auction.t.sol:23:27\n   │\n23 │         id = auction.list(bytes32(\"item\"), 10, end);\n   │                           ━━━━━━━━━━━━━━━\n   │\n   ├ note: consider disabling this lint if you're certain the cast is safe\n   │       \n   │       // casting to 'bytes32' 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/Auction.t.sol:24:9\n   │\n24 │         token.transfer(alice, 1000);\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/Auction.t.sol:25:9\n   │\n25 │         token.transfer(bob, 1000);\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/Bid.t.sol:35:9\n   │\n35 │         token.transfer(address(this), 10);\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/Bid.t.sol:38:9\n   │\n38 │         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/SealedBidAuction.sol:100:39\n    │\n100 │             a.seller != address(0) && block.timestamp >= a.deadline && block.timestamp < a.revealDeadline,\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/Bid.t.sol:41:9\n   │\n41 │         token.transfer(address(3), 62);\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/SealedBidAuction.sol:100:72\n    │\n100 │             a.seller != address(0) && block.timestamp >= a.deadline && block.timestamp < a.revealDeadline,\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/Bid.t.sol:42:9\n   │\n42 │         token.transfer(address(3), 0);\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/Auction.t.sol:108:38\n    │\n108 │         uint256 empty = auction.list(bytes32(\"empty\"), 0, end);\n    │                                      ━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'bytes32' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#unsafe-typecast\n\nwarning[unsafe-typecast]: typecasts that can truncate values should be checked\n    ╭▸ test/Auction.t.sol:110:27\n    │\n110 │         id = auction.list(bytes32(\"zero\"), 0, end);\n    │                           ━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'bytes32' 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/SealedBidAuction.sol:120:43\n    │\n120 │         require(a.seller != address(0) && block.timestamp >= a.revealDeadline, \"settlement phase\");\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    ╭▸ test/Auction.t.sol:222:39\n    │\n222 │         uint256 second = auction.list(bytes32(\"other\"), 0, end);\n    │                                       ━━━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'bytes32' 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":107,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 3 tests for test/Bid.t.sol:BidTest\n[PASS] testMetadataAndSupply() (gas: 17171)\n[PASS] testNoMintOrAdmin() (gas: 19898)\n[PASS] testTransferAndAllowances() (gas: 101009)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 882.86µs (400.45µs CPU time)\n\nRan 2 tests for test/Auction.t.sol:HostileTokenTest\n[PASS] testFalseAndRevertingTransfersRollbackAndRetry() (gas: 639530)\n[PASS] testReentrantTokenCannotEnterAnyMutation() (gas: 793326)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 981.05µs (829.54µs CPU time)\n\nRan 10 tests for test/Auction.t.sol:AuctionTest\n[PASS] testEmptyAuctionAndZeroBid() (gas: 450587)\n[PASS] testFuzzConservation(uint96,uint96) (runs: 256, μ: 505513, ~: 505588)\nLogs:\n  Bound result 50\n  Bound result 134\n\n[PASS] testHashDomainSeparation() (gas: 939448)\n[PASS] testInvalidTokenConstructor() (gas: 36949)\n[PASS] testMultipleAuctionsRemainIsolated() (gas: 704446)\n[PASS] testNoRevealAndInvalidRevealRefund() (gas: 356149)\n[PASS] testPermissionsAndInvalidInputs() (gas: 450361)\n[PASS] testPhaseAndDuplicateFailures() (gas: 492890)\n[PASS] testTieUsesCommitOrderNotRevealOrder() (gas: 410661)\n[PASS] testWinnerLoserAndExcessConservation() (gas: 553839)\nSuite result: ok. 10 passed; 0 failed; 0 skipped; finished in 19.79ms (21.19ms CPU time)\n\nRan 3 test suites in 20.70ms (21.66ms CPU time): 15 tests passed, 0 failed, 0 skipped (15 total tests)\n","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"cbb889bcdaf26ca80aea569fc2273b11727146d1735553d0683f0ba07e27b996","verifiedTreeHash":"f5fab3919fdc0c81b05f4d6989dc1c9ba34eacff","verifierVersion":"0.1.0+1308af71"}]}