Oracle3
Open-source trading engine and MCP server for prediction markets. Fee-aware no-arbitrage trading across related contracts, live on Kalshi, Polymarket and Solana or on paper.
Equity and RWA token launchpad using Meteora Dynamic Bonding Curve and DAMM v2.
FinanceTypeScript · CSSGitHub @abilashblnairOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
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.Read the full 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… |