Skip to content

EchoMarkets/echo-markets-frontend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

69 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Echo Markets

Bitcoin Prediction Markets powered by Charms Protocol โšก

A decentralized prediction market platform built on Bitcoin Testnet4, powered by the Charms protocol. Trade on future outcomes using Bitcoin-native smart contracts with zero-knowledge proofs.

Built for: The BOS Hackathon - Building Bitcoin Smart Contracts with the BitcoinOS Stack at Encode Club


๐Ÿ“ฆ Repositories

Repo Description
echo-markets Charms smart contracts (Rust)
echo-markets-frontend Web application (this repo)

๐ŸŽฏ Features

Core Functionality

  • Create Markets โ€” Launch prediction markets with custom questions, deadlines, and fees
  • Mint Shares โ€” Deposit BTC to receive YES + NO tokens
  • Burn Shares โ€” Burn equal YES + NO to recover BTC (before resolution)
  • P2P Trading โ€” Swap YES tokens for NO (and vice versa)
  • Portfolio Tracking โ€” Real-time P&L, position values, and transaction history
  • Wallet Integration โ€” Full BIP39/BIP86 Taproot wallet with Schnorr signatures

Technical Highlights

  • Zero-Knowledge Proofs โ€” Private, verifiable transactions via Charms
  • Bitcoin Native โ€” Built on Bitcoin Testnet4, no sidechains
  • Taproot Wallets โ€” BIP86 derivation with Schnorr signatures
  • Transaction Polling โ€” Automatic confirmation tracking
  • Modern Stack โ€” Next.js 15, React 19, TypeScript, Tailwind CSS v4

๐Ÿš€ Quick Start

Prerequisites

  • Node.js 20+ and npm
  • Bitcoin Testnet4 coins (mempool faucet)
  • Charms CLI (for contract compilation)

Installation

# Clone the repository
git clone https://github.com/EchoMarkets/echo-markets-frontend.git
cd echo-markets-frontend

# Install dependencies
npm install

# Set up environment variables
cp .env.example .env.local

Environment Variables

Create a .env.local file:

# Charms Prover API
CHARMS_PROVER_URL=https://v8.charms.dev/spells/prove

# Mempool API (testnet4)
MEMPOOL_API=https://mempool.space/testnet4/api

# Contract Verification Key
# Generate with: charms app vk --wasm ./contracts/echo-markets.wasm
APP_VK=your_verification_key_here

# Path to compiled contract
APP_WASM_PATH=./contracts/echo-markets.wasm

Development

npm run dev
# Open http://localhost:3000

Production Build

npm run build
npm start

๐Ÿ“ Project Structure

echo-markets-frontend/
โ”œโ”€โ”€ app/
โ”‚   โ”œโ”€โ”€ api/charms/           # Charms API routes
โ”‚   โ”‚   โ”œโ”€โ”€ broadcast/        # Transaction broadcasting
โ”‚   โ”‚   โ”œโ”€โ”€ cast/             # Prove + sign + broadcast
โ”‚   โ”‚   โ””โ”€โ”€ prove/            # ZK proof generation
โ”‚   โ”œโ”€โ”€ create/               # 4-step market creation wizard
โ”‚   โ”œโ”€โ”€ market/[id]/          # Market detail + trading
โ”‚   โ”œโ”€โ”€ portfolio/            # Positions, P&L, transactions
โ”‚   โ””โ”€โ”€ wallet/               # Wallet setup & management
โ”œโ”€โ”€ components/
โ”‚   โ”œโ”€โ”€ layout/               # Header, navigation
โ”‚   โ”œโ”€โ”€ market/               # MarketCard
โ”‚   โ”œโ”€โ”€ trading/              # TradingPanel, SharesInput, PriceImpact
โ”‚   โ”œโ”€โ”€ wallet/               # WalletSetup, WalletDisplay, FundingInstructions
โ”‚   โ””โ”€โ”€ ui/                   # Button, Toaster
โ”œโ”€โ”€ lib/
โ”‚   โ”œโ”€โ”€ bitcoin.ts            # Taproot signing, UTXOs, broadcasting
โ”‚   โ”œโ”€โ”€ charms.ts             # SpellBuilder (create, mint, trade, redeem)
โ”‚   โ”œโ”€โ”€ charmsApi.ts          # Prover API client
โ”‚   โ”œโ”€โ”€ store.ts              # Zustand stores (wallet, markets, portfolio)
โ”‚   โ”œโ”€โ”€ useCharms.ts          # React hook for all Charms operations
โ”‚   โ”œโ”€โ”€ WalletService.ts      # BIP39/BIP86 wallet management
โ”‚   โ””โ”€โ”€ utils.ts              # Formatting, calculations
โ”œโ”€โ”€ contracts/
โ”‚   โ””โ”€โ”€ echo-markets.wasm     # Compiled Charms contract
โ””โ”€โ”€ types/
    โ””โ”€โ”€ index.ts              # TypeScript definitions

๐Ÿ”ง Tech Stack

Category Technologies
Frontend Next.js 15, React 19, TypeScript, Tailwind CSS v4, Framer Motion
State Zustand with persist middleware
Bitcoin @scure/btc-signer, @scure/bip32, @scure/bip39
Crypto @noble/curves (Schnorr), @noble/hashes (SHA256)
Protocol Charms
API Mempool.space API

๐Ÿ’ผ How It Works

