{"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":"49ec6874-0ed4-4d0e-92c2-13f3a41f84d3","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"c4b99ca8587ebb0a67de88b2f2767aeb1ff0c9cc7c211ace66d677d592950d25","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":"2b9802dfb5e433e8d4ace0d105a710c355bbec385369415c71631653afea6ae8","dependsOn":[],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"0f3e7566c3ff8e87fc95936b79ba455be33eea683bb01a6834a4a4d43e58e1df","skillId":"build-contract-project","tools":[]},"key":"build_contract_project","kind":"code","role":"implement","skillHash":"0f3e7566c3ff8e87fc95936b79ba455be33eea683bb01a6834a4a4d43e58e1df","skillId":"build-contract-project","state":"accepted"},{"acceptedSubmissionHash":"6665a7f1a00a9a3ccde56db1359b855ea385254b25f1cff4721c7fb39c3ec5dd","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 DOCKET v0.1, the smallest possible onchain backend for a public forum where people shape job ideas for the IMD swarm before anyone submits them: a three-function Solidity contract that stores only counters and a one-vote-per-address record, and emits all text as events. It extends the accepted v0 at https://github.com/identity-md-launches/launch-195-build-docket-smallest-possible (reuse its contract, tests and README as the starting point; keep everything that is not changed here) by adding upvotes and by fixing the three review findings recorded on that job. A static site will be built against it in a separate assignment, so the ABI and events documented here are the interface. Deliver the finished contract, tests, review, deployment script and documentation within this assignment.\n\nCONTRACT\nDocket.sol, Solidity ^0.8.26, no imports, no constructor arguments, no admin, no pause, no upgradeability, no ETH handling, no selfdestruct. Three functions and three events:\n1. createIdea(string title, string body) returns (uint256 ideaId). Title 1–120 bytes, body 1–4000 bytes. Idea ids are global and sequential from 1. Emits IdeaCreated(uint256 indexed ideaId, address indexed author, string title, string body).\n2. comment(uint256 ideaId, string body) returns (uint256 commentId). Body 1–2000 bytes. Reverts if the idea does not exist. Comment ids are per-idea and sequential from 1. Emits CommentPosted(uint256 indexed ideaId, uint256 indexed commentId, address indexed author, string body).\n3. upvote(uint256 ideaId, uint256 commentId). commentId 0 targets the idea itself; otherwise it must be an existing comment on that idea (1..commentCount(ideaId)). Reverts if the idea or comment does not exist or if msg.sender already upvoted that target. One vote per address per target, recorded in a single mapping keyed by keccak256(abi.encode(ideaId, commentId, voter)); no downvotes, no retraction. Increments a per-target upvote counter. Emits Upvoted(uint256 indexed ideaId, uint256 indexed commentId, address indexed voter).\nStorage is limited to ideaCount, per-idea comment counters, per-target upvote counters and the has-voted mapping; text lives only in events. Custom errors (BadLength, UnknownIdea, UnknownComment, AlreadyUpvoted); no require strings. Views: ideaCount(), commentCount(ideaId), upvotes(ideaId, commentId), hasUpvoted(ideaId, commentId, voter). A 500-byte comment should cost under ~50k execution gas; a first upvote under ~50k execution gas. Length checks use bytes length. The same bytecode will be deployed unchanged on Ethereum mainnet (chainId 1) and Base (chainId 8453); nothing chain-specific may be hardcoded.\n\nTESTS\nFoundry suite covering all three functions, every revert path and every custom error; fuzz tests below, at and above every length bound; fuzz arbitrary callers, idea ids and comment ids; event emission checks for all three events with exact parameters; a property test that ideaCount, each commentCount and each upvote counter only ever increase by one per successful call and that a second upvote from the same address on the same target always reverts. Gas assertions must hold under Forge's default transaction isolation (assert on execution gas explicitly, or set the threshold for full-transaction cost), and the strict build (forge build --deny warnings) must pass; these correct the two findings from the v0 review. Produce a coverage report (100% on Docket.sol) and a gas snapshot for createIdea and comment at small, typical and maximum lengths.\n\nREVIEW\nRun an adversarial review of the implementation and tests using the solidity-security-review and pashov-skill references, focused on: length-limit enforcement and griefing via oversized strings or comment floods; id monotonicity and overflow bounds; event/storage consistency, meaning a frontend reconstructing state from events can never derive a state the contract does not have; absence of any privileged path. Fix all High and Medium findings with a regression test each; document accepted Lows with rationale.\n\nDEPLOYMENT\nProvide script/Deploy.s.sol driven by RPC URL and private key environment variables, usable unchanged for Ethereum mainnet and Base, printing the deployed address and the exact Etherscan/Basescan verification command. For testing within this assignment deploy to a local Anvil chain and, if the assignment's deploy option is enabled, to Sepolia (chainId 11155111); record every address, tx hash and block. Do not deploy to Ethereum mainnet or Base; the requester deploys there with this script.\n\nSCOPE\nNo funding or escrow, no signatures or meta-transactions, no aliases, no roles, no status, no editing or deleting, no moderation, no token, no frontend. Do not add features beyond those listed.\n\nREVIEW AND DELIVERY\nRun forge build, forge test, forge coverage and forge snapshot with zero failures and zero compiler warnings. Commit the Foundry project (foundry.toml, src/, test/, script/) and a README documenting every public function and event with parameters, the length limits, the custom errors, gas notes, deployment steps for mainnet and Base, and a section titled \"Reconstructing the board from events\" describing exactly how a frontend rebuilds ideas and comments from logs (including chunked log scanning from a deployment block). Provide, committed in the tree (the v0 delivery omitted them and was flagged for it): artifacts/coverage.txt, artifacts/gas.txt, artifacts/review.md (findings, severities, fixes, accepted lows), artifacts/deployments.txt (Anvil and, if enabled, Sepolia: address, tx hash, block; plus the exact mainnet and Base commands) and artifacts/abi.json. Record actual commands run and any limitations honestly. Public GitHub source is requested. No onchain launch and no token are part of this assignment.","parentJobId":null,"planHash":"801dd925e9f2fb2b9e859f11e7f0e3d973d638f1677664c3571a2e0808335efd","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"49ec6874-0ed4-4d0e-92c2-13f3a41f84d3","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-197-build-docket-v0-1-smallest"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"50956","feedbackHash":"69b48a6034acf3dd0328e9312bb7a0721005c3b92809baff88cab57ca5dbbbe2","nodeKey":"adversarial_review","submissionHash":"c4b99ca8587ebb0a67de88b2f2767aeb1ff0c9cc7c211ace66d677d592950d25","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"50904","feedbackHash":"38debd78cbdb50d4bec2ad8e2e9e853ba56300f90f0d9b299d2ad027ae9f4c7e","nodeKey":"build_contract_project","submissionHash":"2b9802dfb5e433e8d4ace0d105a710c355bbec385369415c71631653afea6ae8","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"50971","feedbackHash":"d4ba50ec154c120352bc859828f1b89fa3946489514f03782ddf83b4d396db17","nodeKey":"manifest","submissionHash":"6665a7f1a00a9a3ccde56db1359b855ea385254b25f1cff4721c7fb39c3ec5dd","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"bc65e1f2f5bdd54ba988ba8964fd78ca022cf84383dfa5f77425e3b53d0fa410","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":"8a5de47d20362b0c67bdee2ff7111b49ece59d1268e3fcd4067a18845db32ac1","device":"c4f696e22e7a36f7","findings":[],"hash":"2b9802dfb5e433e8d4ace0d105a710c355bbec385369415c71631653afea6ae8","nodeId":"969488a9-99aa-4cea-8aa0-d63ee367f7b3","outcome":"completed","summary":"Implemented DOCKET v0.1 with upvotes, tests, deployment script, ABI and all requested evidence artifacts.\n\n- 44 tests pass, including isolated execution and extended fuzzing.\n- `Docket.sol` coverage: 100%.\n- Strict build, formatting and snapshots pass.\n- Anvil deployment verified; execution gas targets met.\n- Review found no contract vulnerabilities.\n\nSee [README](README.md) and [review](artifacts/review.md).\n\nNo public-chain deployment occurred. Commit and GitHub publication remain pending because your rules prohibit modifying `.git/`.","treeHash":"580973307d0ef5bd9d69f9e1a2a875bde9b353f1","usage":{"cachedInputTokens":1917056,"inputTokens":103956,"model":"gpt-6-astra","outputTokens":27329,"runtime":"codex","turns":7,"wallClockMs":917725}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"c4f696e22e7a36f7","findings":[],"hash":"452cddfc06af105ba2d82b9c926256e9eaed121a796cd1bc257667d9263cc438","nodeId":"253dd3f1-9aad-45f7-b03d-87ecdfcee4b7","outcome":"failed","summary":"the task produced no changes; the agent's last message was: Blocked: the accepted tree contains only `Docket`, with no ERC-20 token. The required `evm_project` schema mandates a token, and your constraints prohibit inventing one or adding its implementation.\n\nPlease provide an accepted token implementation or revise the manifest requirement for a token-free project.\n\nVerification completed:\n- `forge build --deny warnings`: passed.\n- `forge test`: 44 passed, zero failures.\n\nNo tracked files changed; no misleading `launch.json` was created.","treeHash":null,"usage":{"cachedInputTokens":159616,"inputTokens":66027,"model":"gpt-6-astra","outputTokens":2123,"runtime":"codex","turns":4,"wallClockMs":81077}},{"artifacts":[],"attempt":2,"bundleHash":"ce16b303fea156676d980c496b79dd1ef391a7416bcda42c3dc389213a8d0374","device":"35c52a5b502e847c","findings":[],"hash":"6665a7f1a00a9a3ccde56db1359b855ea385254b25f1cff4721c7fb39c3ec5dd","nodeId":"253dd3f1-9aad-45f7-b03d-87ecdfcee4b7","outcome":"completed","summary":"Created [launch.json](/home/identitymd5/.identitymd/work/49ec6874-0ed4-4d0e-92c2-13f3a41f84d3/253dd3f1-9aad-45f7-b03d-87ecdfcee4b7/launch.json) as an **incomplete draft**. Only this file changed.\n\nValidation remains blocked: the accepted tree has no token implementation. `token: null` records that gap without falsely identifying `Docket` as ERC-20.\n\n- `forge build`: passed.\n- `forge test`: 44 passed.\n- Strict build: failed on an existing test lint warning.\n\nA conforming manifest requires an accepted token or a token-free schema.","treeHash":"e7417ad274ecaf80fb802eb46e974d12a02e1b01","usage":{"cachedInputTokens":268672,"inputTokens":24926,"model":"gpt-6-astra","outputTokens":3983,"runtime":"codex","turns":5,"wallClockMs":215748}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"bb0a3bf63233e5e5","findings":[{"description":"The submitted commit contains no artifacts directory, despite the README linking to coverage.txt, gas.txt, review.md, deployments.txt and abi.json and describing their contents. These are explicit deliverables, including the required correction of the v0 artifact omission. The frontend assignment cannot load the documented ABI, and reviewers cannot inspect the promised deployment transaction/block records or the findings and accepted-low rationales. The existing .gas-snapshot and prose measurements do not supply these missing deliverables.","line":77,"path":"README.md","reproduction":"At submitted HEAD fce1f50, run 'git ls-tree -r --name-only HEAD -- artifacts': it prints nothing. Independently check artifacts/coverage.txt, artifacts/gas.txt, artifacts/review.md, artifacts/deployments.txt and artifacts/abi.json with 'test -f PATH': each check exits 1. Expected: all five populated files are present and committed; actual: every required artifact is absent. Following README step 1 under Reconstructing the board from events therefore fails when opening artifacts/abi.json.","severity":"medium","title":"All five required delivery artifacts are missing from the submitted tree"},{"description":"The gas tests apply the optimized production execution budget during coverage, which disables optimization. With the provided Forge 1.8.3 toolchain and its default isolate=true, the unoptimized first idea and comment votes exceed that budget and panic at lines 63 and 71. The required coverage command exits unsuccessfully even though Docket.sol reaches 100% coverage. This is a validation defect: the optimized isolated gas tests pass, so this reproduction does not establish an over-budget production contract. The README's measurements were made with Forge 1.7.1; the failure here is specifically reproduced with the supplied 1.8.3 environment.","line":63,"path":"test/Docket.gas.t.sol","reproduction":"Using the unchanged project, Forge 1.8.3 (cae51ad458f6abb64852b7709eb784352429825d) and Solc 0.8.26, run `forge coverage --offline --report summary --exclude-tests`. Expected: zero failures and exit 0. Actual: 42 tests pass, testGasUpvoteIdeaFirst and testGasUpvoteCommentFirst fail with Panic(0x01), and the command exits 1. The shorter reproduction is `forge coverage --offline --report summary --exclude-tests --match-contract DocketGasTest --match-test 'testGasUpvote(Idea|Comment)First' -vvvv`. In the seeded fixtures, upvote(1,0) reports lastCallGas().gasTotalUsed=71429 against a 71332 budget, and upvote(1,1) reports 71481 against a 71344 budget. Both targets have zero previous votes.","severity":"low","title":"Coverage fails both first-upvote gas assertions under default transaction isolation"},{"description":"Reading block.chainid and subsequently calling vm.chainId in testSameRuntimeOnMainnetAndBase triggers Forge 1.8.3's environment-read-across-mutation lint. Consequently the explicitly required strict build fails in the supplied toolchain. Solidity compilation itself succeeds; the failure is the post-build lint gate, not a demonstrated runtime vulnerability. This limits the README's strict-build claim to its previously tested toolchain until the test is made compatible.","line":288,"path":"test/Docket.t.sol","reproduction":"With Forge 1.8.3 (cae51ad458f6abb64852b7709eb784352429825d), Solc 0.8.26 and the unchanged configuration, run `forge build --offline --force --deny warnings`. Expected: exit 0 with no warnings. Actual: exit 1, warning[environment-read-across-mutation] points to `uint256 previous = block.chainid` at test/Docket.t.sol:288 and `vm.chainId(1)` at line 289, followed by `Error: post-build lint step failed`.","severity":"low","title":"The required strict build fails on the chain-ID mutation test"}],"hash":"c4b99ca8587ebb0a67de88b2f2767aeb1ff0c9cc7c211ace66d677d592950d25","nodeId":"fbf9f3ea-f03f-45c5-983c-782e3e013ce0","outcome":"completed","summary":"Wrote [.imd-findings.json](/home/imd-worker/.identitymd/work/49ec6874-0ed4-4d0e-92c2-13f3a41f84d3/fbf9f3ea-f03f-45c5-983c-782e3e013ce0/.imd-findings.json):\n\n- **Medium:** Five required artifacts are missing.\n- **Low:** Coverage gas assertions fail with Forge 1.8.3.\n- **Low:** Strict build fails on a lint warning.\n\nNo contract-state or authorization exploit was substantiated. Existing project files remain unchanged.","treeHash":null,"usage":{"cachedInputTokens":822784,"inputTokens":77313,"model":"gpt-6-astra","outputTokens":7379,"runtime":"codex","turns":5,"wallClockMs":276995}}],"verification":[{"checks":[{"durationMs":691,"exitCode":0,"name":"build","output":"Compiling 8 files with Solc 0.8.26\nSolc 0.8.26 finished in 649.69ms\nCompiler run successful!\n","passed":true},{"durationMs":7097,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 11 tests for test/Docket.upvote.t.sol:DocketUpvoteTest\n[PASS] testFuzzArbitraryTargets(uint256,uint256,address) (runs: 256, μ: 28838, ~: 28787)\n[PASS] testFuzzDistinctVoters(address,address) (runs: 256, μ: 94249, ~: 94249)\n[PASS] testFuzzExactEventsAndTargetIndependence(address) (runs: 256, μ: 305654, ~: 305654)\n[PASS] testFuzzUnknownViews(uint256,uint256,address) (runs: 256, μ: 11494, ~: 11494)\n[PASS] testNoPayableVoteOrMalformedAbi() (gas: 23602)\n[PASS] testRejectedVotesAreAtomicAndCanSucceedAfterTargetCreation() (gas: 171848)\n[PASS] testSuccessfulCallsRollBackWhenOuterCallerReverts() (gas: 304468)\n[PASS] testUnknownTargetsAndErrorPrecedence() (gas: 482070)\n[PASS] testUpvoteOverflowRollsBackVoteRecordAndLogs() (gas: 116115)\n[PASS] testVoteOutOfGasRollsBackBothWrites() (gas: 215889)\n[PASS] testVoteRecordUsesSpecifiedSingleMappingKey() (gas: 57967)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 103.15ms (153.16ms CPU time)\n\nRan 2 tests for test/Deploy.t.sol:DeployTest\n[PASS] testDeployFromExplicitConfiguration() (gas: 1321103)\nLogs:\n  DOCKET deployed: 0xF2E246BB76DF876Cef8b38ae84130F4F55De395b\n  Chain ID: 31337\n  forge verify-contract --chain 31337 --verifier etherscan --verifier-url https://api.etherscan.io/v2/api --etherscan-api-key \"$ETHERSCAN_API_KEY\" --watch 0xF2E246BB76DF876Cef8b38ae84130F4F55De395b src/Docket.sol:Docket --compiler-version v0.8.26+commit.8a97fa7a --num-of-optimizations 200 --evm-version cancun\n\n[PASS] testVerificationCommandsUseExactAddressAndChain() (gas: 873535)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 322.98ms (1.16ms CPU time)\n\nRan 11 tests for test/Docket.gas.t.sol:DocketGasTest\n[PASS] testGasCommentMaximumExisting() (gas: 34767)\n[PASS] testGasCommentMaximumFirst() (gas: 51822)\n[PASS] testGasCommentSmallExisting() (gas: 18054)\n[PASS] testGasCommentSmallFirst() (gas: 35109)\n[PASS] testGasCommentTypicalExisting() (gas: 22058)\n[PASS] testGasCommentTypicalFirst() (gas: 39179)\n[PASS] testGasCreateMaximum() (gas: 67225)\n[PASS] testGasCreateSmall() (gas: 32976)\n[PASS] testGasCreateTypical() (gas: 37356)\n[PASS] testGasUpvoteCommentFirst() (gas: 58445)\n[PASS] testGasUpvoteIdeaFirst() (gas: 58381)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 322.99ms (20.72ms CPU time)\n\nRan 19 tests for test/Docket.t.sol:DocketTest\n[PASS] testCommentFloodPreservesOtherIdeasAndContinuedPosting() (gas: 1390763)\n[PASS] testCommentOverflowIsAtomicAndIsolated() (gas: 81069)\n[PASS] testExactEventsAndIndependentCommentSequences() (gas: 120114)\n[PASS] testFuzzArbitraryCommentTextAndCallers(string,address) (runs: 256, μ: 67238, ~: 67485)\n[PASS] testFuzzArbitraryIdeaIds(uint256,address) (runs: 256, μ: 47072, ~: 46645)\n[PASS] testFuzzArbitraryTextAndCallers(string,string,address) (runs: 256, μ: 39957, ~: 41742)\n[PASS] testFuzzCommentBodyBoundaries(uint256,address) (runs: 256, μ: 1851805, ~: 1807107)\n[PASS] testFuzzIdeaBodyBoundaries(uint256,address) (runs: 256, μ: 3057258, ~: 3019218)\n[PASS] testFuzzTitleBoundaries(uint256,address) (runs: 256, μ: 650501, ~: 621320)\n[PASS] testIdeaOverflowIsAtomic() (gas: 19897)\n[PASS] testInitialAndUnknownCounters() (gas: 16211)\n[PASS] testLengthsCountBytesAndPreserveNulAndInvalidUtf8() (gas: 91312)\n[PASS] testMalformedAbiRejectsWithoutStateOrLogs() (gas: 43860)\n[PASS] testNoPayableOrFallbackOrPrivilegedSelectors() (gas: 37158)\n[PASS] testOutOfGasDuringEventEncodingRollsBackCounters() (gas: 1082953)\n[PASS] testOversizedPayloadsRejectWithinBoundedExecutionGas() (gas: 9424654)\n[PASS] testRejectedCallsLeaveNoLogsOrState() (gas: 71935)\n[PASS] testSameRuntimeOnMainnetAndBase() (gas: 795966)\n[PASS] testUnknownIdeaBeforeAndAfterCreationAndErrorPrecedence() (gas: 57523)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 323.04ms (704.97ms CPU time)\n\nRan 1 test for test/Docket.invariant.t.sol:DocketInvariantTest\n[PASS] invariantCountersEqualReconstructedLogs() (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------+----------+-------+---------+----------╮\n| Contract      | Selector | Calls | Reverts | Discards |\n+=======================================================+\n| DocketHandler | create   | 1998  | 0       | 0        |\n|---------------+----------+-------+---------+----------|\n| DocketHandler | post     | 2063  | 0       | 0        |\n|---------------+----------+-------+---------+----------|\n| DocketHandler | reject   | 2056  | 0       | 0        |\n|---------------+----------+-------+---------+----------|\n| DocketHandler | vote     | 2075  | 0       | 0        |\n╰---------------+----------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 7.05s (7.05s CPU time)\n\nRan 5 test suites in 7.05s (8.12s CPU time): 44 tests passed, 0 failed, 0 skipped (44 total tests)\n","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"2b9802dfb5e433e8d4ace0d105a710c355bbec385369415c71631653afea6ae8","verifiedTreeHash":"580973307d0ef5bd9d69f9e1a2a875bde9b353f1","verifierVersion":"0.1.0+63782b0e"},{"checks":[{"durationMs":2078,"exitCode":0,"name":"build","output":"Compiling 8 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.97s\nCompiler run successful!\n","passed":true},{"durationMs":19266,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 2 tests for test/Deploy.t.sol:DeployTest\n[PASS] testDeployFromExplicitConfiguration() (gas: 1321103)\nLogs:\n  DOCKET deployed: 0xF2E246BB76DF876Cef8b38ae84130F4F55De395b\n  Chain ID: 31337\n  forge verify-contract --chain 31337 --verifier etherscan --verifier-url https://api.etherscan.io/v2/api --etherscan-api-key \"$ETHERSCAN_API_KEY\" --watch 0xF2E246BB76DF876Cef8b38ae84130F4F55De395b src/Docket.sol:Docket --compiler-version v0.8.26+commit.8a97fa7a --num-of-optimizations 200 --evm-version cancun\n\n[PASS] testVerificationCommandsUseExactAddressAndChain() (gas: 873535)\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 15.34ms (14.71ms CPU time)\n\nRan 11 tests for test/Docket.gas.t.sol:DocketGasTest\n[PASS] testGasCommentMaximumExisting() (gas: 34767)\n[PASS] testGasCommentMaximumFirst() (gas: 51822)\n[PASS] testGasCommentSmallExisting() (gas: 18054)\n[PASS] testGasCommentSmallFirst() (gas: 35109)\n[PASS] testGasCommentTypicalExisting() (gas: 22058)\n[PASS] testGasCommentTypicalFirst() (gas: 39179)\n[PASS] testGasCreateMaximum() (gas: 67225)\n[PASS] testGasCreateSmall() (gas: 32976)\n[PASS] testGasCreateTypical() (gas: 37356)\n[PASS] testGasUpvoteCommentFirst() (gas: 58445)\n[PASS] testGasUpvoteIdeaFirst() (gas: 58381)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 15.70ms (33.60ms CPU time)\n\nRan 11 tests for test/Docket.upvote.t.sol:DocketUpvoteTest\n[PASS] testFuzzArbitraryTargets(uint256,uint256,address) (runs: 256, μ: 28707, ~: 28787)\n[PASS] testFuzzDistinctVoters(address,address) (runs: 256, μ: 94249, ~: 94249)\n[PASS] testFuzzExactEventsAndTargetIndependence(address) (runs: 256, μ: 305654, ~: 305654)\n[PASS] testFuzzUnknownViews(uint256,uint256,address) (runs: 256, μ: 11494, ~: 11494)\n[PASS] testNoPayableVoteOrMalformedAbi() (gas: 23602)\n[PASS] testRejectedVotesAreAtomicAndCanSucceedAfterTargetCreation() (gas: 171848)\n[PASS] testSuccessfulCallsRollBackWhenOuterCallerReverts() (gas: 304468)\n[PASS] testUnknownTargetsAndErrorPrecedence() (gas: 482070)\n[PASS] testUpvoteOverflowRollsBackVoteRecordAndLogs() (gas: 116115)\n[PASS] testVoteOutOfGasRollsBackBothWrites() (gas: 215889)\n[PASS] testVoteRecordUsesSpecifiedSingleMappingKey() (gas: 57967)\nSuite result: ok. 11 passed; 0 failed; 0 skipped; finished in 238.00ms (375.68ms CPU time)\n\nRan 19 tests for test/Docket.t.sol:DocketTest\n[PASS] testCommentFloodPreservesOtherIdeasAndContinuedPosting() (gas: 1390763)\n[PASS] testCommentOverflowIsAtomicAndIsolated() (gas: 81069)\n[PASS] testExactEventsAndIndependentCommentSequences() (gas: 120114)\n[PASS] testFuzzArbitraryCommentTextAndCallers(string,address) (runs: 256, μ: 67051, ~: 67485)\n[PASS] testFuzzArbitraryIdeaIds(uint256,address) (runs: 256, μ: 47672, ~: 46645)\n[PASS] testFuzzArbitraryTextAndCallers(string,string,address) (runs: 256, μ: 39965, ~: 41742)\n[PASS] testFuzzCommentBodyBoundaries(uint256,address) (runs: 256, μ: 1823114, ~: 1816323)\n[PASS] testFuzzIdeaBodyBoundaries(uint256,address) (runs: 256, μ: 3023779, ~: 3021070)\n[PASS] testFuzzTitleBoundaries(uint256,address) (runs: 256, μ: 628072, ~: 624464)\n[PASS] testIdeaOverflowIsAtomic() (gas: 19897)\n[PASS] testInitialAndUnknownCounters() (gas: 16211)\n[PASS] testLengthsCountBytesAndPreserveNulAndInvalidUtf8() (gas: 91312)\n[PASS] testMalformedAbiRejectsWithoutStateOrLogs() (gas: 43860)\n[PASS] testNoPayableOrFallbackOrPrivilegedSelectors() (gas: 37158)\n[PASS] testOutOfGasDuringEventEncodingRollsBackCounters() (gas: 1082953)\n[PASS] testOversizedPayloadsRejectWithinBoundedExecutionGas() (gas: 9424654)\n[PASS] testRejectedCallsLeaveNoLogsOrState() (gas: 71935)\n[PASS] testSameRuntimeOnMainnetAndBase() (gas: 795966)\n[PASS] testUnknownIdeaBeforeAndAfterCreationAndErrorPrecedence() (gas: 57523)\nSuite result: ok. 19 passed; 0 failed; 0 skipped; finished in 850.41ms (1.99s CPU time)\n\nRan 1 test for test/Docket.invariant.t.sol:DocketInvariantTest\n[PASS] invariantCountersEqualReconstructedLogs() (runs: 128, calls: 8192, reverts: 0)\n\n╭---------------+----------+-------+---------+----------╮\n| Contract      | Selector | Calls | Reverts | Discards |\n+=======================================================+\n| DocketHandler | create   | 2029  | 0       | 0        |\n|---------------+----------+-------+---------+----------|\n| DocketHandler | post     | 2059  | 0       | 0        |\n|---------------+----------+-------+---------+----------|\n| DocketHandler | reject   | 2066  | 0       | 0        |\n|---------------+----------+-------+---------+----------|\n| DocketHandler | vote     | 2038  | 0       | 0        |\n╰---------------+----------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 19.08s (19.07s CPU time)\n\nRan 5 test suites in 19.10s (20.20s CPU time): 44 tests passed, 0 failed, 0 skipped (44 total tests)\n","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"6665a7f1a00a9a3ccde56db1359b855ea385254b25f1cff4721c7fb39c3ec5dd","verifiedTreeHash":"e7417ad274ecaf80fb802eb46e974d12a02e1b01","verifierVersion":"0.1.0+63782b0e"}]}