Skip to content

Phase 4: Trading Interface - Foundation Complete ✅

Note: This page is a point-in-time status snapshot and may be out of date relative to the current source. PRs welcome.

Overview

Status: 🏗️ FOUNDATION COMPLETE Date: November 24, 2025

While waiting for npm install to complete and Solana programs to be deployed, I've created the complete foundation and infrastructure for Phase 4 (Trading Interface). All type definitions, store architecture, and service skeleton are now in place.


Files Created (3 files, ~1,000 LOC)

1. Trading Type Definitions ✅

File: apps/web/src/types/trading.ts Lines: ~400 LOC Status: Complete

What's Included

Market Types: - Market - Complete market data structure - MarketState enum - Market states (open, locked, resolved, etc.) - Outcome - Outcome data with prices and liquidity

Trading Types: - TradeParams - Trade execution parameters - TradeResult - Trade execution result - TradeEstimate - Price and fee estimates

Position Types: - Position - User position data with PnL - PositionSummary - Portfolio summary - PositionSnapshot - Historical position data

Liquidity Types: - LiquidityParams - Add liquidity parameters - RemoveLiquidityParams - Remove liquidity parameters - LiquidityPosition - LP position with APY - LiquidityResult - Liquidity operation result

Order Book Types: - Trade - Individual trade record - OrderLevel - Price level data - OrderBook - Complete order book

Portfolio Types: - Portfolio - Complete portfolio data - PortfolioSnapshot - Historical portfolio

Transaction Types: - PendingTransaction - Transaction tracking - TransactionType enum - TransactionStatus enum

Error Types: - TradingError - Typed errors - TradingErrorCode enum - All error codes

UI Types: - TradeFormData - Form bindings - LiquidityFormData - Liquidity form - RemoveLiquidityFormData - Remove liquidity form

Constants: - USDC_DECIMALS = 6 - LAMPORTS_PER_USDC = 1,000,000 - DEFAULT_SLIPPAGE = 1% - MAX_SLIPPAGE = 10% - DEFAULT_PRIORITY_FEE = 5000 microlamports

Utility Types: - PriceCalculation - Price impact calculations - FeeBreakdown - Fee distribution - SlippageCheck - Slippage validation


2. Trading Store ✅

File: apps/web/src/stores/trading.ts Lines: ~400 LOC Status: Complete skeleton with full API

State Management

State:

activeMarket: Ref<string | null>
positions: Ref<Position[]>
liquidityPositions: Ref<LiquidityPosition[]>
recentTrades: Ref<Trade[]>
pendingTransactions: Ref<Map<string, PendingTransaction>>
loading: Ref<boolean>
error: Ref<TradingError | null>
lastRefresh: Ref<Date | null>

Computed Properties:

hasOpenPositions: boolean
hasLiquidityPositions: boolean
totalPortfolioValue: number
totalUnrealizedPnL: number
totalUnrealizedPnLPercentage: number
numActiveMarkets: number
activeMarketPositions: Position[]
activeMarketLiquidityPosition: LiquidityPosition | null
hasPendingTransactions: boolean
pendingTransactionsArray: PendingTransaction[]

Actions:

executeTrade(params: TradeParams): Promise<TradeResult>
addLiquidity(params: LiquidityParams): Promise<string>
removeLiquidity(params: RemoveLiquidityParams): Promise<string>
loadPositions(walletAddress: PublicKey): Promise<void>
loadRecentTrades(marketId: string): Promise<void>
getPositionSummary(walletAddress: PublicKey): Promise<PositionSummary>
setActiveMarket(marketId: string | null): void
addPendingTransaction(signature, type, marketId): void
updateTransactionStatus(signature, status, error?): void
clearPositions(): void
clearError(): void
refresh(walletAddress: PublicKey): Promise<void>

Implementation Status

  • ✅ Complete type-safe API
  • ✅ Full reactive state management
  • ✅ Transaction tracking
  • ✅ Error handling
  • ⏳ TODO: Implement with SolanaProgramService once programs deployed

3. Solana Program Service ✅

File: apps/web/src/services/solanaProgram.ts Lines: ~450 LOC Status: Complete skeleton with full API

Service Architecture

Initialization:

initialize(connection: Connection): void

Trading Operations:

executeTrade(params: TradeParams, walletPublicKey: PublicKey): Promise<TradeResult>
estimateTrade(params: TradeParams): TradeEstimate
calculateExpectedShares(amount, price, liquidity, isBuy): bigint
calculatePriceImpact(amount, liquidity): number
getOutcomePrices(marketPublicKey: PublicKey): Promise<number[]>

