{"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":"bbb65b4b-635a-4b75-9e3e-497c88893313","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"b81eac4a345596dd925323e79fe307a39374fc04821e6358ae3e3604d5246400","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":"b3017e7a4c2e055cb4358841adf0a42d65bdcee0e0c00334cfc421b2190acad4","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":"8f1e89c5bb39ab9f37cab908ee5fef63a6fe0cc774c952eef9a8bf8c5a523b7e","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":"8ec6dfb49789f33e5a139462d60a579f44886ddf0a146882fc4c0e6d2ef5041a","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":"96a101b77973cf6be42b2add099d6121ac8282fe4001ac6cd99d04b1dcefb11f","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":"e2006eb5ef576f894c9c369de1c51b0329200b47d17288f3a2434e0253043dd3","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":"b8af4d3b4af336b36847618bcf1f68451ad1f9fbffaf403c85b10a14068a61e4","dependsOn":["build_contract_project"],"execution":{"network":false,"profile":"foundry","requires":[],"tools":[]},"key":"manifest","kind":"code","role":"integrate","skillHash":null,"skillId":null,"state":"accepted"},{"acceptedSubmissionHash":"e2979b6fbf60cab71c6b4e76b2d438eb207a853ee8dcac9b9aae8d755a2f6ade","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":"An onchain guestbook paid in the launch token ($token): signing costs 10 tokens which are burned to 0x000000000000000000000000000000000000dEaD, each entry stores the signer, a message of at most 280 bytes and the timestamp, and entries can be read by index. Include tests.","parentJobId":null,"planHash":"8a85e634ef4f8399953ffecf15ba3b2ec661f52b01b07cb9f195b6ddcc2d31c8","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"bbb65b4b-635a-4b75-9e3e-497c88893313","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-539-onchain-guestbook-paid-launch"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"51334","feedbackHash":"c44422b97e9056d367cffc7af4cf852bfcfbdf8bccdf779e5e3a918a94133ffc","nodeKey":"audit_economics","submissionHash":"b81eac4a345596dd925323e79fe307a39374fc04821e6358ae3e3604d5246400","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"50960","feedbackHash":"0eb0cb66cb74bbd1fe462bf8e7beb0b49cb626310ba33f55df148ba935fbe6eb","nodeKey":"audit_flow","submissionHash":"b3017e7a4c2e055cb4358841adf0a42d65bdcee0e0c00334cfc421b2190acad4","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51046","feedbackHash":"82de63554977812e2f9a59a644149eacb4cd7cce985174f171dd92341ec85b6a","nodeKey":"audit_judge","submissionHash":"8f1e89c5bb39ab9f37cab908ee5fef63a6fe0cc774c952eef9a8bf8c5a523b7e","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51430","feedbackHash":"1a4880be1998b1ef4cbcd68044705019431a696d0b6ab8c5e47530e80f179d54","nodeKey":"audit_math","submissionHash":"8ec6dfb49789f33e5a139462d60a579f44886ddf0a146882fc4c0e6d2ef5041a","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51340","feedbackHash":"12ea9c6120757e7783722cb3807ed78495d836627d8bdeaf80a86ce9589f9ac3","nodeKey":"audit_permissions","submissionHash":"96a101b77973cf6be42b2add099d6121ac8282fe4001ac6cd99d04b1dcefb11f","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"50975","feedbackHash":"d6bbecc9d319e1bbdc7f46ddbac3761c4304b46dd84d8d7aefb67817bdd129f8","nodeKey":"build_contract_project","submissionHash":"e2006eb5ef576f894c9c369de1c51b0329200b47d17288f3a2434e0253043dd3","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"50975","feedbackHash":"3ebb54d6547ae3e8276248f5f0e7005a95bff470c4517a31540a81e475629c52","nodeKey":"manifest","submissionHash":"b8af4d3b4af336b36847618bcf1f68451ad1f9fbffaf403c85b10a14068a61e4","tag1":"verification:checks","tag2":"acceptance-v2","value":1},{"agentId":"50957","feedbackHash":"63882c27740156897959f466715fbd1e789271ba0d063526fa55e79b672fe333","nodeKey":"write_foundry_tests","submissionHash":"e2979b6fbf60cab71c6b4e76b2d438eb207a853ee8dcac9b9aae8d755a2f6ade","tag1":"verification:checks","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"5999da379d9168813ce0b92cae8bda21b76c4906e37554ee58ea0cce2d024a3b","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"2a5d68f89de314cb","findings":[],"hash":"8ec6dfb49789f33e5a139462d60a579f44886ddf0a146882fc4c0e6d2ef5041a","nodeId":"14a93e07-0342-45c5-8132-99c0e4e322b9","outcome":"completed","summary":"The review is complete. No defects were found in the Math Precision, Boundary or Numerical Gap areas, and the findings file records an empty list with full coverage of all four entry points.\n\n**What I checked in the guestbook's `sign` path**\n\n- **Math.** The ten-token cost is a constant scaled to 18 decimals, and the constructor refuses any token whose `decimals()` is not 18, so there is no scale mismatch. The only arithmetic is the checked addition in the burn-delta check. I confirmed it cannot overflow by pre-sending the whole supply to the burn address and signing once more. There are no divisions, casts or unchecked blocks.\n- **Boundaries.** The 280-byte limit is inclusive, matching the brief. Existing tests cover 280, 281 and a 284-byte multi-byte string, plus a fuzz on both sides. Empty messages are allowed and charged. Index assignment and the out-of-range read revert are correct, including at the maximum index. Timestamps at zero and at the 64-bit maximum round-trip as stored.\n- **External-call corners.** The token address is immutable and checked for code and decimals at construction. A contract with code but no `decimals()` fails deployment loudly. SafeERC20 plus the exact balance-delta check rejects fee-on-transfer, false-return, silent no-op and reverting tokens, as the adversarial suite demonstrates. The burn address signing for itself is correctly rejected because a self-transfer produces no delta.\n- **Static analysis leads.** The Slither and Aderyn reentrancy lines point at state writes after the token call. The reentrancy guard covers them and the launch token has no hooks, so I did not promote them.\n\n**Token and dependencies.** The vendored OpenZeppelin v5.0.2 ERC20, SafeERC20 and ReentrancyGuard sources are unmodified. The fixed supply fits comfortably in uint256, infinite allowances keep standard semantics, and the project test suite passes with 37 tests including the stateful invariant run.\n\nThe scratch tests I wrote to confirm these edges have been removed, and the tree contains only the findings file.","treeHash":null,"usage":{"cachedInputTokens":518914,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":10849,"runtime":"claude","turns":27,"wallClockMs":204827}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"02ae6543274731ab","findings":[],"hash":"8f1e89c5bb39ab9f37cab908ee5fef63a6fe0cc774c952eef9a8bf8c5a523b7e","nodeId":"c34864d6-01b3-4ea9-8eb3-edf87a09e034","outcome":"completed","summary":"Wrote [.imd-findings.json](/home/imd-worker/.identitymd/work/bbb65b4b-635a-4b75-9e3e-497c88893313/c34864d6-01b3-4ea9-8eb3-edf87a09e034/.imd-findings.json) with no substantiated defects and coverage of all four entry points.\n\n51 project tests and 8 protected checks passed offline. Source and configuration files remain unchanged.","treeHash":null,"usage":{"cachedInputTokens":1063296,"inputTokens":100565,"model":"gpt-6-astra","outputTokens":8857,"runtime":"codex","turns":5,"wallClockMs":325707}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"3b260b68e9ad6a37","findings":[],"hash":"96a101b77973cf6be42b2add099d6121ac8282fe4001ac6cd99d04b1dcefb11f","nodeId":"7500eb56-37a8-4502-b5f0-3be5f1b274aa","outcome":"completed","summary":"The review is complete. No defects were found in the Access Control, Trust Gap, or Asymmetry areas, and the findings file records a clean result with full coverage.\n\n**Outcome.** The findings file at the repository root holds an empty findings list and nine coverage rows. All four listed entry points are marked `holds`, plus rows for the constructor, two invariants, and the two static-analysis leads. No source or test files were changed. The scratch probe directory was deleted after its tests passed.\n\n**What I checked, by guide.**\n\n- **Access Control.** The guestbook has no owner, initializer, setter, sweep, pause, or upgrade path. The only state-writing function is `sign`, which is permissionless by design. It pulls from `msg.sender` only, so no caller can spend another account's approval, including an infinite one. The constructor reads code size and decimals and grants nothing. The token is unmodified OpenZeppelin v5.0.2 with a fixed supply.\n- **Asymmetry.** The stored entry, the emitted event, and the returned index carry identical values. The long-message revert path leaves no partial state. The exact-delta burn check reads the same slot before and after and cannot be perturbed by a third party under the real token, because plain ERC-20 transfers have no hooks.\n- **Trust Gap.** There is no privileged actor to combine with economics or asymmetry. Payment flows directly from signer to the dead address and the contract never holds custody.\n\n**Static-analysis leads.** The reentrancy lines are not defects: the real token has no callbacks, the `nonReentrant` guard rejects re-entry with a hooking token, and no second state-writing function exists for cross-function re-entry. The unchecked ETH send line is a false positive, since `sign` is non-payable and sends no ETH.\n\n**Verification run.** The existing suite of 37 tests passed, including the fuzz and invariant suites. Three scratch probes confirmed infinite-approval isolation, exact-delta behaviour across repeated donations to the dead address, and zero contract custody. All passed before I removed them.\n\n**Not reached.** Nothing within the assigned area was left unchecked. Math, oracle, and upgradeability guides do not apply to this code and were not run as separate passes.","treeHash":null,"usage":{"cachedInputTokens":416719,"inputTokens":194,"model":"claude-fable-5-1","outputTokens":10086,"runtime":"claude","turns":24,"wallClockMs":170960}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"e4a4ecf9fefd4a46","findings":[],"hash":"b3017e7a4c2e055cb4358841adf0a42d65bdcee0e0c00334cfc421b2190acad4","nodeId":"f0721428-0779-48a6-9da3-ff765adbd24e","outcome":"completed","summary":"Saved [review results](/home/seat/.identitymd/work/bbb65b4b-635a-4b75-9e3e-497c88893313/f0721428-0779-48a6-9da3-ff765adbd24e/.imd-findings.json): no substantiated defects; all four entry points covered.\n\nPassed 37 project tests and eight protected checks using local deployment inputs, including 4,096 invariant calls. Source and configuration files remain unchanged.","treeHash":null,"usage":{"cachedInputTokens":589056,"inputTokens":83906,"model":"gpt-6-astra","outputTokens":6931,"runtime":"codex","turns":5,"wallClockMs":234549}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"433c37ef2c9c708d","findings":[],"hash":"b81eac4a345596dd925323e79fe307a39374fc04821e6358ae3e3604d5246400","nodeId":"406e18bb-b411-4b7e-bef1-c9de29c43a31","outcome":"completed","summary":"The review is complete. The findings file is written and the scratch tests are removed.\n\n**Result: no substantiated defects** in the Economic Security, Invariant or Flow Gap areas. `.imd-findings.json` holds an empty findings list and a 12-row coverage record covering all four entry points plus the invariants and static-analysis leads I checked.\n\n**What I verified against the guides**\n\n- **Payment flow in `sign`.** The length check, the before/after balance read around `safeTransferFrom`, the exact-receipt check, and the reentrancy guard mean no path appends an unpaid entry or charges anyone other than the caller. A relayer cannot spend an approver's allowance.\n- **Conservation.** Across the existing stateful invariant and a 500-entry scratch run, the dead-address balance equals entries times ten tokens, the guestbook never holds tokens, and total supply stays fixed.\n- **Griefing.** A third party transferring to the dead address in the same block does not break the exact-receipt check, since both balance reads happen inside one call with no token hook between them. Per-sign gas is flat as the book grows.\n- **Static-analysis leads.** The Slither and Aderyn reentrancy lines are not reproducible as harm: the launch token has no hooks, the guard covers the only state-changing function, and the existing adversarial mock tests already show reentry cannot append an entry. The \"ETH sent without address check\" line is a false positive, since the contract has no payable path at all.\n- **Deployment.** The constructor is nonpayable, ignores `msg.sender`, moves no supply, and dependencies are vendored as plain files with no submodule.\n\n**Documented design points, not defects.** Burning is a transfer to the dead address so total supply does not fall, and tokens sent directly to the guestbook are unrecoverable. Both are stated in the README and match the brief's wording.\n\nEverything in my area was reached within budget. Nothing is left for a follow-up pass.","treeHash":null,"usage":{"cachedInputTokens":529247,"inputTokens":226,"model":"claude-fable-5-1","outputTokens":13685,"runtime":"claude","turns":23,"wallClockMs":241611}},{"artifacts":[],"attempt":1,"bundleHash":"4793cd706b56de01bd3231b6d978e6fed30862b96a44a1eee199abf912b6058f","device":"377843575071cdb1","findings":[],"hash":"b8af4d3b4af336b36847618bcf1f68451ad1f9fbffaf403c85b10a14068a61e4","nodeId":"87a35e02-9f5f-4218-a083-09f9459d687f","outcome":"completed","summary":"Created [launch.json](/home/worker/.identitymd/work/bbb65b4b-635a-4b75-9e3e-497c88893313/87a35e02-9f5f-4218-a083-09f9459d687f/launch.json) matching `LaunchToken`, `Guestbook($token)`, and the native-ETH pool settings.\n\nSchema and constructor ABI checks passed. `forge build` succeeded; all 45 tests passed, including protected checks.\n\nOnly `launch.json` is changed for submission.","treeHash":"290a0f6c906b53b0513b37cb77fb42794555103f","usage":{"cachedInputTokens":168576,"inputTokens":49866,"model":"gpt-6-astra","outputTokens":4085,"runtime":"codex","turns":4,"wallClockMs":146075}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"720122d0ca9f60ca","findings":[],"hash":"df612f1fb80b5d9a9cafc8625c9379a72239c5025ec01cdf48cbdc2b068e27bb","nodeId":"73f755d9-6436-43f9-b651-cd212eb8c22f","outcome":"failed","summary":"Your access token could not be refreshed because your refresh token was already used. Please log out and sign in again.","treeHash":null,"usage":{"cachedInputTokens":0,"inputTokens":0,"model":"gpt-6-astra","outputTokens":0,"runtime":"codex","turns":0,"wallClockMs":10318}},{"artifacts":[],"attempt":2,"bundleHash":"a3cf9764b2e1b98af88bf97d1f221a20ec5f6fc73cf40d543f01c5cc9ca2998b","device":"377843575071cdb1","findings":[],"hash":"e2006eb5ef576f894c9c369de1c51b0329200b47d17288f3a2434e0253043dd3","nodeId":"73f755d9-6436-43f9-b651-cd212eb8c22f","outcome":"completed","summary":"Implemented the launch token and guestbook: signing burns 10 tokens to the dead address and stores the signer, message (maximum 280 bytes), and timestamp, readable by index.\n\nValidation passed:\n\n- `forge build`\n- `forge test`: 37 tests passed, including failure, fuzz, and invariant tests\n- `forge fmt --check`\n\nDependencies are vendored. Deployment parameters, assumptions, and operational responsibilities are documented in `README.md`.","treeHash":"d3796462ab6537d0d35640f7ad9bbc253e751d72","usage":{"cachedInputTokens":359296,"inputTokens":54645,"model":"gpt-6-astra","outputTokens":16297,"runtime":"codex","turns":5,"wallClockMs":540328}},{"artifacts":[],"attempt":1,"bundleHash":"f8a9330d79cb67f1d3b3a687738b573e180b41708e821a426b533435dbdacafe","device":"0256823ae36e7900","findings":[],"hash":"e2979b6fbf60cab71c6b4e76b2d438eb207a853ee8dcac9b9aae8d755a2f6ade","nodeId":"24c86ef8-6eec-4135-9771-065ca71b9764","outcome":"completed","summary":"Added boundary, failure-path, rollback, fuzz, and stateful invariant tests under `test/`.\n\n`forge build` and `forge test` pass: **51 passed, 0 failed**, including 16,384 randomized invariant calls.\n\nOnly `test/` changed. No implementation defects found.","treeHash":"a5d12fe68fd0405c5104349012663aea4f455477","usage":{"cachedInputTokens":894080,"inputTokens":68042,"model":"gpt-6-astra","outputTokens":7230,"runtime":"codex","turns":5,"wallClockMs":422174}}],"verification":[{"checks":[{"durationMs":1676,"exitCode":0,"name":"build","output":"Compiling 36 files with Solc 0.8.26\nSolc 0.8.26 finished in 1.58s\nCompiler run successful!\n","passed":true},{"durationMs":1581,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 9 tests for test/LaunchToken.t.sol:LaunchTokenTest\n[PASS] testFuzz_transferMovesExactAmount(uint256) (runs: 256, μ: 89710, ~: 89946)\nLogs:\n  Bound result 2591\n\n[PASS] test_approvedTransferConsumesAllowance() (gas: 202652)\n[PASS] test_infiniteAllowanceHasStandardERC20Semantics() (gas: 126038)\n[PASS] test_noAdministrativeEntryPointsForDeployerOrStranger() (gas: 500336)\n[PASS] test_selfTransferPreservesBalance() (gas: 38129)\n[PASS] test_supplyAndMetadata() (gas: 64101)\n[PASS] test_transferCannotExceedBalance() (gas: 40351)\n[PASS] test_transferFromRequiresAllowance() (gas: 40778)\n[PASS] test_transferToZeroReverts() (gas: 37258)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 3.39ms (5.15ms CPU time)\n\nRan 1 test for test/Deployment.t.sol:DeploymentTest\n[PASS] test_factoryStyleDeploymentPreservesSupplyAndConfiguresBook() (gas: 4136849)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 5.40ms (5.20ms CPU time)\n\nRan 8 tests for test/GuestbookAdversarial.t.sol:GuestbookAdversarialTest\n[PASS] test_bubbledReentryRollsBackPaymentAndDoesNotLockBook() (gas: 391720)\n[PASS] test_caughtReentryCannotAppendAnUnpaidEntry() (gas: 310816)\n[PASS] test_constructorRejectsWrongDecimals() (gas: 895804)\n[PASS] test_falseReturnRevertsEvenAfterTokenMovedFunds() (gas: 391275)\n[PASS] test_feeOnTransferRevertsAndRestoresAllBalances() (gas: 426780)\n[PASS] test_revertingPaymentIsAtomic() (gas: 390649)\n[PASS] test_safeTransferAcceptsEmptyReturnDataWithExactPayment() (gas: 244349)\n[PASS] test_successWithoutMovementIsRejectedEvenWithExistingBurns() (gas: 187416)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 6.65ms (2.53ms CPU time)\n\nRan 18 tests for test/Guestbook.t.sol:GuestbookTest\n[PASS] testFuzz_messageBytesAndTimestampRoundTrip(bytes,uint64) (runs: 256, μ: 284194, ~: 274873)\n[PASS] test_281BytesRevertsWithoutChangingPriorEntryOrPayment() (gas: 310239)\n[PASS] test_callerCannotSpendAnotherSignersApproval() (gas: 161781)\n[PASS] test_constructorRejectsZeroAddressAndEOA() (gas: 3916)\n[PASS] test_contractSignerIsRecordedAsCaller() (gas: 476357)\n[PASS] test_donationsDoNotCreateEntriesOrDiscountPayment() (gas: 352150)\n[PASS] test_emptyMessageIsAllowedAndCharged() (gas: 218497)\n[PASS] test_exactBalanceCanSignOnceOnly() (gas: 320726)\n[PASS] test_exactly280BytesAllowed() (gas: 285503)\n[PASS] test_initialConfiguration() (gas: 45260)\n[PASS] test_insufficientAllowanceReverts() (gas: 151030)\n[PASS] test_insufficientBalanceRevertsAndRestoresAllowance() (gas: 179176)\n[PASS] test_missingApprovalRevertsAndCanBeRetried() (gas: 297483)\n[PASS] test_multibyteTextIsLimitedByBytes() (gas: 574454)\n[PASS] test_multipleSignersAndDuplicateMessagesHaveStableIndexes() (gas: 604882)\n[PASS] test_nonexistentIndexesRevert() (gas: 244502)\n[PASS] test_signBurnsExactlyTenAndStoresEntryAndEvent() (gas: 299962)\n[PASS] test_signRejectsNativeCurrency() (gas: 130149)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 8.96ms (14.87ms CPU time)\n\nRan 1 test for test/GuestbookInvariant.t.sol:GuestbookInvariantTest\n[PASS]\nGuestbookInvariantTest invariants:\n[PASS] invariant_allHistoricalEntriesRemainIntact\n[PASS] invariant_everyEntryIsPaidAndTokensAreConserved\n GuestbookInvariantTest invariants (runs: 128, calls: 4096, reverts: 0)\n\n╭------------------+----------+-------+---------+----------╮\n| Contract         | Selector | Calls | Reverts | Discards |\n+==========================================================+\n| GuestbookHandler | sign     | 4096  | 0       | 0        |\n╰------------------+----------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.49s (1.49s CPU time)\n\nRan 5 test suites in 1.50s (1.52s CPU time): 37 tests passed, 0 failed, 0 skipped (37 total tests)\n","passed":true},{"durationMs":39,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"Guestbook.sign(string)\",\"LaunchToken.approve(address,uint256)\",\"LaunchToken.transfer(address,uint256)\",\"LaunchToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":23,\"README.md\":118,\"foundry.toml\":20,\"launch.json\":22,\"remappings.txt\":2,\"src/Guestbook.sol\":66,\"src/LaunchToken.sol\":12,\"test/Deployment.t.sol\":49,\"test/Guestbook.t.sol\":283,\"test/GuestbookAdversarial.t.sol\":117,\"test/GuestbookInvariant.t.sol\":87,\"test/LaunchToken.t.sol\":105,\"test/mocks/PaymentToken.sol\":69},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"b8af4d3b4af336b36847618bcf1f68451ad1f9fbffaf403c85b10a14068a61e4","verifiedTreeHash":"290a0f6c906b53b0513b37cb77fb42794555103f","verifierVersion":"0.1.0+9f8ef295"},{"checks":[{"durationMs":3221,"exitCode":0,"name":"build","output":"Compiling 36 files with Solc 0.8.26\nSolc 0.8.26 finished in 3.01s\nCompiler run successful!\n","passed":true},{"durationMs":2901,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 9 tests for test/LaunchToken.t.sol:LaunchTokenTest\n[PASS] testFuzz_transferMovesExactAmount(uint256) (runs: 256, μ: 89427, ~: 89934)\nLogs:\n  Bound result 566\n\n[PASS] test_approvedTransferConsumesAllowance() (gas: 202652)\n[PASS] test_infiniteAllowanceHasStandardERC20Semantics() (gas: 126038)\n[PASS] test_noAdministrativeEntryPointsForDeployerOrStranger() (gas: 500336)\n[PASS] test_selfTransferPreservesBalance() (gas: 38129)\n[PASS] test_supplyAndMetadata() (gas: 64101)\n[PASS] test_transferCannotExceedBalance() (gas: 40351)\n[PASS] test_transferFromRequiresAllowance() (gas: 40778)\n[PASS] test_transferToZeroReverts() (gas: 37258)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 10.24ms (9.65ms CPU time)\n\nRan 1 test for test/Deployment.t.sol:DeploymentTest\n[PASS] test_factoryStyleDeploymentPreservesSupplyAndConfiguresBook() (gas: 4136849)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 9.09ms (8.89ms CPU time)\n\nRan 8 tests for test/GuestbookAdversarial.t.sol:GuestbookAdversarialTest\n[PASS] test_bubbledReentryRollsBackPaymentAndDoesNotLockBook() (gas: 391720)\n[PASS] test_caughtReentryCannotAppendAnUnpaidEntry() (gas: 310816)\n[PASS] test_constructorRejectsWrongDecimals() (gas: 895804)\n[PASS] test_falseReturnRevertsEvenAfterTokenMovedFunds() (gas: 391275)\n[PASS] test_feeOnTransferRevertsAndRestoresAllBalances() (gas: 426780)\n[PASS] test_revertingPaymentIsAtomic() (gas: 390649)\n[PASS] test_safeTransferAcceptsEmptyReturnDataWithExactPayment() (gas: 244349)\n[PASS] test_successWithoutMovementIsRejectedEvenWithExistingBurns() (gas: 187416)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 14.21ms (4.51ms CPU time)\n\nRan 18 tests for test/Guestbook.t.sol:GuestbookTest\n[PASS] testFuzz_messageBytesAndTimestampRoundTrip(bytes,uint64) (runs: 256, μ: 282388, ~: 274873)\n[PASS] test_281BytesRevertsWithoutChangingPriorEntryOrPayment() (gas: 310239)\n[PASS] test_callerCannotSpendAnotherSignersApproval() (gas: 161781)\n[PASS] test_constructorRejectsZeroAddressAndEOA() (gas: 3916)\n[PASS] test_contractSignerIsRecordedAsCaller() (gas: 476357)\n[PASS] test_donationsDoNotCreateEntriesOrDiscountPayment() (gas: 352150)\n[PASS] test_emptyMessageIsAllowedAndCharged() (gas: 218497)\n[PASS] test_exactBalanceCanSignOnceOnly() (gas: 320726)\n[PASS] test_exactly280BytesAllowed() (gas: 285503)\n[PASS] test_initialConfiguration() (gas: 45260)\n[PASS] test_insufficientAllowanceReverts() (gas: 151030)\n[PASS] test_insufficientBalanceRevertsAndRestoresAllowance() (gas: 179176)\n[PASS] test_missingApprovalRevertsAndCanBeRetried() (gas: 297483)\n[PASS] test_multibyteTextIsLimitedByBytes() (gas: 574454)\n[PASS] test_multipleSignersAndDuplicateMessagesHaveStableIndexes() (gas: 604882)\n[PASS] test_nonexistentIndexesRevert() (gas: 244502)\n[PASS] test_signBurnsExactlyTenAndStoresEntryAndEvent() (gas: 299962)\n[PASS] test_signRejectsNativeCurrency() (gas: 130149)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 15.06ms (16.54ms CPU time)\n\nRan 1 test for test/GuestbookInvariant.t.sol:GuestbookInvariantTest\n[PASS]\nGuestbookInvariantTest invariants:\n[PASS] invariant_allHistoricalEntriesRemainIntact\n[PASS] invariant_everyEntryIsPaidAndTokensAreConserved\n GuestbookInvariantTest invariants (runs: 128, calls: 4096, reverts: 0)\n\n╭------------------+----------+-------+---------+----------╮\n| Contract         | Selector | Calls | Reverts | Discards |\n+==========================================================+\n| GuestbookHandler | sign     | 4096  | 0       | 0        |\n╰------------------+----------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 2.73s (2.73s CPU time)\n\nRan 5 test suites in 2.74s (2.78s CPU time): 37 tests passed, 0 failed, 0 skipped (37 total tests)\n","passed":true},{"durationMs":107,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"Guestbook.sign(string)\",\"LaunchToken.approve(address,uint256)\",\"LaunchToken.transfer(address,uint256)\",\"LaunchToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":23,\"README.md\":118,\"foundry.toml\":20,\"remappings.txt\":2,\"src/Guestbook.sol\":66,\"src/LaunchToken.sol\":12,\"test/Deployment.t.sol\":49,\"test/Guestbook.t.sol\":283,\"test/GuestbookAdversarial.t.sol\":117,\"test/GuestbookInvariant.t.sol\":87,\"test/LaunchToken.t.sol\":105,\"test/mocks/PaymentToken.sol\":69},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true},{"durationMs":1908,"exitCode":0,"name":"slither","output":"[high/medium] reentrancy-balance at src/Guestbook.sol:48: Reentrancy in Guestbook.sign(string) (src/Guestbook.sol#48-61):\n[low/medium] reentrancy-benign at src/Guestbook.sol:48: Reentrancy in Guestbook.sign(string) (src/Guestbook.sol#48-61):","passed":true},{"durationMs":899,"exitCode":0,"name":"aderyn","output":"[high] eth-send-unchecked-address at src/Guestbook.sol:48: ETH transferred without address checks\n[high] reentrancy-state-change at src/Guestbook.sol:39: Reentrancy: State change after external call (3 places)\n[low] large-numeric-literal at src/LaunchToken.sol:10: Large Numeric Literal","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"e2006eb5ef576f894c9c369de1c51b0329200b47d17288f3a2434e0253043dd3","verifiedTreeHash":"d3796462ab6537d0d35640f7ad9bbc253e751d72","verifierVersion":"0.1.0+9f8ef295"},{"checks":[{"durationMs":3440,"exitCode":0,"name":"build","output":"Compiling 39 files with Solc 0.8.26\nSolc 0.8.26 finished in 3.28s\nCompiler run successful!\n","passed":true},{"durationMs":6287,"exitCode":0,"name":"test","output":"No files changed, compilation skipped\n\nRan 1 test for test/Deployment.t.sol:DeploymentTest\n[PASS] test_factoryStyleDeploymentPreservesSupplyAndConfiguresBook() (gas: 4136849)\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 7.54ms (7.26ms CPU time)\n\nRan 8 tests for test/GuestbookAdversarial.t.sol:GuestbookAdversarialTest\n[PASS] test_bubbledReentryRollsBackPaymentAndDoesNotLockBook() (gas: 391720)\n[PASS] test_caughtReentryCannotAppendAnUnpaidEntry() (gas: 310816)\n[PASS] test_constructorRejectsWrongDecimals() (gas: 895804)\n[PASS] test_falseReturnRevertsEvenAfterTokenMovedFunds() (gas: 391275)\n[PASS] test_feeOnTransferRevertsAndRestoresAllBalances() (gas: 426780)\n[PASS] test_revertingPaymentIsAtomic() (gas: 390649)\n[PASS] test_safeTransferAcceptsEmptyReturnDataWithExactPayment() (gas: 244349)\n[PASS] test_successWithoutMovementIsRejectedEvenWithExistingBurns() (gas: 187416)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 99.59ms (7.83ms CPU time)\n\nRan 18 tests for test/Guestbook.t.sol:GuestbookTest\n[PASS] testFuzz_messageBytesAndTimestampRoundTrip(bytes,uint64) (runs: 256, μ: 281992, ~: 274873)\n[PASS] test_281BytesRevertsWithoutChangingPriorEntryOrPayment() (gas: 310239)\n[PASS] test_callerCannotSpendAnotherSignersApproval() (gas: 161781)\n[PASS] test_constructorRejectsZeroAddressAndEOA() (gas: 3916)\n[PASS] test_contractSignerIsRecordedAsCaller() (gas: 476357)\n[PASS] test_donationsDoNotCreateEntriesOrDiscountPayment() (gas: 352150)\n[PASS] test_emptyMessageIsAllowedAndCharged() (gas: 218497)\n[PASS] test_exactBalanceCanSignOnceOnly() (gas: 320726)\n[PASS] test_exactly280BytesAllowed() (gas: 285503)\n[PASS] test_initialConfiguration() (gas: 45260)\n[PASS] test_insufficientAllowanceReverts() (gas: 151030)\n[PASS] test_insufficientBalanceRevertsAndRestoresAllowance() (gas: 179176)\n[PASS] test_missingApprovalRevertsAndCanBeRetried() (gas: 297483)\n[PASS] test_multibyteTextIsLimitedByBytes() (gas: 574454)\n[PASS] test_multipleSignersAndDuplicateMessagesHaveStableIndexes() (gas: 604882)\n[PASS] test_nonexistentIndexesRevert() (gas: 244502)\n[PASS] test_signBurnsExactlyTenAndStoresEntryAndEvent() (gas: 299962)\n[PASS] test_signRejectsNativeCurrency() (gas: 130149)\nSuite result: ok. 18 passed; 0 failed; 0 skipped; finished in 99.68ms (82.58ms CPU time)\n\nRan 8 tests for test/LaunchTokenBoundary.t.sol:LaunchTokenBoundaryTest\n[PASS] testFuzz_approvalReplacementAndRevocation(uint256,uint256) (runs: 1000, μ: 238710, ~: 238754)\n[PASS] testFuzz_failedDelegatedPaymentRestoresFiniteAllowance(uint256,uint256) (runs: 1000, μ: 195501, ~: 196147)\nLogs:\n  Bound result 2000000000000000000\n  Bound result 115792089237316195423570985008687907853269984665640564039455584007913129644030\n\n[PASS] testFuzz_spenderCannotExceedFiniteApproval(uint256) (runs: 1000, μ: 170387, ~: 170444)\nLogs:\n  Bound result 200221741193\n\n[PASS] test_approvalCannotBeBorrowedByAnotherSpender() (gas: 171775)\n[PASS] test_fullSupplyCanMakeADelegatedRoundTrip() (gas: 210254)\n[PASS] test_invalidDelegatedRecipientRestoresAllowanceAndBalance() (gas: 244516)\n[PASS] test_maximumTransferRevertsWithoutArithmeticPanic() (gas: 61208)\n[PASS] test_zeroTransfersNeedNeitherBalanceNorAllowance() (gas: 118356)\nSuite result: ok. 8 passed; 0 failed; 0 skipped; finished in 101.89ms (298.02ms CPU time)\n\nRan 9 tests for test/LaunchToken.t.sol:LaunchTokenTest\n[PASS] testFuzz_transferMovesExactAmount(uint256) (runs: 256, μ: 89858, ~: 89916)\nLogs:\n  Bound result 24301\n\n[PASS] test_approvedTransferConsumesAllowance() (gas: 202652)\n[PASS] test_infiniteAllowanceHasStandardERC20Semantics() (gas: 126038)\n[PASS] test_noAdministrativeEntryPointsForDeployerOrStranger() (gas: 500336)\n[PASS] test_selfTransferPreservesBalance() (gas: 38129)\n[PASS] test_supplyAndMetadata() (gas: 64101)\n[PASS] test_transferCannotExceedBalance() (gas: 40351)\n[PASS] test_transferFromRequiresAllowance() (gas: 40778)\n[PASS] test_transferToZeroReverts() (gas: 37258)\nSuite result: ok. 9 passed; 0 failed; 0 skipped; finished in 103.25ms (47.68ms CPU time)\n\nRan 4 tests for test/GuestbookBoundary.t.sol:GuestbookBoundaryTest\n[PASS] testFuzz_readsRespectThePopulatedIndexRange(uint8,uint256,bytes32) (runs: 1000, μ: 831746, ~: 670170)\nLogs:\n  Bound result 5\n  Bound result 35458796278697409989681700937663428033967208063681893528193774606\n\n[PASS] test_failedBatchRollsBackItsEarlierSignatureAndPayment() (gas: 1162083)\n[PASS] test_revokingApprovalAfterSigningPreservesHistoryAndAllowsRetry() (gas: 612812)\n[PASS] test_storageLengthBoundariesRemainIndependentAfterLaterAppends() (gas: 2643081)\nSuite result: ok. 4 passed; 0 failed; 0 skipped; finished in 103.43ms (110.19ms CPU time)\n\nRan 1 test for test/GuestbookInvariant.t.sol:GuestbookInvariantTest\n[PASS]\nGuestbookInvariantTest invariants:\n[PASS] invariant_allHistoricalEntriesRemainIntact\n[PASS] invariant_everyEntryIsPaidAndTokensAreConserved\n GuestbookInvariantTest invariants (runs: 128, calls: 4096, reverts: 0)\n\n╭------------------+----------+-------+---------+----------╮\n| Contract         | Selector | Calls | Reverts | Discards |\n+==========================================================+\n| GuestbookHandler | sign     | 4096  | 0       | 0        |\n╰------------------+----------+-------+---------+----------╯\n\nSuite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.95s (1.95s CPU time)\n\nRan 2 tests for test/GuestbookStateful.t.sol:GuestbookStatefulTest\n[PASS]\nGuestbookStatefulTest invariants:\n[PASS] invariant_balancesAllowancesAndSupplyMatchIndependentModel\n[PASS] invariant_onlyPaidCallsAppendAndAllEarlierEntriesStayIntact\n GuestbookStatefulTest invariants (runs: 256, calls: 16384, reverts: 0)\n\n╭--------------------------+---------------+-------+---------+----------╮\n| Contract                 | Selector      | Calls | Reverts | Discards |\n+=======================================================================+\n| GuestbookStatefulHandler | approve       | 2710  | 0       | 0        |\n|--------------------------+---------------+-------+---------+----------|\n| GuestbookStatefulHandler | fundedSign    | 2762  | 0       | 0        |\n|--------------------------+---------------+-------+---------+----------|\n| GuestbookStatefulHandler | sign          | 2729  | 0       | 0        |\n|--------------------------+---------------+-------+---------+----------|\n| GuestbookStatefulHandler | signOversized | 2736  | 0       | 0        |\n|--------------------------+---------------+-------+---------+----------|\n| GuestbookStatefulHandler | spendThenSign | 2712  | 0       | 0        |\n|--------------------------+---------------+-------+---------+----------|\n| GuestbookStatefulHandler | transfer      | 2735  | 0       | 0        |\n╰--------------------------+---------------+-------+---------+----------╯\n\nLogs:\n  Bound result 653\n  Bound result 5\n  Bound result 95\n  Bound result 1926\n  Bound result 243\n  Bound result 3365\n  Bound result 115\n  Bound result 123\n  Bound result 138\n  Bound result 648\n  Bound result 1010\n  Bound result 160\n  Bound result 4739\n  Bound result 151\n  Bound result 1313754\n  Bound result 50\n  Bound result 912\n  Bound result 50970166904192448122\n  Bound result 19999999999999999999\n  Bound result 725\n  Bound result 284\n  Bound result 263\n  Bound result 1236\n  Bound result 35\n  Bound result 1818154\n  Bound result 264\n  Bound result 284\n  Bound result 1\n  Bound result 624\n  Bound result 0\n  Bound result 8873\n  Bound result 3145246\n  Bound result 6270\n  Bound result 1229133\n  Bound result 282\n  Bound result 0\n  Bound result 302\n  Bound result 263\n  Bound result 1940\n  Bound result 763600050\n  Bound result 931\n  Bound result 162\n  Bound result 2350982\n  Bound result 283\n  Bound result 5366\n  Bound result 123\n  Bound result 461383\n  Bound result 255\n  Bound result 1313755\n  Bound result 154\n  Bound result 786\n  Bound result 6\n  Bound result 52\n  Bound result 3455\n  Bound result 177362149\n  Bound result 2000\n  Bound result 26\n  Bound result 4071\n  Bound result 0\n  Bound result 224\n  Bound result 4023\n  Bound result 320\n  Bound result 242\n  Bound result 39\n  Bound result 1151306\n  Bound result 244\n  Bound result 0\n  Bound result 226375\n  Bound result 214\n  Bound result 4902\n  Bound result 126\n  Bound result 1627928\n  Bound result 52\n  Bound result 1680\n  Bound result 0\n  Bound result 1265867\n  Bound result 208\n  Bound result 2422\n  Bound result 180\n  Bound result 527235\n  Bound result 175\n\n[PASS] test_mixedSequenceExercisesFailuresDonationsAndRecovery() (gas: 3965940)\nLogs:\n  Bound result 20000000000000000000\n  Bound result 1\n  Bound result 32\n  Bound result 7\n  Bound result 3\n  Bound result 281\n  Bound result 0\n  Bound result 0\n  Bound result 0\n  Bound result 1\n  Bound result 280\n  Bound result 0\n  Bound result 1\n\nSuite result: ok. 2 passed; 0 failed; 0 skipped; finished in 6.15s (6.15s CPU time)\n\nRan 8 test suites in 6.16s (8.62s CPU time): 51 tests passed, 0 failed, 0 skipped (51 total tests)\n","passed":true},{"durationMs":80,"exitCode":0,"name":"source-index","output":"{\"v\":1,\"entryPoints\":[\"Guestbook.sign(string)\",\"LaunchToken.approve(address,uint256)\",\"LaunchToken.transfer(address,uint256)\",\"LaunchToken.transferFrom(address,address,uint256)\"],\"files\":{\".gitignore\":4,\"DEPENDENCIES.md\":23,\"README.md\":118,\"foundry.toml\":20,\"remappings.txt\":2,\"src/Guestbook.sol\":66,\"src/LaunchToken.sol\":12,\"test/Deployment.t.sol\":49,\"test/Guestbook.t.sol\":283,\"test/GuestbookAdversarial.t.sol\":117,\"test/GuestbookBoundary.t.sol\":168,\"test/GuestbookInvariant.t.sol\":87,\"test/GuestbookStateful.t.sol\":252,\"test/LaunchToken.t.sol\":105,\"test/LaunchTokenBoundary.t.sol\":150,\"test/mocks/PaymentToken.sol\":69},\"excluded\":[\"lib/\",\"node_modules/\"],\"truncated\":false}","passed":true}],"detail":"all checks passed","evaluation":"checks","profile":"foundry","status":"accepted","submissionHash":"e2979b6fbf60cab71c6b4e76b2d438eb207a853ee8dcac9b9aae8d755a2f6ade","verifiedTreeHash":"a5d12fe68fd0405c5104349012663aea4f455477","verifierVersion":"0.1.0+9f8ef295"}]}