Transaction Flow

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  User Action โ”‚ โ”€โ”€โ–ถ โ”‚ SpellBuilder โ”‚ โ”€โ”€โ–ถ โ”‚ /api/charms/castโ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                                   โ”‚
                                                   โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚   Broadcast โ”‚ โ—€โ”€โ”€ โ”‚  User Signs  โ”‚ โ—€โ”€โ”€ โ”‚  Charms Prover  โ”‚
โ”‚  to Bitcoin โ”‚     โ”‚  (Schnorr)   โ”‚     โ”‚ [commit, spell] โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Market Lifecycle

  1. Create โ€” Deploy market with question hash, deadlines, fees
  2. Mint โ€” Users deposit BTC โ†’ receive equal YES + NO tokens
  3. Burn โ€” Users burn equal YES + NO โ†’ recover BTC (before resolution)
  4. Trade โ€” P2P swaps between YES and NO holders
  5. Resolve โ€” Creator resolves with outcome (YES/NO/Invalid)
  6. Redeem โ€” Winners burn tokens โ†’ receive 1 sat per token
  7. Claim Fees (future) โ€” Creator withdraws accumulated trading fees
  8. Cancel (future) โ€” Creator cancels unresolved market, users redeem at cost

Spell Types

Spell Description Status
Create Deploy new market NFT โœ… Implemented
Mint Deposit BTC, mint YES+NO tokens โœ… Implemented
Burn Burn equal YES+NO to recover BTC (before resolution) โœ… SpellBuilder only
Trade P2P swap (Charms token conservation) โœ… Implemented
Resolve Set market outcome โœ… SpellBuilder only
Redeem Burn winning tokens for BTC (after resolution) โœ… Implemented
ClaimFees Creator withdraws accumulated fees ๐Ÿ”ฎ Future
Cancel Creator cancels market, refunds holders ๐Ÿ”ฎ Future

๐ŸŽจ Key Components

useCharms Hook

Central hook for all Charms operations:

const { createMarket, mintShares, trade, redeemShares, isLoading } =
  useCharms();

// Create market
const marketId = await createMarket({
  question: "Will BTC reach $150k by 2025?",
  tradingDeadline: 1735689600,
  resolutionDeadline: 1735776000,
  feeBps: 100,
  minBet: 10000,
  maxSupply: 1000000000,
});

// Mint shares
await mintShares({ marketId, amount: 50000 });

// P2P trade
await trade({
  marketId,
  sellOutcome: "Yes",
  sellAmount: 1000,
  sellUtxoId: "abc:0",
  buyUtxoId: "def:1",
  counterpartyAddress: "tb1p...",
});

Wallet Components

// Composable wallet UI
{
  !wallet ? (
    <WalletSetup /> // Create or import wallet
  ) : (
    <>
      <WalletDisplay /> // Address, balance, seed phrase
      <FundingInstructions /> // Faucet links, auto-polling
    </>
  );
}

Trading Components

<TradingPanel
  market={market}
  onTrade={handleTrade} // Calls useCharms.mintShares()
/>

๐Ÿ“Š Implementation Status

โœ… Complete

Feature Status
Wallet (BIP39/BIP86 Taproot) โœ…
Market creation UI + on-chain โœ…
Trading UI + on-chain minting โœ…
P2P trade function โœ…
Portfolio with real positions โœ…
Transaction history โœ…
Confirmation polling โœ…
Charms spells (create, mint, burn, trade, resolve, redeem) โœ…
API routes (prove, cast, broadcast) โœ…

๐Ÿ”ฎ Future Improvements

  • Retry logic for failed broadcasts
  • Dynamic fee estimation
  • Market resolution UI
  • Burn shares UI
  • Fee claiming UI for market creators
  • Cancel market functionality
  • Order book for P2P matching
  • On-chain market indexing

โš ๏ธ Known Limitations

  1. Testnet Only โ€” This is a testnet prediction market
  2. No Order Book โ€” P2P trades require knowing counterparty's UTXO
  3. Single Address โ€” Uses primary address only (24-address system exists but unused)
  4. Hardcoded Fees โ€” Uses 2 sat/vB, no dynamic estimation

๐Ÿ” Security

Aspect Implementation
Key Storage Client-side only, never sent to servers
Mnemonic Standard BIP39 12-word phrase
Signing Schnorr signatures (BIP340)
Addresses Taproot P2TR (BIP86)

โš ๏ธ Important: Save your seed phrase! Keys are stored in browser memory and cleared on refresh.


๐Ÿšข Deployment

Vercel (Recommended)

  1. Push to GitHub
  2. Import in Vercel
  3. Add environment variables
  4. Deploy

Environment Variables

Set in your deployment platform:

  • CHARMS_PROVER_URL
  • MEMPOOL_API
  • APP_VK
  • APP_WASM_PATH

๐Ÿ”— Links

Resource URL
Testnet Faucet https://mempool.space/testnet4/faucet
Block Explorer https://mempool.space/testnet4
Charms Protocol https://charms.dev

๐Ÿ™ Acknowledgments

  • Charms Protocol โ€” Bitcoin smart contracts with ZK proofs
  • BitcoinOS โ€” Bitcoin application layer
  • Encode Club โ€” a global developer education community focused on Web3 and AI

๐Ÿ“„ License

MIT โ€” Built for the BitcoinOS x Encode Club Hackathon


Built with โšก for Bitcoin

About

A decentralized prediction market platform built on Bitcoin Testnet4, powered by the Charms protocol. Trade on future outcomes using Bitcoin-native smart contracts with zero-knowledge proofs.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors