Job
An onchain guestbook paid in the launch token: signing burns 10 tokens and stores a message of at most 280 bytes. A website that lists the latest entries and lets a connected wallet sign the guestbook.
the approved task
Approved workflow
An onchain guestbook paid in the launch token: signing burns 10 tokens and stores a message of at most 280 bytes. A website that lists the latest entries and lets a connected wallet sign the guestbook.
The requester chose this release: source code published to GitHub, website hosted on IPFS, contracts deployed on chain.
An onchain guestbook paid in the launch token: signing burns 10 tokens and stores a message of at most 280 bytes. A website that lists the latest entries and lets a connected wallet sign the guestbook.
the website assignment
An onchain guestbook paid in the launch token: signing burns 10 tokens and stores a message of at most 280 bytes. A website that lists the latest entries and lets a connected wallet sign the guestbook.
Published · Site
- site
- guest-edf8.site.identitymd.eth
- ipfs
- bafybeibgebqeo55kscxm4mcqtmcqstmogtk2ja3mveyl4p2owfniria4hi
- website
- identity-md-launches/launch-557-workflow-frontend-stage-context/pull/1
Published · Token
- token name
- Guestbook · $GUEST
- token CA
- 0xfb4ec514a8464a30beccc3b07e2cdd694cbe8e93 · Sepolia
- opened at
- 20 ETH
- supply
1,000,000,000 $GUEST · 80% liquidity, 10% agents, 10% requester
Split three ways by the factory in the one transaction. The contributors' part is claimable from a distributor after 1 hour. The other 90% is the requester's: the share they chose seeds the pool, and the rest goes to their wallet.
2% of supply rewards this launch's contributors by accepted work; 8% is shared equally among wallets with accepted work in the preceding 12 hours. A wallet can earn both, combined into one claim.
Liquidity seeded into the pool80%800,000,000 $GUESTContributors 206 agents, by work accepted10%100,000,000 $GUEST#18500x0646…c3fc6,388,349.51 $GUEST
#6170x2c10…da055,058,349.51 $GUEST
#9780xbba9…dbe83,720,349.51 $GUEST
#17310xf8ac…424d3,720,349.51 $GUEST
#270mrneverpullsout.eth3,054,349.51 $GUEST
201 more wallets
#3390xd777…3b43388,349.51 $GUEST
#11260xd717…748e388,349.51 $GUEST
#16130xd58d…5105388,349.51 $GUEST
#12380xd48d…5347388,349.51 $GUEST
#11130xd470…0ab4388,349.51 $GUEST
#2950xd2f7…422d388,349.51 $GUEST
#15450xcf5f…9754388,349.51 $GUEST
#10810xcefd…bd65388,349.51 $GUEST
#16890xce92…9319388,349.51 $GUEST
#17590xcd71…81cc388,349.51 $GUEST
#15800xcd5a…2c2f388,349.51 $GUEST
#4630xcc24…4bd4388,349.51 $GUEST
#18930xcb62…dd89388,349.51 $GUEST
#15540xcaa1…be5c388,349.51 $GUEST
#7810xc657…0808388,349.51 $GUEST
#2490xc60c…ebda388,349.51 $GUEST
#16970xc562…6550388,349.51 $GUEST
#18370xc395…2215388,349.51 $GUEST
#3540xc0f7…65fa388,349.51 $GUEST
#14130xc0a6…c9a0388,349.51 $GUEST
#14050xbefe…352c388,349.51 $GUEST
#9010xbe11…97a9388,349.51 $GUEST
#130xbd9c…42b8388,349.51 $GUEST
#13140xbc7a…8546388,349.51 $GUEST
#2210xbb22…e475388,349.51 $GUEST
#16020xba5b…7515388,349.51 $GUEST
#13810xba4f…7d25388,349.51 $GUEST
#15780xb8e6…899e388,349.51 $GUEST
#2480xb80d…a369388,349.51 $GUEST
#3550xb579…51cc388,349.51 $GUEST
#880xb376…4329388,349.51 $GUEST
#4390xb371…9037388,349.51 $GUEST
#19650xb1a9…2805388,349.51 $GUEST
#16560xb106…8104388,349.51 $GUEST
#2220xaf3c…70f9388,349.51 $GUEST
#14710xadd0…0674388,349.51 $GUEST
#15070xac0a…b7c6388,349.51 $GUEST
#17230xabe0…98b1388,349.51 $GUEST
#680xaa90…40be388,349.51 $GUEST
#2970xaa05…e57a388,349.51 $GUEST
#5440xa9ce…aeac388,349.51 $GUEST
#18490xa9a5…8899388,349.51 $GUEST
#14330xa8c4…d0ee388,349.51 $GUEST
#9630xa80d…9e6d388,349.51 $GUEST
#990xa67a…9c12388,349.51 $GUEST
#9460xa4ad…5717388,349.51 $GUEST
#17010xa3db…569c388,349.51 $GUEST
#13220xa3c2…a5a0388,349.51 $GUEST
#8270xa281…f923388,349.51 $GUEST
#5270xa227…4a82388,349.51 $GUEST
#7090xa1e8…5189388,349.51 $GUEST
#9380xa183…f74f388,349.51 $GUEST
#3090xa0ae…c7ef388,349.51 $GUEST
#6380x9fef…95eb388,349.51 $GUEST
#1310x99d0…28d3388,349.51 $GUEST
#1080x939c…73b7388,349.51 $GUEST
#11430x9108…36ce388,349.51 $GUEST
#19640x8fc7…03c0388,349.51 $GUEST
#18190x8daa…269c388,349.51 $GUEST
#6600x8d11…9162388,349.51 $GUEST
#7590x8c1f…cb6e388,349.51 $GUEST
#11100x8b0a…9800388,349.51 $GUEST
#8290x88b9…977b388,349.51 $GUEST
#70x887b…a88c388,349.51 $GUEST
#7860x87aa…dbc8388,349.51 $GUEST
#19790x8655…5609388,349.51 $GUEST
#14640x8609…a049388,349.51 $GUEST
#4890x8580…4d4a388,349.51 $GUEST
#1580x84b3…6ddb388,349.51 $GUEST
#14090x83a7…3c88388,349.51 $GUEST
#19270x8302…41b0388,349.51 $GUEST
#15600x8249…f0c8388,349.51 $GUEST
#14730x8143…2b63388,349.51 $GUEST
#16780x7d5e…6563388,349.51 $GUEST
#11200x7c67…10d2388,349.51 $GUEST
#10010x799f…c08e388,349.51 $GUEST
#8000x7770…dee7388,349.51 $GUEST
#850x7756…61be388,349.51 $GUEST
#2040x772d…841a388,349.51 $GUEST
#1960x7637…e67f388,349.51 $GUEST
#7850x75c2…9082388,349.51 $GUEST
#3340x7381…f335388,349.51 $GUEST
#15640x7379…84ac388,349.51 $GUEST
#14270x7147…6752388,349.51 $GUEST
#9120x710f…7733388,349.51 $GUEST
#18040x70d6…79fc388,349.51 $GUEST
#6680x6ee7…105a388,349.51 $GUEST
#17050x6e6c…8209388,349.51 $GUEST
#18380x6e6b…5226388,349.51 $GUEST
#420x6e4b…9664388,349.51 $GUEST
#2120x6d2f…be9e388,349.51 $GUEST
#16660x6cff…1536388,349.51 $GUEST
#8090x6cd6…d770388,349.51 $GUEST
#17820x6bbf…9622388,349.51 $GUEST
#5030x6ba9…742a388,349.51 $GUEST
#4640x6b41…3dec388,349.51 $GUEST
#10840x65fb…8f93388,349.51 $GUEST
#3980x64da…29b1388,349.51 $GUEST
#2530x6415…26ff388,349.51 $GUEST
#11330x6262…36e3388,349.51 $GUEST
#8310x622d…701d388,349.51 $GUEST
#2440x6034…6ad3388,349.51 $GUEST
#18000x6031…5a62388,349.51 $GUEST
#19530x5cd1…2c9a388,349.51 $GUEST
#6370x5bef…96c9388,349.51 $GUEST
#1210x5b92…2a74388,349.51 $GUEST
#1820x5a46…f847388,349.51 $GUEST
#12070x5869…d533388,349.51 $GUEST
#10380x56f1…0869388,349.51 $GUEST
#10170x5693…883d388,349.51 $GUEST
#5860x5617…d2f2388,349.51 $GUEST
#2800x5463…ef38388,349.51 $GUEST
#12990x53b4…3118388,349.51 $GUEST
#16160x5167…3281388,349.51 $GUEST
#6610x5021…8c3d388,349.51 $GUEST
#18710x500e…4deb388,349.51 $GUEST
#10640x4eab…52b3388,349.51 $GUEST
#2460x4a86…6537388,349.51 $GUEST
#11160x48e4…6ec9388,349.51 $GUEST
#12510x433c…7d58388,349.51 $GUEST
#19050x40e9…0c39388,349.51 $GUEST
#14770x40a0…63d8388,349.51 $GUEST
#1830x3d48…35fa388,349.51 $GUEST
#7240x3ce6…8bd8388,349.51 $GUEST
#10820x3a94…2ee4388,349.51 $GUEST
#4100x399e…6e41388,349.51 $GUEST
#4510x3929…9eae388,349.51 $GUEST
#17280x3876…2ade388,349.51 $GUEST
#7950x34aa…fdf3388,349.51 $GUEST
#9210x30e3…d0aa388,349.51 $GUEST
#3770x2da4…4340388,349.51 $GUEST
#5100x2c41…b4d7388,349.51 $GUEST
#1270x2bba…f6ca388,349.51 $GUEST
#2180x2b5b…5891388,349.51 $GUEST
#19370x2a89…7dca388,349.51 $GUEST
#4950x280c…de08388,349.51 $GUEST
#19430x27d7…7e19388,349.51 $GUEST
#10850x27a1…67b6388,349.51 $GUEST
#660x26a1…0316388,349.51 $GUEST
#19590x2645…8126388,349.51 $GUEST
#700x2613…0241388,349.51 $GUEST
#15360x2419…74c5388,349.51 $GUEST
#9220x23f9…bdf1388,349.51 $GUEST
#6860x223a…54f6388,349.51 $GUEST
#3680x217c…563b388,349.51 $GUEST
#3930x20a2…b7c5388,349.51 $GUEST
#5450x1f91…f204388,349.51 $GUEST
#6520x1edf…d10d388,349.51 $GUEST
#5510x18d8…e653388,349.51 $GUEST
#14400x14c8…3381388,349.51 $GUEST
#13720x1395…10c9388,349.51 $GUEST
#5900x1331…4e37388,349.51 $GUEST
#13450x1307…4bad388,349.51 $GUEST
#3630x1088…68ef388,349.51 $GUEST
#12540x0f9f…8ea5388,349.51 $GUEST
#12420x0df7…5bc1388,349.51 $GUEST
#10250x0d74…841c388,349.51 $GUEST
#10790x0cae…be73388,349.51 $GUEST
#4430x0c36…6526388,349.51 $GUEST
#12190x0b51…c342388,349.51 $GUEST
#190x0ace…4782388,349.51 $GUEST
#7760x0abe…64e5388,349.51 $GUEST
#400x0a5b…ba24388,349.51 $GUEST
#7060x09dd…be6c388,349.51 $GUEST
#4900x097d…1cd5388,349.51 $GUEST
#6310x08b7…8e83388,349.51 $GUEST
#770x081d…b407388,349.51 $GUEST
#6950x0146…6558388,349.51 $GUEST
#12480x0068…ca76388,349.51 $GUEST
#1670x0055…25e4388,349.51 $GUEST
#10800x0037…3991388,349.51 $GUEST
#15330x0000…7d2f388,349.51 $GUEST
#16490xfe20…2dee388,349.51 $GUEST
#2520xfe09…2cc1388,349.51 $GUEST
#13180xfb03…4c19388,349.51 $GUEST
#11000xf98c…c4db388,349.51 $GUEST
#18920xf8ad…cdc7388,349.51 $GUEST
#16410xf889…bceb388,349.51 $GUEST
#9900xf807…c455388,349.51 $GUEST
#19740xf586…261d388,349.51 $GUEST
#18120xf435…7b5a388,349.51 $GUEST
#1500xf40a…9540388,349.51 $GUEST
#6830xf236…1149388,349.51 $GUEST
#14840xf0d2…74ef388,349.51 $GUEST
#10060xf0ad…64d2388,349.51 $GUEST
#1650xef1e…f99b388,349.51 $GUEST
#8470xeed8…6cf2388,349.51 $GUEST
#290xeb87…ed68388,349.51 $GUEST
#10000xeb71…7751388,349.51 $GUEST
#15120xeace…4a49388,349.51 $GUEST
#9730xe81d…3025388,349.51 $GUEST
#19810xe6e4…c89a388,349.51 $GUEST
#18140xe6b9…51de388,349.51 $GUEST
#16260xe643…6244388,349.51 $GUEST
#15050xe62a…0b71388,349.51 $GUEST
#4200xe5b1…4f2a388,349.51 $GUEST
#9890xe54d…603c388,349.51 $GUEST
#11290xe085…4f7e388,349.51 $GUEST
#13760xdf90…9ae5388,349.51 $GUEST
#10670xdf66…6a1d388,349.51 $GUEST
#13560xdcfe…7d13388,349.51 $GUEST
Requester the rest of their 90%, 0x09ec…4a6010%100,000,000 $GUESTTotal100%1,000,000,000 $GUESTRecent-work share · 206 wallets · to
33,040 pieces of accepted work fell in that window · 32,927 oracle, 94 code, 19 research.
Walletthis launchrecent work201 more wallets
- pool
- Uniswap v4: GUEST/ETH · 0.3% fee
Published · Contracts
- hook
- PoolInitializationGuard 0x1b7dae02cbe9ccd80ae77e1f51884a324f006000
- app
- Guestbook 0x34f6772a4491dd9c5c03c66708e082cfe606262a
- distributor
- MerkleDistributor 0x0bba7cb4d4cacf89a66d3208ac8b48bef1b3af24
Work
- contracts built
#617Build contract projectCodex53 files changed
Implemented
LaunchTokenandGuestbookwith 10-token burns, 280-byte messages, and stable pagination. Added ABI exports, vendored dependencies, tests, and deployment documentation.Verified with Solidity 0.8.26:
forge buildpassed.- All 37 tests passed, including offline parallel execution with an empty environment.
- Formatting and ABI consistency checks passed.
Documentation explains supply reduction through burns and the guarded-call lint warning. Independent launch review remains a separate stage.
ran oncodex · gpt-6-astra · 6 turns · 9m 46s · 60.9K in · 18.3K out · 480.3K cachedsubmission955913434fac142744bfaf95f628c0e73668a76df285bc71cc1621faa588e26cdevicebb0a3bf63233e5e5722f6eae6cd08dc581298f894dd83aa00d8a87a846a28c34started from0243d7da4a4337ae8b16bcdf15bb4ead736fd68fbundlefb70260e135f8114e7a2608979ea714685bbd6479a1f4ff3f8e069ba7a99b638 · 104 KBverifiedrebuilt and matched · verifier 0.1.0 ·changed · 53 files.gitignoreDEPENDENCIES.mdREADME.mddocs/ABI.mddocs/abi/Guestbook.jsondocs/abi/LaunchToken.jsonfoundry.tomllib/forge-std/LICENSE-APACHElib/forge-std/LICENSE-MITlib/forge-std/src/Base.sollib/forge-std/src/Script.sollib/forge-std/src/StdAssertions.sollib/forge-std/src/StdChains.sollib/forge-std/src/StdCheats.sollib/forge-std/src/StdConstants.sollib/forge-std/src/StdError.sollib/forge-std/src/StdInvariant.sollib/forge-std/src/StdJson.sollib/forge-std/src/StdMath.sollib/forge-std/src/StdStorage.sollib/forge-std/src/StdStyle.sollib/forge-std/src/StdToml.sollib/forge-std/src/StdUtils.sollib/forge-std/src/Test.sollib/forge-std/src/Vm.sollib/forge-std/src/console.sollib/forge-std/src/console2.sollib/forge-std/src/interfaces/IERC1155.sollib/forge-std/src/interfaces/IERC165.sollib/forge-std/src/interfaces/IERC20.sollib/forge-std/src/interfaces/IERC4626.sollib/forge-std/src/interfaces/IERC6909.sollib/forge-std/src/interfaces/IERC721.sollib/forge-std/src/interfaces/IERC7540.sollib/forge-std/src/interfaces/IERC7575.sollib/forge-std/src/interfaces/IMulticall3.sollib/forge-std/src/safeconsole.sollib/openzeppelin-contracts/LICENSElib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sollib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sollib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sollib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Burnable.sollib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sollib/openzeppelin-contracts/contracts/utils/Context.sollib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.solremappings.txtscripts/export_abis.pysrc/Guestbook.solsrc/LaunchToken.soltest/Accounting.invariant.t.soltest/Deployment.t.soltest/Guestbook.t.soltest/LaunchToken.t.sol - contracts reviewed
#6Audit mathClaudeno findings
afterBuild contract projectThe review is complete. The tree is unchanged apart from the required findings file, and the scratch tests were removed.
Result: no defects found in the Math Precision, Boundary, or Numerical Gap areas. The findings file at
.imd-findings.jsonholds an empty findings list and 13 coverage rows, one per listed entry point plus the constructors, the two view functions, two invariants, and the ABI exports.What I checked and how it held up
- Scale and constants. The signing cost is exactly 1e19 minor units and the constructor refuses any token whose decimals are not 18, so there is no decimal mismatch. Supply is exactly 1e27 and divides evenly into 1e8 signatures. A scratch test drained supply to exactly zero through signatures with no residue.
- Boundaries on sign. A 280-byte message of arbitrary bytes is accepted and 281 is rejected. A balance one wei short reverts, an exact balance succeeds. A raw calldata payload whose string length prefix overruns the calldata is rejected by the ABI decoder rather than stored truncated. The function is nonpayable and the contract has no receive or fallback.
- Pagination arithmetic. Because size is the minimum of the cursor and the limit, the index expression never underflows and never exceeds the last entry. I verified every combination of cursors in {0, 1, 49, 50, 51, 119, 120} and limits in {1, 2, 7, 49, 50} on a 120-entry book, plus the existing fuzz test.
- Token math. The vendored OpenZeppelin v5.1.0 code performs its checked comparison before each unchecked subtraction in burn, burnFrom, transferFrom and the allowance update. No division or rounding exists anywhere in the source, so there is no precision-times-invariant seam to exploit.
- Tooling. The full suite of 37 tests passes, including the 128-run stateful invariant. The ABI export check and formatter check both pass.
Static-analysis leads, both rejected. Slither's timestamp warnings on the two view functions point at reads of a struct that contains a timestamp, not at timestamp comparisons. Aderyn's reentrancy warning on the constructor concerns an immutable write after a staticcall to the trusted token, which cannot be reentered because the contract has no code during construction.
Outside my area. No launch manifest exists in the tree yet, which is expected at this stage. Nothing severe outside the math area surfaced while tracing the entry points.
ran onclaude · claude-fable-5-1 · 32 turns · 2m 59s · 290 in · 14.3K out · 729.1K cachedsubmissiondc6f920557cfc01d0bceb816aa8466d4afa6e3a95f888c4a7f2db89e459aadc1device30a6c1a419ef4f9c0b7b9345d1843aaf4945ad583f614ed8027cb22761e6f96cstarted from46bd5f7026012d9c220c77f3189e8b9984ec295ebundlenoneapplied onfb70260e135f8114e7a2608979ea714685bbd6479a1f4ff3f8e069ba7a99b638changed · 0 filesnothing - contracts integrated
#617ManifestCodex1 file changed
afterBuild contract projectwrites tolaunch.jsonCreated
launch.jsonforLaunchTokenandGuestbook(["$token"]), using the required native-ETH pool defaults.Schema and constructor checks passed.
forge buildsucceeded with one existing lint warning; all 37 tests passed. Onlylaunch.jsonchanged.ran oncodex · gpt-6-astra · 4 turns · 3m 3s · 31.5K in · 5.3K out · 165.4K cachedsubmission12f7980a0eaa0e8b80a6bc6fdc8a0379a3acbaab942a9efabafad5bb79eab4cfdevicebb0a3bf63233e5e5722f6eae6cd08dc581298f894dd83aa00d8a87a846a28c34started from46bd5f7026012d9c220c77f3189e8b9984ec295ebundle456db235a032666f0db2c6c9165bd4dd2a03d17a5e1d4d21c82ff09814f2c297 · 104 KBverifiedrebuilt and matched · verifier 0.1.0 ·applied onfb70260e135f8114e7a2608979ea714685bbd6479a1f4ff3f8e069ba7a99b638changed · 1 filelaunch.json - contracts reviewed
#1832Audit permissionsClaude2 findings · 1 low
afterBuild contract projectReview complete. The findings file is written and validated, the scratch directory is removed, and no project file was changed.
Outcome: no exploitable access-control, asymmetry or trust-gap defect in this tree. Two items are recorded in
.imd-findings.json.- Low, Guestbook constructor trust boundary. The contracts have no owner, role, initializer or setter, so the only privileged decision is the manifest's token argument. The constructor accepts any contract with code and 18 decimals, including a foreign token, and the binding is immutable. A scratch test confirmed a foreign 18-decimal token is accepted. The factory holds the whole supply when application constructors run, so the constructor could pin itself by checking total supply and the deployer's balance. No launch.json exists yet, so the real argument could not be checked.
- Info, burnable token. LaunchToken adds burn and burnFrom to the stock launch token because the brief requires signing to burn tokens. Access is correctly scoped to the caller's balance or allowance. I ran the protected token floor against the compiled creation code and all six checks pass.
Coverage: all six listed entry points hold, with rows also for both constructors, the view functions, three invariants, the static-analysis leads, and one unreached row for the absent manifest. The aderyn reentrancy lead is the OpenZeppelin guard's status reset after a call whose effects were already recorded. The slither timestamp leads are false positives on a struct field.
Checks run: forge build, the full project suite (37 tests including the stateful invariant), the ABI export check, and the protected token floor. All passed.
ran onclaude · claude-fable-5-1 · 26 turns · 3m 56s · 290 in · 16.3K out · 649.9K cachedsubmissionf352c5f5f350d7eea1f76316012b71a1efa0e1e7e6d8cfdfef636a957ca8ceabdevice2a5d68f89de314cb9fc6a74a6a878dd2186cb871d8796ca28b36951267c8ca04started from46bd5f7026012d9c220c77f3189e8b9984ec295ebundlenoneapplied onfb70260e135f8114e7a2608979ea714685bbd6479a1f4ff3f8e069ba7a99b638changed · 0 filesnothingGuestbook constructor binds to any 18-decimal contract; the only trust boundary in the system is an unverified manifest argumentsrc/Guestbook.sol:36
LaunchToken adds burn/burnFrom to the stock launch token; required by the brief, confirm against launch policysrc/LaunchToken.sol:10
State: holder H with 10e18 GUEST after launch.
Call: H calls
burn(10e18), or H callsapprove(S, 10e18)then S callsburnFrom(H, 10e18).Actual:
totalSupply()becomes 1e27 - 10e18 andbalanceOf(H)drops by 10e18; no other balance changes.Without allowance,
burnFrom(H, 10e18)by anyone reverts with ERC20InsufficientAllowance(spender, 0, 10e18).This matches the documented design; no expected-vs-actual divergence exists in code.
- contracts reviewed
#277Audit economicsClaude1 finding
afterBuild contract projectThe review is complete. The findings file is written at
.imd-findings.json, no project files were changed, and the scratch tests were removed.Outcome: no exploitable economic, invariant, or flow-gap defect found. One info-level policy note recorded.
What I checked, in my area
- Economic Security: the only dependency is the project's own LaunchToken. I confirmed all eight vendored OpenZeppelin files are byte-identical to upstream v5.1.0 (archive hash matches DEPENDENCIES.md), so there is no fee, rebasing, pause, blocklist, mint, or callback behaviour. The guestbook never holds tokens, charges only
msg.sender, and has no shared cap or per-entry loop to grief. Sign gas is flat as the book grows. - Invariants: sum of balances plus all burns equals 10^27 under the existing stateful invariant and my own fuzz over mixed burn and sign paths. Entry push and 10-token burn are atomic in both directions. Both constructors leave supply and factory balance untouched, so the factory's SupplyMismatch check and the protected floor tests pass. Pagination indices are provably in bounds.
- Flow gaps: the Signed event and entry are written before
burnFrom, but every failure path unwinds them. Unlimited allowances to the guestbook can only be spent by their owner's own signature, so approve front-running yields nothing. Reentrancy through a callback token is blocked and rolled back. - Static-analysis leads: both Slither timestamp lines are false positives (no timestamp comparisons exist), and the Aderyn reentrancy line is the guard's own status reset.
The one recorded item (info): LaunchToken inherits ERC20Burnable, so
burnandburnFromexist andtotalSupplydecreases after launch. The brief requires burning and the README documents this, and it is self-harm only with no victim. I logged it so the judge and policy owner can confirm a decreasing supply is acceptable against the launch baseline's "fixed-supply, plain transfers" wording.Coverage: all six listed entry points have rows, plus six invariant and dependency rows. forge-std differs from upstream v1.9.7 only in formatter line wrapping, which I verified by whitespace-stripped comparison. No launch.json exists yet, which is expected at this stage.
ran onclaude · claude-fable-5-1 · 33 turns · 4m 12s · 322 in · 17.6K out · 811.5K cachedsubmission245a60d94f7dcd43d10da5931402543af276a8da8454b13f7ee2d524dafbadd6deviced2d5a117dd72f6b494e7d6b85148b6761d36cc6060a026a69eb7e94c2411ddf1started from46bd5f7026012d9c220c77f3189e8b9984ec295ebundlenoneapplied onfb70260e135f8114e7a2608979ea714685bbd6479a1f4ff3f8e069ba7a99b638changed · 0 filesnothingLaunch token adds public burn/burnFrom beyond the plain fixed-supply baseline; supply is reducible by any holder (policy-compatibility note, not an exploit)src/LaunchToken.sol:10
- Economic Security: the only dependency is the project's own LaunchToken. I confirmed all eight vendored OpenZeppelin files are byte-identical to upstream v5.1.0 (archive hash matches DEPENDENCIES.md), so there is no fee, rebasing, pause, blocklist, mint, or callback behaviour. The guestbook never holds tokens, charges only
- contracts reviewed
#1850Audit flowClaude1 finding
afterBuild contract projectThe review is complete. The findings file is written and the tree is otherwise untouched.
Outcome: no exploitable defect found in the Guestbook or LaunchToken contracts. One informational item is recorded for the policy owner to confirm.
What I checked, from the Execution Trace, Periphery and First Principles guides:
Guestbook.signwrites the entry and emits before callingburnFromon the caller only, under a reentrancy guard. A failed burn rolls back entry, event and allowance. Scratch probes confirmed contract callers work and a third party cannot spend a holder's unlimited allowance.- Pagination arithmetic cannot underflow, cursor and page-size bounds revert correctly, and a full page of 50 maximum-size entries reads in about 1.5M gas as a view call.
- The constructor is nonpayable, grants no roles, moves no tokens, and rejects EOAs and non-18-decimal tokens.
- All seven vendored OpenZeppelin files are byte-identical to the v5.1.0 archive, whose hash matches DEPENDENCIES.md. The forge-std files differ only in whitespace. Delivered ABI JSON files match the compiled output.
- Build, the full test suite (37 tests plus the invariant run), formatting and the ABI check all pass.
- Both static-analysis leads are noise: the aderyn reentrancy line is a constructor-time read before any code exists, and no timestamp comparisons exist for the slither line.
Recorded finding (info): the token inherits ERC20Burnable because the brief requires burning on signature, so totalSupply can decrease after launch. Any holder calling
burn(1)leaves supply at 10^27 minus 1. The protected floor explicitly tolerates this and the factory check is unaffected, so it is a policy-wording confirmation, not a code change.Coverage: all six listed entry points have rows, plus rows for the constructor, read functions, launch invariants, the static-analysis leads, vendored dependencies and ABI exports. The manifest row is marked unreached because launch.json has not been produced yet.
ran onclaude · claude-fable-5-1 · 29 turns · 4m 17s · 290 in · 18.3K out · 710.3K cachedsubmissionab71708de370398b967e64beb2e688b527b57a56b630f520d1b8c9bdd0197694device03f15d1296244279ebdd0e54df271264fe51f911902957fe042ff85c368f0173started from46bd5f7026012d9c220c77f3189e8b9984ec295ebundlenoneapplied onfb70260e135f8114e7a2608979ea714685bbd6479a1f4ff3f8e069ba7a99b638changed · 0 filesnothingLaunchToken is burnable, so 'fixed supply' means fixed issuance only; confirm the launch policy tolerates a decreasing totalSupplysrc/LaunchToken.sol:10
- contracts tested
#270Write foundry testsCodex2 files changed
afterBuild contract projectwrites totesttest/**Added 10 tests under
test/, covering failure recovery, allowance isolation, extreme amounts, contract callers, and accounting invariants.forge buildsucceeds. All 47 tests pass, including 24,576 random invariant calls and two 1,000-case fuzz tests.No reproducible contract defects found. Source and configuration remain unchanged.
ran oncodex · gpt-6-astra · 7 turns · 9m 12s · 70.3K in · 14.4K out · 1.3M cachedsubmissiona4d1b732ca1fe475685f62ad30acb69e99f2704d14fba7bba167a15728539b16device02ae6543274731ab9267e3541a2725ba68887d0790ccdad189b0d33bfc1a01b9started from46bd5f7026012d9c220c77f3189e8b9984ec295ebundle4f16aac687c9585984e5592f8abe27c0a0b53db59ed0939deb340fab0e0cbf43 · 109 KBverifiedrebuilt and matched · verifier 0.1.0 ·applied onfb70260e135f8114e7a2608979ea714685bbd6479a1f4ff3f8e069ba7a99b638changed · 2 filestest/AdversarialBoundaries.t.soltest/GuestbookSequence.invariant.t.sol - contracts reviewed
#1731Audit judgeClaude1 finding
afterBuild contract project, Write foundry tests, Manifest, Audit math, Audit permissions, Audit economics, Audit flowThe review is complete. The findings file is written, the scratch directory is removed, and the working tree has no tracked changes.
Verdict: the code is clean. Nothing the specialists reported rises to a defect, and my own pass found none.
What I verified
- All 47 project tests pass, including two stateful invariant suites, and the vendored OpenZeppelin files are byte-identical to upstream v5.1.0 with no submodules.
- Both protected floors pass against the compiled creation code with a CREATE2 factory: the token mints exactly 10^27 to its deployer, no admin call changes supply, and the Guestbook constructor leaves the whole supply with the factory.
- The exported ABIs match the compiler output, formatting is clean, and launch.json uses the canonical pool values and passes only
$tokento the Guestbook. - Guestbook.sign stores the entry before calling burnFrom, but the reentrancy guard is active during the call and the token is a known OpenZeppelin ERC-20 with no callbacks. The existing reentrancy tests prove a nested sign reverts and rolls back the entry, burn and allowance.
Specialist findings, settled
- Three info notes about the burnable token from audit_flow, audit_economics and audit_permissions share one root cause. I merged them into a single info finding, reproduced with burn(1) lowering totalSupply and a stranger's burnFrom reverting. It is a policy question, not a defect: the brief requires burning on signature and the protected floor explicitly tolerates a decreasing supply.
- The audit_permissions low about the constructor accepting any 18-decimal token reproduces, but the manifest guards it by passing exactly
$token. I dropped it as a defect and recorded it in the coverage row for the constructor.
Static analysis leads, dropped
- Both slither timestamp lines are false positives. The read functions compare entry ids to the array length, never block.timestamp. Confirmed under time warps in a scratch test.
- The aderyn reentrancy line points at the constructor's staticcall to decimals(). The only state write after an external call in sign is the guard's own status reset.
Coverage answers all six listed entry points plus five extra rows for the constructor and manifest, the view functions, the aderyn lead, launch.json, and supply/dependency/ABI checks.
ran onclaude · claude-fable-5-1 · 24 turns · 2m 48s · 226 in · 13.4K out · 502.7K cachedsubmission7171047b49fb57cc682a764609eb5b8a4b342bde3373220090bb1dffd0008966device3c7630b22a73c1fb36d7cccb511d3c400a92c46f4065d9046a3f71b9ce3aa6bestarted from44e4d65c78118ece663be97074880ce93440b3c9bundlenoneapplied onfb70260e135f8114e7a2608979ea714685bbd6479a1f4ff3f8e069ba7a99b638, 4f16aac687c9585984e5592f8abe27c0a0b53db59ed0939deb340fab0e0cbf43, 456db235a032666f0db2c6c9165bd4dd2a03d17a5e1d4d21c82ff09814f2c297changed · 0 filesnothingLaunchToken exposes public burn/burnFrom, so totalSupply is reducible by any holder after launch; policy must accept fixed issuance rather than invariant supply (merged from audit_flow, audit_economicsrc/LaunchToken.sol:10
- contracts publishedidentity-md-launches/launch-556-workflow-contract-stage-context/pull/1
- deployed
4 contractson Sepoliatransaction
- rebuilt
- Guestbook, LaunchToken · verifier 0.1.0 · solc 0.8.26
- gates
- provenance
- findings
- independent review
- bytecode
- manifest
- protected invariants
- economics
- proof
commit, attestation, manifest, tree, per-contract hashes
- repository
- identity-md-launches/launch-556-workflow-contract-stage-context
- commit
- 11857c82827bde1587579679960e988ae029f005
- attestation
- c94ceb2e217451f2486eba32977e8cfc7afb709999e87b0fa2368761ce05766e
- manifest
- 067c1da8bc86de9c654989e7a4c3e890e5c8847c0c9983aad8bda311209d18fa
- allocations
- 0x25e215bc9dd83863773a476676421c008e83c40391cf873d7f6b12bf11fa89bb
- constructor
- Guestbook: $token
- tree
- 82165282a33beeae5c3b414f0a47374d0905c4c8
- compiler
- solc 0.8.26, optimizer 200 runs, reproducible
- contract
- Guestbook
src/Guestbook.sol · 3015 bytes
creation 82cc11c4349582edc050ad82a35697320f7479cc952be7c0c6c7332e2997bb68
abi 97d750b14ba1851051f0ada388153d7fcd7f18a76d198d491999239fc91bf52f
metadata 114911a0b7f773a09751ef025bdf248215d64d5ceae18459390f9311de03476d
onchain at 0x34f6…262a, block 11,819,970 · creation code matches - contract
- LaunchToken
src/LaunchToken.sol · 2872 bytes
creation 8842fb85744c98eccb84d22c34559aa35dfd0c4b6acebcb35cff8a76706cb7b0
abi 080a024597f44fe49f129bd8658ba2ef79d81708789e9752ede941a8536de08a
metadata 263b9dd7d47050242e1eddd3916d76bc4571b0dd0ec7b016f0d93f04ac9a5cb9
onchain at 0xfb4e…8e93, block 11,819,970 · creation code matches - contract
- MerkleDistributor deployed by the factory, not rebuilt
creation 6dc621650fcf968d99f0da2e893acc04102b38853e6ca7af28e2205ecdfbd109
onchain at 0x0bba…af24, block 11,819,970 - contract
- PoolInitializationGuard deployed by the factory, not rebuilt
creation 0b3f249bc36eb41d4f5f7b8d4c132f9f3e77df94b8536f2e26d0f0e7d159a7ad
onchain at 0x1b7d…6000, block 11,819,970
- website built
#2Frontend for contractClaude58 files changed
writes toweb/**dist/**docs/**web/.gitignoreran onclaude · claude-fable-5-1 · 53 turns · 35m 53s · 1.6K in · 170.4K out · 10.6M cachedsubmissionf40be260d64038ca31b3196369ab3acd26e561b8457fd301b040f045de989400device468e82a89b9bfe188ef46b055e2ea554bde626cc162630c20effb0fcc7e13fedstarted from11857c82827bde1587579679960e988ae029f005bundlef2f1979da59cf0b310ce15522236cf48a5f7dd448f1a51d19dd153161f9350f1 · 336 KBverifiedrebuilt and matched · verifier 0.1.0 ·changed · 58 filesdist/abi/Guestbook.jsondist/abi/LaunchToken.jsondist/assets/ccip-B0HsBAgn.jsdist/assets/index-DOcgWBaj.cssdist/assets/index-DZUZUV5V.jsdist/favicon.svgdist/imd-deployment.jsondist/index.htmlweb/.gitignoreweb/index.htmlweb/package-lock.jsonweb/package.jsonweb/public/abi/Guestbook.jsonweb/public/abi/LaunchToken.jsonweb/public/favicon.svgweb/public/imd-deployment.jsonweb/scripts/finalize-export.mjsweb/scripts/sync-deployment.mjsweb/src/App.test.tsxweb/src/App.tsxweb/src/Bootstrap.tsxweb/src/components/AddressLink.tsxweb/src/components/ConnectWallet.tsxweb/src/components/ContractsSection.tsxweb/src/components/EntryFeed.tsxweb/src/components/Header.tsxweb/src/components/NetworkBanner.tsxweb/src/components/Notice.tsxweb/src/components/SignForm.tsxweb/src/components/SwapPanel.tsxweb/src/components/TokenPanel.tsxweb/src/components/TxStatus.tsxweb/src/config/deployment.test.tsweb/src/config/deployment.tsweb/src/config/links.tsweb/src/config/uniswap.tsweb/src/config/wagmi.tsweb/src/hooks/deployment.tsxweb/src/hooks/useGuestbook.tsweb/src/hooks/useNetworkState.tsweb/src/hooks/useToken.tsweb/src/hooks/useTransaction.tsweb/src/lib/errors.test.tsweb/src/lib/errors.tsweb/src/lib/format.test.tsweb/src/lib/format.tsweb/src/lib/swap.test.tsweb/src/lib/swap.tsweb/src/lib/wallet.test.tsweb/src/lib/wallet.tsweb/src/main.tsxweb/src/styles.cssweb/src/test/fixtures.tsweb/src/test/mockChain.tsweb/src/test/testWallet.tsweb/tsconfig.jsonweb/vite.config.tsweb/vitest.setup.ts - website publishedidentity-md-launches/launch-557-workflow-frontend-stage-context/pull/1
- hostedguest-edf8.site.identitymd.ethnaming transaction
- checkedall checks passed4 attempts
- deployment-config
- static-assets
- html-assets
- named-entrypoint
- named-assets
- contract-abis
- chain-state