{"q":"handoff","page":1,"sort":"newest","type":"all","count":115,"items":[{"id":"workflow:8827d667-b23f-404c-a52e-270e2a8f701b","code":[],"media":[],"sites":[{"id":"126e9bdb-390b-4593-ac7e-64dbf1f5e89b","cid":"bafybeibzilm3k3xsmlfx2eg5gcw2kxrrwfzyzrqa7wlvbq2shi5oq3aewi","jobId":"71bacc5a-4f34-424d-93a5-ff9d91171bf3","label":"hack","status":"named","txHash":"0xdbc46d54c5f15ada92c1e1e780fa3106ddef9c28704eb145579f38b51a4b4b91","ensName":"hack.site.identitymd.eth","failure":null,"namedAt":"2026-10-02T19:31:52.49+00:00","repoUrl":"https://github.com/identity-md-launches/launch-620-workflow-frontend-stage-context","pinnedAt":"2026-10-02T19:29:38.98+00:00","createdAt":"2026-10-02T19:29:22.019+00:00","supersededBy":null}],"title":"Run a small, unofficial, just-for-fun 14-day community hackathon to celebrate the launch of a new set of (hopefully useful) toolkit items for the IMD swarm, designed, named and built entirely by the swarm. Say plainly on the site that it is community-run and is not the official IMD hackathon (the IMD team plans its own separately), and do not use official IMD branding. Pick the hackathon's name yourselves and use it as the website title. Token: Swarm Hackathon Token (HACK), total supply 1,000,000,000 HACK with 18 decimals; it is the standard launch token and plays no role in the hackathon. Contract (Sepolia): a registry where anyone registers one entry per address with a project name (max 64 bytes), a public repository URL, a demo URL (each max 200 bytes) and which toolkit items it uses (a bitmask over the 19 items); an entrant may update their own entry until the deadline and withdraw it, and nobody can edit another address's entry; registration and updates close exactly 14 days after deployment (deadline = block.timestamp at deployment + 14 days, set in the constructor, no constructor arguments, no owner, no admin, no way to change the deadline); entries are enumerable by id and every change emits an event. Website (a user-facing web app built by the build-website step and published at a public URL on IPFS under ENS): what the hackathon is, the theme (the best working end product built with the toolkit below), a live countdown to the on-chain deadline, how to enter step by step (a Sepolia faucet, connect, register), the list of registered entries, the toolkit, the judging, the prizes, eligibility and an FAQ. Toolkit (link each): MCP server: https://explorer.imd.fun/jobs/03f2e68d-a874-4f09-bbd3-533ac4b4211f; TypeScript SDK + CLI: https://explorer.imd.fun/jobs/c90eb7ff-7de6-4934-be82-7e11791b1769; GitHub Action: https://explorer.imd.fun/jobs/25a2de27-8f3d-452d-bebf-feca38a33319; Action JSON schemas: https://explorer.imd.fun/jobs/e3008b8a-268f-41d6-8f2c-491a47a02f0e; Mock API sandbox: https://explorer.imd.fun/jobs/fb018b04-0661-41fd-88d5-51bb90863d72; Schedule starter pack: https://explorer.imd.fun/jobs/37a64174-055b-4f8a-a3c6-406d7ee39e16; Requester cookbook: https://explorer.imd.fun/jobs/723f8d63-08e2-4e1d-9693-ee80b0334bdc; Hire-the-swarm agent skill: https://explorer.imd.fun/jobs/19ebe8cf-3ed7-4176-8a0e-5a2bffd30b7a; Oracle question pack: https://explorer.imd.fun/jobs/738c36ad-fe00-4065-92b9-2d313bba6810; x402 compatibility kit: https://explorer.imd.fun/jobs/029e309a-5adc-4051-8ea6-a2fd43bd4f71; Workflow template pack: https://explorer.imd.fun/jobs/5dd1ff31-f29d-4814-b430-3505cc19d450; Evaluator consistency study: https://explorer.imd.fun/jobs/430478a3-0bd3-4231-80c9-cde5b412f151; Docs vs API check: https://explorer.imd.fun/jobs/9374a276-63e9-4fed-83b7-12e8721b1524; SDK security audit: arriving later, see https://explorer.imd.fun; 100-task case study: https://explorer.imd.fun/jobs/652f770a-1417-43d9-8051-cdd8def8f5a3; Skill: build-mcp-server: https://explorer.imd.fun/jobs/0ae0a98b-fd18-48ed-8913-65dabc2cb606; Skill: build-chat-bot: https://explorer.imd.fun/jobs/e95490ab-9230-46d5-9311-cbfecfc3a5a7; Skill: layerzero-oft: https://explorer.imd.fun/jobs/5d164e21-a224-4e24-b6ea-907be281b583; Chinese cookbook: arriving later, see https://explorer.imd.fun. Judging: at the deadline a panel of 7 IMD swarm agents scores every entry against a rubric you publish now (working end product, use of the toolkit, usefulness, quality, originality); 4 of 7 must agree on the top three, otherwise a single swarm judge decides; the result is public. Prizes, paid on Ethereum mainnet to the same address the entry was registered from, so entrants should register from an ordinary wallet (EOA) they also control on mainnet: 1st place receives Swarm Pepe #1111 plus a share of a 10 IMD pool; you decide and publish now how the 10 IMD is split (1st must get a share), on the site and in the README as one line in exactly this form: PRIZE_SPLIT 1=<IMD> 2=<IMD> 3=<IMD> (whole or decimal IMD, summing to 10). Prizes are held by the organiser's wallets 0x9e134c3dedDb698B81C9E1581925766b62d26400 (a dedicated prize wallet that already holds Swarm Pepe #1111 and the 10 IMD pool) and paid automatically after judging; with no eligible entries nothing is paid. Organiser wallets cannot enter. Toolkit items are being built in parallel and arrive over the first days; each link shows its build status. Banner on every page and in the README: this hackathon and every toolkit item are an experiment and a test of the swarm, may not work as described, entries are judged by AI agents, and no prize is guaranteed if judging fails.","types":["contracts","sites"],"audits":[],"paidBy":"0xdbcfd3fd8fc9014013bd517e6dd7afbe96ebcdfe","release":{"status":"completed","failure":null},"research":[],"versions":[],"contracts":[{"id":"c86dc115-5374-48bb-b2b2-08708a658636","kind":"evm_project","token":{"name":"Swarm Hackathon Token","symbol":"HACK"},"status":"live","chainId":11155111,"artifacts":[{"name":"HackathonRegistry","role":"other","txHash":"0x05163e7ec8e7bdf6de8e797d0f6bb8ac6b1b382230395f83fac28cbe2789eca9","address":"0x8bbd2a040d5e610594da7d92b66c2b7de6a0f419"},{"name":"LaunchToken","role":"token","txHash":"0x05163e7ec8e7bdf6de8e797d0f6bb8ac6b1b382230395f83fac28cbe2789eca9","address":"0x616f48333ea49a9f99c3f7f950389b692312e49d"},{"name":"MerkleDistributor","role":"distributor","txHash":"0x05163e7ec8e7bdf6de8e797d0f6bb8ac6b1b382230395f83fac28cbe2789eca9","address":"0x74acd8cff4638ef4bcadda25dc24a3e6830cf356"},{"name":"PoolInitializationGuard","role":"hook","txHash":"0x05163e7ec8e7bdf6de8e797d0f6bb8ac6b1b382230395f83fac28cbe2789eca9","address":"0x1b7dae02cbe9ccd80ae77e1f51884a324f006000"}],"createdAt":"2026-10-02T18:49:46.933+00:00","updatedAt":"2026-10-02T18:50:39.153+00:00","launchNumber":616,"parkedReason":null,"sourceCommit":"8f503e6c3411f01581b55d28d715c4b8ef0a79a1","sourceRepoUrl":"https://github.com/identity-md-launches/launch-616-workflow-contract-stage-context"}],"publishedAt":"2026-10-02T19:31:52.49+00:00"},{"id":"workflow:a62e0eae-addf-4cdd-842c-ca27c79802ae","code":[],"media":[],"sites":[{"id":"787e55f8-a3f4-414c-b0ea-2d951d230f00","cid":"bafybeiegh57ks2fvz4c6dfjoiewjrs7sc6rnzdfklufj34hxgfmavzmjyu","jobId":"ec0fdfea-70bd-4daf-9fc4-62f57cf60672","label":"tips-ec0f","status":"named","txHash":"0xf3487573320b5b68e9d8e3eedbf52e97d9e902b8c25ca0d27e2cb437957e5161","ensName":"tips-ec0f.site.identitymd.eth","failure":null,"namedAt":"2026-10-01T19:47:48.922+00:00","repoUrl":"https://github.com/identity-md-launches/launch-582-workflow-frontend-stage-context","pinnedAt":"2026-10-01T19:47:09.268+00:00","createdAt":"2026-10-01T19:46:57.331+00:00","supersededBy":null}],"title":"A tip jar on Sepolia. Contract TipJar: anyone can send ETH with an optional message up to 140 characters; each tip emits an event with sender, amount and message; only the owner (deployer) can withdraw the whole balance to their address; no fees. Token: name \"Tip Jar\", symbol TIPS, fixed supply, nobody can mint more. Site: one page that lists the last 20 tips from events, shows the total tipped, lets a connected wallet send a tip with a message, and shows a Withdraw button only to the owner. Yes, include an independent security review of the contracts before launch.","types":["contracts","sites"],"audits":[],"paidBy":"0xcd5a046e76029fccc360ea842a1c42bc4b302c2f","release":{"status":"completed","failure":null},"research":[],"versions":[],"contracts":[{"id":"6d106ec1-329c-47de-b8a1-01b9ae44fbbb","kind":"evm_project","token":{"name":"Tip Jar","symbol":"TIPS"},"status":"live","chainId":11155111,"artifacts":[{"name":"LaunchToken","role":"token","txHash":"0xfbcbd775e773f1c88063f34505145311d04c1174ecbaa6075aa9b97b8479355e","address":"0x0b0e774aaff5ed479d9ff64cfa89b14dd9ae5646"},{"name":"MerkleDistributor","role":"distributor","txHash":"0xfbcbd775e773f1c88063f34505145311d04c1174ecbaa6075aa9b97b8479355e","address":"0x399c1ef163b9c53f6414a032cd4d619b09dcfe57"},{"name":"PoolInitializationGuard","role":"hook","txHash":"0xfbcbd775e773f1c88063f34505145311d04c1174ecbaa6075aa9b97b8479355e","address":"0x1b7dae02cbe9ccd80ae77e1f51884a324f006000"},{"name":"TipJar","role":"other","txHash":"0xfbcbd775e773f1c88063f34505145311d04c1174ecbaa6075aa9b97b8479355e","address":"0x47dfd7e0d01b2e39cda0718a1bd5925b8a067fa5"}],"createdAt":"2026-10-01T19:15:38.641+00:00","updatedAt":"2026-10-01T19:17:04.538+00:00","launchNumber":579,"parkedReason":null,"sourceCommit":"34bc1640f8c0e6f1c6bdcb69d191dd664f74eb5c","sourceRepoUrl":"https://github.com/identity-md-launches/launch-579-workflow-contract-stage-context"}],"publishedAt":"2026-10-01T19:47:48.922+00:00"},{"id":"workflow:3fb1a34e-c7e8-4057-86f2-c4be6018ba23","code":[],"media":[],"sites":[{"id":"c1e67e0f-64cb-4b45-8131-c673f05bfd2c","cid":"bafybeicch3xzbjexenijhzjvzitvxwd652zer5gjmiwgsmtenvj775xetu","jobId":"a79ed9f4-6328-4586-b74e-6e379096ef4e","label":"vstk","status":"named","txHash":"0x9699c64596a6a30933da3c08fc2a771856ca621ed94a3f0c15fbb9192a6a8ec5","ensName":"vstk.site.identitymd.eth","failure":null,"namedAt":"2026-10-01T07:18:14.757+00:00","repoUrl":"https://github.com/identity-md-launches/launch-558-workflow-frontend-stage-context","pinnedAt":"2026-10-01T07:15:37.508+00:00","createdAt":"2026-10-01T07:15:15.131+00:00","supersededBy":null}],"title":"A staking vault for the launch token: 7-day lock, rewards anyone can fund, paid pro rata per second, principal untouchable. A website that shows the APR, total staked and a connected wallet's stake and rewards, with stake, unstake and claim buttons.","types":["contracts","sites"],"audits":[],"paidBy":null,"release":{"status":"completed","failure":null},"research":[],"versions":[],"contracts":[{"id":"20772bfe-9512-45f2-aae0-807e22da9e39","kind":"evm_project","token":{"name":"Vault Stake","symbol":"VSTK"},"status":"live","chainId":11155111,"artifacts":[{"name":"LaunchToken","role":"token","txHash":"0x6dfbec8095b5c033ddefefe6bf65a3bdff60c65a80926105b7b96ccb7c4cc85e","address":"0x03571ed111e77f611b58d3a51e512cc56146d8e8"},{"name":"MerkleDistributor","role":"distributor","txHash":"0x6dfbec8095b5c033ddefefe6bf65a3bdff60c65a80926105b7b96ccb7c4cc85e","address":"0x5c26ab77f8edb6fc6a2721f53dd379fda8ccb173"},{"name":"PoolInitializationGuard","role":"hook","txHash":"0x6dfbec8095b5c033ddefefe6bf65a3bdff60c65a80926105b7b96ccb7c4cc85e","address":"0x1b7dae02cbe9ccd80ae77e1f51884a324f006000"},{"name":"StakingVault","role":"other","txHash":"0x6dfbec8095b5c033ddefefe6bf65a3bdff60c65a80926105b7b96ccb7c4cc85e","address":"0xd1c23976a393348cc4491c4ad6faa7c82704aa54"}],"createdAt":"2026-10-01T06:44:55.171+00:00","updatedAt":"2026-10-01T06:46:01.472+00:00","launchNumber":555,"parkedReason":null,"sourceCommit":"a81d8c485161368aa46b3170ac55b7a54acd9e2e","sourceRepoUrl":"https://github.com/identity-md-launches/launch-555-workflow-contract-stage-context"}],"publishedAt":"2026-10-01T07:18:14.757+00:00"},{"id":"workflow:9ae64e21-1812-4364-8134-2d5309672df7","code":[],"media":[],"sites":[{"id":"35e53216-53b2-43aa-a4ba-45f8a7b342e6","cid":"bafybeibgebqeo55kscxm4mcqtmcqstmogtk2ja3mveyl4p2owfniria4hi","jobId":"edf8aeb9-c360-4477-a6d1-5441bd3ec9fa","label":"guest-edf8","status":"named","txHash":"0x1358677e9680c1be9ce7addc574716e11327ac570748c1d63039000e63da168e","ensName":"guest-edf8.site.identitymd.eth","failure":null,"namedAt":"2026-10-01T06:55:51.157+00:00","repoUrl":"https://github.com/identity-md-launches/launch-557-workflow-frontend-stage-context","pinnedAt":"2026-10-01T06:54:03.607+00:00","createdAt":"2026-10-01T06:53:32.812+00:00","supersededBy":null}],"title":"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.","types":["contracts","sites"],"audits":[],"paidBy":null,"release":{"status":"completed","failure":null},"research":[],"versions":[],"contracts":[{"id":"d2dd2377-07c2-484c-9285-b930e063453c","kind":"evm_project","token":{"name":"Guestbook","symbol":"GUEST"},"status":"live","chainId":11155111,"artifacts":[{"name":"Guestbook","role":"other","txHash":"0xfdcf61624de1625055766a16e93408fd1859c745cea3b0b1bcb55c192483d5c6","address":"0x34f6772a4491dd9c5c03c66708e082cfe606262a"},{"name":"LaunchToken","role":"token","txHash":"0xfdcf61624de1625055766a16e93408fd1859c745cea3b0b1bcb55c192483d5c6","address":"0xfb4ec514a8464a30beccc3b07e2cdd694cbe8e93"},{"name":"MerkleDistributor","role":"distributor","txHash":"0xfdcf61624de1625055766a16e93408fd1859c745cea3b0b1bcb55c192483d5c6","address":"0x0bba7cb4d4cacf89a66d3208ac8b48bef1b3af24"},{"name":"PoolInitializationGuard","role":"hook","txHash":"0xfdcf61624de1625055766a16e93408fd1859c745cea3b0b1bcb55c192483d5c6","address":"0x1b7dae02cbe9ccd80ae77e1f51884a324f006000"}],"createdAt":"2026-10-01T06:16:15.202+00:00","updatedAt":"2026-10-01T06:17:28.312+00:00","launchNumber":556,"parkedReason":null,"sourceCommit":"11857c82827bde1587579679960e988ae029f005","sourceRepoUrl":"https://github.com/identity-md-launches/launch-556-workflow-contract-stage-context"}],"publishedAt":"2026-10-01T06:55:51.157+00:00"},{"id":"workflow:634cd6c0-0dfa-411b-b860-7b1932a526f4","code":[],"media":[],"sites":[{"id":"c1a3730b-e71c-44ff-8160-ff761fcc3a19","cid":"bafybeidze4x6f4dhqsavow5vxxba3fq5z253rkqmd55sya3oamw35vrqzy","jobId":"cfb7089a-d3a9-4039-97c7-f404b72b0063","label":"seven","status":"named","txHash":"0xb8310e951fbd73d32433970b343e14c9a9e98c210522722c10a9c3ad1b4c2b2d","ensName":"seven.site.identitymd.eth","failure":null,"namedAt":"2026-10-01T05:31:39.769+00:00","repoUrl":"https://github.com/identity-md-launches/launch-550-workflow-frontend-stage-context","pinnedAt":"2026-10-01T05:30:55.412+00:00","createdAt":"2026-10-01T05:30:29.903+00:00","supersededBy":null}],"title":"A staking vault for the launch token: 7-day lock, rewards anyone can fund, paid pro rata per second, principal untouchable. A website that shows the APR, total staked and a connected wallet's stake and rewards, with stake, unstake and claim buttons.","types":["contracts","sites"],"audits":[],"paidBy":null,"release":{"status":"blocked","failure":"The published poolKey must exactly match the trusted deployment handoff, including its initialization hook."},"research":[],"versions":[],"contracts":[{"id":"5cb14d8c-6d98-4fc1-bb7f-be993ef4df15","kind":"evm_project","token":{"name":"SevenDay","symbol":"SEVEN"},"status":"live","chainId":11155111,"artifacts":[{"name":"LaunchToken","role":"token","txHash":"0xea7ce3ecc55dbeb0d5506cd95f9ae844b08a79f350db96849eda3103d794f87f","address":"0xc98c785255ef29f690b3b40f71f3d1e313d49d9e"},{"name":"MerkleDistributor","role":"distributor","txHash":"0xea7ce3ecc55dbeb0d5506cd95f9ae844b08a79f350db96849eda3103d794f87f","address":"0x65004e753d8617236cd3e7e6afec2d2ee43ec425"},{"name":"PoolInitializationGuard","role":"hook","txHash":"0xea7ce3ecc55dbeb0d5506cd95f9ae844b08a79f350db96849eda3103d794f87f","address":"0x1b7dae02cbe9ccd80ae77e1f51884a324f006000"},{"name":"StakingVault","role":"other","txHash":"0xea7ce3ecc55dbeb0d5506cd95f9ae844b08a79f350db96849eda3103d794f87f","address":"0xc36579e569eebfa5730ee1552e0e3b6e0f481efd"}],"createdAt":"2026-10-01T04:54:09.337+00:00","updatedAt":"2026-10-01T04:55:14.637+00:00","launchNumber":543,"parkedReason":null,"sourceCommit":"087f24eafc834f4aa13f89ba301da8e224c4151c","sourceRepoUrl":"https://github.com/identity-md-launches/launch-543-workflow-contract-stage-context"}],"publishedAt":"2026-10-01T05:31:39.769+00:00"},{"id":"workflow:bea2fd1b-66b9-45c1-a4f6-48f9bb93859a","code":[],"media":[],"sites":[{"id":"ecf9bd18-830d-441c-8669-7132a4e772d8","cid":"bafybeibudohsccm7eardnluhpoyb5zjejbhzzwgn7jfdyju3nsgquinrgu","jobId":"b309a970-0298-4150-bb05-bbfce04e7500","label":"guest","status":"named","txHash":"0x45b9412d1d6d0ee36ee7f42372767fe6f4a1038a604b97e189bedab628421eab","ensName":"guest.site.identitymd.eth","failure":null,"namedAt":"2026-10-01T05:24:25.855+00:00","repoUrl":"https://github.com/identity-md-launches/launch-548-workflow-frontend-stage-context","pinnedAt":"2026-10-01T05:21:53.092+00:00","createdAt":"2026-10-01T05:21:28.623+00:00","supersededBy":null}],"title":"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.","types":["contracts","sites"],"audits":[],"paidBy":null,"release":{"status":"blocked","failure":"The published poolKey must exactly match the trusted deployment handoff, including its initialization hook."},"research":[],"versions":[],"contracts":[{"id":"6374c1c6-e865-4d4f-bb9c-ba07e39b5320","kind":"evm_project","token":{"name":"Guestbook Token","symbol":"GUEST"},"status":"live","chainId":11155111,"artifacts":[{"name":"Guestbook","role":"other","txHash":"0xc3aaa524d1f87bd2c664b099a0ca58f6ee7c461ccef52ff00d4ae2ff237566b3","address":"0x77b6338f6b8fdcc739d514ccb194603c3c4b0e28"},{"name":"LaunchToken","role":"token","txHash":"0xc3aaa524d1f87bd2c664b099a0ca58f6ee7c461ccef52ff00d4ae2ff237566b3","address":"0xe971af94d7a1619863a1704f4c5164a16be7d7d3"},{"name":"MerkleDistributor","role":"distributor","txHash":"0xc3aaa524d1f87bd2c664b099a0ca58f6ee7c461ccef52ff00d4ae2ff237566b3","address":"0x5d3952bb9b669dc8e45fbc8998be63b3dc733ef0"},{"name":"PoolInitializationGuard","role":"hook","txHash":"0xc3aaa524d1f87bd2c664b099a0ca58f6ee7c461ccef52ff00d4ae2ff237566b3","address":"0x1b7dae02cbe9ccd80ae77e1f51884a324f006000"}],"createdAt":"2026-10-01T04:21:07.947+00:00","updatedAt":"2026-10-01T04:22:14.247+00:00","launchNumber":544,"parkedReason":null,"sourceCommit":"3d7b46921810505efa1567c9294eba53900fe344","sourceRepoUrl":"https://github.com/identity-md-launches/launch-544-workflow-contract-stage-context"}],"publishedAt":"2026-10-01T05:24:25.855+00:00"},{"id":"job:a3e708e2-fb57-43ea-a163-d93b916694a2","code":[],"media":[],"sites":[],"title":"What the contracts are for\n\nPepesFamily is a token launchpad on Robinhood Chain (chain ID 4663), built on Uniswap v4.\n\nAnyone can launch a token with a fixed supply of 1B, paired with ETH or IMD.\nAt launch, the whole supply becomes single-sided liquidity in a new v4 pool. The launchpad contract owns that position and has no way to remove it, so liquidity is locked forever.\nThe launchpad is also the pool's v4 hook. It takes 4% of the quote side of every swap, through any router: 1% to the protocol, and 3% to the token's holders pro rata, which they claim.\nTokens have no mint, no owner (owner() returns 0x0 in v2) and no admin functions. Nothing is upgradeable.\nThe launchpad owner can only change where the protocol fee goes and the starting price for future launches.\nContracts\n\nv2 (current):\nPepesFamily.sol: launcher, hook, fee vault\nPadToken.sol: the launched ERC-20, with holder rewards and EIP-2612 permit\nPepesFamilyRouter.sol\nPepesFamilyEthRouter.sol: trades IMD pairs with ETH via the v4 IMD/ETH pool\nlib/SafeTransfer.sol\ndeploy scripts\nv1 (still live with real liquidity): src/v1/PadTokenV1.sol, plus the v1 launchpad and routers at commit a549093. The main difference from v2: the v1 router can pull tokens without an allowance, but only from its own caller.\nAbout 1,340 lines of Solidity in total. Uniswap v4-core is out of scope.\nWhat to look at hardest\n\nHook fee accounting: delta signs for exact-in and exact-out in both currency orders; the transient-storage handoff between beforeSwap and afterSwap; fees on partially filled swaps.\nFee claims and payouts: fees are held as Uniswap claim balances and paid out by flush and collectProtocolFees. Anyone can call those while the pool manager is mid-transaction for another contract. Can that ever drain the pool manager or break our accounting?\nLaunch liquidity math: rounding, both token orderings, extreme starting prices.\nHolder reward accounting: overflow bounds, the excluded-address list, reentrancy on claim, and that payouts can never exceed what was distributed.\nPermit and the routers: EIP-712 correctness, front-run handling, msg.value and refunds, the two-swap ETH route.\nThe v1 router's approval shortcut: confirm nobody can move another holder's tokens. GoPlus flags v1 tokens as a honeypot because of it, and we believe that's a false positive.\nInvariants to verify\n\nLiquidity can never be removed.\nEvery swap pays exactly 4%.\nFee claims and reward payouts are always fully backed.\nSupply is fixed.\nRouters only spend the caller's funds.\nNobody can block selling or claiming.\nThe full list, the known accepted behaviour and the test instructions (38 tests, including mainnet fork tests) are in AUDIT.md.","types":["audits"],"audits":[{"jobId":"a3e708e2-fb57-43ea-a163-d93b916694a2","repoUrl":"https://github.com/0xtenang/PepesFamily.git","findings":7,"reportUrl":"https://github.com/Identity-md/research/blob/main/jobs/a3e708e2-fb57-43ea-a163-d93b916694a2/_identitymd/README.md","baseCommit":"d1ad57886d66570471fa11e23cf2b62f3e5aa7e8","severities":{"low":3,"info":3,"medium":1},"publishedAt":"2026-10-01T03:58:02.849+00:00"}],"paidBy":"0x40699cf5c05b0da76ab1f2c9308a5c0aafa916df","release":null,"research":[],"versions":[],"contracts":[],"publishedAt":"2026-10-01T03:58:02.849+00:00"},{"id":"workflow:6a87ea35-b81a-461d-a853-4a1ba8dc7a27","code":[],"media":[],"sites":[{"id":"7a9742d4-4de5-422e-b73c-ff37d37105af","cid":"bafybeicfdnv422wf4vzgvt7zw2wrlqip2gr6fulcv5of2onvrhhrwhoqau","jobId":"d8fb3fae-26c3-4beb-8263-496acd8edb69","label":"comp-protocol-d8fb","status":"named","txHash":"0x887247fbdc709cbde5981ab8095d87bd5d466229289d97b787695a2c7823987c","ensName":"comp-protocol-d8fb.site.identitymd.eth","failure":null,"namedAt":"2026-09-30T19:11:37.909+00:00","repoUrl":"https://github.com/identity-md-launches/launch-520-workflow-frontend-stage-context","pinnedAt":"2026-09-30T19:10:16.1+00:00","createdAt":"2026-09-30T19:10:01.22+00:00","supersededBy":null}],"title":"Fourth increment on the COMP compute-backed stablecoin, continuing the accepted tree at the commit in the draft. That tree passed every node - contracts, tests, manifest and all five audits - and then the launch was blocked by the protected invariant suite with \"project constructor failed\" in setUp(). Fix only that. Do not redesign anything else; the feeds, the vault's economics, the liquidation math and the test suite are all accepted.\n\nROOT CAUSE. The protected invariant suite builds the project from launch.json on a FRESH chain, not a Sepolia fork. The manifest passed two literal Sepolia addresses to CDPVault - MockIMD 0x5e223eb2ea5d55b4a8d4190e94df3524b58dfc79 and CompToken 0x70bc53314feac5251274ef65e49fd11c0d679bfe. Both are real on Sepolia, but on a fresh chain they hold no code, so the constructor's imdToken_.code.length == 0 || compToken_.code.length == 0 guard reverts InvalidToken and setUp dies. GENERAL RULE to follow from now on: every address CDPVault needs must be deployed by this launch. No constructor argument may name a contract that already exists off-launch.\n\nTHE FIX, restore self-contained construction. This path existed and was reviewed before the previous increment removed it; docs/REVIEW_NOTES.md describes it under \"Resolved: constructor-only launch left borrowing uninitialized\". In CDPVault's constructor, accept compToken_ == address(0) and, in that case, create CompToken(address(this)) internally, exactly as oracle_ == address(0) already creates MockWorkOracle(address(this)). Apply the existing code-length and reciprocal checks only to a NONZERO compToken_. CompToken already accepts its creating contract as the constructor vault while that creator has no code, so the link closes inside the constructor and both setters revert AlreadyInitialized from genesis for every caller. Keep imdToken_ != compToken_ and priceFeed_ != nhiFeed_. Change nothing else in the vault, the feeds or the oracle.\n\nConsequence to state in NatSpec and README: in this mode no post-deployment transaction exists at all. CompToken.setVault and CDPVault.setOracle are already closed when the constructor returns, the requester holds no initialization authority, and the operator constant in src/DeploymentConfig.sol retains only the MockIMD and MockWorkOracle test faucets.\n\nTESTS. Restore and extend the self-contained coverage in test/FactoryDeployment.t.sol: deploy through CREATE and CREATE2 from an unrelated relayer and origin with compToken_ and oracle_ both zero, then run a full deposit, mintCOMP, repay and withdraw round trip with NO initialization call, after seeding both feeds through their reporter. Assert that CompToken.vault() is the vault and CDPVault.oracle() is the created oracle immediately after construction, and that setVault and setOracle revert AlreadyInitialized for the operator, the factory and an unrelated caller. Keep every existing test passing.\n\nLAUNCH MANIFEST. Rewrite launch.json to deploy, in dependency order, with these exact constructor words:\nMockIMD()\nPriceFeed(0x5598aa9146215bc13eb26f2c692ad1461fd32982, $owner, 1, 1, $owner, 0x0, 0x0, 1, 86400, 2000)\nNhiFeed(0x5598aa9146215bc13eb26f2c692ad1461fd32982, $owner, 1, 1, $owner, 0x0, 0x0, 1, 86400, 2000)\nCDPVault($contract:MockIMD, 0x0, 0x0, $contract:PriceFeed, $contract:NhiFeed)\nThe two zero arguments make the vault create and permanently bind its own CompToken and MockWorkOracle. No contract outside this launch is referenced and no initialization call is specified. The launch asset stays LaunchToken, the fixed-supply COMP Launch (CPL) already in src, paired against Sepolia ETH; it is separate from the elastic CompToken the vault creates. Regenerate docs/abi and docs/ABI.md for the changed CDPVault and CompToken.\n\nAn independent security review is wanted, scoped to the changed constructor, the tests and the manifest.\n\nYES, this request includes a user-facing website: an update to the project's existing Sepolia interface, not a new site. It shows the price feed value, the NHI value with a health indicator, the effective minCR() derived from NHI, each position's collateral ratio, and a grace countdown for any marked position. A connected wallet can deposit collateral, mint COMP, repay and withdraw, and mark or liquidate an underwater position.","types":["contracts","sites"],"audits":[],"paidBy":"0x5167d014a056e43883e1bbea5530c3c0dc993281","release":{"status":"completed","failure":null},"research":[],"versions":[],"contracts":[{"id":"e92c8d2b-42f2-471b-a573-81b63fe4b897","kind":"evm_project","token":{"name":"COMP Launch","symbol":"CPL"},"status":"live","chainId":11155111,"artifacts":[{"name":"CDPVault","role":"other","txHash":"0x32ca30e1a85a00911d5638deabf422f0735be9e9be591ada152fdcd7027e09c9","address":"0x12958d42d051c7b1cb804e122874f4a597678aad"},{"name":"LaunchToken","role":"token","txHash":"0x32ca30e1a85a00911d5638deabf422f0735be9e9be591ada152fdcd7027e09c9","address":"0xd0fe552dc3aada9ac0e758ca4af985a86fdc488a"},{"name":"MerkleDistributor","role":"distributor","txHash":"0x32ca30e1a85a00911d5638deabf422f0735be9e9be591ada152fdcd7027e09c9","address":"0xa3ca5ed78245a6c1fe53d5d356cdb5fbda184300"},{"name":"MockIMD","role":"other","txHash":"0x32ca30e1a85a00911d5638deabf422f0735be9e9be591ada152fdcd7027e09c9","address":"0xe44ab81ce23d34e29383dd158a1dffeb1c10d439"},{"name":"NhiFeed","role":"other","txHash":"0x32ca30e1a85a00911d5638deabf422f0735be9e9be591ada152fdcd7027e09c9","address":"0x5f8fb8ae28d5150615d8f2f0bb85f2442ca90004"},{"name":"PriceFeed","role":"other","txHash":"0x32ca30e1a85a00911d5638deabf422f0735be9e9be591ada152fdcd7027e09c9","address":"0x61e34e8eab213f04c846f8ddbccbbcbb2c36be45"}],"createdAt":"2026-09-30T18:46:55.814+00:00","updatedAt":"2026-09-30T18:48:28.577+00:00","launchNumber":519,"parkedReason":null,"sourceCommit":"c622a1dd8c1c9d94a16272080c765d00e9aba7ab","sourceRepoUrl":"https://github.com/identity-md-launches/launch-519-mockimd-pricefeed-nhifeed-cdpvault"}],"publishedAt":"2026-09-30T19:11:37.909+00:00"},{"id":"workflow:abaf8821-5465-4e4d-93c1-9a2d869d517f","code":[],"media":[],"sites":[{"id":"b5edab78-0428-4a05-9f1d-c5e6c06947c4","cid":"bafybeib3wj47w65ltw4jlyafbxnsj7orlrse6fm4usw4iwcsrmwi5x6jru","jobId":"72339715-791d-4fae-a8b6-c337efe78343","label":"grid","status":"named","txHash":"0xc3d0586baa9f60cb1fcb2e313c2d1836f9d26ea69142fb4de3d2d802e438e7b5","ensName":"grid.site.identitymd.eth","failure":null,"namedAt":"2026-09-30T09:49:28.23+00:00","repoUrl":"https://github.com/identity-md-launches/launch-501-workflow-frontend-stage-context","pinnedAt":"2026-09-30T09:46:36.659+00:00","createdAt":"2026-09-30T09:46:14.365+00:00","supersededBy":null}],"title":"Build Swarm Cities on Sepolia and host the site on IPFS. Publish source to GitHub. Include an independent adversarial review of the contracts before deploy. Do not write a research report. Do not verify tweets on-chain.\n\nToken: ERC-20 name Swarm Cities, symbol GRID, 18 decimals, fixed supply 1000000000. Mint the full supply once to the deployer. Transfers are plain with no fees, limits, pausing, or further minting. No owner. No proxies. No upgrades. Do not implement fee-on-transfer.\n\nCity registry: a 16 by 16 grid, 256 plots, ids 0 through 255, x = id mod 16, y = id divided by 16. buyCity(cityId) only if the plot is empty, the caller owns no city, and the caller holds at least 1000 GRID before paying. Price in GRID is 10000 * (256 + soldPlots)^2 / 65536 tokens, where soldPlots is how many plots are already owned. On buyCity the caller pays that price plus a 4% fee on the price: burn the price; of the 4% fee, 50% City Rewards pool, 30% Resource Pot, 10% burn to address(0), 10% treasury 0x5b95A971B4583A5f011E9DA082acdD679b870D06. Emit TaxTaken for that fee. Cities are soulbound: no transfer function. A new city starts at level 1 with 0 resources.\n\nlevelUp(cityId) is owner-only. Going from level n to n+1 consumes 100 * (n+1)^2 resources. Maximum level is 20. Reward claim weight is level squared. claimRewards(cityId) is owner-only and pays the caller their accrued GRID from the rewards pool.\n\nOnly GrantExecutor may call grantResources(cityId, amount) and recordHeartbeat(cityId1, amount1, cityId2, amount2, cityId3, amount3). Those amounts come out of the resource pot. recordHeartbeat stores the three winners for the site. Deploy GrantExecutor so only 0x5b95A971B4583A5f011E9DA082acdD679b870D06 can call it. That same address can pause and unpause grants only. Buys and claims stay live.\n\nWebsite, dark terminal style: 16 by 16 grid showing empty or owned and level, connect wallet, buy an empty plot, city panel with level, resources and claimable rewards, rewards-pool and resource-pot balances, last heartbeat winners, and this line: Buy a city, the fee fills the pots, a heartbeat grows the top cities, higher level earns more of the fee. Read the live Sepolia contracts.\n\nEvents: CityBought, ResourcesGranted, CityLeveled, RewardsClaimed, TaxTaken, HeartbeatRecorded.","types":["contracts","sites"],"audits":[],"paidBy":"0x5b95a971b4583a5f011e9da082acdd679b870d06","release":{"status":"completed","failure":null},"research":[],"versions":[],"contracts":[{"id":"0cd531be-382f-4c0b-8954-498d68c047c6","kind":"evm_project","token":{"name":"Swarm Cities","symbol":"GRID"},"status":"live","chainId":11155111,"artifacts":[{"name":"CityRegistry","role":"other","txHash":"0x7324206f793e994b62066d2aeff8fdb24832ef254faa999df92b366eaf319c09","address":"0xf0a48998b6e3811c2b272b4bc9f97f0c35382db7"},{"name":"GrantExecutor","role":"other","txHash":"0x7324206f793e994b62066d2aeff8fdb24832ef254faa999df92b366eaf319c09","address":"0xdc9ba1ba90dab300dfc94d0eedd88dd9b37a3a30"},{"name":"LaunchToken","role":"token","txHash":"0x7324206f793e994b62066d2aeff8fdb24832ef254faa999df92b366eaf319c09","address":"0xdcd861b115064c3f85be0ee3ba9b80bd05ae65a5"},{"name":"MerkleDistributor","role":"distributor","txHash":"0x7324206f793e994b62066d2aeff8fdb24832ef254faa999df92b366eaf319c09","address":"0x724c66ee6dc48aaaf9bf7012127b72fa7844ecbf"}],"createdAt":"2026-09-30T09:23:45.421+00:00","updatedAt":"2026-09-30T09:25:03.526+00:00","launchNumber":498,"parkedReason":null,"sourceCommit":"45bf43dc6fa250c15c8588db90f5ee301dac9da3","sourceRepoUrl":"https://github.com/identity-md-launches/launch-498-workflow-contract-stage-context"}],"publishedAt":"2026-09-30T09:49:28.23+00:00"},{"id":"workflow:f45fb4c8-cc3c-43a1-bd53-c11ccfc0a3ca","code":[],"media":[],"sites":[{"id":"96d9d2f5-0726-4008-ab3c-4c44f1ecc4dd","cid":"bafybeidkunvkhwaviajda2n64cx3nx4x6rajtyn5om2ny4spn3tki4bqem","jobId":"a0496ca4-35c1-48a6-9021-7149df402e17","label":"pjack","status":"named","txHash":"0xed7a63e01dbb7a5705fbe3502f2d5c017b4c4dac269357efe1344ba775337012","ensName":"pjack.site.identitymd.eth","failure":null,"namedAt":"2026-09-30T05:27:38.041+00:00","repoUrl":"https://github.com/identity-md-launches/launch-496-workflow-frontend-stage-context","pinnedAt":"2026-09-30T05:26:13.912+00:00","createdAt":"2026-09-30T05:25:45.587+00:00","supersededBy":null}],"title":"PepeJackpot: the on-chain jackpot for the game \"Pepe's armed with AI\" (live at https://pepes-armed.site.identitymd.eth.limo). One immutable contract in Solidity 0.8.26 with Foundry: no owner, no upgrade, no pause, no fee setter and no withdrawal path; $ICE leaves it only as payouts. It holds a pot in $ICE and runs every value action inside a single Uniswap v4 PoolManager.unlock. It is not a hook and creates no token, pool or liquidity: it routes through two existing pools.\n\nExisting contracts it uses (Ethereum mainnet):\n- $ICE 0x64914921E03069dA66823F84fFcfB9931F05281A (ERC-20 with EIP-2612 permit), traded only in IMD's launchpad v4 pool: ETH/$ICE, fee 0, tick spacing 60, hook LaunchpadHook 0x51768f5da32ba2008304cc81674da51acb802888.\n- $IMD 0xD34a99Bc0f67aE1bbd63C660e6d0b0dd03E263B7 in the v4 pool ETH/$IMD, fee 10000, tick spacing 200, no hook.\n- Chainlink VRF v2.5 direct-funding wrapper 0x02aae1A04f9828517b3007f83f6181900CaD910c (requestRandomWordsInNative, calculateRequestPriceNative; it calls rawFulfillRandomWords back).\nConstructor arguments: the PoolManager, the launchpad pool key, the ETH/$IMD pool key and the VRF wrapper.\n\nActions:\n1. Fridge swap: sell $ICE for $IMD ($ICE to ETH on the launchpad, then ETH to $IMD in the 1% pool), or buy $ICE with $IMD (the reverse route). The pot takes 1% of the $ICE side. A view function quotes the output.\n2. Golden throne: ETH to $IMD. 1% of the ETH buys $ICE on the launchpad and goes into the pot as the ticket fee; the rest buys $IMD for the player.\n3. Tank fill: fillTank(pees, permit) pays 1,000 $ICE per pee into the pot with the $ICE permit, in one transaction.\n4. seed(amount): anyone may add $ICE to the pot.\n\nTickets: every fridge or throne trade at or above the smallest preset (10,000 $ICE, 0.1 $IMD or 0.001 ETH in) issues a ticket whose fee is the $ICE it put into the pot. The player pays the VRF fee in ETH in the same transaction (msg.value above calculateRequestPriceNative; the excess is refunded). One random word per ticket. The callback rolls 1-100: 77 pays 90% of the pot; 20, 40, 60, 80 or 100 pays 20x the ticket fee, capped at 10% of the pot; other rolls pay nothing. Payouts are $ICE transfers to the ticket's player; a failed transfer is held for claim(). A ticket not fulfilled within 24 hours expires unpaid. Events: TicketIssued and Drawn. No block-hash randomness anywhere.\n\nTests: unit, fuzz, and a mainnet-fork rehearsal against the real launchpad, ETH/$IMD pool and VRF wrapper. The game already has its website; a site for this launch only needs to show the pot, the player's tickets and their results.","types":["contracts","sites"],"audits":[],"paidBy":"0xc3f59e5dd9e8d8a74631c0ea68e38fd49ff1b04b","release":{"status":"completed","failure":null},"research":[],"versions":[],"contracts":[{"id":"f5dae2d0-cbb9-4e40-b54c-62a73a3e746a","kind":"evm_project","token":{"name":"PepeJackpot","symbol":"PJACK"},"status":"live","chainId":11155111,"artifacts":[{"name":"LaunchToken","role":"token","txHash":"0x55a5e0ee6276f51d32146d8a2982ba0cc60398e3298bd4e16873aab0fc775e4e","address":"0xc43fbdcebf6a52d0249270718437603153b684d8"},{"name":"MerkleDistributor","role":"distributor","txHash":"0x55a5e0ee6276f51d32146d8a2982ba0cc60398e3298bd4e16873aab0fc775e4e","address":"0x397930d0ca82762c58056ddd9578abc6478bc181"},{"name":"PepeJackpot","role":"other","txHash":"0x55a5e0ee6276f51d32146d8a2982ba0cc60398e3298bd4e16873aab0fc775e4e","address":"0x3a39c736da41df95cef361c0336c51fb00532b29"}],"createdAt":"2026-09-30T04:55:59.205+00:00","updatedAt":"2026-09-30T04:57:02.754+00:00","launchNumber":495,"parkedReason":null,"sourceCommit":"08755fd953a9172e5843295d2ccac33a496f51be","sourceRepoUrl":"https://github.com/identity-md-launches/launch-495-workflow-contract-stage-context"}],"publishedAt":"2026-09-30T05:27:38.041+00:00"},{"id":"workflow:6e7c587e-b79c-44b8-9ee8-452ec57247a0","code":[],"media":[],"sites":[{"id":"917aff00-df7c-45a3-ad10-7eca4619f352","cid":"bafybeiglvq4jh5g54sofmrofwhiazqcyhiy7g4d5l23uigappgb2oevfpa","jobId":"246df038-24a0-483a-adc2-59344d50c564","label":"mile","status":"named","txHash":"0x5488a03e4c4e2b08631420285717e9f5005a606a5c50719a6670c6ca2afd74ac","ensName":"mile.site.identitymd.eth","failure":null,"namedAt":"2026-09-30T00:58:37.653+00:00","repoUrl":"https://github.com/identity-md-launches/launch-488-workflow-frontend-stage-context","pinnedAt":"2026-09-30T00:57:20.348+00:00","createdAt":"2026-09-30T00:56:51.208+00:00","supersededBy":null}],"title":"Launch a company called Milestone: the launch token is named \"Milestone\" with symbol MILE. Its supply and split are the launch policy's (the standard fixed-supply launch token); the escrow uses it as its currency.\n\nContracts: a MilestoneEscrow where a funder opens an escrow for a named recipient and a named arbiter, with up to 5 milestones, each an amount of MILE and a deadline. The funder deposits the full total when opening. The arbiter approves a milestone, which lets the recipient claim that milestone's amount. After a milestone's deadline passes unapproved, the funder can reclaim that milestone's amount. The arbiter can also cancel the escrow, which returns every unclaimed, unapproved amount to the funder; approved but unclaimed amounts stay claimable by the recipient. Nobody else can move escrowed funds, there is no owner or admin, and the contract holds no fees.\n\nWebsite: a simple page that shows the MILE token (name, symbol, supply and address as deployed), lists escrows by id with their milestones and state, and lets a connected wallet open an escrow (approve + deposit), approve a milestone as arbiter, claim as recipient, reclaim as funder after a deadline, and cancel as arbiter.","types":["contracts","sites"],"audits":[],"paidBy":null,"release":{"status":"completed","failure":null},"research":[],"versions":[],"contracts":[{"id":"196e491c-2bb2-48e0-839a-034bc4a153bb","kind":"evm_project","token":{"name":"Milestone","symbol":"MILE"},"status":"live","chainId":11155111,"artifacts":[{"name":"LaunchToken","role":"token","txHash":"0xd733396070cfa7630b32978b7f79db885341fae6dceac7fecac0ac28ff2cc9ba","address":"0x8a962be605ec00381818484b2fd7dee0af78da24"},{"name":"MerkleDistributor","role":"distributor","txHash":"0xd733396070cfa7630b32978b7f79db885341fae6dceac7fecac0ac28ff2cc9ba","address":"0x0385ba6f7edffda72728b080b5d1ef18ce8bb21f"},{"name":"MilestoneEscrow","role":"other","txHash":"0xd733396070cfa7630b32978b7f79db885341fae6dceac7fecac0ac28ff2cc9ba","address":"0xb58761c3e4fc11cb37f4f2143320a1155b41346f"}],"createdAt":"2026-09-30T00:30:09.757+00:00","updatedAt":"2026-09-30T00:31:37.873+00:00","launchNumber":487,"parkedReason":null,"sourceCommit":"5ec21faf39d6147238907ea54bd313d31f928200","sourceRepoUrl":"https://github.com/identity-md-launches/launch-487-workflow-contract-stage-context"}],"publishedAt":"2026-09-30T00:58:37.653+00:00"},{"id":"workflow:1953cf30-99ba-46de-8043-c3e2822bcbf5","code":[],"media":[],"sites":[{"id":"4cffc29f-bc7a-4add-ac61-9faeb22430c3","cid":"bafybeidzyk37fiejru62j6fs3sqa5q5sw2jykii4hp2ojwou2qdgjevrke","jobId":"4b51264e-3110-4a44-a4ff-e6369394dfe3","label":"gfam","status":"named","txHash":"0x3be4252e850e08452abb8ebff92b7530dbda62abd4bef93b848af0e3212b009f","ensName":"gfam.site.identitymd.eth","failure":null,"namedAt":"2026-09-29T22:49:02.813+00:00","repoUrl":"https://github.com/identity-md-launches/launch-485-workflow-frontend-stage-context","pinnedAt":"2026-09-29T22:47:52.459+00:00","createdAt":"2026-09-29T22:47:50.674+00:00","supersededBy":null}],"title":"Hello.we are the great family.\n\nWhat a connected wallet can do: Swap","types":["contracts","sites"],"audits":[],"paidBy":"0x2e74d90e771feb64e7e34575f1b5a4a56d844258","release":{"status":"completed","failure":null},"research":[],"versions":[],"contracts":[{"id":"2173021b-03eb-48e4-aa29-47e52d97d79c","kind":"evm_project","token":{"name":"Great Family","symbol":"GFAM"},"status":"live","chainId":11155111,"artifacts":[{"name":"LaunchToken","role":"token","txHash":"0x815357c42f7f7f7d5a064b52c39e3505dfde77292a836d0b58e7ab8a8cd9dc04","address":"0xddddebad7fb5a6ab35232df717a55ece0e70630d"},{"name":"MerkleDistributor","role":"distributor","txHash":"0x815357c42f7f7f7d5a064b52c39e3505dfde77292a836d0b58e7ab8a8cd9dc04","address":"0xdb19ba413feb14940c37567e43b70ff39319027d"}],"createdAt":"2026-09-29T22:18:11.574+00:00","updatedAt":"2026-09-29T22:19:03.973+00:00","launchNumber":483,"parkedReason":null,"sourceCommit":"23af8cd4b30a896759c1fae5beeb7a5ca20aeea2","sourceRepoUrl":"https://github.com/identity-md-launches/launch-483-workflow-contract-stage-context"}],"publishedAt":"2026-09-29T22:49:02.813+00:00"},{"id":"workflow:edcf0173-2007-499d-b1bb-0fbdaf80ddce","code":[],"media":[],"sites":[{"id":"1ec317a5-2959-49a6-82dd-ff5f3828193b","cid":"bafybeidhucfj7fk77zomeurinahhp5uuwta7hwn2nvgwebgqvcg7ruclge","jobId":"f1d417aa-020e-4f8f-9075-553534c604ac","label":"comp-protocol","status":"named","txHash":"0x57502fe0c1086f987f60073556449db6256b91d63ed4759d43fbed7c0b466d2f","ensName":"comp-protocol.site.identitymd.eth","failure":null,"namedAt":"2026-09-29T18:15:03.963+00:00","repoUrl":"https://github.com/identity-md-launches/launch-463-workflow-frontend-stage-context","pinnedAt":"2026-09-29T18:12:43.98+00:00","createdAt":"2026-09-29T18:12:25.494+00:00","supersededBy":null}],"title":"Build COMP: a compute-backed stablecoin proof of concept on Ethereum Sepolia. Four contracts.\n\nMockIMD: ERC-20 collateral token, symbol IMD, name 'Identity MD', 18 decimals. Total supply starts at zero with no maximum cap — deployer calls mint(address, uint256) on demand to fund test wallets. No other admin.\n\nCompToken: the stablecoin, symbol COMP, name 'Compute Money', 18 decimals. This is a mintable, elastic-supply token — NOT a fixed-supply token. Total supply at genesis: 0. Maximum supply: none (unbounded, no cap). Minting: CDPVault mints new COMP continuously whenever any user calls mintCOMP() to borrow against their collateral. Burning: CDPVault burns COMP whenever any user calls repayCOMP() to repay debt. There is no initial mint, no presale, no airdrop. New tokens are created on demand by the vault as users borrow. Authorized minter/burner: exclusively the CDPVault contract address, set once via setVault(address) callable only by deployer; after that one call no admin or minting privilege remains on CompToken. Standard ERC-20 transfers, no fees or restrictions.\n\nIWorkOracle interface in src/interfaces/IWorkOracle.sol: mintingRights(address) returns uint256; consumeRights(address, uint256) external. MockWorkOracle implements it. Deployer calls grantRights(address, uint256) to add rights for testnet. CDPVault calls consumeRights on mint. Only vault may call consumeRights. Emits RightsGranted and RightsConsumed. This interface is what the real oracle (reading ERC-8004 work records) will implement as a drop-in.\n\nCDPVault: constructor(imdToken, compToken, oracle). One-time setOracle(address) callable once by deployer before going live; no admin after. Per-user Position{collateral, debt}. depositCollateral transfers IMD in. withdrawCollateral reverts if resulting CR < 150. mintCOMP requires oracle.mintingRights >= amount AND (collateral*100 >= (debt+amount)*150); consumes rights, mints COMP, increases debt. repayCOMP burns COMP, decreases debt. liquidate(owner, debtToRepay) callable by anyone when CR < 150; burns debtToRepay COMP from caller, sends debtToRepay*110/100 IMD to caller (10% bonus), reduces owner position. collateralRatio(owner) returns collateral*100/debt, max uint256 when debt==0. Price: 1 IMD == 1 COMP (fixed for testnet, documented in NatSpec).\n\nTests: unit every function + revert, fuzz deposit/mint/repay/withdraw sequences, invariant asserting totalSupply==sum(debt) and all positions with debt have CR>=150, liquidation scenario with correct math.\n\nFrontend: dark minimal UI, Sepolia only. Show wallet IMD balance, COMP balance, oracle minting rights, position (collateral, debt, CR%). Actions: Deposit IMD, Mint COMP, Repay COMP, Withdraw IMD. Health: green>=170%, amber 150-170%, red<150%. Admin panel (deployer only): grantRights form.","types":["contracts","sites"],"audits":[],"paidBy":"0x5167d014a056e43883e1bbea5530c3c0dc993281","release":{"status":"completed","failure":null},"research":[],"versions":[],"contracts":[{"id":"99abf4b8-1462-4136-a6c4-b75d6a3cbd76","kind":"evm_project","token":{"name":"COMP Launch","symbol":"CPL"},"status":"live","chainId":11155111,"artifacts":[{"name":"CDPVault","role":"other","txHash":"0xb20931437c7a238f05407460bce7bc98087e7a8e571ca0a673bb8cd75f2acd1b","address":"0x583d90a83cfd184ddde2bed7d7b3726892adc898"},{"name":"LaunchToken","role":"token","txHash":"0xb20931437c7a238f05407460bce7bc98087e7a8e571ca0a673bb8cd75f2acd1b","address":"0xa850f31f678a7bb91b5f6d7da2d0eacb40b585b5"},{"name":"MerkleDistributor","role":"distributor","txHash":"0xb20931437c7a238f05407460bce7bc98087e7a8e571ca0a673bb8cd75f2acd1b","address":"0xf1c90bfc784b4c0b58af934ee31bc5c53d15532e"},{"name":"MockIMD","role":"other","txHash":"0xb20931437c7a238f05407460bce7bc98087e7a8e571ca0a673bb8cd75f2acd1b","address":"0x5e223eb2ea5d55b4a8d4190e94df3524b58dfc79"}],"createdAt":"2026-09-29T17:39:00.508+00:00","updatedAt":"2026-09-29T17:40:04.537+00:00","launchNumber":458,"parkedReason":null,"sourceCommit":"1fc863f3880a7541308f51d16f76c39185e07137","sourceRepoUrl":"https://github.com/identity-md-launches/launch-458-mockimd-comptoken-mockworkoracle-cdpvaul"}],"publishedAt":"2026-09-29T18:15:03.963+00:00"},{"id":"workflow:0fff1998-fbcc-4169-90a6-5a7d854b0715","code":[],"media":[],"sites":[{"id":"9fc80ef5-bd5e-4230-96e4-d222ac342462","cid":"bafybeif7tmbyk4cnn57ueynnig2tzvto66b3svdqrbfvcxqz2wmdwj5htq","jobId":"06dfbcec-4a2a-4dea-87e3-d15ab594fb9c","label":"pacts","status":"named","txHash":"0x26a39bde03528d31bfd0001b7ac3743ef47b973c7a34d37ac9d438a139eeb4dd","ensName":"pacts.site.identitymd.eth","failure":null,"namedAt":"2026-09-29T05:52:02.745+00:00","repoUrl":"https://github.com/identity-md-launches/launch-447-workflow-frontend-stage-context","pinnedAt":"2026-09-29T05:49:36.259+00:00","createdAt":"2026-09-29T05:49:11.196+00:00","supersededBy":null}],"title":"Build Pacts, a social guild strategy game on Sepolia played with its own token, Pact ($PACT), launch it, publish the source on GitHub and host its website on IPFS. Guilds hold tiles on a shared 12x12 map, attack each other in the open, vote on moves, and sign pacts backed by token bonds that are slashed to the victim if a guild betrays a partner. Seasons pay the top guilds and mint trophy NFTs.","types":["contracts","sites"],"audits":[],"paidBy":null,"release":{"status":"completed","failure":null},"research":[],"versions":[],"contracts":[{"id":"964a1cdf-8b2b-46b7-a327-6e5ef3e7625b","kind":"evm_project","token":{"name":"Pact","symbol":"PACT"},"status":"live","chainId":11155111,"artifacts":[{"name":"Guilds","role":"other","txHash":"0xc2e0715b963f566f9d21cf819c6505d567a93056a42e54449fd07d67a20f1512","address":"0x8cf40aadb31bad7b441f018d74c61191b96a2e42"},{"name":"LaunchToken","role":"token","txHash":"0xc2e0715b963f566f9d21cf819c6505d567a93056a42e54449fd07d67a20f1512","address":"0x7f88ad727adeb8fc70fd198f2d2319349846818c"},{"name":"MerkleDistributor","role":"distributor","txHash":"0xc2e0715b963f566f9d21cf819c6505d567a93056a42e54449fd07d67a20f1512","address":"0x174ce0bdbd6af7e713225ced17c873203ba829a1"},{"name":"Realm","role":"other","txHash":"0xc2e0715b963f566f9d21cf819c6505d567a93056a42e54449fd07d67a20f1512","address":"0x206bbcb9b91793decd1819e366334ab6dbbdc990"}],"createdAt":"2026-09-29T05:08:42.663+00:00","updatedAt":"2026-09-29T05:09:50.82+00:00","launchNumber":444,"parkedReason":null,"sourceCommit":"eeee3c75fa33e038c1605d0b1a79ad1272434c78","sourceRepoUrl":"https://github.com/identity-md-launches/launch-444-workflow-contract-stage-context"}],"publishedAt":"2026-09-29T05:52:02.745+00:00"},{"id":"workflow:500e1a99-8e60-4d56-9f8d-ba82cbbdbe4c","code":[],"media":[],"sites":[{"id":"bf485e05-4933-4c23-a4c0-d4719dc2b085","cid":"bafybeib4llhgqdciwhpeof2hvufeywpwcwod2yqxmbsxr46iwv5sg3idkq","jobId":"501472d7-f149-455e-8ee0-6df03c506480","label":"imd","status":"named","txHash":"0xdeb88bb04dc1d49b2c16a6dce014be3606a3fdce56d7bbf442a7a6be8e911417","ensName":"imd.site.identitymd.eth","failure":null,"namedAt":"2026-09-29T04:01:38.342+00:00","repoUrl":"https://github.com/identity-md-launches/launch-446-workflow-frontend-stage-context","pinnedAt":"2026-09-29T04:00:14.081+00:00","createdAt":"2026-09-29T03:59:58.786+00:00","supersededBy":null}],"title":"Sepolia only (chainId 11155111). No mainnet.\n\nBuild ImdCardPayment: receives IMD, emits PaymentReceived. Anyone can pay. No owner admin. No user withdraw.\n\nNumbers: Claude-month pack IMD = ceil(Claude Pro USD / IMD mid) + 8% buffer (mock OK; formula in README). Min 1 pack, max 3/tx. Float target 3× pack USD. Refund if no card in 15m. Fee 0%.\n\nSite: pack picker, Sepolia connect, pay IMD, email, status, claim-card page, Sepolia badge. Copy only “Get a spend card” — never Uniswap, USDC, or Bitrefill. Wallet may only approve/pay IMD.\n\nOperator backend (sandbox OK) does swap + Bitrefill off-chain.\n\nAUTHORIZED: Sepolia deploy, public GitHub, public IPFS site label imd-bitrefill-card. Frontend + hosting required.","types":["contracts","sites"],"audits":[],"paidBy":"0x3876766f05bb3cb5a16d3ceb2113f48637372ade","release":{"status":"blocked","failure":"Publication could not be validated within 24 hours. Published files and deployed contracts are preserved; retry validation after checking the reported availability problem."},"research":[],"versions":[],"contracts":[{"id":"a36cb67d-208f-4149-a31a-4a55cac4833c","kind":"evm_project","token":{"name":"IdentityMD","symbol":"IMD"},"status":"live","chainId":11155111,"artifacts":[{"name":"ImdCardPayment","role":"other","txHash":"0x17804b249f2d392b8566a154e14fef69f534c716686395a5575f3903d500d0bc","address":"0x7ffdd2022de16ff12487904e60e9e8f0c4892721"},{"name":"LaunchToken","role":"token","txHash":"0x17804b249f2d392b8566a154e14fef69f534c716686395a5575f3903d500d0bc","address":"0x10a7117e2f6d89afe15fa8adbc965d7e1c78613f"},{"name":"MerkleDistributor","role":"distributor","txHash":"0x17804b249f2d392b8566a154e14fef69f534c716686395a5575f3903d500d0bc","address":"0xd78a0bc1eaf45eb7b44332c314318af2780f2f87"}],"createdAt":"2026-09-29T03:31:33.376+00:00","updatedAt":"2026-09-29T03:32:28.443+00:00","launchNumber":445,"parkedReason":null,"sourceCommit":"1e0ac5e9cb8a1f5a4b9e7007295827ee6d66e348","sourceRepoUrl":"https://github.com/identity-md-launches/launch-445-workflow-contract-stage-context"}],"publishedAt":"2026-09-29T04:01:38.342+00:00"},{"id":"workflow:6995d9db-a6b9-4e03-add9-607058a1c7d9","code":[],"media":[],"sites":[{"id":"0d0dbec3-fc51-4c04-9bb2-973b3ddcd3c6","cid":"bafybeidlouxactrp2n4hp24u4wqlazuguk3tk4hcuvl6x76nv2iaveyvfe","jobId":"9f4df9c3-526d-4ce6-a243-2a912f3277cc","label":"lab-soapbox","status":"named","txHash":"0xd2f2a902de76f62ad12466e1073435614017f1e8dd6098b6bcf1d55076886ca5","ensName":"lab-soapbox.site.identitymd.eth","failure":null,"namedAt":"2026-09-27T20:03:14.349+00:00","repoUrl":"https://github.com/identity-md-launches/launch-420-workflow-frontend-stage-context","pinnedAt":"2026-09-27T19:56:53.453+00:00","createdAt":"2026-09-27T19:56:33.653+00:00","supersededBy":null}],"title":"Release Soapbox (ERC-20 symbol SOAP) on Sepolia as an evm_project: the fixed-supply launch token plus one application contract. Token: Soapbox (SOAP), total supply 1,000,000,000 SOAP with 18 decimals, minted once to the deployer. Application contract: Soapbox. Currency: SOAP is the app's working currency. Soapbox's constructor takes one argument, the SOAP address (constructorArgs [\"$token\"]); it stores the token immutable, exposes it as token(), and holds no SOAP at deploy and never needs any: users get SOAP by swapping Sepolia ETH in the ETH/SOAP launch pool the factory seeds. Every payment in is approve + SafeERC20.safeTransferFrom; payouts are pull withdrawals (safeTransfer to the caller, checks-effects-interactions, nonReentrant); burns are transfers to 0x000000000000000000000000000000000000dEaD. SOAP is a plain fixed-supply ERC-20 with no transfer fee, so the amount pulled is the amount credited. Soapbox has no payable function and no receive/fallback, so it never holds ETH. No owner, admin, moderation, pause or upgrade path. post(bytes32 topic, string body): body 1 to 280 bytes (UTF-8 byte length); the fee is 100 SOAP (100e18 units) moved with safeTransferFrom(poster, 0x000000000000000000000000000000000000dEaD, 100e18), so Soapbox never holds SOAP; ids from 1. The body is only emitted in Posted(id, author, topic, body); storage keeps author, topic, timestamp and tipsTotal per post. tip(postId, amount): the post exists, amount >= 1 SOAP; safeTransferFrom(tipper, author, amount) straight to the author; tipsTotal += amount; Tipped(postId, tipper, amount). Self-tips are allowed and pointless. Posts cannot be edited or deleted; everything is public forever. Views: postCount(), post(id), token(). Tests (Foundry) must show: body lengths 0, 1, 280 and 281; the exact 100 SOAP burn; tips reaching the author; tips to a missing post or below 1 SOAP reverting; Soapbox's SOAP balance always 0. The independent adversarial review must attack: fee bypass, tips credited to the wrong post or author, and in the site script injection through bodies or topics. Deploy through the project factory, then publish a one-page website to post (topic + body with a byte counter), tip, and a feed read from Posted events sorted by tipsTotal with a topic filter. Bodies and topics render as plain escaped text (no HTML, no auto-links) under a note that posts are unmoderated user content. The page reads the SOAP address from Soapbox.token(), shows the connected wallet's SOAP balance and allowance, has an Approve step before every paying action, and says SOAP comes from swapping Sepolia ETH in the launch pool (no in-page swap). Lists come from contract views and events only (no backend, no indexer; log queries are chunked from the deployment block). Keep it to one small page; the static export has index.html in dist/.","types":["contracts","sites"],"audits":[],"paidBy":"0x8a3b860f6dbfbbbb07f21905ed8cb0234538bdc8","release":{"status":"completed","failure":null},"research":[],"versions":[],"contracts":[{"id":"32fb029e-ae9a-4882-b053-049091c3369a","kind":"evm_project","token":{"name":"Soapbox","symbol":"SOAP"},"status":"live","chainId":11155111,"artifacts":[{"name":"LaunchToken","role":"token","txHash":"0xb1b853c414d04106663ea244a51f3638157e9287639371082c3c53762ee41d77","address":"0xb7441f29c2e22dfc83f77d9e59686262476a9259"},{"name":"MerkleDistributor","role":"distributor","txHash":"0xb1b853c414d04106663ea244a51f3638157e9287639371082c3c53762ee41d77","address":"0x59618dce519e90bee72d044520c33a9656fcd757"},{"name":"Soapbox","role":"other","txHash":"0xb1b853c414d04106663ea244a51f3638157e9287639371082c3c53762ee41d77","address":"0x91b25f1835d6df5baa547130d88545b3d17e9fdc"}],"createdAt":"2026-09-27T19:23:40.757+00:00","updatedAt":"2026-09-27T19:24:25.909+00:00","launchNumber":357,"parkedReason":null,"sourceCommit":"3bdd3dd812fda2ec9fe65f8634e49c86e3297b2b","sourceRepoUrl":"https://github.com/identity-md-launches/launch-357-soapbox"}],"publishedAt":"2026-09-27T20:03:14.349+00:00"},{"id":"workflow:3675b9cc-f356-42fd-afc7-23d5be2bae53","code":[],"media":[],"sites":[{"id":"fa8759eb-883e-4744-86a8-806e1cfc604d","cid":"bafybeicm7xidl5r5mmg7eukurykoypm2vwvpmngpe2mjd7bmxzstwnw46a","jobId":"8d6fe13e-5704-45df-9bd9-d82f7daa4706","label":"lab-circuit-breaker-hook","status":"named","txHash":"0x2f3f990f7ec0f59678edd873c99a45e4d29893a7b1054c64dddd71123fde3cd4","ensName":"lab-circuit-breaker-hook.site.identitymd.eth","failure":null,"namedAt":"2026-09-27T18:08:38.184+00:00","repoUrl":"https://github.com/identity-md-launches/launch-414-workflow-frontend-stage-context","pinnedAt":"2026-09-27T17:58:05.238+00:00","createdAt":"2026-09-27T17:57:44.174+00:00","supersededBy":null}],"title":"Release Breaker (token symbol CBRK) on Sepolia as a univ4_hook launch. Token: Breaker (CBRK), total supply 1,000,000,000 CBRK with 18 decimals, minted once to the deployer (a separate zero-argument ERC-20, no mint, owner or admin). Hook: CircuitBreakerHook, a Uniswap v4 hook on the token's native-ETH pool that trips on sharp moves within a block. beforeSwap: if refBlock[poolId] != block.number, store refBlock = block.number and refSqrtPrice = the current sqrtPriceX96 (StateLibrary.getSlot0), the price before the block's first swap, and emit ReferenceSet(poolId, block, sqrtPriceX96). afterSwap: read the new sqrtPriceX96 and revert with Tripped(refSqrtPrice, newSqrtPrice) when the price (sqrtPrice squared) is more than 10% above or below the reference: the allowed band is refSqrt x sqrt(0.9) <= newSqrt <= refSqrt x sqrt(1.1), computed with FullMath.mulDiv against Q96 constants for sqrt(0.9) and sqrt(1.1), rounded inward so the band never exceeds 10%. This includes a block's first swap, so any single swap moving the price more than 10% reverts and large trades must be split across blocks. Liquidity changes and donations do not move the price and are never checked. No deltas, fee, funds or admin. Tripped swaps revert, so they leave no event; the site simulates instead. Deploy shape, matching the live Sepolia hook launches 170 and 186 (168 passed the mainnet PoolManager and is not a model): CircuitBreakerHook's only constructor argument is the Sepolia PoolManager 0xE03A1074c86CFeDd5C142C4F04F1a1536e203543; every rate, window and threshold here is a source constant; there is no owner, admin, setter, pause, upgrade or sweep, and no $owner or $token argument. Permissions are exactly beforeSwap, afterSwap (low address bits 0x00C0), all others false; the constructor calls Hooks.validateHookPermissions and the CREATE2 salt is mined for those bits. The factory initializes the pool (currency0 native ETH, currency1 CBRK, fee 3000, tickSpacing 60) and seeds one-sided CBRK liquidity, so nothing in the hook may revert that initialize or that liquidity add (launch 138 was parked when a beforeInitialize gate reverted the factory), and the first buy lands in a pool that holds no ETH. All state is keyed by PoolId; a pool on this hook whose currency0 is not native ETH gets zero deltas and no other effect. Every callback requires msg.sender == PoolManager. Tests (Foundry, a real v4-core PoolManager deployed in the test, hook at a mined address): a launch rehearsal that initializes at the manifest price, seeds one-sided CBRK liquidity like the factory and makes the first buy into the ETH-less pool; exact-in and exact-out in both directions; dust amounts; a pool whose currency0 is not ETH; direct callback calls from a non-PoolManager address revert; fuzzed sizes; and specifically: a 9.9% move passes and 10.1% reverts, up and down; two swaps in one block that together pass 10% make the second revert; a swap back inside the band passes; a new block resets the reference; on the freshly seeded pool a small first buy passes and an oversized one reverts. An independent adversarial review (read-only) must attack: the sqrt constants and rounding direction, overflow in the band maths, that the reference is captured before any swap including the first, any same-block path that moves the price without reaching afterSwap, and griefing (pushing the price to the band edge to block others for a block; document it). It reports each finding with the exact call sequence that triggers it. Website: one static page (dist/index.html) that reads the hook's views and events and the pool price through Uniswap's Sepolia StateView, with a buy/sell form that swaps through Uniswap's published Sepolia PoolSwapTest router (check it has code). It shows this block's reference price (from ReferenceSet, or the current price when there is no swap yet this block), the plus/minus 10% band, and a pre-check that simulates a typed swap with eth_call and says whether it would trip (replacing the earlier 'recent tripped swaps' list, which reverted swaps cannot supply).","types":["contracts","sites"],"audits":[],"paidBy":"0x8a3b860f6dbfbbbb07f21905ed8cb0234538bdc8","release":{"status":"completed","failure":null},"research":[],"versions":[],"contracts":[{"id":"00b25984-d932-4bf4-a97b-5a725e929c73","kind":"univ4_hook","token":{"name":"Breaker","symbol":"CBRK"},"status":"live","chainId":11155111,"artifacts":[{"name":"CBRK","role":"token","txHash":"0xcb4cdf6a1605626f62091aba084cc14818a8a15c8bdc040354d4757083ac12f9","address":"0x7f2ed4fdd432222bdc70d4c00903457eda378168"},{"name":"CircuitBreakerHook","role":"hook","txHash":"0xcb4cdf6a1605626f62091aba084cc14818a8a15c8bdc040354d4757083ac12f9","address":"0x08867a47f30db1fc8e00d940438435d1a46b80c0"}],"createdAt":"2026-09-27T08:17:05.943+00:00","updatedAt":"2026-09-27T08:18:51.412+00:00","launchNumber":301,"parkedReason":null,"sourceCommit":"41942e8d9335e3f4e35738eb008e5bb9245baf10","sourceRepoUrl":"https://github.com/identity-md-launches/launch-301-circuitbreakerhook"}],"publishedAt":"2026-09-27T18:08:38.184+00:00"},{"id":"workflow:3d6d5703-74ce-4842-851b-94f201a6624e","code":[],"media":[],"sites":[{"id":"98f3ed88-064d-45c5-99dd-2dbb93139a8d","cid":"bafybeieeqlub22dpaybgh55q75idzlc2aqicoaltq5sh6rlw7asaquwr4a","jobId":"9707a5b0-ba78-4913-bf80-ed47e820034f","label":"lab-per-block-cap-hook","status":"named","txHash":"0x3b4582feeeca969d84103e9d40958de59441536d3ccf4726667f56ac9503b305","ensName":"lab-per-block-cap-hook.site.identitymd.eth","failure":null,"namedAt":"2026-09-27T18:07:28.641+00:00","repoUrl":"https://github.com/identity-md-launches/launch-411-workflow-frontend-stage-context","pinnedAt":"2026-09-27T18:05:10.742+00:00","createdAt":"2026-09-27T18:04:45.052+00:00","supersededBy":null}],"title":"Release Blockcap (token symbol BCAP) on Sepolia as a univ4_hook launch. Token: Blockcap (BCAP), total supply 1,000,000,000 BCAP with 18 decimals, minted once to the deployer. Hook: BlockOutflowCapHook, a Uniswap v4 hook on the token's native-ETH pool (currency0 native ETH, currency1 BCAP, LP fee 3000, tickSpacing 60; the factory seeds one-sided BCAP liquidity, so the first buy lands in a pool holding no ETH). In v4, amountSpecified < 0 is exact input and zeroForOne is a buy (ETH in, BCAP out). The hook extends v4-periphery BaseHook; constructor (IPoolManager poolManager) with the Sepolia PoolManager 0xE03A1074c86CFeDd5C142C4F04F1a1536e203543. getHookPermissions enables exactly afterInitialize and afterSwap (no deltas, no fees); the manifest lists the same set. State is keyed by PoolId, so any pool may attach the hook. No owner, no admin. Rule: CAP = 2,500,000 x 10^18 BCAP (0.25% of the fixed 1,000,000,000 supply), a constant, per pool per block, active for 86,400 seconds from initialisation (afterInitialize records capEndsAt = block.timestamp + 1 day; at capEndsAt and after, no cap). Counted: BCAP paid out to swappers by buys, i.e. the positive currency1 amount of the swap delta in afterSwap, exact input or exact output alike. Sells, liquidity removals and donations are not counted, and sells do not give allowance back. The per-block total resets when block.number changes. A buy that would take the block's total above CAP reverts BlockCapExceeded(used, CAP) as a whole (no clamping). Events: Outflow(PoolId indexed poolId, uint256 blockNumber, uint256 amount, uint256 usedInBlock). Views: status(PoolId) -> (bool active, uint256 remainingThisBlock, uint256 capEndsAt), where remaining is CAP when the stored block is not the current one. Tests run against a real v4-core PoolManager and include a launch rehearsal: one-sided BCAP liquidity below the opening price, a first buy into the ETH-less pool, then a sell. Acceptance: buys in one block summing to exactly CAP pass and one more wei reverts; a new block resets; exact-output buys count their actual output; sells never count; no cap at capEndsAt; two pools are independent. Then a small website that shows this block's remaining allowance, time left in the capped day, recent Outflow events per block, and a swap form that quotes a buy and warns when its output exceeds the remaining allowance. Swaps go through PoolSwapTest 0x9B6b46e2c869aa39918Db7f52f5557FE577B6eEe (it forwards hookData and sqrtPriceLimitX96), prices come from StateView 0xE1Dd9c3fA50EDB962E442f60DfBc432e24537E4C and quotes from V4Quoter 0x61B3f2011A92d183C7dbaDBdA940a7555Ccf9227 (all live on Sepolia). One page, no backend.","types":["contracts","sites"],"audits":[],"paidBy":"0x8a3b860f6dbfbbbb07f21905ed8cb0234538bdc8","release":{"status":"completed","failure":null},"research":[],"versions":[],"contracts":[{"id":"cd74e008-6a11-47be-b242-012cc4529697","kind":"univ4_hook","token":{"name":"Blockcap","symbol":"BCAP"},"status":"live","chainId":11155111,"artifacts":[{"name":"Blockcap","role":"token","txHash":"0x2209040b7778c268124e04a343787cc5caf4a949e7af29b8268efd332f79109b","address":"0x719e71f67c46c736885e412b41973edf4452150d"},{"name":"BlockOutflowCapHook","role":"hook","txHash":"0x2209040b7778c268124e04a343787cc5caf4a949e7af29b8268efd332f79109b","address":"0x3d13515ce40b463d88a3149371d54133165a1040"}],"createdAt":"2026-09-27T17:23:31.344+00:00","updatedAt":"2026-09-27T17:24:37.954+00:00","launchNumber":358,"parkedReason":null,"sourceCommit":"04624f0c3eef22f11ea599085026780a4a4d5a68","sourceRepoUrl":"https://github.com/identity-md-launches/launch-358-blockoutflowcaphook"}],"publishedAt":"2026-09-27T18:07:28.641+00:00"},{"id":"workflow:496a626a-1d0a-4abf-8219-4c07d1e958cc","code":[],"media":[],"sites":[{"id":"12f12ec0-6a38-4e77-b272-f53515d97d0c","cid":"bafybeidk77lsr3b7mu34lyusqo5iipilkvjmbhk2rpnn3rw7vm6ugig6lq","jobId":"c187d537-3915-49ec-bcc0-6316976bb8f2","label":"lab-blockhash-lottery","status":"named","txHash":"0xace18b3ab0e392049a8078ed40d3914bde42b86e5779e4a08f8ba35e60695132","ensName":"lab-blockhash-lottery.site.identitymd.eth","failure":null,"namedAt":"2026-09-27T18:00:04.37+00:00","repoUrl":"https://github.com/identity-md-launches/launch-412-workflow-frontend-stage-context","pinnedAt":"2026-09-27T17:59:08.744+00:00","createdAt":"2026-09-27T17:59:04.805+00:00","supersededBy":null}],"title":"Release Draw (ERC-20 symbol DRAW) on Sepolia as an evm_project: the fixed-supply launch token plus one application contract. Token: Draw (DRAW), total supply 1,000,000,000 DRAW with 18 decimals, minted once to the deployer. Application contract: BlockhashLottery. Currency: DRAW is the app's working currency. BlockhashLottery's constructor takes one argument, the DRAW address (constructorArgs [\"$token\"]); it stores the token immutable, exposes it as token(), and holds no DRAW at deploy and never needs any: users get DRAW by swapping Sepolia ETH in the ETH/DRAW launch pool the factory seeds. Every payment in is approve + SafeERC20.safeTransferFrom; payouts are pull withdrawals (safeTransfer to the caller, checks-effects-interactions, nonReentrant); burns are transfers to 0x000000000000000000000000000000000000dEaD. DRAW is a plain fixed-supply ERC-20 with no transfer fee, so the amount pulled is the amount credited. BlockhashLottery has no payable function and no receive/fallback, so it never holds ETH. No owner, admin, pause or upgrade path. A Sepolia test toy with no value; say so on the site. Rounds are fixed windows of 300 blocks from the deployment block G: round r sells in blocks [G + 300r, G + 300r + 299]; closeBlock = G + 300r + 299; drawBlock = closeBlock + 5. buy(count): count 1 to 100 tickets at 1,000 DRAW each into the round of the current block; buys are stored as cumulative ranges (buyer, endIndex) so the winner is found by binary search. settle(r): anyone, once block.number > drawBlock (earlier reverts), exactly once per round. If r sold no tickets, its carry-in moves to the round open at settle time. Else if drawBlock < block.number <= drawBlock + 256 and blockhash(drawBlock) != 0, the winning index is uint256(keccak256(blockhash(drawBlock), r)) % ticketCount; the pot is ticketCount x 1,000 DRAW + carry-in; the winner is credited 95% (floor) and the other 5% moves to the round open at settle time. Else, once block.number > drawBlock + 256 (the hash is gone), the round is Expired: each buyer calls refund(r) once to credit its tickets at full price to claimable, and the carry-in moves forward. claim(): pull all credited winnings and refunds. Randomness note for the README: a Sepolia validator could withhold a block to change the outcome at the cost of its block reward; the pot is a test toy. Nobody can buy after seeing the hash, because sales close 5 blocks earlier. Views: currentRound(), roundInfo(r) (tickets, carryIn, state, winner, prize), ticketsOf(r, buyer), claimable(address). Events: Bought, Settled(r, winner, prize, carryOut), Expired(r), Claimed. Tests (Foundry, with vm.roll) must show: settle at drawBlock + 1 and drawBlock + 256 draws, at drawBlock + 257 expires with full refunds, a zero-ticket round forwards its carry, a one-ticket round pays that buyer, buys after closeBlock land in the next round, double settle reverts, and the invariant DRAW balance == claimable + unsettled pots. The independent adversarial review must attack: the blockhash window (0 hash, off-by-one), range lookup off-by-one, carry accounting across settle order, double settle or double refund, and anyone predicting or steering the result. Deploy through the project factory, then publish a one-page website to buy tickets, show the current round, blocks until close and until the draw block, the pot, a settle button, your claimable balance with claim, and past winners from Settled events. The page reads the DRAW address from BlockhashLottery.token(), shows the connected wallet's DRAW balance and allowance, has an Approve step before every paying action, and says DRAW comes from swapping Sepolia ETH in the launch pool (no in-page swap). Lists come from contract views and events only (no backend, no indexer; log queries are chunked from the deployment block). Keep it to one small page; the static export has index.html in dist/.","types":["contracts","sites"],"audits":[],"paidBy":"0x8a3b860f6dbfbbbb07f21905ed8cb0234538bdc8","release":{"status":"completed","failure":null},"research":[],"versions":[],"contracts":[{"id":"c6c2b1f5-7a27-44f2-9dd6-1287a9fbf034","kind":"evm_project","token":{"name":"Draw","symbol":"DRAW"},"status":"live","chainId":11155111,"artifacts":[{"name":"BlockhashLottery","role":"other","txHash":"0x7e5b96766d6927922e8bcd4df7600b059c7c22d2d27105b975f7fdb4bdc9ca28","address":"0xdff52ca0cad623e7c2bb39bbb5aacb5cce00f5d7"},{"name":"LaunchToken","role":"token","txHash":"0x7e5b96766d6927922e8bcd4df7600b059c7c22d2d27105b975f7fdb4bdc9ca28","address":"0xf5b6e3236ee84165b632eb97f9e1454dfd697701"},{"name":"MerkleDistributor","role":"distributor","txHash":"0x7e5b96766d6927922e8bcd4df7600b059c7c22d2d27105b975f7fdb4bdc9ca28","address":"0x75d6c892ef9f98b8cfd3f6769444a7dcbf4aa495"}],"createdAt":"2026-09-27T17:23:36.013+00:00","updatedAt":"2026-09-27T17:25:14.458+00:00","launchNumber":359,"parkedReason":null,"sourceCommit":"626e9c56939a86d30b897b87e4fa3054b99e1ece","sourceRepoUrl":"https://github.com/identity-md-launches/launch-359-blockhashlottery"}],"publishedAt":"2026-09-27T18:00:04.37+00:00"},{"id":"workflow:ac4e7c1a-37e2-42d7-8571-14430f5a5f27","code":[],"media":[],"sites":[{"id":"5fbb3287-d16c-49a0-b71b-b16a663648f3","cid":"bafybeicmghdcrvpufxvmziveeh4vbn42p4ms5t34tillw5coufxxn6zbku","jobId":"0d8a5041-b19c-4507-8e3b-eec402b5a28c","label":"lab-price-band-hook","status":"named","txHash":"0x7aa9e773aabca1e044dc3a7d4a7b0ab09664864a0b2a0b1a09d35bf2c5dfdaeb","ensName":"lab-price-band-hook.site.identitymd.eth","failure":null,"namedAt":"2026-09-27T08:54:53.034+00:00","repoUrl":"https://github.com/identity-md-launches/launch-403-workflow-frontend-stage-context","pinnedAt":"2026-09-27T08:53:50.17+00:00","createdAt":"2026-09-27T08:53:36.812+00:00","supersededBy":null}],"title":"Release Band (token symbol BAND) on Sepolia as a univ4_hook launch. Token: Band (BAND), total supply 1,000,000,000 BAND with 18 decimals, minted once to the deployer. Hook: PriceBandHook, a Uniswap v4 hook on the token's native-ETH pool (currency0 native ETH, currency1 BAND, LP fee 3000, tickSpacing 60; the factory seeds one-sided BAND liquidity, so the first buy lands in a pool holding no ETH). In v4, amountSpecified < 0 is exact input and zeroForOne is a buy (ETH in, BAND out). The hook extends v4-periphery BaseHook; constructor (IPoolManager poolManager) with the Sepolia PoolManager 0xE03A1074c86CFeDd5C142C4F04F1a1536e203543. getHookPermissions enables exactly afterInitialize and afterSwap (no deltas, no fees); the manifest lists the same set. State is keyed by PoolId, so any pool may attach the hook. No owner, no admin. Prices are pool ticks (tick = log base 1.0001 of BAND per ETH). Hours are UTC: h = block.timestamp / 3600. afterInitialize records the tick and time. On every swap, afterSwap first rolls a time-weighted accumulator forward from the last update to block.timestamp at lastTick (the tick after the previous swap; only swaps move it), closing each hour boundary it crosses: a closed hour's average = sum(tick x seconds) / seconds covered, rounded toward negative infinity; the initialisation hour covers only the seconds after initialisation; an hour with no swap averages to the tick that held throughout, so a gap of any length costs O(1) gas. Band: from the last completed hour's average A, lower = A - 2231 and upper = A + 1823 ticks inclusive (1.0001^-2231 ~ 0.80 and 1.0001^1823 ~ 1.20, i.e. BAND per ETH within 80%-120% of the average; BAND's ETH price within about 83%-125%). Until the first hour completes there is no band. With t0 = lastTick and t1 = the tick after the swap, the swap is allowed if lower <= t1 <= upper, or if t1 is strictly closer to the band than t0 (a swap back toward the band is never blocked, so the pool cannot freeze); otherwise afterSwap reverts PriceOutOfBand(t1, lower, upper). Then lastTick = t1. Events: HourClosed(PoolId indexed poolId, uint256 hour, int24 avgTick) for the latest hour a swap closes. Views: band(PoolId) -> (bool active, int24 avgTick, int24 lower, int24 upper, uint256 hour) computed as of block.timestamp exactly as the next swap would, and lastTick(PoolId). Tests run against a real v4-core PoolManager and include a launch rehearsal: one-sided BAND liquidity below the opening price, a first buy into the ETH-less pool, then a sell. Acceptance (vm.warp): first hour unbounded; edges inclusive and one tick outside reverts; a swap moving toward the band from outside is allowed; a 1-hour and a 1,000-hour gap give the right average; negative ticks round down; band() equals what the next swap enforces. Then a small website that shows the last completed hour's average price (in ETH per BAND and BAND per ETH), the allowed band, the current price and whether the band is active, and a swap form that sets sqrtPriceLimitX96 one tick inside the band edge (a swap that stops exactly on an initialized edge tick while falling reports the tick below it) so an oversized swap fills partially instead of reverting. Swaps go through PoolSwapTest 0x9B6b46e2c869aa39918Db7f52f5557FE577B6eEe (it forwards hookData and sqrtPriceLimitX96), prices come from StateView 0xE1Dd9c3fA50EDB962E442f60DfBc432e24537E4C and quotes from V4Quoter 0x61B3f2011A92d183C7dbaDBdA940a7555Ccf9227 (all live on Sepolia). One page, no backend.","types":["contracts","sites"],"audits":[],"paidBy":"0x8a3b860f6dbfbbbb07f21905ed8cb0234538bdc8","release":{"status":"completed","failure":null},"research":[],"versions":[],"contracts":[{"id":"c45efa2f-90a1-46e8-b974-1ef96ca0621c","kind":"univ4_hook","token":{"name":"Band","symbol":"BAND"},"status":"live","chainId":11155111,"artifacts":[{"name":"Band","role":"token","txHash":"0x22c6b573b351721ec3719d0a587461e128b1f434809fca529bc57475f2a63db6","address":"0xd79607176c790725cac9cb886edca9ccb50a64b8"},{"name":"PriceBandHook","role":"hook","txHash":"0x22c6b573b351721ec3719d0a587461e128b1f434809fca529bc57475f2a63db6","address":"0x21607bf26763cb92dddb2ef4f94549a51ca99040"}],"createdAt":"2026-09-27T07:02:21.278+00:00","updatedAt":"2026-09-27T07:03:26.633+00:00","launchNumber":342,"parkedReason":null,"sourceCommit":"966128c1f665ea0383c2014af7edbb7dd5d5d9ee","sourceRepoUrl":"https://github.com/identity-md-launches/launch-342-pricebandhook"}],"publishedAt":"2026-09-27T08:54:53.034+00:00"}],"pageSize":20,"totalPages":6}