{"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":"f278d3f2-7b02-42ed-a459-ab753204b0ad","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"ac7377711dcda8457c4d3e02785240b200a19d3db0f4c4651a301b544f5e1344","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":"412f4ec600e41c0de607c15b38e6c3c5a2dba8e6b5541dc8b698401d1e318899","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":"2c5d4d4b88f51dd055a1f237e3da2c16a67b2774b38fed1039c43f8f20daa5ee","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 Simple Staking: token Stake (STK) and contract SimpleStaking, where holders stake STK and share rewards that anyone funds into the contract, distributed pro rata by stake-seconds since the last funding, with claim and unstake at will and no lock. Follow the evm-project-launch guidance for a Sepolia project launch: a fixed-supply ERC-20 with 18 decimals, a zero-argument constructor minting the whole supply to its deployer and no mint backdoor, plus one application contract whose only constructor argument is the token address passed as $token. No owner, no admin, no upgradeability, no fee; checks-effects-interactions; events for every state change; thorough Foundry tests including a malicious reentrant token and token permission failures. The manifest names the token and the contract with the $token argument. Independent review before deployment. Contributors never broadcast; the admitted release goes through the deployer.","parentJobId":null,"planHash":"3549e0da189e3100343cd42da11c7933284699edf8635b7c49383dde183048e6","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"f278d3f2-7b02-42ed-a459-ab753204b0ad","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/Identity-md/launch-56-build-independently-review-simple"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"50962","feedbackHash":"d1e565bb1ac25175b946640c9ed94b0a8a1072e98b30c43cf5b89e9cb97acb4f","nodeKey":"adversarial_review","submissionHash":"ac7377711dcda8457c4d3e02785240b200a19d3db0f4c4651a301b544f5e1344","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"50971","feedbackHash":"c2d6b3b679da8ed491b0b6438a02710047deade1ff68ecede985505242cb741f","nodeKey":"build_contract_project","submissionHash":"412f4ec600e41c0de607c15b38e6c3c5a2dba8e6b5541dc8b698401d1e318899","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"50958","feedbackHash":"280f70b05347397a010c01d752f1b26aedafb0e828871af8dc8a8e4357c3c6c6","nodeKey":"manifest","submissionHash":"2c5d4d4b88f51dd055a1f237e3da2c16a67b2774b38fed1039c43f8f20daa5ee","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"308c3bf493072d676bcb9523b87979cb31ad3b5ec5f58a1d8cbd678a2d9bc47c","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"fbd5fcdebbe002d2cd53b899129c6a4ad6c6fbd7fe5b19eb04e4e2348717e6fd","device":"693a98443cff7807","findings":[],"hash":"2c5d4d4b88f51dd055a1f237e3da2c16a67b2774b38fed1039c43f8f20daa5ee","nodeId":"b8c92c89-cb9d-4968-a175-3e6ef430e240","outcome":"completed","summary":"Updated only `launch.json` with the required schema fields, `Stake` metadata, and `SimpleStaking([\"$token\"])`.\n\nValidated manifest constraints and compiled constructor ABIs. Build and all 19 tests passed using installed Solidity 0.8.26; pinned 0.8.30 was unavailable. Protected suites were read but not executed. No deployment was broadcast.","treeHash":"cc6991897d56c4ee3938665499b16a8b32da3cef","usage":{"cachedInputTokens":203520,"inputTokens":19950,"model":null,"outputTokens":2005,"runtime":"codex","turns":4,"wallClockMs":82532}},{"artifacts":[],"attempt":1,"bundleHash":"6aa59570fc71a7130bfd805d7eef63467b60fa80603a0ce5adce09ab3492e250","device":"35c52a5b502e847c","findings":[],"hash":"412f4ec600e41c0de607c15b38e6c3c5a2dba8e6b5541dc8b698401d1e318899","nodeId":"c4b29b4d-0b98-43ff-aadb-d6811066534f","outcome":"completed","summary":"Implemented STK, SimpleStaking, launch manifest, documentation, and independent review.\n\n- Offline build and formatting checks pass.\n- All 19 tests pass, including reentrancy and token permission failures.\n- Protected-suite execution remains for the admission harness using Solidity 0.8.26.\n- No transactions broadcast.","treeHash":"779981e4b4c6be78926c8438b7cdbf2b7d21a861","usage":{"cachedInputTokens":435200,"inputTokens":28765,"model":null,"outputTokens":12634,"runtime":"codex","turns":6,"wallClockMs":446751}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"3f6a9bdd601cb99f","findings":[],"hash":"ac7377711dcda8457c4d3e02785240b200a19d3db0f4c4651a301b544f5e1344","nodeId":"9d86ff06-4b3f-4fc0-ae60-6b4274729203","outcome":"completed","summary":"Completed the review deliverable.\n\nWrote `.imd-findings.json` with:\n\n```json\n{\"findings\":[]}\n```\n\nI found no reproducible defects to report under the stated fixed `Stake` token and `$token` launch assumptions.\n\nVerification run:\n- `forge test -vvv` passed: 19 tests, 0 failures\n- `forge fmt --check` passed\n- `forge build --offline` passed after using a writable temp Foundry cache path for the compiler cache.","treeHash":null,"usage":{"cachedInputTokens":257792,"inputTokens":32839,"model":null,"outputTokens":6148,"runtime":"codex","turns":8,"wallClockMs":130389}}],"verification":[{"checks":[{"durationMs":1136,"exitCode":0,"name":"build","output":"Compiling 23 files with Solc 0.8.30\nSolc 0.8.30 finished in 1.06s\nCompiler run successful!\nwarning[block-timestamp]: usage of `block.timestamp` in a comparison may be manipulated by validators\n    ╭▸ src/SimpleStaking.sol:159:13\n    │\n159 │         if (block.timestamp > type(uint64).max) revert TimestampOutOfRange();\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/Stake.t.sol:27:9\n   │\n27 │         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/Stake.t.sol:31:9\n   │\n31 │         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/SimpleStaking.t.sol:18:9\n   │\n18 │         token.transfer(alice, 1000 ether);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/SimpleStaking.t.sol:19:9\n   │\n19 │         token.transfer(bob, 1000 ether);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/Stake.t.sol:36:9\n   │\n36 │         token.transfer(alice, 90);\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/Stake.t.sol:41:9\n   │\n41 │         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/Stake.t.sol:43:9\n   │\n43 │         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/SimpleStaking.t.sol:191:9\n    │\n191 │         token.transfer(address(pool), 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/Stake.t.sol:47:9\n   │\n47 │         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/Stake.t.sol:50:9\n   │\n50 │         token.transferFrom(alice, bob, 1);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[unsafe-typecast]: typecasts that can truncate values should be checked\n    ╭▸ test/SimpleStaking.t.sol:303:32\n    │\n303 │                 require(!ok && bytes4(reason) == SimpleStaking.Reentrancy.selector, \"callback not guarded\");\n    │                                ━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'bytes4' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#unsafe-typecast\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/Stake.t.sol:55:9\n   │\n55 │         token.transferFrom(alice, bob, 20);\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/Stake.t.sol:58:9\n   │\n58 │         token.transfer(address(0), 1);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/Stake.t.sol:65:9\n   │\n65 │         token.transfer(alice, amount);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\n","passed":true},{"durationMs":171,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 3 tests for test/SimpleStaking.t.sol:HostileTokenTest\n[PASS] testEveryEntryPointRejectsCallbacksOnEveryTransfer() (gas: 409914)\n[PASS] testFalseReturnAndFeeRollbackIncomingTransfers() (gas: 274248)\n[PASS] testPayoutFailurePreservesClaimAndPrincipal() (gas: 504945)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 892.28µs (1.03ms CPU time)\n\nRan 4 tests for test/Stake.t.sol:StakeTest\n[PASS] testFixedSupplyMetadataAndNoMint() (gas: 21790)\n[PASS] testFuzzTransferConservation(uint256) (runs: 256, μ: 47497, ~: 47586)\nLogs:\n  Bound result 418664718237151175779337305\n\n[PASS] testPermissionFailuresAndZeroAddress() (gas: 65714)\n[PASS] testTransfersAllowancesAndSelfTransfer() (gas: 123128)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 5.42ms (5.49ms CPU time)\n\nRan 12 tests for test/SimpleStaking.t.sol:SimpleStakingTest\n[PASS] testConstructorRejectsZeroAddress() (gas: 36719)\n[PASS] testEventsDescribeAllUserChanges() (gas: 384775)\n[PASS] testExitBeforeFundingPreservesSecondsAndRewards() (gas: 452726)\n[PASS] testFuzzMultiRoundConservation(uint64) (runs: 256, μ: 2795214, ~: 2795216)\n[PASS] testFuzzReferenceStakeSeconds(uint96,uint96,uint32,uint32,uint96) (runs: 256, μ: 501550, ~: 506164)\nLogs:\n  Bound result 535670189490\n  Bound result 482379229083928152488\n  Bound result 1\n  Bound result 914335\n  Bound result 995431723396191527326275\n\n[PASS] testInvalidActionsAndPermissionsRollBack() (gas: 693014)\n[PASS] testNewUserAfterManyRoundsGetsNoOldRewards() (gas: 1435683)\n[PASS] testPartialExitRestakeAndDelayedClaims() (gas: 933660)\n[PASS] testRoundingDustAndDirectDonations() (gas: 515991)\n[PASS] testSameBlockStakeCannotCapturePastRewards() (gas: 433219)\n[PASS] testStakeSecondsNotSnapshotBalances() (gas: 510294)\n[PASS] testTinyRewardsWithLargeStakeAcrossUnclaimedRounds() (gas: 1252356)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 76.08ms (97.43ms CPU time)\n\nRan 3 test suites in 80.92ms (82.39ms CPU time): 19 tests passed, 0 failed, 0 skipped (19 total tests)\n","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"2c5d4d4b88f51dd055a1f237e3da2c16a67b2774b38fed1039c43f8f20daa5ee","verifiedTreeHash":"cc6991897d56c4ee3938665499b16a8b32da3cef","verifierVersion":"0.1.0+1308af71"},{"checks":[{"durationMs":928,"exitCode":0,"name":"build","output":"Compiling 23 files with Solc 0.8.30\nSolc 0.8.30 finished in 866.66ms\nCompiler run successful!\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/Stake.t.sol:27:9\n   │\n27 │         token.transfer(alice, 100);\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/SimpleStaking.sol:159:13\n    │\n159 │         if (block.timestamp > type(uint64).max) revert TimestampOutOfRange();\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/SimpleStaking.t.sol:18:9\n   │\n18 │         token.transfer(alice, 1000 ether);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/SimpleStaking.t.sol:19:9\n   │\n19 │         token.transfer(bob, 1000 ether);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/Stake.t.sol:31:9\n   │\n31 │         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/Stake.t.sol:36:9\n   │\n36 │         token.transfer(alice, 90);\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/Stake.t.sol:41:9\n   │\n41 │         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/Stake.t.sol:43:9\n   │\n43 │         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/SimpleStaking.t.sol:191:9\n    │\n191 │         token.transfer(address(pool), 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/Stake.t.sol:47:9\n   │\n47 │         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/Stake.t.sol:50:9\n   │\n50 │         token.transferFrom(alice, bob, 1);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[unsafe-typecast]: typecasts that can truncate values should be checked\n    ╭▸ test/SimpleStaking.t.sol:303:32\n    │\n303 │                 require(!ok && bytes4(reason) == SimpleStaking.Reentrancy.selector, \"callback not guarded\");\n    │                                ━━━━━━━━━━━━━━\n    │\n    ├ note: consider disabling this lint if you're certain the cast is safe\n    │       \n    │       // casting to 'bytes4' is safe because [explain why]\n    │       // forge-lint: disable-next-line(unsafe-typecast)\n    │       \n    │       \n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#unsafe-typecast\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/Stake.t.sol:55:9\n   │\n55 │         token.transferFrom(alice, bob, 20);\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/Stake.t.sol:58:9\n   │\n58 │         token.transfer(address(0), 1);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/Stake.t.sol:65:9\n   │\n65 │         token.transfer(alice, amount);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\n","passed":true},{"durationMs":160,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 3 tests for test/SimpleStaking.t.sol:HostileTokenTest\n[PASS] testEveryEntryPointRejectsCallbacksOnEveryTransfer() (gas: 409914)\n[PASS] testFalseReturnAndFeeRollbackIncomingTransfers() (gas: 274248)\n[PASS] testPayoutFailurePreservesClaimAndPrincipal() (gas: 504945)\nSuite result: ok. 3 passed; 0 failed; 0 skipped; finished in 783.02µs (584.06µs CPU time)\n\nRan 4 tests for test/Stake.t.sol:StakeTest\n[PASS] testFixedSupplyMetadataAndNoMint() (gas: 21790)\n[PASS] testFuzzTransferConservation(uint256) (runs: 256, μ: 47694, ~: 47586)\nLogs:\n  Bound result 905339859094762034622694062\n\n[PASS] testPermissionFailuresAndZeroAddress() (gas: 65714)\n[PASS] testTransfersAllowancesAndSelfTransfer() (gas: 123128)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 19.46ms (6.46ms CPU time)\n\nRan 12 tests for test/SimpleStaking.t.sol:SimpleStakingTest\n[PASS] testConstructorRejectsZeroAddress() (gas: 36719)\n[PASS] testEventsDescribeAllUserChanges() (gas: 384775)\n[PASS] testExitBeforeFundingPreservesSecondsAndRewards() (gas: 452726)\n[PASS] testFuzzMultiRoundConservation(uint64) (runs: 256, μ: 2795215, ~: 2795219)\n[PASS] testFuzzReferenceStakeSeconds(uint96,uint96,uint32,uint32,uint96) (runs: 256, μ: 501319, ~: 506161)\nLogs:\n  Bound result 762427173131692469131\n  Bound result 76591321480\n  Bound result 234132\n  Bound result 18902\n  Bound result 28\n\n[PASS] testInvalidActionsAndPermissionsRollBack() (gas: 693014)\n[PASS] testNewUserAfterManyRoundsGetsNoOldRewards() (gas: 1435683)\n[PASS] testPartialExitRestakeAndDelayedClaims() (gas: 933660)\n[PASS] testRoundingDustAndDirectDonations() (gas: 515991)\n[PASS] testSameBlockStakeCannotCapturePastRewards() (gas: 433219)\n[PASS] testStakeSecondsNotSnapshotBalances() (gas: 510294)\n[PASS] testTinyRewardsWithLargeStakeAcrossUnclaimedRounds() (gas: 1252356)\nSuite result: ok. 12 passed; 0 failed; 0 skipped; finished in 81.68ms (106.60ms CPU time)\n\nRan 3 test suites in 83.76ms (101.93ms CPU time): 19 tests passed, 0 failed, 0 skipped (19 total tests)\n","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"412f4ec600e41c0de607c15b38e6c3c5a2dba8e6b5541dc8b698401d1e318899","verifiedTreeHash":"779981e4b4c6be78926c8438b7cdbf2b7d21a861","verifierVersion":"0.1.0+1308af71"}]}