{"assessments":[],"deployments":[{"attestationHash":"210e61e58c59969c167db9c3ef100fb745f79a3285ac2e5f4237beda23739801","chainId":11155111,"contracts":[{"address":"0x939b1c5d9f13d4ec5c8b045f3f830c602253ddef","blockNumber":11746989,"name":"TimeLock","role":"other","txHash":"0xd9c0ab604070130976305022f2502d400dad1e8433ba4c87f29eab95f5b0aa4f"},{"address":"0x8b73f217a8261c3373e84b2966e10126b531aa5c","blockNumber":11746989,"name":"Lock","role":"token","txHash":"0xd9c0ab604070130976305022f2502d400dad1e8433ba4c87f29eab95f5b0aa4f"},{"address":"0x2a80957371b94153e68c6eaf258e883b3ea94a11","blockNumber":11746989,"name":"MerkleDistributor","role":"distributor","txHash":"0xd9c0ab604070130976305022f2502d400dad1e8433ba4c87f29eab95f5b0aa4f"}],"id":"e696aa9d-d5b2-4823-9ced-540f2f0e4823","manifestHash":"2ff5d1903927c92060cbf364270997d0eb0412a4ce471afd38c0f690ec91a06f","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":"4ac228e8-88b3-4bdc-8782-46cdd00f9fa0","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"d928c6bff508045b4770974045d17ba9f6680625e135c5ff5324a493194486b8","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":"1f1bd0f107556654a8b7cdaf0712c6d1f5eef42283f3cdea6b39c028a44737ab","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":"23fb093497c230465080a100fe2f5e6d6d195db53dbe5ebe60de2920069e3927","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 Time Lock: token Lock (LOCK) and contract TimeLock, where a depositor locks an amount of LOCK for a beneficiary until a chosen unlock timestamp; only the beneficiary can withdraw after it, a lock cannot be shortened, and locks are enumerable per beneficiary. 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":"f4f663a0ef1cabf183bac7725697cbcf56f6cc6dec4f3a2f6afaa5cf11f46175","previousHash":"ff92e47e05fdcc6749a58f40722c0b494ec4344f589087ebfa2ddbbe70a6b7fd","projectId":"4ac228e8-88b3-4bdc-8782-46cdd00f9fa0","publication":{"commit":"b0cc98b1bc0405af621fb7d9120681cdc75ee900","deliveredAt":"2026-09-20T22:25:36.679Z","repoUrl":"https://github.com/Identity-md/launch-54-build-independently-review-time"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[],"site":null,"snapshotHash":"b63caa3d47b286cb0d102439ea7d5a264d3e79700b70fcb3e18ba1335b845df6","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"eaac8eea5b507605084080d14b2a91175223ad37312c62ae05b3827bb9eea89c","device":"e4a4ecf9fefd4a46","findings":[],"hash":"1f1bd0f107556654a8b7cdaf0712c6d1f5eef42283f3cdea6b39c028a44737ab","nodeId":"c486b784-7c96-480b-908a-b4a6f0e2b867","outcome":"completed","summary":"Implemented LOCK, TimeLock, launch manifest, offline dependencies, tests, and operational documentation.\n\n- Offline build, tests, and formatting checks pass.\n- 20 deliverable tests, 2 independent review tests, and all 8 protected checks pass.\n- Independent agent review found no blocking issues; findings are in `REVIEW.md`.\n- No transactions broadcast. Independent contributor admission remains required before deployment.","treeHash":"a5aac85613bd83019cc89620fee0b2751702b5c8","usage":{"cachedInputTokens":568064,"inputTokens":31572,"model":null,"outputTokens":13898,"runtime":"codex","turns":6,"wallClockMs":522687}},{"artifacts":[],"attempt":1,"bundleHash":"9c8dbf18a06f3ed9f77d07fb5941e42cd69da8115fab6a83c71d8b90887b43f0","device":"f5dec78d5893d9dc","findings":[],"hash":"23fb093497c230465080a100fe2f5e6d6d195db53dbe5ebe60de2920069e3927","nodeId":"6fa120cc-4ec0-4e06-890e-f46d8905e5d2","outcome":"completed","summary":"Updated only [launch.json](launch.json) with valid manifest fields, `Lock`, and `TimeLock([\"$token\"])`.\n\nChecked schema constraints and compiled constructor ABIs. Offline `forge build` succeeded; all 20 tests passed.\n\nIndependent release review remains required before deployment. Nothing was broadcast.","treeHash":"f2a9e80390c8fc2064d49d6a699df7da2a40fd8a","usage":{"cachedInputTokens":90496,"inputTokens":15467,"model":null,"outputTokens":1778,"runtime":"codex","turns":3,"wallClockMs":71209}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"90f1f5c3374333a0","findings":[],"hash":"d928c6bff508045b4770974045d17ba9f6680625e135c5ff5324a493194486b8","nodeId":"a01339e8-f914-4684-a8f1-8c0466a108dd","outcome":"completed","summary":"No substantiated defects found in the contracts, tests, protected checks, or manifest under the supplied LOCK-token assumptions.\n\nWrote `{\"findings\":[]}` to [.imd-findings.json](.imd-findings.json). No implementation files changed. Existing passing tests were not rerun.","treeHash":null,"usage":{"cachedInputTokens":98048,"inputTokens":21194,"model":null,"outputTokens":828,"runtime":"codex","turns":3,"wallClockMs":41210}}],"verification":[{"checks":[{"durationMs":1310,"exitCode":0,"name":"build","output":"Compiling 26 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.23s\nCompiler run successful!\nwarning[block-timestamp]: usage of `block.timestamp` in a comparison may be manipulated by validators\n   ╭▸ src/TimeLock.sol:68:13\n   │\n68 │         if (unlockTime <= block.timestamp) revert InvalidUnlockTime();\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/Lock.t.sol:40:9\n   │\n40 │         token.transferFrom(address(this), alice, 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/Lock.t.sol:45:9\n   │\n45 │         token.transferFrom(address(this), alice, 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/TimeLock.sol:81:49\n   │\n81 │         if (unlockTime <= deposit.unlockTime || unlockTime <= block.timestamp) revert InvalidUnlockTime();\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/Lock.t.sol:52:9\n   │\n52 │         token.transferFrom(address(this), alice, 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/Lock.t.sol:55:9\n   │\n55 │         token.transfer(alice, 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/Lock.t.sol:57:9\n   │\n57 │         token.transfer(alice, 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/TimeLock.sol:89:13\n   │\n89 │         if (block.timestamp < deposit.unlockTime) revert StillLocked();\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/Lock.t.sol:63:9\n   │\n63 │         token.transfer(address(0), 0);\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/TimeLock.t.sol:153:9\n    │\n153 │         token.transfer(address(vault), 7);\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/Lock.t.sol:67:9\n   │\n67 │         token.transferFrom(address(0), alice, 0);\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/Lock.t.sol:70:9\n   │\n70 │         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/Lock.t.sol:75:9\n   │\n75 │         token.transferFrom(alice, bob, 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/Lock.t.sol:97:9\n   │\n97 │         token.transfer(alice, amount);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Lock.t.sol:100:9\n    │\n100 │         token.transfer(address(this), amount);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\n","passed":true},{"durationMs":120,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 4 tests for test/Adversarial.t.sol:AdversarialTest\n[PASS] testIncomingFalseRevertAndMalformedReturnAreAtomic() (gas: 896149)\n[PASS] testOutgoingFalseRevertAndMalformedReturnAreRetryable() (gas: 379532)\n[PASS] testReentryDuringDepositBlocksAllMutations() (gas: 824106)\n[PASS] testReentryDuringWithdrawalBlocksAllMutations() (gas: 742107)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 991.36µs (1.43ms CPU time)\n\nRan 1 test for test/Deployment.t.sol:DeploymentTest\n[PASS] testFactoryDeploymentPreservesWholeSupplyAndTokenBinding() (gas: 4232197)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 4.23ms (3.95ms CPU time)\n\nRan 7 tests for test/Lock.t.sol:LockTest\n[PASS] testAllowanceFailureAndRevocation() (gas: 37696)\n[PASS] testFuzzConservesSupply(uint256) (runs: 256, μ: 39551, ~: 39452)\nLogs:\n  Bound result 11247\n\n[PASS] testInfiniteAllowanceAndSelfAndZeroTransfers() (gas: 82931)\n[PASS] testInvalidAddressesAndInsufficientBalance() (gas: 49344)\n[PASS] testMetadataAndSupply() (gas: 18172)\n[PASS] testNoMintOrAdminSelectors() (gas: 21620)\n[PASS] testTransferAndApprovalEvents() (gas: 84275)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 13.23ms (7.07ms CPU time)\n\nRan 8 tests for test/TimeLock.t.sol:TimeLockTest\n[PASS] testDepositAndExactBoundaryWithdrawalEvents() (gas: 290016)\n[PASS] testEnumerationRetainsHistoryAndSeparatesBeneficiaries() (gas: 554562)\n[PASS] testExtensionCannotShortenAndDelaysWithdrawal() (gas: 366818)\n[PASS] testFuzzMultipleLocksConserveFunds(uint96,uint96,uint32) (runs: 256, μ: 423998, ~: 423897)\nLogs:\n  Bound result 69\n  Bound result 129\n  Bound result 10\n\n[PASS] testInvalidConstructorAndInputs() (gas: 267903)\n[PASS] testOnlyBeneficiaryCanWithdrawOrExtend() (gas: 301598)\n[PASS] testPermissionAndBalanceFailureRollBackDeposit() (gas: 635597)\n[PASS] testSelfDepositAndDirectDonation() (gas: 226956)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 18.77ms (18.92ms CPU time)\n\nRan 4 test suites in 19.90ms (37.22ms CPU time): 20 tests passed, 0 failed, 0 skipped (20 total tests)\n","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"1f1bd0f107556654a8b7cdaf0712c6d1f5eef42283f3cdea6b39c028a44737ab","verifiedTreeHash":"a5aac85613bd83019cc89620fee0b2751702b5c8","verifierVersion":"0.1.0+1308af71"},{"checks":[{"durationMs":1118,"exitCode":0,"name":"build","output":"Compiling 26 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.05s\nCompiler run successful!\nwarning[block-timestamp]: usage of `block.timestamp` in a comparison may be manipulated by validators\n   ╭▸ src/TimeLock.sol:68:13\n   │\n68 │         if (unlockTime <= block.timestamp) revert InvalidUnlockTime();\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/Lock.t.sol:40:9\n   │\n40 │         token.transferFrom(address(this), alice, 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/Lock.t.sol:45:9\n   │\n45 │         token.transferFrom(address(this), alice, 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/TimeLock.sol:81:49\n   │\n81 │         if (unlockTime <= deposit.unlockTime || unlockTime <= block.timestamp) revert InvalidUnlockTime();\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/TimeLock.sol:89:13\n   │\n89 │         if (block.timestamp < deposit.unlockTime) revert StillLocked();\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/TimeLock.t.sol:153:9\n    │\n153 │         token.transfer(address(vault), 7);\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/Lock.t.sol:52:9\n   │\n52 │         token.transferFrom(address(this), alice, 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/Lock.t.sol:55:9\n   │\n55 │         token.transfer(alice, 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/Lock.t.sol:57:9\n   │\n57 │         token.transfer(alice, 0);\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/Lock.t.sol:63:9\n   │\n63 │         token.transfer(address(0), 0);\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/Lock.t.sol:67:9\n   │\n67 │         token.transferFrom(address(0), alice, 0);\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/Lock.t.sol:70:9\n   │\n70 │         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/Lock.t.sol:75:9\n   │\n75 │         token.transferFrom(alice, bob, 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/Lock.t.sol:97:9\n   │\n97 │         token.transfer(alice, amount);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n    ╭▸ test/Lock.t.sol:100:9\n    │\n100 │         token.transfer(address(this), amount);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\n","passed":true},{"durationMs":109,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 4 tests for test/Adversarial.t.sol:AdversarialTest\n[PASS] testIncomingFalseRevertAndMalformedReturnAreAtomic() (gas: 896149)\n[PASS] testOutgoingFalseRevertAndMalformedReturnAreRetryable() (gas: 379532)\n[PASS] testReentryDuringDepositBlocksAllMutations() (gas: 824106)\n[PASS] testReentryDuringWithdrawalBlocksAllMutations() (gas: 742107)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 862.08µs (1.38ms CPU time)\n\nRan 1 test for test/Deployment.t.sol:DeploymentTest\n[PASS] testFactoryDeploymentPreservesWholeSupplyAndTokenBinding() (gas: 4232197)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 5.75ms (5.45ms CPU time)\n\nRan 7 tests for test/Lock.t.sol:LockTest\n[PASS] testAllowanceFailureAndRevocation() (gas: 37696)\n[PASS] testFuzzConservesSupply(uint256) (runs: 256, μ: 39636, ~: 39452)\nLogs:\n  Bound result 74754140699875040471280\n\n[PASS] testInfiniteAllowanceAndSelfAndZeroTransfers() (gas: 82931)\n[PASS] testInvalidAddressesAndInsufficientBalance() (gas: 49344)\n[PASS] testMetadataAndSupply() (gas: 18172)\n[PASS] testNoMintOrAdminSelectors() (gas: 21620)\n[PASS] testTransferAndApprovalEvents() (gas: 84275)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 7.32ms (7.66ms CPU time)\n\nRan 8 tests for test/TimeLock.t.sol:TimeLockTest\n[PASS] testDepositAndExactBoundaryWithdrawalEvents() (gas: 290016)\n[PASS] testEnumerationRetainsHistoryAndSeparatesBeneficiaries() (gas: 554562)\n[PASS] testExtensionCannotShortenAndDelaysWithdrawal() (gas: 366818)\n[PASS] testFuzzMultipleLocksConserveFunds(uint96,uint96,uint32) (runs: 256, μ: 424018, ~: 423897)\nLogs:\n  Bound result 477\n  Bound result 594\n  Bound result 3153600000\n\n[PASS] testInvalidConstructorAndInputs() (gas: 267903)\n[PASS] testOnlyBeneficiaryCanWithdrawOrExtend() (gas: 301598)\n[PASS] testPermissionAndBalanceFailureRollBackDeposit() (gas: 635597)\n[PASS] testSelfDepositAndDirectDonation() (gas: 226956)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 21.08ms (22.47ms CPU time)\n\nRan 4 test suites in 22.09ms (35.00ms CPU time): 20 tests passed, 0 failed, 0 skipped (20 total tests)\n","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"23fb093497c230465080a100fe2f5e6d6d195db53dbe5ebe60de2920069e3927","verifiedTreeHash":"f2a9e80390c8fc2064d49d6a699df7da2a40fd8a","verifierVersion":"0.1.0+1308af71"}]}