{"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":"4fd3b96e-4e24-48f8-b28e-46adf6434a95","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"5bf150aa65f39dc6103fe0c185a3484ee7216fe0a9431143cfdcd873e49b2926","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":"dbac8acc6dbfb47885b558aa186d4c131a97ec86e24ef7e51b0317d8e29dc314","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":"963e13a30d14123ae5c79221b48f6f228db2c614d9baaa31176c359d676522d6","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 Linear Vesting: token Vest (VEST) and contract LinearVesting, where anyone creates a schedule for a beneficiary by depositing VEST with a start, a cliff and a duration; the beneficiary claims the vested portion at any time, with exact linear arithmetic and no rounding leak. 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":"a72b28cbccefb0321553294b71ee730c118fbf2f15f8a32733b442d2ec6fe3fe","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"4fd3b96e-4e24-48f8-b28e-46adf6434a95","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/Identity-md/launch-55-build-independently-review-linear"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"50968","feedbackHash":"db03d36e43a2378372189f05666d8233e7ee3b0605e14b93303f17b393ce526f","nodeKey":"adversarial_review","submissionHash":"5bf150aa65f39dc6103fe0c185a3484ee7216fe0a9431143cfdcd873e49b2926","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"50956","feedbackHash":"08e2c1ab073b370e240dbb741751e265e080147d9e19f59159cf151c10058b2b","nodeKey":"build_contract_project","submissionHash":"dbac8acc6dbfb47885b558aa186d4c131a97ec86e24ef7e51b0317d8e29dc314","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"50958","feedbackHash":"623ec46f702457c4571a78d1905fc3858d08db4bbae14eebd65be6060ad494e2","nodeKey":"manifest","submissionHash":"963e13a30d14123ae5c79221b48f6f228db2c614d9baaa31176c359d676522d6","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"ac2fc577b186bbdc08d1abee8f2fd4e97796b9e9d2214f54a349396faec4051b","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"5b3b071249317936","findings":[],"hash":"5bf150aa65f39dc6103fe0c185a3484ee7216fe0a9431143cfdcd873e49b2926","nodeId":"66ba28bd-3fa0-4eab-b88e-54a381bd1afa","outcome":"completed","summary":"Wrote `{\"findings\":[]}` to [.imd-findings.json](.imd-findings.json).\n\nNo substantiated defects found after reviewing contracts, tests, protected checks, and manifest. Independently checked 20,003 arithmetic cases. Did not rerun the established Foundry suite. No implementation files changed.","treeHash":null,"usage":{"cachedInputTokens":167936,"inputTokens":25332,"model":null,"outputTokens":906,"runtime":"codex","turns":3,"wallClockMs":44134}},{"artifacts":[],"attempt":1,"bundleHash":"04ed639df1d83ee919a8bc114fba0714e3dfcfd7bff185e22b8b530c31636476","device":"693a98443cff7807","findings":[],"hash":"963e13a30d14123ae5c79221b48f6f228db2c614d9baaa31176c359d676522d6","nodeId":"8bb19193-66ef-42f0-97b6-42b89f8b5a1b","outcome":"completed","summary":"Updated only [launch.json](launch.json) with valid manifest fields, `Vest`, and `LinearVesting([\"$token\"])`.\n\nValidated schema constraints and compiled constructor ABIs. `forge build` passed with existing lint warnings; `forge test` passed all 29 tests.\n\nIndependent review remains required before deployment. No transactions were broadcast.","treeHash":"d90200a760d4f37c1ba9d04fff7124b4d1c75d13","usage":{"cachedInputTokens":168448,"inputTokens":17949,"model":null,"outputTokens":1965,"runtime":"codex","turns":3,"wallClockMs":82565}},{"artifacts":[],"attempt":1,"bundleHash":"26b1c6cb5068ccbe83c6c31804690cabe9502dd826f79fdb3e0c7b471aaa0870","device":"bb0a3bf63233e5e5","findings":[],"hash":"dbac8acc6dbfb47885b558aa186d4c131a97ec86e24ef7e51b0317d8e29dc314","nodeId":"202033a7-2a72-4180-bc78-8fb7aea0b31d","outcome":"completed","summary":"Implemented VEST, LinearVesting, launch manifest, vendored dependencies, tests, and operational documentation.\n\nVerified:\n- Offline build passes.\n- All 29 tests pass.\n- All 8 supplied protected checks pass locally.\n- Formatting check passes.\n- Independent local review found no implementation blockers.\n\nNo transactions broadcast. Final contributor approval and deployment remain with the release process.","treeHash":"7615519b5a94b3cc146b79fe8595c074626459b4","usage":{"cachedInputTokens":1244032,"inputTokens":50755,"model":null,"outputTokens":19909,"runtime":"codex","turns":6,"wallClockMs":699220}}],"verification":[{"checks":[{"durationMs":1698,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.63s\nCompiler run successful!\nwarning[divide-before-multiply]: multiplication should occur before division to avoid loss of precision\n    ╭▸ src/LinearVesting.sol:119:16\n    │\n119 │         return (schedule.amount / duration) * elapsed + ((schedule.amount % duration) * elapsed) / duration;\n    │                ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#divide-before-multiply\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/Vest.t.sol:43:9\n   │\n43 │         token.transfer(alice, 100);\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/Vest.t.sol:46:9\n   │\n46 │         token.transferFrom(alice, bob, 50);\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/Vest.t.sol:51:9\n   │\n51 │         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/Conservation.invariant.t.sol:59:9\n   │\n59 │         token.transfer(address(handler), token.totalSupply());\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/Vest.t.sol:56:9\n   │\n56 │         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/Vest.t.sol:60:9\n   │\n60 │         token.transferFrom(address(0), bob, 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/LinearVesting.t.sol:134:9\n    │\n134 │         token.transfer(bob, 100);\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/Vest.t.sol:63:9\n   │\n63 │         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/Vest.t.sol:65:9\n   │\n65 │         token.transferFrom(address(this), 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/Vest.t.sol:72:9\n   │\n72 │         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/Vest.t.sol:74:9\n   │\n74 │         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/Vest.t.sol:76:9\n   │\n76 │         token.transferFrom(alice, address(0), 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/Vest.t.sol:81:9\n   │\n81 │         token.transfer(address(this), 1e27);\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/Vest.t.sol:83:9\n   │\n83 │         token.transfer(bob, 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/LinearVesting.t.sol:158:9\n    │\n158 │         token.transfer(bob, 50);\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/LinearVesting.t.sol:165:9\n    │\n165 │         token.transfer(address(vesting), 3);\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/Vest.t.sol:117:9\n    │\n117 │         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/Vest.t.sol:119:9\n    │\n119 │         token.transfer(bob, onward);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\n","passed":true},{"durationMs":3032,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 8 tests for test/AdversarialVesting.t.sol:AdversarialVestingTest\n[PASS] testBubblingReentrancyRollsBackAndUnlocks() (gas: 660295)\n[PASS] testFalseAndRevertingPayoutsCanBeRetried() (gas: 285900)\n[PASS] testFalseRevertingAndShortDepositsRollBackAllState() (gas: 558070)\n[PASS] testFullWidthAmountDoesNotOverflowAndPaysEveryUnit() (gas: 209784)\n[PASS] testReentrantClaimDuringDepositIsRejected() (gas: 297921)\n[PASS] testReentrantClaimDuringPayoutSeesUpdatedEffects() (gas: 347132)\n[PASS] testReentrantCreateDuringDepositIsRejected() (gas: 368805)\n[PASS] testReentrantCreateDuringPayoutIsRejected() (gas: 417327)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 772.38µs (1.98ms CPU time)\n\nRan 8 tests for test/Vest.t.sol:VestTest\n[PASS] testFuzzTransfersConserveFunds(uint256,uint256) (runs: 512, μ: 78215, ~: 79872)\nLogs:\n  Bound result 606978930601064819940026088\n  Bound result 134072651872837539674860\n\n[PASS] testInfiniteApprovalAndRevocation() (gas: 81685)\n[PASS] testInvalidAddressesAndInsufficientFunds() (gas: 34070)\n[PASS] testMetadataAndSupply() (gas: 17309)\n[PASS] testNoAdminOrMintSelectors() (gas: 52191)\n[PASS] testRejectedTransferFromRollsBackAllowance() (gas: 63231)\n[PASS] testSelfAndZeroTransfersConserveSupply() (gas: 28702)\n[PASS] testTransferApprovalAndTransferFromEvents() (gas: 112496)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 23.82ms (25.07ms CPU time)\n\nRan 9 tests for test/LinearVesting.t.sol:LinearVestingTest\n[PASS] testConstructorOnlyConfiguresTokenAndPreservesSupply() (gas: 92076)\n[PASS] testCreateAndClaimEventsAndCliffBoundaries() (gas: 316173)\n[PASS] testEndCliffAndPastStart() (gas: 322655)\n[PASS] testFuzzLinearArithmeticAndClaimFrequency(uint256,uint64,uint64,uint64) (runs: 512, μ: 248082, ~: 256899)\nLogs:\n  Bound result 14838\n  Bound result 821\n  Bound result 179\n  Bound result 208\n\n[PASS] testInvalidSchedules() (gas: 202191)\n[PASS] testMissingRevokedAndInsufficientPermissionsRollBack() (gas: 698617)\n[PASS] testMultipleCreatorsBeneficiariesAndDonationsStaySeparate() (gas: 519575)\n[PASS] testTinyAmountRoundingAndFinalDust() (gas: 513288)\n[PASS] testUnauthorizedAndUnknownClaims() (gas: 227240)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 31.52ms (28.73ms CPU time)\n\nRan 2 tests for test/Launch.t.sol:LaunchTest\n[PASS] testConstructorsRejectEther() (gas: 407154)\n[PASS] testFactoryDeploymentPreservesSupplyAndBindsToken() (gas: 4374741)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 39.55ms (4.29ms CPU time)\n\nRan 1 test for test/IndependentArithmetic.t.sol:IndependentArithmeticTest\n[PASS] testFuzzFullWidthAgainstBitwiseLongDivision(uint256,uint64,uint64) (runs: 512, μ: 1681607, ~: 1681690)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 44.79ms (44.51ms CPU time)\n\nRan 1 test for test/Conservation.invariant.t.sol:ConservationTest\n[PASS] invariantCustodyEqualsOutstandingAndClaimsNeverExceedVested() (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+----------+-------+---------+----------╮\n| Contract       | Selector | Calls | Reverts | Discards |\n+========================================================+\n| VestingHandler | advance  | 2682  | 0       | 0        |\n|----------------+----------+-------+---------+----------|\n| VestingHandler | claim    | 2778  | 0       | 0        |\n|----------------+----------+-------+---------+----------|\n| VestingHandler | create   | 2732  | 0       | 0        |\n╰----------------+----------+-------+---------+----------╯\n\nLogs:\n  Bound result 5455\n  Bound result 2030\n  Bound result 1\n  Bound result 2866\n  Bound result 1162\n  Bound result 10\n  Bound result 29732543\n  Bound result 2073815\n  Bound result 4\n  Bound result 2\n  Bound result 2004\n  Bound result 3149\n  Bound result 224\n  Bound result 180\n  Bound result 252\n  Bound result 120\n  Bound result 6738\n  Bound result 68\n  Bound result 296\n  Bound result 370\n  Bound result 23\n  Bound result 25943159\n  Bound result 101\n  Bound result 957496271368815410779848384\n  Bound result 1\n  Bound result 0\n  Bound result 1\n  Bound result 336\n  Bound result 1372\n  Bound result 32\n  Bound result 32342351596431195457079891\n  Bound result 125\n  Bound result 2\n  Bound result 8276174115888387452410713\n  Bound result 13\n  Bound result 1\n  Bound result 24604\n  Bound result 3\n  Bound result 2\n  Bound result 3\n  Bound result 24576\n  Bound result 50\n  Bound result 8\n  Bound result 2102\n  Bound result 95\n  Bound result 36\n  Bound result 111302062824110153529090\n  Bound result 7684190\n  Bound result 7\n  Bound result 23244\n  Bound result 225\n  Bound result 1487354\n  Bound result 16367841\n  Bound result 1540577670713493486387965\n  Bound result 2979372\n  Bound result 1690801\n  Bound result 121233779634298986108886\n  Bound result 1\n  Bound result 0\n  Bound result 58\n  Bound result 3\n  Bound result 92987834641970781586498\n  Bound result 2\n  Bound result 1\n  Bound result 24163529\n  Bound result 112945252036132\n  Bound result 22840\n  Bound result 2504\n  Bound result 20379\n  Bound result 244\n  Bound result 20853356\n  Bound result 1850\n  Bound result 3\n  Bound result 14148251733051467851065\n  Bound result 6659\n  Bound result 2149\n  Bound result 1060\n  Bound result 95\n  Bound result 61\n  Bound result 209220\n  Bound result 1\n  Bound result 5\n  Bound result 0\n  Bound result 5986\n  Bound result 20853356\n  Bound result 3941\n  Bound result 20\n  Bound result 250\n  Bound result 80\n  Bound result 225\n  Bound result 29\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.96s (2.96s CPU time)\n\nRan 6 test suites in 2.96s (3.10s CPU time): 29 tests passed, 0 failed, 0 skipped (29 total tests)\n","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"963e13a30d14123ae5c79221b48f6f228db2c614d9baaa31176c359d676522d6","verifiedTreeHash":"d90200a760d4f37c1ba9d04fff7124b4d1c75d13","verifierVersion":"0.1.0+1308af71"},{"checks":[{"durationMs":1728,"exitCode":0,"name":"build","output":"Compiling 28 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.63s\nCompiler run successful!\nwarning[divide-before-multiply]: multiplication should occur before division to avoid loss of precision\n    ╭▸ src/LinearVesting.sol:119:16\n    │\n119 │         return (schedule.amount / duration) * elapsed + ((schedule.amount % duration) * elapsed) / duration;\n    │                ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#divide-before-multiply\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/Vest.t.sol:43:9\n   │\n43 │         token.transfer(alice, 100);\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/Vest.t.sol:46:9\n   │\n46 │         token.transferFrom(alice, bob, 50);\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/Vest.t.sol:51:9\n   │\n51 │         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/LinearVesting.t.sol:134:9\n    │\n134 │         token.transfer(bob, 100);\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/Vest.t.sol:56:9\n   │\n56 │         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/LinearVesting.t.sol:158:9\n    │\n158 │         token.transfer(bob, 50);\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/LinearVesting.t.sol:165:9\n    │\n165 │         token.transfer(address(vesting), 3);\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/Vest.t.sol:60:9\n   │\n60 │         token.transferFrom(address(0), bob, 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/Vest.t.sol:63:9\n   │\n63 │         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/Vest.t.sol:65:9\n   │\n65 │         token.transferFrom(address(this), 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/Vest.t.sol:72:9\n   │\n72 │         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/Vest.t.sol:74:9\n   │\n74 │         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/Vest.t.sol:76:9\n   │\n76 │         token.transferFrom(alice, address(0), 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/Vest.t.sol:81:9\n   │\n81 │         token.transfer(address(this), 1e27);\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/Vest.t.sol:83:9\n   │\n83 │         token.transfer(bob, 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/Conservation.invariant.t.sol:59:9\n   │\n59 │         token.transfer(address(handler), token.totalSupply());\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/Vest.t.sol:117:9\n    │\n117 │         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/Vest.t.sol:119:9\n    │\n119 │         token.transfer(bob, onward);\n    │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\n","passed":true},{"durationMs":3009,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 8 tests for test/AdversarialVesting.t.sol:AdversarialVestingTest\n[PASS] testBubblingReentrancyRollsBackAndUnlocks() (gas: 660295)\n[PASS] testFalseAndRevertingPayoutsCanBeRetried() (gas: 285900)\n[PASS] testFalseRevertingAndShortDepositsRollBackAllState() (gas: 558070)\n[PASS] testFullWidthAmountDoesNotOverflowAndPaysEveryUnit() (gas: 209784)\n[PASS] testReentrantClaimDuringDepositIsRejected() (gas: 297921)\n[PASS] testReentrantClaimDuringPayoutSeesUpdatedEffects() (gas: 347132)\n[PASS] testReentrantCreateDuringDepositIsRejected() (gas: 368805)\n[PASS] testReentrantCreateDuringPayoutIsRejected() (gas: 417327)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 2.54ms (4.05ms CPU time)\n\nRan 2 tests for test/Launch.t.sol:LaunchTest\n[PASS] testConstructorsRejectEther() (gas: 407154)\n[PASS] testFactoryDeploymentPreservesSupplyAndBindsToken() (gas: 4374741)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 18.50ms (13.24ms CPU time)\n\nRan 9 tests for test/LinearVesting.t.sol:LinearVestingTest\n[PASS] testConstructorOnlyConfiguresTokenAndPreservesSupply() (gas: 92076)\n[PASS] testCreateAndClaimEventsAndCliffBoundaries() (gas: 316173)\n[PASS] testEndCliffAndPastStart() (gas: 322655)\n[PASS] testFuzzLinearArithmeticAndClaimFrequency(uint256,uint64,uint64,uint64) (runs: 512, μ: 246100, ~: 256894)\nLogs:\n  Bound result 801301891\n  Bound result 20301\n  Bound result 2334\n  Bound result 13677\n\n[PASS] testInvalidSchedules() (gas: 202191)\n[PASS] testMissingRevokedAndInsufficientPermissionsRollBack() (gas: 698617)\n[PASS] testMultipleCreatorsBeneficiariesAndDonationsStaySeparate() (gas: 519575)\n[PASS] testTinyAmountRoundingAndFinalDust() (gas: 513288)\n[PASS] testUnauthorizedAndUnknownClaims() (gas: 227240)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 31.07ms (33.42ms CPU time)\n\nRan 8 tests for test/Vest.t.sol:VestTest\n[PASS] testFuzzTransfersConserveFunds(uint256,uint256) (runs: 512, μ: 77536, ~: 79872)\nLogs:\n  Bound result 1872193985100991\n  Bound result 656624710893387\n\n[PASS] testInfiniteApprovalAndRevocation() (gas: 81685)\n[PASS] testInvalidAddressesAndInsufficientFunds() (gas: 34070)\n[PASS] testMetadataAndSupply() (gas: 17309)\n[PASS] testNoAdminOrMintSelectors() (gas: 52191)\n[PASS] testRejectedTransferFromRollsBackAllowance() (gas: 63231)\n[PASS] testSelfAndZeroTransfersConserveSupply() (gas: 28702)\n[PASS] testTransferApprovalAndTransferFromEvents() (gas: 112496)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 62.64ms (62.70ms CPU time)\n\nRan 1 test for test/IndependentArithmetic.t.sol:IndependentArithmeticTest\n[PASS] testFuzzFullWidthAgainstBitwiseLongDivision(uint256,uint64,uint64) (runs: 512, μ: 1681576, ~: 1681690)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 64.13ms (64.01ms CPU time)\n\nRan 1 test for test/Conservation.invariant.t.sol:ConservationTest\n[PASS] invariantCustodyEqualsOutstandingAndClaimsNeverExceedVested() (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+----------+-------+---------+----------╮\n| Contract       | Selector | Calls | Reverts | Discards |\n+========================================================+\n| VestingHandler | advance  | 2684  | 0       | 0        |\n|----------------+----------+-------+---------+----------|\n| VestingHandler | claim    | 2744  | 0       | 0        |\n|----------------+----------+-------+---------+----------|\n| VestingHandler | create   | 2764  | 0       | 0        |\n╰----------------+----------+-------+---------+----------╯\n\nLogs:\n  Bound result 24576\n  Bound result 31536000\n  Bound result 18\n  Bound result 630387047305067567\n  Bound result 6071295\n  Bound result 1\n  Bound result 811520319773620419101401613\n  Bound result 451275\n  Bound result 12\n  Bound result 2763\n  Bound result 64\n  Bound result 2786\n  Bound result 1095\n  Bound result 27895378904464648249757965\n  Bound result 5813473\n  Bound result 0\n  Bound result 300\n  Bound result 86400\n  Bound result 299\n  Bound result 84\n  Bound result 6183\n  Bound result 20853354\n  Bound result 17280967\n  Bound result 953\n  Bound result 1000\n  Bound result 574\n  Bound result 740\n  Bound result 209\n  Bound result 75\n  Bound result 0\n  Bound result 3412129\n  Bound result 75\n  Bound result 111109932150773757380010619\n  Bound result 479525\n  Bound result 14\n  Bound result 29\n  Bound result 9235790868170970\n  Bound result 273314\n  Bound result 170871\n  Bound result 259\n  Bound result 255\n  Bound result 1963191\n  Bound result 14834497927762633301796\n  Bound result 152172\n  Bound result 29614\n  Bound result 724236\n  Bound result 110\n  Bound result 29\n  Bound result 48050174814534537752978815\n  Bound result 26103898\n  Bound result 51786\n  Bound result 3\n  Bound result 23684842\n  Bound result 16533950449621534792376277\n  Bound result 272055\n  Bound result 19223\n  Bound result 239576991315826477699359\n  Bound result 7\n  Bound result 2\n  Bound result 5\n  Bound result 225\n  Bound result 1000\n  Bound result 20\n  Bound result 300\n  Bound result 299\n  Bound result 3\n  Bound result 12517803\n  Bound result 2943\n  Bound result 7220832454548241385087561\n  Bound result 1\n  Bound result 0\n  Bound result 814\n  Bound result 133919137\n  Bound result 399143\n  Bound result 0\n  Bound result 2804575394505696995059871\n  Bound result 7763\n  Bound result 6136\n  Bound result 2025802481553462811389382\n  Bound result 14\n  Bound result 14\n  Bound result 12527649\n  Bound result 193831089091335332099828\n  Bound result 24908953\n  Bound result 13841\n  Bound result 16594633908815908016506618\n  Bound result 30515\n  Bound result 23388\n  Bound result 3012\n  Bound result 31622400\n  Bound result 50453568601323740893560\n  Bound result 25\n  Bound result 0\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.91s (2.91s CPU time)\n\nRan 6 test suites in 2.91s (3.09s CPU time): 29 tests passed, 0 failed, 0 skipped (29 total tests)\n","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"dbac8acc6dbfb47885b558aa186d4c131a97ec86e24ef7e51b0317d8e29dc314","verifiedTreeHash":"7615519b5a94b3cc146b79fe8595c074626459b4","verifierVersion":"0.1.0+1308af71"}]}