{"rewardSnapshot":null,"merkleRoot":null,"claims":null,"id":"632979e3-2f01-425f-baf2-3bd4f7b7673a","launchNumber":2260,"kind":"evm_contracts","status":"live","chainId":1,"sourceRepoUrl":"https://github.com/identity-md-launches/launch-2260-build-hamster-hour-v2","sourceCommit":"49f53ca0f278fe4edf6431f68a51468552372af7","parkedReason":null,"artifactCount":1,"manifestHash":"9db62f4cc876ae055b6eb0604524c4948ed8ec9e0ddbf42c4f33a739f5708481","attestationHash":"a60b1273699e46f7613378e266cc5c7df79d8332f7862a073be940a6ef051293","attestation":{"treeHash":"0aff2b1635ae546642d7f57fa5cf2259a32e7a4e","verifierVersion":"0.1.0+6a374fcd","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":"HamsterHour","path":"src/HamsterHour.sol","abiHash":"1b4767e78f20172a55d48af634b51337edf1805d463361e0d2df249cc822b698","opcodes":{"callcode":false,"delegatecall":false,"selfdestruct":false},"metadataHash":"0af33676c3216f8dd713e1164cb33827eecffde38bfe50b57b32fd530e2281ed","creationCodeHash":"61918e9de586ec3a440fc19056f30c0ba0c5346c7c6abd6de3771cda05d251de","deployedCodeHash":"929344c8a96f20163061d83cc2b377a5875ccdda43d2fc13239e02394ec15312","creationCodeBytes":23683,"deployedCodeBytes":23289},{"name":"OracleAttestation","path":"src/OracleAttestation.sol","abiHash":"518674ab2b227e5f11e9084f615d57663cde47bce1ba168b4c19c7ee22a73d70","opcodes":{"callcode":false,"delegatecall":false,"selfdestruct":false},"metadataHash":"e6defe86ed68aa61bc0ecb89c6a37502c62ed58c06e09d771223748b486e5cdd","creationCodeHash":"03f00af6a2c1e216c5142290f5a7c5a73b7dca9ff4182f298fb7a6b46fc82bef","deployedCodeHash":"324d2f77e170e519647f21af4dd0b9d0c4677a0d6fe8cd1d41c195a62780eeba","creationCodeBytes":94,"deployedCodeBytes":44}],"manifest":{"kind":"evm_contracts","notes":"Deploys the accepted src/HamsterHour.sol on Ethereum mainnet. Constructor order is team_, attester_, intake_. TEAM is $owner, the launch wallet, and receives the 1% TEAM share. Its configuration powers are the 12-hour timelocked line change for subsequently created windows and one-time staking and tip recipient settings; those recipients' fees accrue until set. There is no owner, pause, upgrade or arbitrary withdrawal authority. The constructor is nonpayable, makes no external calls and requires no initialization. IMD 0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7, genesis 1791847200, 600-second rounds, six-round windows and initial line 2100 are source constants. The oracle attester was verified against GET https://api.imd.fun/oracle/requests and the real signed attestation at https://api.imd.fun/oracle/requests/753b4996-34e7-420a-8768-d784231195da/attestation; its signature is reproduced and recovered in test/Oracle.t.sol. The domain is IdentityMD Oracle, version 2, chain 1, with this deployed HamsterHour as verifyingContract. Intake is the existing IMD on-chain Intake documented at https://imd.fun/docs/#pay-onchain; requests spend 0.5 IMD from the separately funded oracle reserve, with no settler reimbursement. Settlement, timeout and claims remain available with an empty reserve. An outstanding reserve-paid request holds the public settle path only until 24 hours after the window end (PUBLIC_SETTLE_HOLD), so the second half of the 48-hour settlement period always accepts any correctly signed attestation. OracleAttestation is an internal library, so no separate verifier or library deployment is needed. The Intake is checked on first use, not in the constructor, so deployment on an empty chain succeeds. The v1 address 0xc5217f129da200a8e86229de4eabf3686eef64b1 is not a dependency. Loss history (totalEligibleLoss, cumulativeLossBefore, cumulativeLossAfter) is computed at pool level in _poolLoss with no loop over users; the only per-window loop at finalization counts winning EXACT guesses over at most 256 tickets, the cap the brief sets.","contracts":[{"contract":"HamsterHour","constructorArgs":["$owner","0x5598aa9146215bc13eb26f2c692ad1461fd32982","0xa43e6f75ee006411f79ac1c84120606c2330de82"]}]},"manifestError":null},"attestationFailure":null,"deployFailure":null,"policyVersion":27,"economics":null,"poolFee":null,"requester":"0x6cba4751742f6989fa224b2dc5d5d52fcef98a34","admissionChecks":[{"name":"provenance","detail":"8 node(s) accepted at 49f53ca0","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":"2 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-9c691c05ee3c: Suite result: ok. 1 passed; 0 failed; 0 skipped; finished in 1.97ms (1.77ms 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-19T21:47:06.928Z","updatedAt":"2026-10-19T21:47:49.200Z","jobs":[{"id":"158da2c2-a2d8-456c-be8b-4659a6c88887","objective":"Build Hamster Hour v2: pari-mutuel IMD betting on the Squeekchain hamster wheel. Ethereum mainnet. IMD 0xd34a99bc0f67ae1bbd63c660e6d0b0dd03e263b7. Replaces unused v1 (0xc5217f129da200a8e86229de4eabf3686eef64b1); reference its source and oracle docs: github.com/identity-md-launches/launch-1951-workflow-contract-stage-context. Follow the design review github.com/Identity-md/research/blob/main/jobs/1dc6a64f-d2a5-4bfe-9fd5-dce8ad4b887d/files/artifacts/report.md unless this brief differs.\n\nTEAM = launch wallet. No owner, pause, upgrade or withdrawal. TEAM powers are only the timelocked settings below.\n\nTIME: genesis 1791847200, round 600s, window = 6 rounds (1h). Bind the six round IDs in each oracle question. Betting closes strictly at window start; windows open up to 24 ahead and snapshot line/source/genesis at creation. Settle when end <= now < end+48h; timeout at >= end+48h refunds everything in that window, no fees.\n\nMARKETS (binary min 0.5 IMD):\n- OVER/UNDER: OVER iff result > line, else UNDER. If result < 100 (asleep), refund 100%, no fees.\n- SNOOZE YES/NO: YES iff result < 100.\n- EXACT jackpot: 5 IMD ticket, one per address per window, max 256 per window. Wins iff |guess-result|*1000 <= result*5 (±0.5%). No winners if asleep.\n- One-sided binary pools refund fully.\n- Binary fees: 91% winners, 5% stakers, 2% jackpot, 1% oracle reserve, 1% TEAM. EXACT ticket: 93% jackpot, 5% stakers, 1% oracle, 1% TEAM.\n- Line fixed at 2100; TEAM can change it via 12h timelock, applies only to windows created after.\n\nJACKPOT: finalize strictly by window index (bounded permissionless catch-up). On finalize: seed + window's tickets + its 2% fees; if winners, 80% split equally as fixed liabilities and 20% carries; else all carries. Timeout refunds tickets, seed unchanged. External deposits (future token hook, donations) go to a pending bucket for the earliest not-started window. feedHamster(amount): 90% jackpot, 10% Squeektoshi tip jar (recipient set once via 12h timelock, accrues until set, recipient claims); emit Fed(from, amount). Never use raw balance as jackpot.\n\nORACLE: IMD v2 EIP-712 attestation per imd.fun/docs: typed uint256 answer, canonical question hash, panel >= 5, >= 4 agree, issuedAt >= window end, consumer-scoped replay protection. Verify attester and domain from a real attestation; never guess addresses. Missing data is unanswerable, never sleep. Prefer paying oracle requests from the reserve via IMD on-chain intake if supported; otherwise reimburse 0.5 IMD only to the bound payer of the canonical request, once per window, never to the first settler. An empty reserve never blocks settle, timeout or claims. fundOracleReserve(amount) open to anyone.\n\nSTAKING: the 5% staker share accrues to one staking recipient (future MiningVault) set once via 12h timelock. Fees before that are held and sent to it on set.\n\nMINING HISTORY: lossOf(k, account) = max(0, binary paid - refund - payout entitlements), netted across both binary markets, stable before and after claims, EXACT excluded. At chronological finalization store totalEligibleLoss[k], cumulativeLossBefore[k], cumulativeLossAfter[k]. No loops over users.\n\nCLAIMS: claim(k) pays winnings, refunds, jackpot share; never expire. Separate pull balances for TEAM, tip jar, staking recipient, oracle. Invariant: IMD held >= all liabilities.\n\nEvents plus one view per window (times, line, pools, tickets, status, result) for the site and AI agents.\n\nDeliver: Foundry, tests (two-wallet hedging, lossOf netting, results 0/99/100/line, ±0.5% edges, refunds, jackpot order across 48h backlog, replayed attestations, empty reserve, timelocks, conservation fuzz), ABI, README, deploy params with real addresses only.","state":"completed","attachedAt":"2026-10-19T21:47:06.928Z"}],"artifacts":[{"role":"other","name":"HamsterHour","address":"0xe33ab493249a2df0d8c4a71ac54f46d1f7778367","creationCodeHash":"61918e9de586ec3a440fc19056f30c0ba0c5346c7c6abd6de3771cda05d251de","txHash":"0xe22d3fc97a6940efd66987fd49f32cec14d9be4836bb1de146f580c60f357b4a","blockNumber":26229405,"verifiedAt":"2026-10-19T21:48:34.950Z","verifyFailure":null}],"allocations":[]}