Oracle3
Oracle3: 예측시장 거래 엔진·MCP 서버
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Equity and RWA launch desk on Solana. Price discovery runs on Meteora Dynamic Bonding Curve. A finished curve graduates into a Meteora DAMM v2 pool. Builders start from reusable books instead of a meme curve.
Hackathon track: Meteora DBC + DAMM v2, Superteam / Crypto World's Fair.
One listing taken through the whole lifecycle from the live app on 2 October 2026: Desk Flat, sandbox profile, quoted in SOL, 0.5 SOL graduation threshold.README 전문 보기 ↗Equity and RWA launch desk on Solana. Price discovery runs on Meteora Dynamic Bonding Curve. A finished curve graduates into a Meteora DAMM v2 pool. Builders start from reusable books instead of a meme curve.
Hackathon track: Meteora DBC + DAMM v2, Superteam / Crypto World's Fair.
Live app: https://meteora-dbc-dammv2.vercel.app (devnet by default)
| Architecture, user flow and sequence diagrams | docs/ARCHITECTURE.md |
| Investor deck | StockCurve Investor Deck |
| Judge checklist | JUDGES.md |
| Test plan | docs/TESTING.md |
| On-chain proof | Devnet lifecycle, 9 transactions |
One listing taken through the whole lifecycle from the live app on 2 October 2026: Desk Flat, sandbox profile, quoted in SOL, 0.5 SOL graduation threshold.
| Account | Address |
|---|---|
| DBC virtual pool (pool desk) | FAE9u2JN…ZmU · open in StockCurve |
| DBC config | 55ej94Tn…iAAK |
| Token mint | DsX8H9iQ…fGps |
| Graduated DAMM v2 pool | 5cwVNcZw…Pyub |
| # | Step | SDK call | Program instructions | Transaction |
|---|---|---|---|---|
| 1 | Create config | partner.createConfig | CreateConfig | 5MDS5z9Y… |
| 2 | Create pool | creator.createPool | InitializeVirtualPoolWithSplToken | 2N2tuPY9… |
| 3 | Curve trade | pool.swap2 | Swap2 | 4DA82zGx… |
| 4 | Curve trade | pool.swap2 | Swap2 | 2Ev4apie… |
| 5 | Curve trade | pool.swap2 | Swap2 | 3y4pSfTT… |
| 6 | Partial-fill buy to the threshold | pool.swap2 | Swap2 | 4hSiVD1o… |
| 7 | Graduate to DAMM v2 | migration.migrateToDammV2 | MigrationDammV2, InitializePoolWithDynamicConfig, AddLiquidity, CreatePosition, PermanentLockPosition | Jb8vBUHL… |
After step 7 the DBC pool reads isMigrated = true with migration progress "DAMM pool created", its quote reserve stands at 0.500000001 / 0.5 SOL, and CpAmm.isPoolExist is true for the derived DAMM v2 pool. PermanentLockPosition in the graduation transaction is the on-chain lock of the graduated liquidity.
npm install && cp .env.example .env.local && npm run dev, then open http://localhost:3000.getQuoteFromInputAmount.createConfig, then createPool. The lifecycle turns green only after each signature confirms. The Book page then lists the pool.swapQuote2 / swap2 on the live DBC pool.migrateToDammV2. When CpAmm.isPoolExist is true, Get quote / Sign DAMM swap in the DAMM v2 card trade the graduated pool.No wallet nearby: npm run preview-curves builds every preset and quotes a buy. npm run build-config-tx builds an unsigned createConfig transaction aimed at the DBC program. Neither script sends anything.
Devnet has no migration keeper, so the desk button is the graduation path. Mainnet keepers migrate eligible pools at 10 SOL or 750 USDC when you choose the keeper profile.
A generic launchpad sells a steep curve, a huge supply, and unlocked LP. StockCurve is built for names that trade like thinly listed equity:
The same config object is what gets signed on devnet or mainnet. Sandbox thresholds let a judge finish a curve with faucet SOL. Keeper thresholds are the mainnet path keepers already watch.
No backend holds keys or funds. The browser builds each transaction with Meteora's SDKs, the wallet signs, and the RPC confirms. All state lives in Meteora's DBC and DAMM v2 programs.
flowchart LR
subgraph Browser["Browser · Next.js on Vercel"]
UI["Presets · Launch · Pool desk"] --> Lib["lib/meteora<br/>presets · curve · actions"]
end
Lib --> SDK["DBC SDK + cp-amm SDK"]
Lib -- "unsigned tx" --> Wallet["Wallet<br/>Phantom · Solflare"]
Wallet -- "signed tx" --> RPC["Solana RPC"]
RPC --> DBC["DBC program"]
RPC --> DAMM["DAMM v2 program"]
DBC -- "migrateToDammV2" --> DAMM
Lifecycle of one listing:
sequenceDiagram
autonumber
actor Issuer
participant App as StockCurve
participant W as Wallet
participant DBC as DBC program
participant DAMM as DAMM v2 program
Issuer->>App: Pick a book, terms, quote token
App->>W: createConfig
W->>DBC: config account
App->>W: createPool
W->>DBC: mint + virtual pool
loop until quote reserve ≥ threshold
Issuer->>App: buy / sell
App->>W: swap2
W->>DBC: trade on the curve
end
App->>W: migrateToDammV2
W->>DBC: graduate
DBC->>DAMM: pool with 100% locked LP
Issuer->>App: trade
App->>W: CpAmm swap2
W->>DAMM: trade
The UI records a step only after the RPC confirms its signature. Full system diagram, user flow, lifecycle state machine and one sequence diagram per transaction: docs/ARCHITECTURE.md.
Program ids are the same on devnet and mainnet.
| Program | ID |
|---|---|
| DBC | dbcij3LWUppWqq96dh6gJWwBifmcGfLSB5D4DuSMaqN |
| DAMM v2 | cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG |
| What the judge sees | SDK method | File |
|---|---|---|
| Preset curve | buildCurve, buildCurveWithLiquidityWeights, buildCurveWithTwoSegments | lib/meteora/curve.ts |
| Review-step buy quote, before a pool exists | pool.getQuoteFromInputAmount | lib/meteora/curve.ts |
| First signature | partner.createConfig | lib/meteora/actions.ts |
| Second signature | creator.createPool | lib/meteora/actions.ts |
| Pool address | deriveDbcPoolAddress | lib/meteora/actions.ts |
| Desk progress | state.getPool, state.getPoolConfig, state.getPoolQuoteTokenCurveProgress | lib/meteora/actions.ts |
| Curve quote | pool.swapQuote2 | lib/meteora/actions.ts |
| Curve swap | pool.swap2 | lib/meteora/actions.ts |
| Graduation gate | quote reserve compared with migrationQuoteThreshold | graduationBlockReason in lib/meteora/actions.ts |
| Graduation signature | migration.migrateToDammV2 | lib/meteora/actions.ts |
| Graduated pool address | deriveDammV2PoolAddress and DAMM_V2_MIGRATION_FEE_ADDRESS[Customizable] | lib/meteora/curve.ts, lib/meteora/actions.ts |
| DAMM v2 existence | CpAmm.isPoolExist, CpAmm.fetchPoolState | lib/meteora/actions.ts |
| DAMM v2 quote and swap | CpAmm.getQuote2, CpAmm.swap2 | lib/meteora/actions.ts |
migrateToDammV2 also returns two position-NFT keypairs. They partial-sign locally. The connected wallet pays. If the threshold is not met, or the pool is already migrated, the transaction is not built.
Docs: DBC, DAMM v2, DBC SDK, DAMM v2 SDK.
Blurb: StockCurve is a launch desk for tokenized equity. Issuers pick a flat, long, or exponential Meteora DBC book sized for thin markets, trade through price discovery, and graduate into permanently locked DAMM v2 liquidity. Presets are reusable. A paid-preset slot is ready for a real payment rail and stays honest until one exists.
Demo video: Show the homepage curve, the locked Prime Book, two devnet signatures, a DBC swap, and the disabled graduation button with the reserve short of the threshold. If the curve is filled, show migrateToDammV2 confirm and a DAMM v2 quote. Do not cut in a success state that the RPC did not confirm.
Live app: https://meteora-dbc-dammv2.vercel.app
Source access: If this repository is ever made private, add GitHub user dannxbt with Read.
A one-page checklist is in JUDGES.md.
npm install
cp .env.example .env.local
npm run dev
Devnet SOL: https://faucet.solana.com. Devnet USDC mint: 4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU. Mainnet USDC: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v.
npm run preview-curves
npm run build-config-tx
npm run e2e-devnet
npm run typecheck
npm run build
.env.example separates the devnet demo from the mainnet path. No secrets belong in the repo.
| Variable | Use |
|---|---|
NEXT_PUBLIC_SOLANA_NETWORK | devnet or mainnet-beta. The header switch overrides it in the browser. |
NEXT_PUBLIC_SOLANA_RPC_URL | RPC while the header says devnet. |
NEXT_PUBLIC_MAINNET_RPC_URL | RPC while the header says mainnet-beta. Replace the public URL before a live listing. |
NEXT_PUBLIC_DEMO_UNLOCK_PAID_PRESETS | true unlocks Prime Book for a judge demo and the UI says no SOL was collected. Leave unset otherwise. |
PRESET_PAYMENT_WEBHOOK_URL | Empty slot for a future payment backend. Unused. |
NEXT_PUBLIC_SOLANA_NETWORK=mainnet-beta and your own NEXT_PUBLIC_MAINNET_RPC_URL.public/token-metadata.json is a template.migrateToDammV2.CpAmm.isPoolExist is true.A sandbox threshold on mainnet is still a real pool. Keepers will not pick it up below their published minimums. Manual graduation on the desk still works once that smaller threshold fills.
lib/marketplace/access.ts exports PresetAccessProvider. Free presets pass. Paid presets fail closed. decidePresetAccess(preset, true) is only the judge demo flag. A production provider should return allowed after a verified SOL transfer, NFT, or server receipt, and should not reuse the demo flag for that.
app/ Next.js pages
components/ Launch wizard, pool desk, preset browser, lifecycle
lib/meteora/curve.ts Preset to DBC config and pre-pool quotes
lib/meteora/actions.ts Config, pool, swap, graduation gate, DAMM v2
lib/marketplace/access.ts Free presets, locked paid presets, demo unlock
scripts/preview-curves.ts Offline SDK checks, including the graduation gate and curve profile
docs/ARCHITECTURE.md Architecture, user flow, lifecycle and sequence diagrams
TypeScript, Next.js App Router, @solana/web3.js 1.x, and the wallet adapter. next.config.ts stubs Node builtins so the browser bundle can load the Meteora SDKs.
| 8 | DAMM v2 trade | CpAmm.swap2 | Swap2 | 5NhgWeF3… |
| 9 | DAMM v2 trade | CpAmm.swap2 | Swap2 | 5tZDRuWM… |