Oracle3
Oracle3: 예측시장 거래 엔진·MCP 서버
Monad 예측 시장, USDC 풀에서 시작해 Kuru 온체인 주문서로 전환, 답 나오기 전 판매 가능, 체인으로 정산, 결과는 자동
Prediction markets on Monad that start as USDC pools and graduate to Kuru's onchain order book, so you can sell before the answer. They settle by reading the chain; no one decides the outcome by hand.
금융TypeScript · SolidityGitHub @rajkaria온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Prediction markets on Monad that start as pools, graduate to Kuru's onchain order book, and settle by reading the chain.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Prediction markets on Monad that start as USDC pools and graduate to Kuru's onchain order book. A pool works from the first dollar; once it proves demand, one transaction turns it into fully backed YES and NO tokens on their own Kuru book, so you can sell before the answer. Every market pays out by reading the chain. No one decides the answer by hand.
Status (2026-10-12): live on Monad mainnet and Monad testnet.README 전문 보기 ↗Prediction markets on Monad that start as USDC pools and graduate to Kuru's onchain order book. A pool works from the first dollar; once it proves demand, one transaction turns it into fully backed YES and NO tokens on their own Kuru book, so you can sell before the answer. Every market pays out by reading the chain. No one decides the answer by hand.
Status (2026-10-12): live on Monad mainnet and Monad testnet.
Try it: book.playhunch.xyz. Every market on Kuru: book.playhunch.xyz/kuru. On testnet, take test USDC from the wallet menu and MON from faucet.monad.xyz. Read pages need no wallet.
Every claim below links to an address or a transaction. Activity by our own wallets (the deployer, the keeper, the maker bot and the seed wallets) is labelled as ours wherever it is counted.
Hunch is our prediction-market product, running on Base today. People back a hunch on crypto prices, stocks, weather and onchain numbers, in USDC, and every Hunch market is a parimutuel pool: nobody takes the other side of your bet, the price is the crowd's odds read straight from the pool, and winners split it. Hunch also runs Bazaar, where anyone can open a market, a practice arena with play money, and an agents page where software can read markets and bet.
Running pools taught us three things.
The big order-book venues solve the second problem and keep the first and third: a new market's book is empty until someone is paid to quote it, orders are matched on the operator's servers, and the outcome goes through an oracle process with people in it.
Hunch Book is our answer to all three at once: start as a pool, graduate to a real onchain order book once the pool proves demand, and settle only from data the chain already holds. We built it on Monad because Monad has every piece it needs: Kuru, a fully onchain order book; Perpl, a perpetuals exchange that keeps its funding history onchain; Chainlink feeds; and blocks fast and cheap enough to give a small market its own book.
1. POOL 2. GRADUATION (one tx) 3. BOOK ON KURU 4. SETTLEMENT
stake USDC on YES or NO pool USDC -> YES + NO tokens sell or buy any time anyone calls settle()
the split is the chance split between the stakers YES/USDC book on Kuru resolver reads the chain
no market maker needed Kuru book created or attached NO trades through the router winners redeem for USDC
| | | |
+---- rule met: enough USDC ---+--- payoff unchanged ---------+---- no one decides --------+
from enough wallets for anyone who holds the answer by hand
Markets whose pool never reaches the rule simply stay pools and settle as pools.
| Pools only (parimutuel) | Order books matched offchain | AMM markets | Hunch Book | |
|---|---|---|---|---|
| Works from the first dollar | yes | no: an empty book until a maker is paid | needs seed liquidity | yes: every market starts as a pool |
| Exit before the answer | no | yes | yes, against the curve | yes, once graduated: a real book, both sides |
| Where orders match | no orders | the operator's servers | the pool contract | Kuru, in the contract: price-time priority onchain |
| Who decides the outcome | usually the operator | an oracle process with people in it | varies | a resolver reading the source contract; no one can override it |
| What a market becomes | a pot | an entry in one venue's database | a pool position | two ERC-20 tokens and a Kuru book: an asset any app can hold, quote or build on |
| Who can make the market | nobody needs to | approved makers | liquidity providers | anyone: open-source maker bot and kit, onchain pricing inputs |
The shift is that a market is born cheap and grows into an asset. Small questions do not need a market maker to exist. Questions with demand get a real book. Every graduated market is a new YES/USDC pair on Kuru, with holders on day one, which is exactly what an order-book exchange needs to list something new.
Better for each side:
Who it is for first: a trader on Perpl who holds a BTC long and pays funding about every 43 minutes. They want a cheap way to get paid back if funding stays high this week, and to close that hedge whenever they like. The app's hedge assistant reads their Perpl position, projects the funding they will pay and sizes a matching market.
Start a market from a template. The question is one the chain can answer, for example "Will BTC longs pay more than $2 per BTC in funding on Perpl this week?" or "Will MON be at or above $0.035 at 12:00 UTC on Friday?" The app shows the exact rule the contract will apply before you commit. The creator makes the first stake (at least 5 USDC). One market per question: the factory hashes the template and its parameters, so the same question cannot be opened twice.
Pool phase. People stake USDC on YES or NO (at least 1 USDC, at most 1,000 USDC per wallet per market, 5,000 USDC per pool in this beta). The pool's split is the market's chance.
Graduation to Kuru. When the pool meets its template's rule, anyone can call graduate(). The rule
differs by network and is read from the template on chain:
| Network | Graduation rule (every template) | Where the book comes from |
|---|---|---|
| Monad mainnet | at least 10 USDC from at least 2 wallets | Kuru creates each YES/USDC book (book creation is owner-only there) and anyone registers it with the Graduator, which checks it is a Kuru book for that market's YES token and USDC |
| Monad testnet (primary stack) | at least 500 USDC from at least 10 wallets | the graduation transaction calls Kuru's deployProxy and creates the book |
Every rule also needs both sides staked and a chance between 3% and 97%. The keeper pushes each staker's tokens right after graduation.
Trade. Buy or sell YES or NO at any time on the Kuru book, one transaction each, with a slippage limit. Buying NO mints a pair from USDC and sells the YES; selling NO buys YES and redeems the pair. Take-profit, stop-loss and limit orders are optional (PERIPHERY.md).
Settlement. When the observation window ends, anyone can settle. The resolver reads the answer from the source contract. The app's verifier re-runs that exact read from your browser, no wallet needed. Winning tokens redeem for 1 USDC minus a fee fixed at graduation (at most 1.94 cents); pool winners claim their share, and the keeper pushes payouts so nobody has to come back.
| Who pays | When | How much | Goes to |
|---|---|---|---|
| Pool winners | when a pool settles | 2% of winnings, never more than the losing side | 75% the protocol's fee recipient, 25% the market's creator |
| Holders of winning tokens | when they redeem | a per-token fee fixed at graduation, at most 0.0194 USDC (2% x 97%) | the same split |
| Traders on a Kuru book | each trade | Kuru's own fees: our books are created with maker and taker fees of 0 | Kuru |
| Anyone | minting or merging YES and NO, void refunds | nothing | |
| Us | every keeper and maker transaction | gas, in MON | Monad validators |
The fee recipient on both networks is our deployer (0xD183…10A8). Losers never pay more than they staked, and a staker who holds through graduation to the end is paid exactly the pool payout (PROTOCOL.md §5).
Each reason below is measured, not assumed. Sources: docs/FACTS.md and docs/DEPLOY.md.
deployProxy.Hunch Book brings a new kind of asset to Kuru's spot order book: the YES token of a yes/no question that settles by reading the chain. A question token is only tradable if its book opens with a price, with inventory and with someone quoting it, and if both sides of the question trade on one book. That is the infrastructure this repo adds:
Kuru v1 on testnet (live, where new markets go). Kuru's deployProxy is open on testnet, so each graduation
transaction creates its book. Market #1
graduated
into Kuru book 0xdFd0…104a,
traded on all four router paths,
settled
and paid out (redeem).
On 2026-10-11 three more opened, each graduating into a Kuru v1 book created in its graduation transaction,
quoted by our maker bot, with four router trades each: MON mark price at Oct 13 12:00 UTC
(#10), ETH funding to about Oct 20
(#14) and BTC funding to about Oct 27
(#15). Two MON funding markets on Kuru
books, #11 and #12, settled NO at 03:00 UTC on 2026-10-12 (#11, #12).
Every pool and every trade there is ours. Books, quotes and trades: docs/FACTS.md.
Kuru v1 on mainnet (live; books wait on Kuru). Book creation on mainnet is owner-only, so Kuru creates each
YES/USDC book with our parameters and anyone registers it with the Graduator, which checks every parameter
against Kuru's margin account. Our keeper asks for each book, with the exact deployProxy call, once a pool is
halfway to its rule. A market stays a pool until its book exists. The whole flow, with the book created as
Kuru's owner and registered by an outside address, is rehearsed on a fork of Monad mainnet
(MainnetRehearsal.fork.t.sol).
Kuru v2 (building: waits on Kuru). A second testnet stack runs on Kuru v2's account model and was tested
against Kuru's live v2 contracts on a fork. Only Kuru's governance creates v2 books, after it sets up each token;
it has not yet set up our test USDC or any YES token, so three filled v2 pools wait, and the stack's first market
settled as a pool.
Our keeper publishes the exact setup and deploySpotMarket calls at
/api/v1/kuru/requests.
Our fallback book (no new markets). Hunch Book also has its own onchain order book (contracts/src/venue), built behind Kuru v1's interface as a fallback. Earlier testnet markets graduated into it. The guardian paused market creation on its factory on 2026-10-12; its markets, all created and seeded by us, trade and settle there as normal (list).
| Piece | Status | Proof |
|---|---|---|
| Contracts on Monad mainnet (Circle USDC) | live | factory 0xAEf7…8cE6 (deploy tx), Graduator 0x5582…8B3C, router 0xa0C9…141a, all 20 contracts verified on Sourcify; every address in deployments/monad-mainnet.json |
| Templates 1 to 7 on mainnet | live | registered on the mainnet factory on 2026-10-12 (template 1); rule 10 USDC from 2 wallets |
| Mainnet market #1 | settled YES, ours | 0x1107…F511: created by us with 5 USDC (tx), then 15 stakes of 1 USDC we paid for our 15 labelled seed wallets (list); no Kuru book, so it settled as a pool: settle from Chainlink 66 seconds after close, then payouts of 19.84 USDC to the 8 YES stakers, all ours |
| Mainnet market #2 | live, ours |
We would rather you read this here than find it out.
settle, graduate, claimTokensFor,
claimPoolFor and voidIfExpired are permissionless: anyone can call them. A market nobody settles voids
at its settlement deadline (close plus 7 days) and every stake is refunded in full. It happened once on
testnet: market #1 settled 18 hours late while the keeper was stopped (incident log).
That is why the keeper now runs as an always-on service with an outside watchdog that sends phone alerts.Hunch Book is the engine; Hunch is the product people already use. The goal is to run every Hunch market on Monad through Hunch Book: start as a pool, graduate to Kuru when it has demand, settle from the chain. Status words: planned (designed, not started), building, live. Dates are targets, not promises; the full plan is in docs/ROADMAP.md.
| Step | What it means | Status |
|---|---|---|
| The engine on Monad | pools, graduation, Kuru books, seven chain-read templates, keeper, maker, app | live (mainnet and testnet) |
| Always-on operations | keeper and maker as hosted services, watchdog every 10 minutes, phone alerts | live |
| A mainnet market on a Kuru book | Kuru creates the first mainnet YES/USDC book; our maker quotes it | building: waits on Kuru |
| Outside stakers and makers | real users on mainnet; makers other than us, paid from the rewards distributor | building |
| Hunch's price markets | Hunch's UP or DOWN price questions as recurring series on Monad, opened by the keeper on a schedule and settled from Chainlink | planned (the series engine is built and ran on testnet) |
| Bazaar on Monad | anyone opens a market from a template, with the creator earning 25% of its fees | building (the create flow is live on testnet) |
| More questions | stocks, other assets and onchain numbers, only where a source contract on Monad can answer them; never by hand | planned |
| Hunch's agents | agents find, quote, trade and settle through the SDK and the MCP server | building |
| Kuru v2 | graduation into Kuru v2 books | building: waits on Kuru |
| Hosted indexer | Envio HyperIndex behind the proof page, trade tape, portfolio P&L and creator pages | live (both networks) |
| Hardening | guardian to a timelock and multisig, external audit, higher caps | planned |
What success looks like: a Perpl trader hedges a week of funding in under a minute; most fills on our books come from makers who are not us, measured and published; and a question anyone cares about can go from an idea to a Kuru book in one afternoon.
| Id | Question | Settles from | Status |
|---|---|---|---|
| 1 | Will longs pay more than X in funding on a Perpl perp over a window? | Perpl's funding history | live on testnet; registered on mainnet |
| 2 | Will an asset be at or above K at time T? | The Chainlink round that brackets T (Pyth where Chainlink has no feed) | live on testnet; live on mainnet (Market #1 settled YES, Market #2) |
| 3 | Will an asset reach (or fall to) K at any time in a window? | A pointer to the Chainlink round where it happened | live on testnet; registered on mainnet |
| 4 | Will any single Perpl funding event in a window charge more than X? | A pointer to that funding event | live on testnet; registered on mainnet |
| 5 | Will an asset be inside a range at time T? | The bracketing Chainlink round | live on testnet; registered on mainnet |
| 6 | Will all of 2 to 5 markets settle YES (a parlay)? | The legs' own outcomes | live on testnet; registered on mainnet |
| 7 | Will Perpl open interest or mark price be above K at time T? | A snapshot of Perpl's state taken right after close | live on testnet (first settlement, 13 seconds after close); registered on mainnet |
Every rule, edge case and source is in docs/TEMPLATES.md.
| Path | What |
|---|---|
| contracts/ | Foundry: core (vault, tokens, market, factory, graduator and router for Kuru v1 and v2), seven resolvers, the fallback order book, the periphery, with unit, fuzz, invariant and fork tests |
| apps/web/ | The Next.js app at book.playhunch.xyz, with the data API and the embed |
| packages/shared/ | ABIs generated from the contracts, the address loader, template codecs, router and Kuru math |
| packages/sdk/ | TypeScript SDK: reads, quotes, every action, settlement evidence and verification |
| packages/mcp/ | MCP server so agents can find, quote, trade, settle and redeem |
| services/keeper/ | The keeper |
| services/maker/ | The open-source maker bot and maker kit |
| services/watchdog/ | Liveness checks and phone alerts |
| services/notifier/ | Telegram alerts for users |
| services/rewards/ |
| Read this | To learn |
|---|---|
| PROTOCOL.md | The full design: lifecycle, economics, settlement, contracts, security |
| ARCHITECTURE.md | How the pieces fit, and what you have to trust |
| TEMPLATES.md | Every template's exact rule, source, timing and evidence |
| PERIPHERY.md | Auto-redeem, orders, referrals, payouts, the oracle, the price adapter, the timelock |
| GOLDEN-PATH.md | Walk the whole lifecycle on testnet with two browser wallets |
| ACCOUNTS.md, HEDGE.md, HEALTH.md, NOTIFICATIONS.md | Passkey accounts and gas, the hedge assistant and calculator, market health, alerts |
| SDK.md, MCP.md, API.md, RELEASE.md |
git clone --recurse-submodules https://github.com/rajkaria/hunch-book && cd hunch-book
pnpm install # Node 22 or later, pnpm 10
bash scripts/verify-all.sh # the full gate: contracts, ABIs, TypeScript, build, public boundary
cd contracts && FOUNDRY_PROFILE=fork forge test # fork tests against live Monad testnet and mainnet (Foundry 1.8 or later)
pnpm --filter @hunch-book/web dev # the app on http://localhost:3000, reading Monad testnet
The fork tests read real Perpl funding, real Chainlink rounds and a real Pyth update, run the whole lifecycle against Kuru's live testnet contracts, and rehearse the mainnet launch on a fork of Monad mainnet with Circle USDC and a book created as Kuru's owner.
Build on it:
import { createHunchClient } from "@hunch-book/sdk";
const hunch = createHunchClient({ network: "monad-testnet" });
const { markets } = await hunch.markets.list({ limit: 10 });
Team. Hunch Book is built by Raj, founder of Hunch.
Prior work. Hunch Book is a new codebase, started on 2026-10-03. It builds on ideas, not code, from Hunch:
parimutuel pools, the fee rule (a share of winnings, never more than the losing side), creator markets and the
visual design. No code from Hunch is in this repository. Third-party code is limited to the pinned dependencies
in the package.json files and the two Foundry libraries in contracts/lib (forge-std and solady), each under
its own license.
How it was built. We used AI coding tools (Claude Code) throughout: to write contracts, services, the app, tests and these docs, often as several agents working in parallel on separate parts of the repo. Every change runs through the same gate before it is merged: Foundry unit, fuzz, invariant and fork tests for the contracts, type checks, lint and tests for every TypeScript package, a production build, and a check that nothing private enters this public repo. Decisions about money paths, deployments and anything that moves funds were made and run by a person.
| 0x253B…69E7: MON/USD at or above $0.03 at 2026-11-02 12:00 UTC, staking open until Nov 1; created by us with 5 USDC on YES (tx); its YES/USDC book on Kuru would land at 0x35B0…15C0 once Kuru creates it (FACTS.md) |
| Core contracts on testnet | live | the primary stack, where new markets go: factory, vault, router, graduator; every address in deployments/monad-testnet.json; verified on Sourcify |
| Graduation into Kuru v1 books | live on testnet | market #1 graduated into Kuru book 0xdFd0…104a; #10, #14 and #15 on 2026-10-11 (Hunch Book on Kuru); every pool filled by our own wallets |
| Trading YES and NO through the router | live on testnet | on market #1's Kuru book: buy YES, sell YES, buy NO, sell NO, all from our own wallet |
| Settlement and redemption | live on testnet | #11 and #12 settled NO from Perpl's funding history on 2026-10-12; a snapshot market settled 13 seconds after close; a touch market settled YES from a Chainlink round; our maker bot redeemed its winning tokens |
| Keeper (services/keeper) | live on both networks | from 0x1f5A…5569 (ours): graduates, settles, proves touches and spikes, voids, pushes tokens and payouts, auto-redeems, executes orders, publishes Kuru book requests |
| Maker bot (services/maker) | live on testnet | quoting the graduated testnet books on Kuru from 0x0f11…232A (ours); on mainnet it waits for a Kuru book; open source, with a maker kit |
| Liveness watchdog | live | checks solvency, supply, settlement lag, graduation, gas and service health from the chain every 10 minutes and sends phone alerts (ops/README.md), with a GitHub Actions backstop for both networks |
| App | live | book.playhunch.xyz: markets, every market on Kuru at /kuru, trading, create flow, portfolio with P&L and claim-all, verifier, settlement archive, proof page, trade tape, status, hedge assistant, funding-cost calculator, ladders, parlays, rewards, passkey accounts |
| Data API and embed | live | /api/v1/stats, /api/v1/feed, /api/v1/settlements, /api/v1/kuru/requests, /embed/funding/MON, docs/API.md |
| Periphery (auto-redeem, orders, referrals, payouts, oracle, price adapter, timelock) | live on testnet, deployed on mainnet | addresses in docs/PERIPHERY.md |
| Indexer (indexer) | live | Envio HyperIndex over every Hunch Book event and every book, hosted on Envio Cloud for mainnet and testnet, synced over HyperSync. It feeds the app's proof page, trade tape, portfolio profit and loss and creator pages, which fall back to reading the chain if it is slow or down (docs/INDEXER.md) |
| SDK and MCP server | building | docs/SDK.md, docs/MCP.md; packed and installed from their tarballs in CI, not on npm yet |
| Kuru v2 books | building: waits on Kuru | a second testnet stack (factory 0xd699…125A), fork tested against Kuru's live v2 contracts (list) |
| Maker reward and referral scoring into Merkle epochs |
| indexer/ | Envio HyperIndex over every Hunch Book event and every book |
| examples/ | A read-only script, a small trading agent and MCP config |
| deployments/ | The only source of addresses: monad-testnet.json, monad-mainnet.json |
| ops/ | Running the services: on Railway, under launchd, or by hand |
| Building on Hunch Book, and how the npm packages are released |
| MAKER-KIT.md, REWARDS.md, SERIES.md | Running a maker, rewards, recurring markets |
| INDEXER.md, DEPLOY.md, ops/README.md, INCIDENTS.md | Operating it, and what went wrong |
| SECURITY-REVIEW.md, AUDIT.md, BUG-BOUNTY.md, SECURITY.md | Security |
| ROADMAP.md, FACTS.md | What ships when, and where every number comes from |