{"rewardSnapshot":null,"merkleRoot":null,"claims":null,"id":"3836b728-fabb-40bc-a57f-180416ed7f84","launchNumber":2456,"kind":"evm_contracts","status":"live","chainId":1,"sourceRepoUrl":"https://github.com/identity-md-launches/launch-2456-what-build-two-immutable","sourceCommit":"fcca6490b279cd9821cf71d1edf083afbfa1cba5","parkedReason":null,"artifactCount":2,"manifestHash":"d3f49364db88921d920c4c24e232335e24e73fba19a04749dce53bda6a476cf6","attestationHash":"bb8fa4401d40d7f895d5d6f319016a3b008aab6167db37fdc917f7a991a3c0e9","attestation":{"treeHash":"c17b69bd0efabb09b0c967969d9f1336c196407f","verifierVersion":"0.1.0+560ab6a2","verifierKey":"68249df1f422fa72f61ca7f0ddaf9b62043959c5c134498441d5e552a9921782","toolchain":{"solc":"0.8.26","forge":"forge Version: 1.8.3","viaIR":false,"optimizer":true,"evmVersion":"cancun","bytecodeHash":"none","optimizerRuns":200},"contracts":[{"name":"ExactStoreToken","path":"src/store/ExactStoreToken.sol","abiHash":"901479ff41b7abaa4e104eed70cdb29ee28c6e3a1127af645f7ce8f3eedf039a","opcodes":{"callcode":false,"delegatecall":false,"selfdestruct":false},"metadataHash":"045ac30452277cd13407cc524b5ffbbe13e4bb05ceb78ada154a7e0efc30af32","creationCodeHash":"1c1538710fd2c69e5ac07c04cdc677f2ab0a86dbfd7eaf576dc6132a0c968921","deployedCodeHash":"9d964dba80c392f9f7d80c1cd20d1188595b2a3f303e08845448d4c880032f00","creationCodeBytes":81,"deployedCodeBytes":31},{"name":"FeaturedPlacementsV2","path":"src/store/FeaturedPlacementsV2.sol","abiHash":"2330dcebc843dbf0d736ec550550b85c87404c0fb0ce6e55f3892ffc002fdcc4","opcodes":{"callcode":false,"delegatecall":false,"selfdestruct":false},"metadataHash":"c065e4973157eb03def066ff7b72cd4e35bddae18bac73a415d00b00f61f46c8","creationCodeHash":"51ce68f0022d3af14879133483187a13941c676fffe289729431d79abac0fc83","deployedCodeHash":"d54c0d0fac57f749cf2fba12ae98943d579b56f276fd1c84afedb18e3a4e5f57","creationCodeBytes":9482,"deployedCodeBytes":9108},{"name":"HookListingRegistry","path":"src/store/HookListingRegistry.sol","abiHash":"4d468de0d0d8b0de967098a5adec840dc3d46cc9df610db0a1f05543b93a09c4","opcodes":{"callcode":false,"delegatecall":false,"selfdestruct":false},"metadataHash":"c82e00565b8e6a92b2bba342987ae28d8729bfb9b93dfb4ccf9f3a3556f6f742","creationCodeHash":"538f98c75f7699464e2621fd5299400c05a286243c8cde9875faa143f63599d1","deployedCodeHash":"03700c30c74aeec61bb82f2dcb6a9048164fc277f2450e4593ccf1402da0a512","creationCodeBytes":9063,"deployedCodeBytes":9035}],"manifest":{"kind":"evm_contracts","notes":"The Hooks Store on Ethereum: HookListingRegistry is a free, permissionless listing registry with no administrator. FeaturedPlacementsV2 uses that registry and an explicit $owner with two-step ownership transfer. Both contracts are non-upgradeable, with no proxy or upgrade path. After deployment, the owner must call configureToken once with the existing 18-decimal Ethereum IMD token at 0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7 and setProceedsRecipient to the owner's own wallet. These are separate owner actions, not deployment calls or constructor dependencies. No token, pool or liquidity is created; deployment requires no ETH funding and makes no payments. Each listing may have one live #ad placement, costing 100000000000000000 base units (0.1 IMD) for 24 hours. Anyone may boost a live placement from their deposited balance. Cancellation refunds the unearned base price pro rata to the original payer and credits the earned base plus all nonrefundable boosts to the recipient pinned at purchase; settlement credits the full base plus boosts to that recipient. Depositors withdraw their own available balances and recipients withdraw their own earned proceeds. Boosts remain in totalEscrowed until closure; accountedBalance equals totalAvailable + totalEscrowed + totalProceeds. rankOf and featured expose base-plus-boost totals for clients to sort descending, breaking ties by lower placement ID.","contracts":[{"contract":"HookListingRegistry","constructorArgs":[]},{"contract":"FeaturedPlacementsV2","constructorArgs":["$owner","$contract:HookListingRegistry"]}]},"manifestError":null},"attestationFailure":null,"deployFailure":null,"policyVersion":27,"economics":null,"poolFee":null,"requester":"0x5bff2a2fecd1d6152676813b21346238733beab1","admissionChecks":[{"name":"provenance","detail":"8 node(s) accepted at fcca6490","status":"passed"},{"name":"findings","detail":"8 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":"2 application contracts; no protocol token or pool","status":"passed"},{"name":"protected_invariants","detail":"invariants-72ac6e744789: Suite result: ok. 1 passed; 0 failed; 0 skipped; finished in 658.04µs (517.03µ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-22T06:10:43.147Z","updatedAt":"2026-10-22T14:42:28.602Z","jobs":[{"id":"a9818b4d-a1fe-4ef7-bab0-82509f56b0ac","objective":"What to build: two immutable contracts for The Hooks Store on Ethereum (the first launch deployed the same contracts on Robinhood Chain), HookListingRegistry (a free on-chain listing registry) and FeaturedPlacementsV2 (a paid, refundable 24-hour featured-placement escrow in IMD). Upgrades: none. No proxy, no upgrade path, no DELEGATECALL, no SELFDESTRUCT; both contracts are immutable once deployed and the only owner powers are the ones listed below. Start from the audited source at https://github.com/identity-md-launches/launch-1811-build-technical-foundation-hooks/tree/46e17ea70534e8a7ac2c4ff78501a3c183d32da8/src/store (HookListingRegistry.sol unchanged; FeaturedPlacements.sol becomes FeaturedPlacementsV2 with these changes and nothing else): DURATION is 24 hours instead of 7 days; PRICE stays 0.1 IMD (100000000000000000 base units of the configured 18-decimal token); add boost(uint256 placementId, uint256 amount), callable by anyone while the placement is open, which pulls amount from the caller's deposited balance (deposit stays as in the original), adds it to totalBoost[placementId] and to the escrow, and is never refunded: on cancel the base price refunds pro rata exactly as before and the whole boost goes to the pinned proceeds recipient; on settle both go to the recipient; add rankOf(uint256 placementId) view returning base plus boost, and have featured(cursor, scanLimit) also return each placement's total so the website can sort by total paid, ties by lower id first; keep one live placement per listing, the #ad label on every placement and event, the two-step owner, configureToken once, setProceedsRecipient, withdraw and withdrawProceeds, the reentrancy guards, exact-transfer checks and the conservation rule accountedBalance = totalAvailable + totalEscrowed + totalProceeds with boosts counted in totalEscrowed until closed. Constructors: HookListingRegistry() and FeaturedPlacementsV2($owner, $contract:HookListingRegistry). Owner functions stay owner-only with $owner as the owner; no msg.sender ownership. Keep the existing Foundry tests passing with the new duration, and add tests for boost by a third party, boost forfeiture on cancel, ranking ties, and the invariant with boosts. No token, pool or liquidity is created. Dependencies: only the IMD token on Ethereum (0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7), set after deployment by the owner through configureToken, never a constructor dependency. Recipient of ad proceeds: set after deployment by the owner through setProceedsRecipient to the owner's own wallet; nothing is paid to anyone at deployment.","state":"completed","attachedAt":"2026-10-22T06:10:43.147Z"}],"artifacts":[{"role":"other","name":"FeaturedPlacementsV2","address":"0x1da6f19ee08365813651de6420603fea4fbcdc9a","creationCodeHash":"51ce68f0022d3af14879133483187a13941c676fffe289729431d79abac0fc83","txHash":"0x1e9a0662a95042821de95e3d69304e42bb4e11b09cadbeb7d9148a6d8b52cb4a","blockNumber":26248823,"verifiedAt":"2026-10-22T14:43:10.740Z","verifyFailure":null},{"role":"other","name":"HookListingRegistry","address":"0xff8b7110525c1ec39d6df825880890e7d9184f06","creationCodeHash":"538f98c75f7699464e2621fd5299400c05a286243c8cde9875faa143f63599d1","txHash":"0x1e9a0662a95042821de95e3d69304e42bb4e11b09cadbeb7d9148a6d8b52cb4a","blockNumber":26248823,"verifiedAt":"2026-10-22T14:43:05.022Z","verifyFailure":null}],"allocations":[]}