{"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":"04e3c45b-6565-4010-8765-1364c2c64ece","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"1a3fbf7511a99a8b0e5a0f27b3c7bce06208740b9a613764aa7604789eaf3357","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_economics","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"ce417f8c5915ef903c75e3291cc470ff7254ed07686b4035842c3128c96480ee","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_flow","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"3b5ec44c3a4fcfca466fae82f5082dca3f6d5c00a0ce416eb8d3121cbd8952b8","dependsOn":["build_contract_project","write_foundry_tests","manifest","audit_math","audit_permissions","audit_economics","audit_flow"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"3014f1ea5961918ca059453a484bf4c8bcbbfc2248dbe31d94ac7c5cdf8f50bd","skillId":"audit-judge","tools":[]},"key":"audit_judge","kind":"code","role":"review","skillHash":"3014f1ea5961918ca059453a484bf4c8bcbbfc2248dbe31d94ac7c5cdf8f50bd","skillId":"audit-judge","state":"accepted"},{"acceptedSubmissionHash":"faa5ab94a49beedd326b6be929fef1dae4fb6de3bc3de33ea542151309009c54","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_math","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"d149b99b48894091efb4caa1aac8b854c2530f90edf42ce6ef858ff4aa081758","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","tools":[]},"key":"audit_permissions","kind":"code","role":"review","skillHash":"e5ac2cb1fd91a56aa40b16487fc230c48de0d317c8266140331dd3219bb40a85","skillId":"audit-specialist","state":"accepted"},{"acceptedSubmissionHash":"651c95663732d5a5c4bdecd586aaa6e2bf84b68f5094788ce5050b732bb37579","dependsOn":[],"execution":{"mustProduce":["src/LaunchToken.sol"],"network":false,"profile":"foundry","requires":[],"skillHash":"47381b166d1f406a34f0ebdc740ee21bc0383e56e7ad9084b26abf1bf7570904","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"47381b166d1f406a34f0ebdc740ee21bc0383e56e7ad9084b26abf1bf7570904","skillId":"build-contract-project","state":"accepted"},{"acceptedSubmissionHash":"ad2889fd2b500a36d00e05641617a298a68c3b638a4fc48587bb65983d2d1881","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"b5316840e81c2c753c6e18c029b6b4359e4dc0e54588d5f5ded6c86e9876e30d","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"73431852439ad3a343f3d2b7db1c43cd363b9f48f9bb51497374a0cf6d50b223","skillId":"write-foundry-tests","tools":[]},"key":"write_foundry_tests","kind":"code","role":"tests","skillHash":"73431852439ad3a343f3d2b7db1c43cd363b9f48f9bb51497374a0cf6d50b223","skillId":"write-foundry-tests","state":"accepted"}],"objective":"A vesting contract for the launch token ($token): anyone can create a linear vesting schedule for a beneficiary by depositing tokens (start, cliff, duration); the beneficiary claims what has vested; schedules cannot be revoked. Include tests.","parentJobId":null,"planHash":"33576ff7772e8cd3144f81c1efd6ffb874fd326567bdb71bd36d9f267665ffe7","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"04e3c45b-6565-4010-8765-1364c2c64ece","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-538-vesting-contract-launch-token"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51314","feedbackHash":"a0f0ce46c0a81b069b1a13f506baae24bd78c67a203ba319bf8396e7ecdc545e","nodeKey":"audit_economics","submissionHash":"1a3fbf7511a99a8b0e5a0f27b3c7bce06208740b9a613764aa7604789eaf3357","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51419","feedbackHash":"060f8e4cbd4b464939628b302c4a0b679481d34e48be2bc2484746a6f4f8bc78","nodeKey":"audit_flow","submissionHash":"ce417f8c5915ef903c75e3291cc470ff7254ed07686b4035842c3128c96480ee","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51300","feedbackHash":"df0cce48cfe51df02a0b4d84d38414b3062c97c2134f8c525f85ec8e19e3f297","nodeKey":"audit_judge","submissionHash":"3b5ec44c3a4fcfca466fae82f5082dca3f6d5c00a0ce416eb8d3121cbd8952b8","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51198","feedbackHash":"52d91dc3d557ad84f119b140f8994410c030e95ef30b1c0ade6c9debc788f8e2","nodeKey":"audit_math","submissionHash":"faa5ab94a49beedd326b6be929fef1dae4fb6de3bc3de33ea542151309009c54","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"50977","feedbackHash":"031bd29087874b0df94ffa075ed30f666a9aae5f55d6ccf97da09aba4eb2132b","nodeKey":"audit_permissions","submissionHash":"d149b99b48894091efb4caa1aac8b854c2530f90edf42ce6ef858ff4aa081758","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"50956","feedbackHash":"4f54d408903f8f035846f3713860c71e4e06e75f9f9a55949786c6b417d92134","nodeKey":"build_contract_project","submissionHash":"651c95663732d5a5c4bdecd586aaa6e2bf84b68f5094788ce5050b732bb37579","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"50971","feedbackHash":"52604e45077b0dd2ca3e3a1be93b7b911ce72a0ed88adc923bd461bed050a47c","nodeKey":"manifest","submissionHash":"ad2889fd2b500a36d00e05641617a298a68c3b638a4fc48587bb65983d2d1881","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"50956","feedbackHash":"5baacbaee1e5d37a9fff1b8f2557b1f66bd67002e38b6cd7eadcd6d11f7cdde5","nodeKey":"write_foundry_tests","submissionHash":"b5316840e81c2c753c6e18c029b6b4359e4dc0e54588d5f5ded6c86e9876e30d","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"bef8b6cc6d821567a2c1c704d80b9cc3f1e69d476ca782057991372fd4ea3968","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"c65c96fe91d42eb7","findings":[],"hash":"1a3fbf7511a99a8b0e5a0f27b3c7bce06208740b9a613764aa7604789eaf3357","nodeId":"0a8dce98-aaf8-4fab-84e7-c37372b2deb3","outcome":"completed","summary":"Saved [.imd-findings.json](/home/debian/.identitymd/work/04e3c45b-6565-4010-8765-1364c2c64ece/0a8dce98-aaf8-4fab-84e7-c37372b2deb3/.imd-findings.json) with no substantiated defects and coverage for all five entry points.\n\nAll 41 existing tests and three additional economic tests passed, including 8,192 invariant calls. Production files remain unchanged. Final deployment verification lacked the required inputs.","treeHash":null,"usage":{"cachedInputTokens":723072,"inputTokens":94564,"model":"gpt-6-astra","outputTokens":7158,"runtime":"codex","turns":5,"wallClockMs":246244}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"05778e691c371384","findings":[],"hash":"3b5ec44c3a4fcfca466fae82f5082dca3f6d5c00a0ce416eb8d3121cbd8952b8","nodeId":"08b6026e-8c08-46ef-b237-a1f50fd67576","outcome":"completed","summary":"Wrote [.imd-findings.json](/root/.identitymd/work/04e3c45b-6565-4010-8765-1364c2c64ece/08b6026e-8c08-46ef-b237-a1f50fd67576/.imd-findings.json) with no retained findings and coverage for all five entry points.\n\nAll 49 existing tests and one scratch reproduction passed. The beneficiary-address case reproduced but was excluded as a funder input mistake affecting only their deposit. Scratch files were removed; implementation unchanged.","treeHash":null,"usage":{"cachedInputTokens":963200,"inputTokens":112973,"model":"gpt-6-astra","outputTokens":5694,"runtime":"codex","turns":5,"wallClockMs":218958}},{"artifacts":[],"attempt":1,"bundleHash":"613711a29352b2f564a76a567f7e1097799c395d932b92f7cf8682788eda3237","device":"bb0a3bf63233e5e5","findings":[],"hash":"651c95663732d5a5c4bdecd586aaa6e2bf84b68f5094788ce5050b732bb37579","nodeId":"e83b918d-42cd-42d5-87a0-a53efecbd0d7","outcome":"completed","summary":"Implemented irrevocable, fully funded linear vesting with beneficiary-only claims, plus `LaunchToken`, vendored dependencies, and deployment documentation.\n\nVerified with Solidity 0.8.26:\n\n- `forge build` passed.\n- `forge test` passed: 41 tests, including fuzzing and 8,192 invariant calls.\n- `forge fmt --check` passed.\n\nAssumptions, operating responsibilities, and one reviewed lint warning are documented in [README.md](/home/imd-worker/.identitymd/work/04e3c45b-6565-4010-8765-1364c2c64ece/e83b918d-42cd-42d5-87a0-a53efecbd0d7/README.md).","treeHash":"d98bfe24d8e12a6abd776f5a0d98be4bde153ec7","usage":{"cachedInputTokens":518784,"inputTokens":63140,"model":"gpt-6-astra","outputTokens":21527,"runtime":"codex","turns":6,"wallClockMs":688481}},{"artifacts":[],"attempt":1,"bundleHash":"f572a0a84c9703188d7f54bb30327bf2efe0776b1e2a4ed478ab15a0fed56a4e","device":"35c52a5b502e847c","findings":[],"hash":"ad2889fd2b500a36d00e05641617a298a68c3b638a4fc48587bb65983d2d1881","nodeId":"567ee505-730c-4f14-9b2a-679a1cc4d03d","outcome":"completed","summary":"Created [launch.json](/home/identitymd5/.identitymd/work/04e3c45b-6565-4010-8765-1364c2c64ece/567ee505-730c-4f14-9b2a-679a1cc4d03d/launch.json) matching `LaunchToken` and `TokenVesting($token)`.\n\n- Schema and constructor ABI checks passed.\n- `forge build` passed with one existing lint warning.\n- `forge test`: 41 passed.\n- Only `launch.json` changed outside permitted scratch files.","treeHash":"e2c3caec5540849ea3c376f46c073b5668544b8b","usage":{"cachedInputTokens":156288,"inputTokens":33740,"model":"gpt-6-astra","outputTokens":2917,"runtime":"codex","turns":3,"wallClockMs":112793}},{"artifacts":[],"attempt":1,"bundleHash":"f24b9bccd57b5d85df8a4a6cacbc4f2291fd8dcfffd085eed0499f8483ce90bf","device":"bb0a3bf63233e5e5","findings":[],"hash":"b5316840e81c2c753c6e18c029b6b4359e4dc0e54588d5f5ded6c86e9876e30d","nodeId":"f04c5158-6d3e-454d-bc2e-04e9d61a9908","outcome":"completed","summary":"Added eight tests covering failure paths, rounding, maximum timestamps, and irrevocability. Strengthened invariants with independent payout accounting and rejected calls across random sequences.\n\n`forge build` and `forge test` pass: **49 tests**, zero failures. New fuzz tests run 1,000 cases each; invariants run 256 × 64 calls.\n\nOnly `test/` changed. No confirmed defects found.","treeHash":"e7beb491cfbb4d80350732134e5a9ce3e3be8c9c","usage":{"cachedInputTokens":804352,"inputTokens":81658,"model":"gpt-6-astra","outputTokens":10684,"runtime":"codex","turns":5,"wallClockMs":376937}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"fea57d3e9d0ca7bf","findings":[{"citation":"resolved","description":"The beneficiary validation rejects address(0) and the vesting contract itself, but not the LaunchToken address. LaunchToken (plain OpenZeppelin ERC20) has no code path that calls claim or moves tokens it receives, so a schedule whose beneficiary is the token contract can never be claimed and the deposit is unrecoverable, since there is no revoke or sweep by design. Impact is limited to the funder's own deposit (self-harm from a mistaken input), so this is informational and not a security defect; it is noted because the check already special-cases address(this) for the same reason and the symmetric case is one line away. Fix preserving the design: also reject beneficiary == address(token) in createSchedule.","line":66,"path":"src/TokenVesting.sol","reproduction":"Deploy LaunchToken and TokenVesting(token). Funder approves and calls createSchedule(address(token), 1e18, block.timestamp, block.timestamp, 1). Expected: InvalidBeneficiary revert (consistent with the address(this) rejection). Actual: schedule is created, 1e18 tokens move into the vesting contract, and after warping 1 second claimableAmount(id) == 1e18 while claim(id) reverts NotBeneficiary for every caller because msg.sender can never equal the token contract. Verified with a scratch Foundry test on this tree (testBeneficiaryTokenAddressAccepted passed, showing the schedule is accepted and unclaimable).","severity":"info","snippet":"        if (beneficiary == address(0) || beneficiary == address(this)) revert InvalidBeneficiary();","title":"createSchedule accepts the token contract itself as beneficiary, permanently stranding the deposit"}],"hash":"ce417f8c5915ef903c75e3291cc470ff7254ed07686b4035842c3128c96480ee","nodeId":"49079d0b-2b61-4851-ad76-e8ec7d41025f","outcome":"completed","summary":"The review is complete and the findings file is written at `.imd-findings.json`. The working tree is otherwise unchanged apart from the findings file, which git status shows as the only addition. Scratch tests and temporary downloads were removed.\n\n**Outcome:** the vesting contract holds under the Execution Trace, Periphery and First Principles guides. I found no loss-of-funds, wrong-party payment, or accounting defect. One informational item is reported.\n\n**What I checked**\n\n- **Execution trace of createSchedule.** All five inputs are caller-controlled. Beneficiary, amount, duration, overflow of start plus duration, and cliff bounds are each guarded. The deposit is verified by exact balance delta, so a mismatched amount reverts. Schedule and totalLocked are written only after funding, under nonReentrant, so the Slither and Aderyn reentrancy leads need a token with callbacks, which the immutable plain LaunchToken does not have.\n- **Execution trace of claim.** Id range and beneficiary checks run first. Vested is monotone in time and bounded by amount, and claimed never exceeds vested, so the subtraction cannot underflow. Both state writes precede the single transfer. I fuzzed monotonicity across the full timestamp range and independence of two schedules for one beneficiary.\n- **Periphery.** I downloaded the OpenZeppelin v5.0.2 and forge-std v1.9.7 archives, confirmed their SHA-256 matches DEPENDENCIES.md, and diffed every vendored file. All differences are whitespace reflow from forge fmt. The vendored mulDiv, SafeERC20 and Address helpers are upstream code.\n- **First principles.** Schedules are immutable and irrevocable since nothing writes them after creation except the claimed counter. The runtime contains no delegatecall, callcode or selfdestruct. The invariant campaign and my own tests show the contract balance always equals outstanding obligations plus donations.\n\n**Finding reported (info)**\n\n- `createSchedule` rejects address zero and the vesting contract as beneficiary, but accepts the token contract address. Such a schedule is created and funded, yet no caller can ever equal the token contract, so the deposit is permanently stranded. This is self-harm by the funder, so it is informational. The reproduction uses the exact call and the observed state at `src/TokenVesting.sol:66`.\n\n**Coverage.** All five listed entry points have rows. Four hold, and createSchedule carries the info finding. Four additional rows record the invariants, the library verification, and the disposition of each static-analysis lead.\n\n**Test gaps worth noting for the author.** The suite does not exercise a far-future start or a maximal duration with a realistic amount, both of which lock funds indefinitely by the funder's own choice. Those are documented in the README as unrecoverable mistakes and are not code defects.","treeHash":null,"usage":{"cachedInputTokens":745531,"inputTokens":290,"model":"claude-fable-5-1","outputTokens":17197,"runtime":"claude","turns":30,"wallClockMs":260555}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"77cba07fd04368e3","findings":[],"hash":"d149b99b48894091efb4caa1aac8b854c2530f90edf42ce6ef858ff4aa081758","nodeId":"2e8026fe-22f5-4e10-8ece-13ac3dafcdfa","outcome":"completed","summary":"Saved the review to [.imd-findings.json](/home/imd-worker2/.identitymd/work/04e3c45b-6565-4010-8765-1364c2c64ece/2e8026fe-22f5-4e10-8ece-13ac3dafcdfa/.imd-findings.json).\n\n- No substantiated defects in the assigned area.\n- All five entry points covered.\n- All 41 tests passed offline, including 8,192 invariant calls.\n- Deployment token binding remains unverified because no launch manifest was present.\n\nNo source or configuration files changed.","treeHash":null,"usage":{"cachedInputTokens":544512,"inputTokens":79233,"model":"gpt-6-astra","outputTokens":5486,"runtime":"codex","turns":4,"wallClockMs":197252}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"29ea8835baa3dfe1","findings":[],"hash":"faa5ab94a49beedd326b6be929fef1dae4fb6de3bc3de33ea542151309009c54","nodeId":"463428a2-0b38-4d2b-b3d1-956adb755c87","outcome":"completed","summary":"No substantiated defects found in the assigned math and boundary scope.\n\nRecorded findings and coverage for all five entry points in [.imd-findings.json](/home/seat/.identitymd/work/04e3c45b-6565-4010-8765-1364c2c64ece/463428a2-0b38-4d2b-b3d1-956adb755c87/.imd-findings.json).\n\nValidation passed: 41 existing tests, 8,192 invariant calls, and 83 additional arithmetic boundary tests run under `/tmp`. Source and configuration remain unchanged.","treeHash":null,"usage":{"cachedInputTokens":517632,"inputTokens":79456,"model":"gpt-6-astra","outputTokens":6340,"runtime":"codex","turns":4,"wallClockMs":237567}}],"verification":[{"checks":[{"durationMs":1867,"exitCode":0,"name":"build","output":"Compiling 37 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.75s\nCompiler run successful!\nwarning[reentrancy-events]: event emitted after an external call; reentrancy can reorder or fabricate logs that off-chain consumers rely on\n   ╭▸ src/TokenVesting.sol:94:9\n   │\n94 │         emit Claimed(scheduleId, schedule.beneficiary, amount);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\n","passed":true},{"durationMs":2811,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/Deployment.t.sol:DeploymentTest\n[PASS] testFactoryDeploymentPreservesSupplyAndFullyConfiguresVesting() (gas: 2389465)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.67ms (3.51ms CPU time)\n\nRan 12 tests for test/TokenVestingAdversarial.t.sol:TokenVestingAdversarialTest\n[PASS] testDepositCannotReenterClaim() (gas: 607284)\n[PASS] testDepositCannotReenterCreation() (gas: 616979)\n[PASS] testFalseReturningDepositRollsBackTokenAndScheduleState() (gas: 181705)\n[PASS] testFalseReturningPayoutRollsBackAndCanBeRetried() (gas: 559360)\n[PASS] testFeeDepositRejectedEvenWhenDonationsCoverShortfall() (gas: 224796)\n[PASS] testFullPrecisionArithmeticHandlesMaximumAmount() (gas: 1542440)\n[PASS] testNoReturnTokenCanFundAndPay() (gas: 369851)\n[PASS] testPayoutCannotReenterClaimOrDoubleSpend() (gas: 563747)\n[PASS] testPayoutCannotReenterCreation() (gas: 652834)\n[PASS] testRevertingDepositCreatesNoSchedule() (gas: 152955)\n[PASS] testRevertingPayoutDoesNotConsumeClaim() (gas: 396179)\n[PASS] testTokenReturningTrueWithoutFundingIsRejected() (gas: 154479)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 11.94ms (3.49ms CPU time)\n\nRan 7 tests for test/LaunchToken.t.sol:LaunchTokenTest\n[PASS] testFixedSupplyAndMetadata() (gas: 53570)\n[PASS] testFuzzTransfersConserveSupply(uint256) (runs: 256, μ: 141242, ~: 141590)\nLogs:\n  Bound result 3395723176\n\n[PASS] testNoMintOrAdministrationEvenForDeployer() (gas: 159747)\n[PASS] testRejectsInsufficientBalanceAndAllowance() (gas: 115023)\n[PASS] testRejectsZeroReceiver() (gas: 30523)\n[PASS] testTransferFromConsumesAllowance() (gas: 139906)\n[PASS] testTransferMovesExactAmount() (gas: 86262)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 12.67ms (9.25ms CPU time)\n\nRan 20 tests for test/TokenVesting.t.sol:TokenVestingTest\n[PASS] testAnyoneCanFundMultipleSchedulesForSameBeneficiary() (gas: 568233)\n[PASS] testBeneficiaryClaimsAccruedAtCliffThenOnlyIncrementThenDust() (gas: 736845)\n[PASS] testCliffAndEndBoundaries() (gas: 376273)\n[PASS] testCliffAtEndLocksEntireAmountUntilEnd() (gas: 342955)\n[PASS] testCreateFundsScheduleAndEmitsDetails() (gas: 314713)\n[PASS] testCreatorCannotRevokeCancelOrWithdraw() (gas: 429723)\n[PASS] testDonationsCreateNoClaimAndRemainAfterSettlement() (gas: 399996)\n[PASS] testFuzzClaimFrequencyPreservesFinalPayout(uint96,uint32,uint32,uint32,uint32) (runs: 256, μ: 565393, ~: 565574)\nLogs:\n  Bound result 24739\n  Bound result 777\n  Bound result 96\n  Bound result 300\n  Bound result 678\n\n[PASS] testInsufficientBalanceRollsBackCreationAndAllowance() (gas: 133581)\n[PASS] testLargestValidEndAndZeroStart() (gas: 247147)\n[PASS] testMissingApprovalRollsBackCreation() (gas: 382494)\n[PASS] testNoCliffAndOneSecondDuration() (gas: 349561)\n[PASS] testOnlyBeneficiaryCanClaimIncludingAgainstCreator() (gas: 331399)\n[PASS] testPastStartAccruesImmediatelyAndExpiredScheduleIsAllowed() (gas: 541686)\n[PASS] testRejectsEarlyAndDuplicateClaims() (gas: 465732)\n[PASS] testRejectsInvalidBeneficiariesAndZeroAmount() (gas: 114384)\n[PASS] testRejectsInvalidTokenAddresses() (gas: 3981)\n[PASS] testRejectsUnknownScheduleAcrossAllEntryPoints() (gas: 439236)\n[PASS] testRejectsZeroDurationInvalidCliffAndEndOverflow() (gas: 133365)\n[PASS] testSeparateSchedulesCannotSpendEachOthersFunds() (gas: 661091)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 21.59ms (28.97ms CPU time)\n\nRan 1 test for test/TokenVestingInvariant.t.sol:TokenVestingInvariantTest\n[PASS] invariantSchedulesAreImmutableAndFullyBacked() (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+-------------+-------+---------+----------╮\n| Contract       | Selector    | Calls | Reverts | Discards |\n+===========================================================+\n| VestingHandler | advanceTime | 2087  | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| VestingHandler | claim       | 2074  | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| VestingHandler | create      | 2028  | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| VestingHandler | donate      | 2003  | 0       | 0        |\n╰----------------+-------------+-------+---------+----------╯\n\nLogs:\n  Bound result 999877000000000000000000\n  Bound result 162447\n  Bound result 10\n  Bound result 8\n  Bound result 599290588\n  Bound result 723\n  Bound result 5452\n  Bound result 3168752\n  Bound result 799\n  Bound result 1004\n  Bound result 1000\n  Bound result 4\n  Bound result 755\n  Bound result 258679\n  Bound result 13718271\n  Bound result 255\n  Bound result 118174097201589734\n  Bound result 3645541\n  Bound result 1854125\n  Bound result 1596\n  Bound result 6140\n  Bound result 53261\n  Bound result 11384\n  Bound result 2418\n  Bound result 598218\n  Bound result 8277\n  Bound result 96\n  Bound result 415\n  Bound result 8608\n  Bound result 13157316\n  Bound result 5761403\n  Bound result 3814\n  Bound result 100000000000000000000\n  Bound result 1\n  Bound result 30\n  Bound result 100000000000000000000\n  Bound result 1002\n  Bound result 19728792003956564819967\n  Bound result 95\n  Bound result 31036240\n  Bound result 16271886\n  Bound result 1118\n  Bound result 579337\n  Bound result 1988\n  Bound result 1093\n  Bound result 51729\n  Bound result 5002\n  Bound result 30\n  Bound result 1220\n  Bound result 5599\n  Bound result 31536000\n  Bound result 127\n  Bound result 35\n  Bound result 604800\n  Bound result 8542\n  Bound result 990913\n  Bound result 1002\n  Bound result 1002\n  Bound result 4649\n  Bound result 7141\n  Bound result 5184000\n  Bound result 3139\n  Bound result 912\n  Bound result 100\n  Bound result 100000000000000000000\n  Bound result 4073803\n  Bound result 3198984\n  Bound result 1002\n  Bound result 1000000000000000000000000\n  Bound result 1033\n  Bound result 467\n  Bound result 127\n  Bound result 288\n  Bound result 500\n  Bound result 28792003956564819967\n  Bound result 40000000000000000000\n  Bound result 5474\n  Bound result 2\n  Bound result 401510\n  Bound result 31536000\n  Bound result 22393881\n  Bound result 22810739539342572165\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.71s (2.71s CPU time)\n\nRan 5 test suites in 2.71s (2.76s CPU time): 41 tests passed, 0 failed, 0 skipped (41 total tests)\n","passed":true},{"durationMs":39,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"LaunchToken.approve(address,uint256)\",\"LaunchToken.transfer(address,uint256)\",\"LaunchToken.transferFrom(address,address,uint256)\",\"TokenVesting.claim(uint256)\",\"TokenVesting.createSchedule(address,uint256,uint256,uint256,uint256)\"],\"files\":{\".gitignore\":3,\"README.md\":153,\"foundry.toml\":20,\"remappings.txt\":2,\"src/LaunchToken.sol\":11,\"src/TokenVesting.sol\":124,\"test/Deployment.t.sol\":43,\"test/LaunchToken.t.sol\":83,\"test/TokenVesting.t.sol\":327,\"test/TokenVestingAdversarial.t.sol\":176,\"test/TokenVestingInvariant.t.sol\":146,\"test/mocks/AdversarialToken.sol\":82},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":740,"exitCode":0,"name":"slither","output":"[high/medium] reentrancy-balance at src/TokenVesting.sol:61: Reentrancy in TokenVesting.createSchedule(address,uint256,uint256,uint256,uint256) (src/TokenVesting.sol#61-83):\n[medium/high] incorrect-equality at src/TokenVesting.sol:86: TokenVesting.claim(uint256) (src/TokenVesting.sol#86-96) uses a dangerous strict equality:\n[low/medium] reentrancy-benign at src/TokenVesting.sol:61: Reentrancy in TokenVesting.createSchedule(address,uint256,uint256,uint256,uint256) (src/TokenVesting.sol#61-83):\n[low/medium] timestamp at src/TokenVesting.sol:117: TokenVesting._vestedAmount(TokenVesting.Schedule,uint256) (src/TokenVesting.sol#117-123) uses timestamp for comparisons\n[low/medium] timestamp at src/TokenVesting.sol:86: TokenVesting.claim(uint256) (src/TokenVesting.sol#86-96) uses timestamp for comparisons","passed":true},{"durationMs":331,"exitCode":0,"name":"aderyn","output":"[high] reentrancy-state-change at src/TokenVesting.sol:73: Reentrancy: State change after external call (2 places)\n[low] large-numeric-literal at src/LaunchToken.sol:9: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"651c95663732d5a5c4bdecd586aaa6e2bf84b68f5094788ce5050b732bb37579","verifiedTreeHash":"d98bfe24d8e12a6abd776f5a0d98be4bde153ec7","verifierVersion":"0.1.0+9f8ef295"},{"checks":[{"durationMs":2817,"exitCode":0,"name":"build","output":"Compiling 37 files with Solc 0.8.26\nSolc 0.8.26 finished in 2.66s\nCompiler run successful!\nwarning[reentrancy-events]: event emitted after an external call; reentrancy can reorder or fabricate logs that off-chain consumers rely on\n   ╭▸ src/TokenVesting.sol:94:9\n   │\n94 │         emit Claimed(scheduleId, schedule.beneficiary, amount);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\n","passed":true},{"durationMs":3411,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/Deployment.t.sol:DeploymentTest\n[PASS] testFactoryDeploymentPreservesSupplyAndFullyConfiguresVesting() (gas: 2389465)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 5.01ms (4.74ms CPU time)\n\nRan 7 tests for test/LaunchToken.t.sol:LaunchTokenTest\n[PASS] testFixedSupplyAndMetadata() (gas: 53570)\n[PASS] testFuzzTransfersConserveSupply(uint256) (runs: 256, μ: 141103, ~: 141590)\nLogs:\n  Bound result 6843628363\n\n[PASS] testNoMintOrAdministrationEvenForDeployer() (gas: 159747)\n[PASS] testRejectsInsufficientBalanceAndAllowance() (gas: 115023)\n[PASS] testRejectsZeroReceiver() (gas: 30523)\n[PASS] testTransferFromConsumesAllowance() (gas: 139906)\n[PASS] testTransferMovesExactAmount() (gas: 86262)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 16.94ms (8.08ms CPU time)\n\nRan 12 tests for test/TokenVestingAdversarial.t.sol:TokenVestingAdversarialTest\n[PASS] testDepositCannotReenterClaim() (gas: 607284)\n[PASS] testDepositCannotReenterCreation() (gas: 616979)\n[PASS] testFalseReturningDepositRollsBackTokenAndScheduleState() (gas: 181705)\n[PASS] testFalseReturningPayoutRollsBackAndCanBeRetried() (gas: 559360)\n[PASS] testFeeDepositRejectedEvenWhenDonationsCoverShortfall() (gas: 224796)\n[PASS] testFullPrecisionArithmeticHandlesMaximumAmount() (gas: 1542440)\n[PASS] testNoReturnTokenCanFundAndPay() (gas: 369851)\n[PASS] testPayoutCannotReenterClaimOrDoubleSpend() (gas: 563747)\n[PASS] testPayoutCannotReenterCreation() (gas: 652834)\n[PASS] testRevertingDepositCreatesNoSchedule() (gas: 152955)\n[PASS] testRevertingPayoutDoesNotConsumeClaim() (gas: 396179)\n[PASS] testTokenReturningTrueWithoutFundingIsRejected() (gas: 154479)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 21.61ms (8.39ms CPU time)\n\nRan 20 tests for test/TokenVesting.t.sol:TokenVestingTest\n[PASS] testAnyoneCanFundMultipleSchedulesForSameBeneficiary() (gas: 568233)\n[PASS] testBeneficiaryClaimsAccruedAtCliffThenOnlyIncrementThenDust() (gas: 736845)\n[PASS] testCliffAndEndBoundaries() (gas: 376273)\n[PASS] testCliffAtEndLocksEntireAmountUntilEnd() (gas: 342955)\n[PASS] testCreateFundsScheduleAndEmitsDetails() (gas: 314713)\n[PASS] testCreatorCannotRevokeCancelOrWithdraw() (gas: 429723)\n[PASS] testDonationsCreateNoClaimAndRemainAfterSettlement() (gas: 399996)\n[PASS] testFuzzClaimFrequencyPreservesFinalPayout(uint96,uint32,uint32,uint32,uint32) (runs: 256, μ: 559316, ~: 564932)\nLogs:\n  Bound result 10835378\n  Bound result 296721\n  Bound result 9008\n  Bound result 25\n  Bound result 1377\n\n[PASS] testInsufficientBalanceRollsBackCreationAndAllowance() (gas: 133581)\n[PASS] testLargestValidEndAndZeroStart() (gas: 247147)\n[PASS] testMissingApprovalRollsBackCreation() (gas: 382494)\n[PASS] testNoCliffAndOneSecondDuration() (gas: 349561)\n[PASS] testOnlyBeneficiaryCanClaimIncludingAgainstCreator() (gas: 331399)\n[PASS] testPastStartAccruesImmediatelyAndExpiredScheduleIsAllowed() (gas: 541686)\n[PASS] testRejectsEarlyAndDuplicateClaims() (gas: 465732)\n[PASS] testRejectsInvalidBeneficiariesAndZeroAmount() (gas: 114384)\n[PASS] testRejectsInvalidTokenAddresses() (gas: 3981)\n[PASS] testRejectsUnknownScheduleAcrossAllEntryPoints() (gas: 439236)\n[PASS] testRejectsZeroDurationInvalidCliffAndEndOverflow() (gas: 133365)\n[PASS] testSeparateSchedulesCannotSpendEachOthersFunds() (gas: 661091)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 21.82ms (27.96ms CPU time)\n\nRan 1 test for test/TokenVestingInvariant.t.sol:TokenVestingInvariantTest\n[PASS] invariantSchedulesAreImmutableAndFullyBacked() (runs: 128, calls: 8192, reverts: 0)\n\n╭----------------+-------------+-------+---------+----------╮\n| Contract       | Selector    | Calls | Reverts | Discards |\n+===========================================================+\n| VestingHandler | advanceTime | 2057  | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| VestingHandler | claim       | 2100  | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| VestingHandler | create      | 1977  | 0       | 0        |\n|----------------+-------------+-------+---------+----------|\n| VestingHandler | donate      | 2058  | 0       | 0        |\n╰----------------+-------------+-------+---------+----------╯\n\nLogs:\n  Bound result 7683\n  Bound result 4546229\n  Bound result 1\n  Bound result 1305\n  Bound result 2080648343\n  Bound result 588947\n  Bound result 20212306\n  Bound result 11877888\n  Bound result 777\n  Bound result 127\n  Bound result 2648\n  Bound result 2842475\n  Bound result 27\n  Bound result 2241\n  Bound result 1510\n  Bound result 229\n  Bound result 31278392\n  Bound result 6292\n  Bound result 300\n  Bound result 1964\n  Bound result 3119\n  Bound result 2832\n  Bound result 8581\n  Bound result 2727865\n  Bound result 2973\n  Bound result 299\n  Bound result 10200\n  Bound result 2636\n  Bound result 2134\n  Bound result 113432\n  Bound result 659918\n  Bound result 100\n  Bound result 1873987807\n  Bound result 1\n  Bound result 2994\n  Bound result 300\n  Bound result 143\n  Bound result 3\n  Bound result 7703\n  Bound result 1002\n  Bound result 100000000000000000000\n  Bound result 50184653\n  Bound result 1000\n  Bound result 468\n  Bound result 1638\n  Bound result 6837\n  Bound result 18\n  Bound result 10\n  Bound result 51071554813741681725\n  Bound result 19728792003956564819968\n  Bound result 361031\n  Bound result 9900\n  Bound result 3210\n  Bound result 30\n  Bound result 347990\n  Bound result 255\n  Bound result 4\n  Bound result 431994\n  Bound result 554983540368980050477436\n  Bound result 604798\n  Bound result 17032146\n  Bound result 0\n  Bound result 41410785833606520883\n  Bound result 1786155\n  Bound result 2827\n  Bound result 55117\n  Bound result 173\n  Bound result 108\n  Bound result 123000000000000000000\n  Bound result 55361\n  Bound result 20495197\n  Bound result 290\n  Bound result 6501\n  Bound result 30\n  Bound result 884621818263636504430859\n  Bound result 335242\n  Bound result 15537819\n  Bound result 9951424\n  Bound result 2827\n  Bound result 579337\n  Bound result 17765131\n  Bound result 3105\n  Bound result 4010367\n  Bound result 5184000\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.28s (3.28s CPU time)\n\nRan 5 test suites in 3.28s (3.34s CPU time): 41 tests passed, 0 failed, 0 skipped (41 total tests)\n","passed":true},{"durationMs":82,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"LaunchToken.approve(address,uint256)\",\"LaunchToken.transfer(address,uint256)\",\"LaunchToken.transferFrom(address,address,uint256)\",\"TokenVesting.claim(uint256)\",\"TokenVesting.createSchedule(address,uint256,uint256,uint256,uint256)\"],\"files\":{\".gitignore\":3,\"README.md\":153,\"foundry.toml\":20,\"launch.json\":22,\"remappings.txt\":2,\"src/LaunchToken.sol\":11,\"src/TokenVesting.sol\":124,\"test/Deployment.t.sol\":43,\"test/LaunchToken.t.sol\":83,\"test/TokenVesting.t.sol\":327,\"test/TokenVestingAdversarial.t.sol\":176,\"test/TokenVestingInvariant.t.sol\":146,\"test/mocks/AdversarialToken.sol\":82},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"ad2889fd2b500a36d00e05641617a298a68c3b638a4fc48587bb65983d2d1881","verifiedTreeHash":"e2c3caec5540849ea3c376f46c073b5668544b8b","verifierVersion":"0.1.0+9f8ef295"},{"checks":[{"durationMs":3072,"exitCode":0,"name":"build","output":"Compiling 38 files with Solc 0.8.26\nSolc 0.8.26 finished in 2.92s\nCompiler run successful!\nwarning[reentrancy-events]: event emitted after an external call; reentrancy can reorder or fabricate logs that off-chain consumers rely on\n   ╭▸ src/TokenVesting.sol:94:9\n   │\n94 │         emit Claimed(scheduleId, schedule.beneficiary, amount);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://getfoundry.sh/forge/linting/reentrancy-events\n\n","passed":true},{"durationMs":7223,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/Deployment.t.sol:DeploymentTest\n[PASS] testFactoryDeploymentPreservesSupplyAndFullyConfiguresVesting() (gas: 2389465)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 6.25ms (5.92ms CPU time)\n\nRan 7 tests for test/LaunchToken.t.sol:LaunchTokenTest\n[PASS] testFixedSupplyAndMetadata() (gas: 53570)\n[PASS] testFuzzTransfersConserveSupply(uint256) (runs: 256, μ: 141317, ~: 141590)\nLogs:\n  Bound result 825481609099369105249664643\n\n[PASS] testNoMintOrAdministrationEvenForDeployer() (gas: 159747)\n[PASS] testRejectsInsufficientBalanceAndAllowance() (gas: 115023)\n[PASS] testRejectsZeroReceiver() (gas: 30523)\n[PASS] testTransferFromConsumesAllowance() (gas: 139906)\n[PASS] testTransferMovesExactAmount() (gas: 86262)\nSuite result: ok. 7 passed; 0 failed; 0 skipped; finished in 225.60ms (214.29ms CPU time)\n\nRan 20 tests for test/TokenVesting.t.sol:TokenVestingTest\n[PASS] testAnyoneCanFundMultipleSchedulesForSameBeneficiary() (gas: 568233)\n[PASS] testBeneficiaryClaimsAccruedAtCliffThenOnlyIncrementThenDust() (gas: 736845)\n[PASS] testCliffAndEndBoundaries() (gas: 376273)\n[PASS] testCliffAtEndLocksEntireAmountUntilEnd() (gas: 342955)\n[PASS] testCreateFundsScheduleAndEmitsDetails() (gas: 314713)\n[PASS] testCreatorCannotRevokeCancelOrWithdraw() (gas: 429723)\n[PASS] testDonationsCreateNoClaimAndRemainAfterSettlement() (gas: 399996)\n[PASS] testFuzzClaimFrequencyPreservesFinalPayout(uint96,uint32,uint32,uint32,uint32) (runs: 256, μ: 563726, ~: 565542)\nLogs:\n  Bound result 462\n  Bound result 1010\n  Bound result 193\n  Bound result 437\n  Bound result 762\n\n[PASS] testInsufficientBalanceRollsBackCreationAndAllowance() (gas: 133581)\n[PASS] testLargestValidEndAndZeroStart() (gas: 247147)\n[PASS] testMissingApprovalRollsBackCreation() (gas: 382494)\n[PASS] testNoCliffAndOneSecondDuration() (gas: 349561)\n[PASS] testOnlyBeneficiaryCanClaimIncludingAgainstCreator() (gas: 331399)\n[PASS] testPastStartAccruesImmediatelyAndExpiredScheduleIsAllowed() (gas: 541686)\n[PASS] testRejectsEarlyAndDuplicateClaims() (gas: 465732)\n[PASS] testRejectsInvalidBeneficiariesAndZeroAmount() (gas: 114384)\n[PASS] testRejectsInvalidTokenAddresses() (gas: 3981)\n[PASS] testRejectsUnknownScheduleAcrossAllEntryPoints() (gas: 439236)\n[PASS] testRejectsZeroDurationInvalidCliffAndEndOverflow() (gas: 133365)\n[PASS] testSeparateSchedulesCannotSpendEachOthersFunds() (gas: 661091)\nSuite result: ok. 20 passed; 0 failed; 0 skipped; finished in 262.36ms (232.25ms CPU time)\n\nRan 8 tests for test/TokenVestingProperties.t.sol:TokenVestingPropertiesTest\n[PASS] testFullSupplyAtMaximumDurationReleasesEveryUnit() (gas: 928576)\n[PASS] testFuzzInvalidCreationPreservesLiveSchedules(uint256,uint256,uint256,uint256) (runs: 1000, μ: 1265812, ~: 1265861)\nLogs:\n  Bound result 13160\n  Bound result 13653\n  Bound result 201\n\n[PASS] testFuzzScaledTimeFractions(uint256,uint256,uint256,uint256,uint256) (runs: 1000, μ: 696212, ~: 699697)\nLogs:\n  Bound result 543757482780958666816690159\n  Bound result 896576\n  Bound result 896576\n  Bound result 8672716027115183571094674833861923442674152\n  Bound result 1867392383672814883700174\n\n[PASS] testFuzzSplittingDepositCannotAcceleratePayout(uint256,uint256,uint256,uint256,uint256) (runs: 1000, μ: 1850006, ~: 1850973)\nLogs:\n  Bound result 17824171693936388628566436\n  Bound result 114245823792776505767951859\n  Bound result 266764214\n  Bound result 99189124\n  Bound result 142484922\n\n[PASS] testFuzzTimeTranslationPreservesEntitlement(uint256,uint256,uint256,uint256,uint256) (runs: 1000, μ: 504403, ~: 494658)\nLogs:\n  Bound result 267628095723512671744613235\n  Bound result 121491635453150976913246416985951116525957077313379066246264738436312\n  Bound result 12700234576896408520443373411008020388717515889389565909712000996803\n  Bound result 85545835014587371312733189572855419890754039\n  Bound result 113579435888732479395997959939718867438481818004461750822849715291133\n\n[PASS] testFuzzUnknownIdsCannotAccessLiveSchedules(uint256) (runs: 1000, μ: 710970, ~: 710926)\nLogs:\n  Bound result 1000000000000000000\n\n[PASS] testOneWeiAtMaximumStartAndEnd() (gas: 604848)\n[PASS] testRevokingApprovalCannotRevokeFundedObligations() (gas: 658022)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 262.35ms (1.30s CPU time)\n\nRan 12 tests for test/TokenVestingAdversarial.t.sol:TokenVestingAdversarialTest\n[PASS] testDepositCannotReenterClaim() (gas: 607284)\n[PASS] testDepositCannotReenterCreation() (gas: 616979)\n[PASS] testFalseReturningDepositRollsBackTokenAndScheduleState() (gas: 181705)\n[PASS] testFalseReturningPayoutRollsBackAndCanBeRetried() (gas: 559360)\n[PASS] testFeeDepositRejectedEvenWhenDonationsCoverShortfall() (gas: 224796)\n[PASS] testFullPrecisionArithmeticHandlesMaximumAmount() (gas: 1542440)\n[PASS] testNoReturnTokenCanFundAndPay() (gas: 369851)\n[PASS] testPayoutCannotReenterClaimOrDoubleSpend() (gas: 563747)\n[PASS] testPayoutCannotReenterCreation() (gas: 652834)\n[PASS] testRevertingDepositCreatesNoSchedule() (gas: 152955)\n[PASS] testRevertingPayoutDoesNotConsumeClaim() (gas: 396179)\n[PASS] testTokenReturningTrueWithoutFundingIsRejected() (gas: 154479)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 262.44ms (5.54ms CPU time)\n\nRan 1 test for test/TokenVestingInvariant.t.sol:TokenVestingInvariantTest\n[PASS] invariantSchedulesAreImmutableAndFullyBacked() (runs: 256, calls: 16384, reverts: 0)\n\n╭----------------+-------------------+-------+---------+----------╮\n| Contract       | Selector          | Calls | Reverts | Discards |\n+=================================================================+\n| VestingHandler | advanceTime       | 2433  | 0       | 0        |\n|----------------+-------------------+-------+---------+----------|\n| VestingHandler | advanceToBoundary | 2271  | 0       | 0        |\n|----------------+-------------------+-------+---------+----------|\n| VestingHandler | claim             | 2331  | 0       | 0        |\n|----------------+-------------------+-------+---------+----------|\n| VestingHandler | create            | 2354  | 0       | 0        |\n|----------------+-------------------+-------+---------+----------|\n| VestingHandler | donate            | 2330  | 0       | 0        |\n|----------------+-------------------+-------+---------+----------|\n| VestingHandler | failedFunding     | 2260  | 0       | 0        |\n|----------------+-------------------+-------+---------+----------|\n| VestingHandler | unauthorizedClaim | 2405  | 0       | 0        |\n╰----------------+-------------------+-------+---------+----------╯\n\nLogs:\n  Bound result 997\n  Bound result 0\n  Bound result 100\n  Bound result 50\n  Bound result 1\n  Bound result 1\n  Bound result 1\n  Bound result 1\n  Bound result 1002\n  Bound result 15\n  Bound result 13020\n  Bound result 463587\n  Bound result 127\n  Bound result 0\n  Bound result 3446444\n  Bound result 3620\n  Bound result 7768\n  Bound result 2830\n  Bound result 9796\n  Bound result 4250\n  Bound result 5\n  Bound result 2417\n  Bound result 212\n  Bound result 31536000\n  Bound result 554860\n  Bound result 5184000\n  Bound result 421793859633262406310414\n  Bound result 7981\n  Bound result 25428249\n  Bound result 11191407\n  Bound result 255\n  Bound result 30\n  Bound result 12970\n  Bound result 300\n  Bound result 6949\n  Bound result 544\n  Bound result 53261\n  Bound result 431788333544172105148425\n  Bound result 48515\n  Bound result 25426754\n  Bound result 11906662\n  Bound result 3365\n  Bound result 3109\n  Bound result 28858842\n  Bound result 1175\n  Bound result 2390\n  Bound result 5293\n  Bound result 12024\n  Bound result 1100\n  Bound result 618\n  Bound result 13392\n  Bound result 86\n  Bound result 11394462\n  Bound result 11394462\n  Bound result 1621\n  Bound result 1740\n  Bound result 114643\n  Bound result 1209\n  Bound result 207\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 7.11s (7.11s CPU time)\n\nRan 6 test suites in 7.11s (8.13s CPU time): 49 tests passed, 0 failed, 0 skipped (49 total tests)\n","passed":true},{"durationMs":69,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"LaunchToken.approve(address,uint256)\",\"LaunchToken.transfer(address,uint256)\",\"LaunchToken.transferFrom(address,address,uint256)\",\"TokenVesting.claim(uint256)\",\"TokenVesting.createSchedule(address,uint256,uint256,uint256,uint256)\"],\"files\":{\".gitignore\":3,\"README.md\":153,\"foundry.toml\":20,\"remappings.txt\":2,\"src/LaunchToken.sol\":11,\"src/TokenVesting.sol\":124,\"test/Deployment.t.sol\":43,\"test/LaunchToken.t.sol\":83,\"test/TokenVesting.t.sol\":327,\"test/TokenVestingAdversarial.t.sol\":176,\"test/TokenVestingInvariant.t.sol\":247,\"test/TokenVestingProperties.t.sol\":255,\"test/mocks/AdversarialToken.sol\":82},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"b5316840e81c2c753c6e18c029b6b4359e4dc0e54588d5f5ded6c86e9876e30d","verifiedTreeHash":"e7beb491cfbb4d80350732134e5a9ce3e3be8c9c","verifierVersion":"0.1.0+9f8ef295"}]}