{"rewardSnapshot":null,"merkleRoot":null,"claims":null,"id":"50787239-e9b1-4891-b169-e0f0d38a850e","launchNumber":1389,"kind":"evm_contracts","status":"live","chainId":4663,"sourceRepoUrl":"https://github.com/identity-md-launches/launch-1389-audit-deploy-sherwood-v2","sourceCommit":"bd9dc1ddac3a7a192f4c2fb10adc79afe92fe117","parkedReason":null,"artifactCount":1,"manifestHash":"e60a8e0c0ab43e94b6fcfdc44900ec53f36c65cbb4c78c76eadbdc66690c4729","attestationHash":"65852971105d949c4d86a541e969f08d9a7852227eca4ba410f4d00ba7fa1c65","attestation":{"treeHash":"beae87e270ec4125b367435b9e9818ec6e44d40f","verifierVersion":"0.1.0+fb8278c5","verifierKey":"68249df1f422fa72f61ca7f0ddaf9b62043959c5c134498441d5e552a9921782","toolchain":{"solc":"0.8.26","forge":"forge Version: 1.8.3","viaIR":true,"optimizer":true,"evmVersion":"cancun","bytecodeHash":"none","optimizerRuns":200},"contracts":[{"name":"Sherwood","path":"src/Sherwood.sol","abiHash":"8fa729b3abfcc542067362ae77dcac5aed302094c39d8881940a6b86a8ed142d","opcodes":{"callcode":false,"delegatecall":false,"selfdestruct":false},"metadataHash":"76cb276d012e1cad5c29ded11d8ca710fe821a07d0626c6a9c2f3d94e0e94236","creationCodeHash":"41d74b1cfbcbcc97b8a6b567c9677592a6880d1050d1e88993ac17748ebe4e79","deployedCodeHash":"c4fd56bff94989e02c09ad6f9a963cb097456c53926d847245d478a73a0d2384","creationCodeBytes":18588,"deployedCodeBytes":17738},{"name":"SherwoodV2","path":"src/SherwoodV2.sol","abiHash":"9792ae964758728e2396461fb9eb712436c21c20535551c2c2f68991dbce598c","opcodes":{"callcode":false,"delegatecall":false,"selfdestruct":false},"metadataHash":"154004ea32fe0d896a35f8476ea33d711c7ad28f80193503f1aba6fa143d45fc","creationCodeHash":"8c424f87cd84b130cfe432f01492514d2494798941fdc2977f4167053ea42305","deployedCodeHash":"3763116aca4cdcadc6d14d0ad63c9242d945bdb7c0925ac9f11e8c62706048f0","creationCodeBytes":24691,"deployedCodeBytes":23654},{"name":"SherwoodV2Launcher","path":"src/SherwoodV2Launcher.sol","abiHash":"456c12670b1c959a3241f1299f3bec354aafc40582941cf531d33368a7ffaed7","opcodes":{"callcode":false,"delegatecall":false,"selfdestruct":false},"metadataHash":"8a07a73d6086f72634c30a2c49f9482b7a49e93dbf1468b7042aa1e22409e0ed","creationCodeHash":"fb2f2737af51ae4e02d6b2fb32678b7ae8920cc85886949ca767c179b1392d1b","deployedCodeHash":"bf321b3530fae307a94168023aa89038eeced9fc2153518447aad7420be14b88","creationCodeBytes":25436,"deployedCodeBytes":183}],"manifest":{"kind":"evm_contracts","notes":"Sherwood v2 on Robinhood Chain (4663) for the existing $IMD token. No new token, pool, distributor, ETH funding or initialization call: this manifest deploys exactly one contract, src/SherwoodV2Launcher.sol:SherwoodV2Launcher. A Uniswap v4 hook must carry its permission flags in the low 14 bits of its address and this launch takes no salt, so the launcher's constructor mines the first CREATE2 salt (from its own address, up to 400000 tries, about one in 16384 matches) whose address carries flags 0x20CC (beforeInitialize, beforeSwap, afterSwap, beforeSwapReturnDelta, afterSwapReturnDelta), then deploys src/SherwoodV2.sol:SherwoodV2 there with CREATE2 and reverts with NoSalt if the create fails. Mining and hook deployment together cost about 10M gas, rehearsed on a fork in test/SherwoodV2LauncherFork.t.sol. The game is launcher.hook() and the salt used is launcher.salt(). Neither constructor calls another contract (the launcher only hashes and creates; the hook stores its arguments and validates its own address flags with the Hooks library), so the empty-chain rehearsal passes; the launcher's runtime is small and uses no DELEGATECALL, CALLCODE or SELFDESTRUCT. The launcher's eight parameters are the hook's eight constructor parameters, same order, as plain address and uint256 types, and are forwarded unchanged: poolManager, the Uniswap v4 PoolManager on Robinhood Chain, 0x8366a39cc670b4001a1121b8f6a443a643e40951; token, $IMD, 0x5f7bb59365ce557c26dbcaa4ee9d39a4b95b7127; host, $PFWA, 0xa934ba4f59070149d37a93f8a002af79bae35563; hostHolderMin 100000000000000000000000 (100000 PFWA in wei, the balance that earns the host-holder bonus); dice, the Dice Protocol entropy contract, 0xd8a0680e7699526b57140ed4eafdcc7219dc0a0c; diceProvider 0x8741b8a825644d9ef18faf2dab5e9b47b900f2b6; owner $owner, the wallet that paid for the launch, stored by the hook as both owner and initial operator (never the factory or tx.origin); genesis 1791835200, the unix time round 0 opens, with rounds rolling every 20 hours from it. Game rules and split are unchanged from the brief: one native-ETH/$IMD pool, every buy scores points and pays 5% of its ETH into the round's pot; moves are Buy, Steal, Robin Hood, Flip (Dice randomness) and Shield with stacking charges; each pot pays the top 3 40/20/10%, 8% to the King of the Hill, 10% buys back and burns $IMD through the existing ETH/$IMD 1% pool, 7% buys back and burns $PFWA through its holder pool, and 5% rolls over; prizes are claimable for 7 days and unclaimed prizes are swept into the live round's pot. Both buyback pool keys are constants in the hook (buybackPool and hostBuybackPool views: the ETH/$IMD 1% pool with tick spacing 100 and no hook, and the ETH/$PFWA dynamic-fee pool with tick spacing 200 and Hookr's holder hook 0xb914f955294799de4b891bd2EA8AF628Fa1c68CC), so nothing is set after deployment. The only step after deployment is the owner initializing the one native-ETH/$IMD game pool on the PoolManager with launcher.hook() as its hook: beforeInitialize accepts only the owner as initializer, only ETH/$IMD as the currencies, and only once. The owner may later propose a new owner with setOwner (taken over with acceptOwner) and name the buyback operator with setOperator; those are owner actions outside this manifest.","contracts":[{"contract":"SherwoodV2Launcher","constructorArgs":["0x8366a39cc670b4001a1121b8f6a443a643e40951","0x5f7bb59365ce557c26dbcaa4ee9d39a4b95b7127","0xa934ba4f59070149d37a93f8a002af79bae35563","100000000000000000000000","0xd8a0680e7699526b57140ed4eafdcc7219dc0a0c","0x8741b8a825644d9ef18faf2dab5e9b47b900f2b6","$owner","1791835200"]}]},"manifestError":null},"attestationFailure":null,"deployFailure":null,"policyVersion":28,"economics":null,"poolFee":null,"requester":"0x420944b441715e34dd672ae0eb4526a7ad7d1eef","admissionChecks":[{"name":"provenance","detail":"9 node(s) accepted at bd9dc1dd","status":"passed"},{"name":"findings","detail":"9 accepted submission(s), no unresolved blocking findings","status":"passed"},{"name":"independent_review","detail":"1 independent review(s)","status":"passed"},{"name":"bytecode","detail":"3 contract(s) clean and reproducible","status":"passed"},{"name":"manifest","detail":"1 application contracts; no protocol token or pool","status":"passed"},{"name":"protected_invariants","detail":"invariants-11aebc2aca1e: Suite result: ok. 1 passed; 0 failed; 0 skipped; finished in 22.85ms (102.66µs CPU time)","status":"passed"},{"name":"economics","detail":"policy explicitly selects no on-chain contributor rewards","status":"passed"}],"assurances":[],"logo":null,"seeded":null,"createdAt":"2026-10-12T10:45:54.455Z","updatedAt":"2026-10-12T10:48:33.925Z","jobs":[{"id":"55bfb5c6-093b-4ab4-83ef-5ddb1a4c1cf3","objective":"Audit and deploy Sherwood v2 on Robinhood Chain (4663) for $IMD, with no new token. Sherwood v2 (src/SherwoodV2.sol) is a Uniswap v4 hook running a leaderboard game in rolling 20-hour rounds on one native-ETH/$IMD pool: every buy scores points and pays 5% of its ETH into the round's pot. Moves are Buy, Steal, Robin Hood, Flip (Dice Protocol randomness) and Shield, with stacking charges. Each pot pays the top 3 40/20/10%, 8% to the King of the Hill (longest at #1), 10% buys back and burns $IMD through the existing ETH/$IMD 1% pool, 7% buys back and burns $PFWA (the host token) through its holder pool, and 5% rolls over. Prizes are claimed within 7 days; anything unclaimed goes into the live round's pot. A v4 hook needs its permission flags (0x20CC) in its address, and this launch takes no salt, so deploy ONE contract, src/SherwoodV2Launcher.sol:SherwoodV2Launcher, whose constructor finds the salt onchain and deploys the hook with CREATE2 (about 10M gas; rehearsed on a fork in test/SherwoodV2LauncherFork.t.sol). The hook is launcher.hook(). Constructor arguments, in order: poolManager 0x8366a39cc670b4001a1121b8f6a443a643e40951, token ($IMD) 0x5f7bb59365ce557c26dbcaa4ee9d39a4b95b7127, host ($PFWA) 0xa934ba4f59070149d37a93f8a002af79bae35563, hostHolderMin 100000000000000000000000, dice 0xd8a0680e7699526b57140ed4eafdcc7219dc0a0c, diceProvider 0x8741b8a825644d9ef18faf2dab5e9b47b900f2b6, owner $owner, genesis 1791835200. Please keep the game rules and the split as they are; fix anything the audit finds. Focus: swap delta accounting and the two buyback swaps in unlockCallback, pot/prize/referral/claim/sweep accounting (ETH out can never exceed ETH in, and settlement can never revert), the flip lifecycle with Dice, the charge clocks, the King of the Hill reign tracking, and anything that could block swaps, settlement or claims. Our own notes for the audit are in README.md under Sherwood v2. This repository already carries the fixes from IMD launch 1355's audit of this code (ADAPTATION.md, revisions 1 and 2) and, in revision 3, the fix for the finding that parked that launch: settle now credits a final unknown spell to the round's final #1 (test_settleCreditsTheFinalUnknownSpellToTheFinalLeader). The runtime is 24,480 bytes, 96 under EIP-170.","state":"completed","attachedAt":"2026-10-12T10:45:54.455Z"}],"artifacts":[{"role":"other","name":"SherwoodV2Launcher","address":"0x805879db0a279f718f951bff2b6b6fd850549a44","creationCodeHash":"fb2f2737af51ae4e02d6b2fb32678b7ae8920cc85886949ca767c179b1392d1b","txHash":"0x8e328a10fb218f689e89d4f207c43700243b223fd733382e27b3ca0575da1d1b","blockNumber":86614810,"verifiedAt":"2026-10-12T10:48:56.647Z","verifyFailure":null}],"allocations":[]}