Liquidity Operations:

addLiquidity(params: LiquidityParams, walletPublicKey: PublicKey): Promise<string>
removeLiquidity(marketPublicKey, lpTokens, walletPublicKey): Promise<string>

Position Queries:

getUserPositions(marketPublicKey, walletPublicKey): Promise<Position[]>
getLiquidityPosition(marketPublicKey, walletPublicKey): Promise<LiquidityPosition | null>

Market Data:

getMarketData(marketPublicKey: PublicKey): Promise<Market>
calculateFeeBreakdown(amount, tradingFeeBps): FeeBreakdown

Transaction Building:

buildTradeInstruction(params, walletPublicKey): TransactionInstruction
buildAddLiquidityInstruction(params, walletPublicKey): TransactionInstruction
simulateTransaction(transaction: Transaction): Promise<SimulationResult>

Utility Methods:

usdcToLamports(usdcAmount: number): bigint
lamportsToUsdc(lamports: bigint): number
formatPrice(price: number, decimals: number): string
formatShares(shares: bigint): string

Implementation Status

  • ✅ Complete API skeleton
  • ✅ Type-safe interfaces
  • ✅ Error handling structure
  • ✅ Placeholder calculations
  • ⏳ TODO: Implement with Anchor once programs deployed and IDLs available

Architecture Overview

┌─────────────────────────────────────────────────────┐
│  Vue 3 Components (Phase 4)                         │
│  ┌────────────────┐  ┌──────────────────────────┐  │
│  │ TradingPanel   │  │  PositionCard            │  │
│  │ (to be built)  │  │  (to be built)           │  │
│  └────────┬───────┘  └──────────┬───────────────┘  │
│           │                     │                   │
│           └──────────┬──────────┘                   │
│                      ▼                               │
│  ┌──────────────────────────────────────────────┐  │
│  │  Trading Store (Pinia) ✅ COMPLETE           │  │
│  │  - State management                          │  │
│  │  - Transaction tracking                      │  │
│  │  - Position management                       │  │
│  └──────────────────┬───────────────────────────┘  │
│                     ▼                                │
│  ┌──────────────────────────────────────────────┐  │
│  │  Solana Program Service ✅ SKELETON          │  │
│  │  - Trade execution                           │  │
│  │  - Liquidity management                      │  │
│  │  - Position queries                          │  │
│  │  - Price calculations                        │  │
│  └──────────────────┬───────────────────────────┘  │
│                     ▼                                │
│  ┌──────────────────────────────────────────────┐  │
│  │  Wallet Store ✅ COMPLETE (Phase 3)          │  │
│  │  - Sign transactions                         │  │
│  │  - Wallet connection                         │  │
│  └──────────────────┬───────────────────────────┘  │
└────────────────────┼────────────────────────────────┘
     ┌───────────────────────────────────────┐
     │  Solana Programs (on-chain)           │
     │  ⏳ TODO: Deploy to devnet             │
     └───────────────────────────────────────┘

What's Ready

✅ Type System Complete

  • All trading types defined
  • Type-safe interfaces throughout
  • Comprehensive error types
  • UI form types ready

✅ State Management Ready

  • Pinia trading store structure complete
  • Full reactive state management
  • Transaction tracking system
  • Error handling framework

✅ Service Layer Skeleton

  • Complete API surface defined
  • Type-safe method signatures
  • Placeholder implementations
  • Utility methods ready

✅ Integration Points Ready

  • Wallet store integration points identified
  • Connection management ready
  • Transaction signing flow ready
  • Error propagation defined

What's Needed to Complete

1. Solana Programs Deployment ⏳ BLOCKING

Required: - Fix program compilation errors - Deploy market-factory program to devnet - Deploy market-settlement program to devnet - Get deployed program IDs

Status: Blocking all trading functionality

2. Program IDL Files ⏳ BLOCKING

Required: - Generate IDL from market-factory program - Generate IDL from market-settlement program - Add IDL files to apps/web/src/idl/

Status: Needed for Anchor integration

3. Anchor Integration ⏳ WAITING FOR NPM

Required: - npm install to complete - Import @coral-xyz/anchor - Initialize Program instances - Build transaction instructions

Status: npm install in progress (~34 minutes)

4. AMM Formula Implementation

Required: - Understand deployed program's AMM logic - Implement matching calculations in frontend - Test price impact calculations - Validate slippage checks

Status: Waiting for program code review

5. Component Development

Required: - Build TradingPanel component - Build PositionCard component - Build OrderBook component (optional) - Build LiquidityPanel component (optional)

