A trading desk for tokenized stocks on Solana — and a launchpad for tokens quoted in those stocks.
joinopenstock.xyz
OpenStock lets anyone browse, analyze and trade xStocks (Backed's tokenized equities, such as NVDAx, AAPLx, TSLAx) on Solana, and launch a new token whose bonding curve is quoted in a stock instead of SOL or USDC (YOUR_TOKEN × NVDAx) on Meteora Dynamic Bonding Curve.
Every number on the desk comes from a live source (the issuer, Jupiter, Meteora, GeckoTerminal, DexScreener, Pyth or Solana itself). When a source is unavailable the UI says so; it never fills in a sample value.
- 32 curated xStocks with live issuer reference price, Solana DEX price, 24h change, volume and liquidity.
- Real price history — USD OHLCV (1m → 1d) from each stock's most liquid Solana pool via GeckoTerminal.
- Evidence panel per stock: issuer reserves and backing ratio, share multiplier, oracle cross-check (Pyth feed, or Jupiter when a stock has no Pyth feed — always labelled), Meteora pools, Jupiter quote impact.
- Market orders routed by Jupiter. The order is sized on the same on-chain price the slip shows, and the client refuses to sign if Jupiter's quote would deliver more than 1% less than displayed.
- Limit, stop-loss, OCO and DCA rules through Jupiter Trigger, with a review → funding flow.
- Corporate actions (splits, dividends, multiplier changes), price/liquidity watches, news, portfolio and receipts.
-
Meteora DBC, three curve styles per stock, each its own on-chain PoolConfig:
Curve Shape Base fee Creator share Equity Standard Even liquidity 1.5% 50% of fees Equity Momentum Thin early liquidity — fast early price discovery 2.0% 50% of fees Equity Deep Book Deep early liquidity — low slippage for first buyers 1.0% 50% of fees Graduation is denominated in xStock units (shares of NVDAx, not a frozen USD cap). The studio shows the live USD equivalent from Jupiter; that number moves with the equity. Pools migrate to Meteora DAMM v2 (25 bps config
7F6dnUcRuyM2TwR8myT1dYypFXpPSxqwKNSFNkxyNESdunlessMETEORA_DAMM_V2_CONFIGis set) with migrated partner liquidity permanently locked.Live catalog: joinopenstock.xyz/launch/presets · JSON:
/api/launch/dbc-presets· pool progress:/api/launch/dbc-pools. -
Pump.fun launches quoted in an xStock via ClawPump. A paid launch that fails at the final step can be finished later without paying again.
-
Launches are verified on-chain before they appear on the desk: the transaction signature, the derived pool address and the pool creator are all checked.
-
Community market: OpenStock launches plus existing pools found on DexScreener that trade directly against an xStock, with real holders from Solana and look-alike ticker warnings.
- Phantom, Solflare, Backpack, OKX and Coinbase through Solana Wallet Adapter; Mobile Wallet Adapter on Android; deep links into wallet browsers on iOS.
- Optional email / Google login through Privy (view-only — it cannot sign).
- Non-custodial: every transaction is signed in the user's wallet. OpenStock never holds keys.
| Stock | Standard | Momentum | Deep Book |
|---|---|---|---|
| NVDAx | 5Fx7AK…6XNF |
GHHmbo…Nbpn |
D2xY6r…FjV3 |
| AAPLx | 4sMonW…MDMpn |
6YozhtJ…jEWP |
BFVNHD…JNgn |
Program: Meteora DBC dbcij3LWUppWqq96dh6gJWwBifmcGfLSB5D4DuSMaqN. Both quote mints carry Meteora's Token-2022 token badge.
Next.js 15 (App Router, React 19) — deployed on Vercel
│
├─ app/ Pages and API routes
│ ├─ api/rpc Same-origin Solana JSON-RPC relay (method allowlist, rate limit)
│ ├─ api/candles USD OHLCV from GeckoTerminal
│ ├─ api/evidence Issuer price, reserves, oracle, Meteora pools per stock
│ ├─ api/launch/* Venues, pairs, DBC presets/pools, Pump.fun preflight/confirm, Meteora prepare/confirm, uploads
│ ├─ api/trade/* Jupiter order prepare / execute
│ ├─ api/token-holders Largest holders from Solana
│ └─ api/token-metadata Metaplex JSON for DBC launches
├─ components/ Desk, launch studio, community market, wallet session
├─ lib/
│ ├─ meteora-dbc.ts DBC config lookup, pool/migration builders, on-chain verification
│ ├─ community-tokens.ts Launch registry + DexScreener discovery
│ ├─ market-evidence.ts Issuer, Pyth, Jupiter, Meteora evidence
│ ├─ json-store.ts Upstash Redis (prod) / local JSON files (dev)
│ └─ solana-curated-25.json Curated xStock registry (mints, 8 decimals)
└─ scripts/
├─ create-meteora-configs.mjs Creates the per-stock DBC configs
└─ verify-scaled-amounts.mjs Share-multiplier math tests (npm test)
Data sources: xStocks/Backed API (issuer price, reserves, multipliers, corporate actions) · Jupiter Price v3, Swap and Trigger APIs · Meteora DBC SDK and pool API · GeckoTerminal (candles) · DexScreener (community pools) · Pyth Hermes · Solana RPC.
Requirements: Node.js 20+.
git clone https://github.com/Datwebguy/openstock.git
cd openstock
npm install
cp .env.example .env.local # fill in what you need
npm run dev # http://localhost:3000The desk works without any keys (browse and paper-review mode). Keys unlock live features.
| Variable | Needed for |
|---|---|
SOLANA_RPC_URL |
Server-side RPC. Use a keyed endpoint (e.g. Helius) in production; the browser reaches it only through /api/rpc. |
UPSTASH_REDIS_REST_URL / UPSTASH_REDIS_REST_TOKEN |
Storage for accounts, receipts, alerts, launches and uploads. The Vercel KV names KV_REST_API_URL / KV_REST_API_TOKEN also work. Required on serverless; local dev falls back to .data/. |
JUPITER_API_KEY |
Live stock trades and trigger/DCA orders. Without it the desk is browse-only. |
CLAWPUMP_API_KEY |
Pump.fun launches. |
METEORA_DBC_CONFIGS |
Meteora DBC launches: {"NVDAx":{"standard":"…","momentum":"…","deep":"…"}} |
NEXT_PUBLIC_PRIVY_APP_ID |
Optional email / Google login. |
PYTH_HERMES_API_KEY |
Optional Pyth Hermes key. |
See .env.example for the full list with defaults.
# Dry run: prints each config's fee, curve and graduation threshold — sends nothing
node scripts/create-meteora-configs.mjs --symbols NVDAx,AAPLx --fee-claimer <FEE_CLAIMER_PUBKEY>
# Broadcast with a funded payer keypair (~0.006 SOL rent per config)
node scripts/create-meteora-configs.mjs --broadcast --symbols TSLAx --fee-claimer <PUBKEY> --keypair <PATH>The script converts USD market-cap targets into the quote xStock at the live price, skips stocks without a Meteora token badge, and prints the METEORA_DBC_CONFIGS value to set in your environment.
npm run dev # local server (custom server.mjs)
npm run build # production build
npm start # run the production build
npm run typecheck # TypeScript
npm test # share-multiplier amount tests- xStocks are tokenized equities issued by Backed. They track a share and are backed by shares the issuer holds; they do not give shareholder rights such as voting.
- OpenStock does not ship with, create or store any wallet, private key or seed phrase.
- Nothing here is investment advice. On-chain trading carries risk, including loss of funds.