{"assessments":[],"deployments":[{"attestationHash":"fe48546bbf782524b33db5fda7586f84e132094943520163959ca0c3b5d07a78","chainId":11155111,"contracts":[{"address":"0x3f621b665c18f8be6c3bd7949badac07f1d8d697","blockNumber":11746591,"name":"HighRoll","role":"other","txHash":"0x7e7773d05201e0b54a6def9e0d1e0f3be031185fe0724b8440ae4b8def16fe2c"},{"address":"0x524068f87fe6abd2f14a63ae9bee2ae170585d9b","blockNumber":11746591,"name":"MerkleDistributor","role":"distributor","txHash":"0x7e7773d05201e0b54a6def9e0d1e0f3be031185fe0724b8440ae4b8def16fe2c"},{"address":"0x1eb463ff9a7868b05734f42548c593cce5c1f4bb","blockNumber":11746591,"name":"HighRollToken","role":"token","txHash":"0x7e7773d05201e0b54a6def9e0d1e0f3be031185fe0724b8440ae4b8def16fe2c"}],"id":"8b853906-a016-40e5-8ba5-81b37f138ed4","manifestHash":"8fc1f6a66f10acedc43c1ab0ac063ed5782c82201a716d7c62240cc475cc67ef","status":"live"}],"fuzz":[],"identity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"interpretation":"Records acceptance and evidence. Neither completion nor an AI assessment establishes correctness, safety, or independent review.","jobId":"f9e53b4d-6bcf-4893-801d-f6492f363395","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"087c58fc243d190916a0997d9c30d33fba6d364f1707998d65908d828be53676","dependsOn":["build_contract_project"],"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":"aeef16d67e9ebd154e00c37941c1867b42142eff873b0238dc4eacb93b6aa910","dependsOn":["build_contract_project","manifest"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"c26edc76dc7a76e09a42c3634054429c1679c6e247747d647a03f77e5b332d7e","skillId":"adversarial-review","tools":[]},"key":"adversarial_review_2","kind":"code","role":"review","skillHash":"c26edc76dc7a76e09a42c3634054429c1679c6e247747d647a03f77e5b332d7e","skillId":"adversarial-review","state":"accepted"},{"acceptedSubmissionHash":"64a8042b6c49205147a7be40efffbff0649135ec242dd4299990da885271447a","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":"77ec3983254e4e30ec1a76109031d48e113e084b54eb8cb0a503b4018c0f409c","dependsOn":["build_contract_project","adversarial_review"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"}],"objective":"WORKFLOW CONTRACT STAGE CONTEXT: the stage produces implemented and tested contracts, ABI documentation and an independently reviewed launch.json. Each assignment contributes only within its own role and write scope. Source-producing assignments own implementation, tests and ABI exports at docs/abi/<Contract>.json where their scope permits. The generated manifest assignment writes only launch.json. Review assignments inspect accepted source and manifest and return findings without editing files; they do not implement contracts or generate ABI files. Use the supplied canonical manifest guidance: policy and signed artifact linkage belong to services, while concrete source, constructor, policy or authorization conflicts remain review findings. Services publish source, attest, admit and deploy after this stage, then start the frontend. Read .imd/reads/workflow.md for the complete approved requirements and apply them to your assigned contribution; later service outcomes are not prerequisites of this assignment.","parentJobId":null,"planHash":"b5bfe1bda25aa9a628176b089a60119fcc5b5ee6ee7c19b4b5df12bc8143b5eb","previousHash":"cd928fd0f6a391a61fa5f6ef66748d3f10195b6393b982682c570dc812ba4605","projectId":"f9e53b4d-6bcf-4893-801d-f6492f363395","publication":{"commit":"5a09c993b4baca81c5e942fae236bb495a2ea8bf","deliveredAt":"2026-09-20T20:58:04.919Z","repoUrl":"https://github.com/Identity-md/launch-51-workflow-contract-stage-context"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[],"site":null,"snapshotHash":"ace0032e1d86eeee933b838b99493b4cfd60fa2f3d705752549f5325d29e3c33","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"bb0a3bf63233e5e5","findings":[],"hash":"087c58fc243d190916a0997d9c30d33fba6d364f1707998d65908d828be53676","nodeId":"bf5dcfdf-4687-4f0c-ab19-6caab10e3c5a","outcome":"completed","summary":"Wrote `{\"findings\":[]}` to `.imd-findings.json`.\n\nNo substantiated defects found in the contracts, tests, or ABI exports. `launch.json` was absent, so manifest arguments could not be reviewed. Existing files remain unchanged.","treeHash":null,"usage":{"cachedInputTokens":182016,"inputTokens":36426,"model":null,"outputTokens":1592,"runtime":"codex","turns":4,"wallClockMs":61442}},{"artifacts":[],"attempt":1,"bundleHash":"d34ceaa8fc3d47f0dc96bed03a33a1cce6fbe859a71450c290d36edaaa07ba47","device":"aad1250d716d3f82","findings":[],"hash":"64a8042b6c49205147a7be40efffbff0649135ec242dd4299990da885271447a","nodeId":"35c3e249-63a7-4c42-ba5d-51e9d17b82fa","outcome":"completed","summary":"Implemented HighRollToken and HighRoll, with ABI exports, deployment documentation, and vendored offline dependencies.\n\nVerified: offline build, all 28 tests, formatting, and ABI consistency checks pass.\n\nDocumented limitation: rolls are player-chosen, not random. Independent review remains required before deployment.","treeHash":"69f06b72fa711215591f07abd0d453defee93a54","usage":{"cachedInputTokens":330112,"inputTokens":51888,"model":null,"outputTokens":16002,"runtime":"codex","turns":5,"wallClockMs":510707}},{"artifacts":[],"attempt":1,"bundleHash":"bcc568b0989e1022194fbd7f75f9a50d1a0cd7d018d183200db2a912b146323e","device":"3f6a9bdd601cb99f","findings":[],"hash":"77ec3983254e4e30ec1a76109031d48e113e084b54eb8cb0a503b4018c0f409c","nodeId":"5f97833e-aeb2-40f4-a55e-a11fd5616e51","outcome":"completed","summary":"Created [launch.json](launch.json) for `HighRollToken` and `HighRoll([\"$token\"])`.\n\n- Checked supplied schema constraints and compiled constructor ABIs.\n- `forge build` succeeded using the committed compiler.\n- `forge test`: 28 passed, 0 failed.\n- Only `launch.json` changed.","treeHash":"90f2a35c85a596f3009c653311629b96c154f4d3","usage":{"cachedInputTokens":116992,"inputTokens":15994,"model":null,"outputTokens":1777,"runtime":"codex","turns":3,"wallClockMs":69480}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"0256823ae36e7900","findings":[{"description":"The approved rules require each player to commit a roll from 1 to 6 with a salt, but do not require the two commitment hashes to differ. joinGame rejects commitment == game.commitment1, so two players who independently choose identical roll and salt cannot play even though both can later prove their commitments. The test test_joinRejectsWrongStakeSelfZeroCopiedAndDuplicate codifies this extra restriction instead of testing the specified valid state.","line":90,"path":"src/HighRoll.sol","reproduction":"Let salt = bytes32(uint256(123)) and commitment = HighRoll.commitmentHash(4, salt). Alice calls openGame(10 ether, commitment), then Bob calls joinGame(0, 10 ether, commitment). Expected: Bob's equal stake is escrowed and game 0 becomes Active; both can reveal (4, salt) and receive tie refunds. Actual: Bob's join reverts with InvalidCommitment at line 90 and the game remains Open.","severity":"low","title":"A valid join is rejected when both players independently use the same commitment"}],"hash":"aeef16d67e9ebd154e00c37941c1867b42142eff873b0238dc4eacb93b6aa910","nodeId":"4e129f34-d4c7-423d-b0f8-aa1fb6681e90","outcome":"completed","summary":"Review complete. Wrote one substantiated low-severity finding to [.imd-findings.json](/home/imd-worker/.identitymd/work/f9e53b4d-6bcf-4893-801d-f6492f363395/4e129f34-d4c7-423d-b0f8-aa1fb6681e90/.imd-findings.json).\n\nValidation: 28 Foundry tests passed. No other files were modified.","treeHash":null,"usage":{"cachedInputTokens":378624,"inputTokens":32398,"model":null,"outputTokens":3607,"runtime":"codex","turns":4,"wallClockMs":113661}}],"verification":[{"checks":[{"durationMs":1545,"exitCode":0,"name":"build","output":"Compiling 25 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.46s\nCompiler run successful!\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/HighRollToken.t.sol:30:9\n   │\n30 │         token.transfer(alice, amount);\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/HighRoll.sol:103:13\n    │\n103 │         if (block.timestamp >= game.deadline) revert DeadlinePassed();\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/HighRoll.t.sol:53:9\n   │\n53 │         token.transfer(alice, 100 ether);\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/HighRoll.sol:125:13\n    │\n125 │         if (block.timestamp < game.deadline) revert TooEarly();\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#block-timestamp\n\nwarning[block-timestamp]: usage of `block.timestamp` in a comparison may be manipulated by validators\n    ╭▸ src/HighRoll.sol:135:17\n    │\n135 │             if (block.timestamp < game.deadline) revert TooEarly();\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/HighRoll.t.sol:54:9\n   │\n54 │         token.transfer(bob, 100 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/HighRollToken.t.sol:38:9\n   │\n38 │         token.transferFrom(address(this), alice, 40);\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/HighRollToken.t.sol:45:9\n   │\n45 │         token.transferFrom(address(this), alice, 1);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/HighRollToken.t.sol:52:9\n   │\n52 │         token.transferFrom(address(this), 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/HighRollToken.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/HighRollToken.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/HighRollToken.t.sol:66:9\n   │\n66 │         token.transferFrom(address(this), alice, 1);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/HighRollToken.t.sol:71:9\n   │\n71 │         token.transferFrom(alice, bob, 100);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\n","passed":true},{"durationMs":112,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 6 tests for test/AdversarialToken.t.sol:AdversarialTokenTest\n[PASS] test_allMutatorsBlockedOnInboundAndOutboundCallbacks() (gas: 1463619)\n[PASS] test_bubbledReentrancyRollsBackAndCanRetry() (gas: 579851)\n[PASS] test_failedSecondRefundRollsBackAndRetry() (gas: 342956)\n[PASS] test_failedSecondTiePayoutRollsBackBothTransfersAndReveal() (gas: 373838)\n[PASS] test_falseInboundRollsBackOpenAndJoin() (gas: 451356)\n[PASS] test_revertingForfeitPayoutCanBeRetried() (gas: 371727)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 1.69ms (4.23ms CPU time)\n\nRan 1 test for test/Deployment.t.sol:DeploymentTest\n[PASS] test_factoryDeploymentPreservesSupplyAndRuntimePolicy() (gas: 4494684)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 7.10ms (6.83ms CPU time)\n\nRan 6 tests for test/HighRollToken.t.sol:HighRollTokenTest\n[PASS] testFuzz_transferConservesSupply(uint256) (runs: 256, μ: 54705, ~: 55184)\nLogs:\n  Bound result 163301295974844572642\n\n[PASS] test_allowanceSpendingReplacementAndRevocation() (gas: 65594)\n[PASS] test_infiniteAllowance() (gas: 69998)\n[PASS] test_metadataAndSupply() (gas: 17274)\n[PASS] test_noMintOrAdminEntryPointsEvenForDeployer() (gas: 22846)\n[PASS] test_rejectsZeroAddressesInsufficientBalanceAndUnauthorizedSpend() (gas: 47840)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 9.43ms (9.88ms CPU time)\n\nRan 15 tests for test/HighRoll.t.sol:HighRollTest\n[PASS] testFuzz_allRollsConserveFunds(uint8,uint8,bool) (runs: 256, μ: 287408, ~: 286811)\nLogs:\n  Bound result 5\n  Bound result 3\n\n[PASS] test_approvalFailuresRollbackOpeningAndJoining() (gas: 434132)\n[PASS] test_cancelUnmatchedAndRejectLateJoin() (gas: 227339)\n[PASS] test_constructorRejectsNonContracts() (gas: 82921)\n[PASS] test_forfeitEitherPlayerAndPermissionlessSettlement() (gas: 623686)\n[PASS] test_invalidCommittedRollCannotRevealAndLosesByForfeit() (gas: 293932)\n[PASS] test_invalidOpenStakeOrCommitment() (gas: 84596)\n[PASS] test_joinRejectsWrongStakeSelfZeroCopiedAndDuplicate() (gas: 363188)\n[PASS] test_lifecycleEventsForIndexer() (gas: 425609)\n[PASS] test_multipleGamesAreIsolated() (gas: 486428)\n[PASS] test_noRevealsEitherPlayerCanRefund() (gas: 602388)\n[PASS] test_openJoinAndWindowBeginsAtJoin() (gas: 268932)\n[PASS] test_rejectsInvalidRevealsAndDuplicate() (gas: 430207)\n[PASS] test_revealDeadlineBoundary() (gas: 315102)\n[PASS] test_unknownGamesRejectActions() (gas: 111975)\nSuite result: ok. 15 passed; 0 failed; 0 skipped; finished in 14.04ms (18.29ms CPU time)\n\nRan 4 test suites in 14.98ms (32.27ms CPU time): 28 tests passed, 0 failed, 0 skipped (28 total tests)\n","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"64a8042b6c49205147a7be40efffbff0649135ec242dd4299990da885271447a","verifiedTreeHash":"69f06b72fa711215591f07abd0d453defee93a54","verifierVersion":"0.1.0+1308af71"},{"checks":[{"durationMs":1319,"exitCode":0,"name":"build","output":"Compiling 25 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.26s\nCompiler run successful!\nwarning[block-timestamp]: usage of `block.timestamp` in a comparison may be manipulated by validators\n    ╭▸ src/HighRoll.sol:103:13\n    │\n103 │         if (block.timestamp >= game.deadline) revert DeadlinePassed();\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/HighRollToken.t.sol:30:9\n   │\n30 │         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/HighRoll.t.sol:53:9\n   │\n53 │         token.transfer(alice, 100 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/HighRoll.t.sol:54:9\n   │\n54 │         token.transfer(bob, 100 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/HighRollToken.t.sol:38:9\n   │\n38 │         token.transferFrom(address(this), alice, 40);\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/HighRollToken.t.sol:45:9\n   │\n45 │         token.transferFrom(address(this), alice, 1);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/HighRollToken.t.sol:52:9\n   │\n52 │         token.transferFrom(address(this), 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/HighRollToken.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/HighRollToken.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/HighRollToken.t.sol:66:9\n   │\n66 │         token.transferFrom(address(this), alice, 1);\n   │         ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#erc20-unchecked-transfer\n\nwarning[erc20-unchecked-transfer]: ERC20 'transfer' and 'transferFrom' calls should check the return value\n   ╭▸ test/HighRollToken.t.sol:71:9\n   │\n71 │         token.transferFrom(alice, bob, 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/HighRoll.sol:125:13\n    │\n125 │         if (block.timestamp < game.deadline) revert TooEarly();\n    │             ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#block-timestamp\n\nwarning[block-timestamp]: usage of `block.timestamp` in a comparison may be manipulated by validators\n    ╭▸ src/HighRoll.sol:135:17\n    │\n135 │             if (block.timestamp < game.deadline) revert TooEarly();\n    │                 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n    │\n    ╰ help: https://book.getfoundry.sh/reference/forge/forge-lint#block-timestamp\n\n","passed":true},{"durationMs":91,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 6 tests for test/AdversarialToken.t.sol:AdversarialTokenTest\n[PASS] test_allMutatorsBlockedOnInboundAndOutboundCallbacks() (gas: 1463619)\n[PASS] test_bubbledReentrancyRollsBackAndCanRetry() (gas: 579851)\n[PASS] test_failedSecondRefundRollsBackAndRetry() (gas: 342956)\n[PASS] test_failedSecondTiePayoutRollsBackBothTransfersAndReveal() (gas: 373838)\n[PASS] test_falseInboundRollsBackOpenAndJoin() (gas: 451356)\n[PASS] test_revertingForfeitPayoutCanBeRetried() (gas: 371727)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 5.89ms (4.68ms CPU time)\n\nRan 1 test for test/Deployment.t.sol:DeploymentTest\n[PASS] test_factoryDeploymentPreservesSupplyAndRuntimePolicy() (gas: 4494684)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 6.26ms (5.96ms CPU time)\n\nRan 6 tests for test/HighRollToken.t.sol:HighRollTokenTest\n[PASS] testFuzz_transferConservesSupply(uint256) (runs: 256, μ: 54903, ~: 55184)\nLogs:\n  Bound result 468136\n\n[PASS] test_allowanceSpendingReplacementAndRevocation() (gas: 65594)\n[PASS] test_infiniteAllowance() (gas: 69998)\n[PASS] test_metadataAndSupply() (gas: 17274)\n[PASS] test_noMintOrAdminEntryPointsEvenForDeployer() (gas: 22846)\n[PASS] test_rejectsZeroAddressesInsufficientBalanceAndUnauthorizedSpend() (gas: 47840)\nSuite result: ok. 6 passed; 0 failed; 0 skipped; finished in 13.56ms (15.22ms CPU time)\n\nRan 15 tests for test/HighRoll.t.sol:HighRollTest\n[PASS] testFuzz_allRollsConserveFunds(uint8,uint8,bool) (runs: 256, μ: 287229, ~: 286811)\nLogs:\n  Bound result 3\n  Bound result 2\n\n[PASS] test_approvalFailuresRollbackOpeningAndJoining() (gas: 434132)\n[PASS] test_cancelUnmatchedAndRejectLateJoin() (gas: 227339)\n[PASS] test_constructorRejectsNonContracts() (gas: 82921)\n[PASS] test_forfeitEitherPlayerAndPermissionlessSettlement() (gas: 623686)\n[PASS] test_invalidCommittedRollCannotRevealAndLosesByForfeit() (gas: 293932)\n[PASS] test_invalidOpenStakeOrCommitment() (gas: 84596)\n[PASS] test_joinRejectsWrongStakeSelfZeroCopiedAndDuplicate() (gas: 363188)\n[PASS] test_lifecycleEventsForIndexer() (gas: 425609)\n[PASS] test_multipleGamesAreIsolated() (gas: 486428)\n[PASS] test_noRevealsEitherPlayerCanRefund() (gas: 602388)\n[PASS] test_openJoinAndWindowBeginsAtJoin() (gas: 268932)\n[PASS] test_rejectsInvalidRevealsAndDuplicate() (gas: 430207)\n[PASS] test_revealDeadlineBoundary() (gas: 315102)\n[PASS] test_unknownGamesRejectActions() (gas: 111975)\nSuite result: ok. 15 passed; 0 failed; 0 skipped; finished in 14.26ms (17.24ms CPU time)\n\nRan 4 test suites in 15.24ms (39.98ms CPU time): 28 tests passed, 0 failed, 0 skipped (28 total tests)\n","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"77ec3983254e4e30ec1a76109031d48e113e084b54eb8cb0a503b4018c0f409c","verifiedTreeHash":"90f2a35c85a596f3009c653311629b96c154f4d3","verifierVersion":"0.1.0+1308af71"}]}