Status: Ready to start after programs deployed


Implementation Steps (Once Unblocked)

Step 1: Program Deployment

  1. Fix Solana program errors
  2. Deploy to devnet
  3. Generate and save IDL files
  4. Update service with program IDs

Step 2: Service Implementation

  1. Import Anchor and IDLs
  2. Initialize Program instances
  3. Implement executeTrade()
  4. Implement addLiquidity()
  5. Implement removeLiquidity()
  6. Implement position queries
  7. Test with devnet

Step 3: Component Development

  1. Build TradingPanel
  2. Buy/sell tabs
  3. Amount input
  4. Price display
  5. Execute button
  6. Build PositionCard
  7. Display positions
  8. Show PnL
  9. Close position
  10. Integrate into MarketDetail
  11. Test full flow

Step 4: Testing

  1. Unit tests for calculations
  2. Integration tests for trades
  3. Manual testing with devnet
  4. Error scenario testing

File Structure

apps/web/src/
├── types/
│   └── trading.ts              ✅ COMPLETE (~400 LOC)
├── stores/
│   ├── wallet.ts               ✅ COMPLETE (Phase 3)
│   └── trading.ts              ✅ SKELETON (~400 LOC)
├── services/
│   └── solanaProgram.ts        ✅ SKELETON (~450 LOC)
├── composables/
│   └── useSolana.ts            ✅ COMPLETE (Phase 3)
├── plugins/
│   └── wallet.ts               ✅ COMPLETE (Phase 3)
└── components/
    ├── wallet/
    │   ├── WalletConnectButton.vue   ✅ COMPLETE (Phase 3)
    │   └── WalletModal.vue           ✅ COMPLETE (Phase 3)
    └── trading/                ⏳ TODO
        ├── TradingPanel.vue    (to be built)
        ├── PositionCard.vue    (to be built)
        ├── OrderBook.vue       (to be built)
        └── LiquidityPanel.vue  (to be built)

Benefits of Foundation Work

🚀 Ready to Move Fast

  • Once programs are deployed, implementation can proceed rapidly
  • All types and interfaces are defined
  • Store structure is ready
  • Service skeleton is complete

🎯 Clear Implementation Path

  • TODO comments mark exactly what needs implementation
  • Type system guides correct implementation
  • Error handling framework in place

🔒 Type Safety

  • Full TypeScript coverage
  • Compile-time error checking
  • IDE autocomplete support

📚 Self-Documenting

  • Comprehensive JSDoc comments
  • Usage examples in comments
  • Clear method signatures

🧪 Testable

  • Service methods isolated
  • Store actions well-defined
  • Easy to mock for testing

Estimated Implementation Time (Post-Deployment)

With Programs Deployed & IDLs Available:

Week 1: Service Implementation - Day 1-2: Anchor integration - Day 3-4: Trade execution - Day 5: Liquidity operations

Week 2: Component Development - Day 1-2: TradingPanel component - Day 3-4: PositionCard component - Day 5: Integration

Week 3: Testing & Polish - Day 1-2: Unit tests - Day 3-4: Integration tests - Day 5: Bug fixes

Total: 3 weeks (vs 4-5 weeks without foundation)


Current Blockers

Critical Path Blockers

  1. Solana Programs ⚠️ BLOCKING
  2. Programs have compilation errors
  3. Cannot deploy until fixed
  4. Blocking all trading functionality

  5. npm install ⏳ IN PROGRESS

  6. Running for ~34 minutes
  7. Installing Solana wallet packages
  8. Blocking Anchor imports

Non-Blocking Items

  • ✅ Wallet integration complete
  • ✅ Event indexer complete
  • ✅ Trading foundation complete
  • ✅ Type system complete

Summary

🎉 Phase 4 Foundation: 100% COMPLETE

What Was Built: - ✅ Trading type definitions (~400 LOC) - ✅ Trading store skeleton (~400 LOC) - ✅ Solana program service skeleton (~450 LOC) - ✅ Complete API surface defined - ✅ Type-safe interfaces throughout

Total Foundation: 3 files, ~1,250 lines of code

Status: Ready to implement trading interface immediately once: 1. Solana programs are deployed 2. Program IDL files are generated 3. npm install completes

Next Steps: 1. Wait for npm install to complete 2. Fix Solana program compilation errors 3. Deploy programs to devnet 4. Implement service methods 5. Build UI components


Last Updated: November 24, 2025 Status: 🏗️ FOUNDATION COMPLETE - Ready for implementation