Data Flow
This document describes the data flows for key operations in the TradeX platform.
Order Processing Flow
Section titled “Order Processing Flow”sequenceDiagram
participant Client
participant Backend
participant OrderService
participant WalletService
participant MetadataService
participant MatchingEngine
participant MarketData
participant Kafka
Client->>Backend: POST /orders
Backend->>OrderService: Create Order
OrderService->>MetadataService: Validate Instrument (gRPC)
OrderService->>WalletService: Check Balance (gRPC)
OrderService->>WalletService: Hold Balance (gRPC)
OrderService->>Kafka: Publish Order Event
Kafka->>MatchingEngine: Order Event
MatchingEngine->>MatchingEngine: Match Orders
MatchingEngine->>Kafka: Publish Trade Event
Kafka->>OrderService: Trade Event
OrderService->>WalletService: Release/Update Hold (gRPC)
Kafka->>MarketData: Trade Event
MarketData->>MarketData: Update Order Book
MarketData->>Client: WebSocket Trade Update
- Client submits order via Backend Service
- Order Service validates order against instrument rules (Metadata Service)
- Balance check performed via Wallet Service gRPC
- Balance held for order execution
- Order published to Kafka
- Matching Engine consumes order and matches
- Trade executed and published to Kafka
- Order Service updates order status and releases/updates holds
- Market Data Service updates order book and broadcasts via WebSocket
Market Data Flow
Section titled “Market Data Flow”sequenceDiagram
participant MatchingEngine
participant Kafka
participant MarketData
participant Redis
participant PostgreSQL
participant Client
MatchingEngine->>Kafka: Trade Event
MatchingEngine->>Kafka: Order Book Delta
Kafka->>MarketData: Consume Events
MarketData->>MarketData: Process Trade
MarketData->>MarketData: Update Order Book
MarketData->>Redis: Cache Order Book
MarketData->>PostgreSQL: Persist Trade
MarketData->>Client: WebSocket Update
MarketData->>Kafka: Publish Normalized Trade
- Matching Engine publishes trade and order book events to Kafka
- Market Data Service consumes events
- Order book updated in memory and cached in Redis
- Trades persisted to PostgreSQL (TimescaleDB)
- Updates broadcast to WebSocket subscribers
- Normalized trades published to Kafka for downstream consumers
Authentication Flow
Section titled “Authentication Flow”sequenceDiagram
participant Client
participant Backend
participant AuthService
participant PostgreSQL
participant Kafka
Client->>Backend: POST /auth/login
Backend->>AuthService: Authenticate User
AuthService->>PostgreSQL: Validate Credentials
AuthService->>AuthService: Generate JWT Tokens
AuthService->>PostgreSQL: Store Refresh Token
AuthService->>Kafka: Publish Login Event
AuthService->>Backend: Return Tokens
Backend->>Client: Return Tokens
- Client submits credentials
- Auth Service validates credentials against database
- JWT tokens generated (access and refresh)
- Refresh token stored in database
- Login event published to Kafka
- Tokens returned to client
Wallet Operations Flow
Section titled “Wallet Operations Flow”sequenceDiagram
participant Client
participant Backend
participant WalletService
participant PostgreSQL
participant Kafka
participant External
Client->>Backend: POST /wallet/deposit
Backend->>WalletService: Create Deposit
WalletService->>PostgreSQL: Record Deposit
WalletService->>External: Generate Deposit Address
External->>External: Confirm Deposit
External->>WalletService: Webhook/Callback
WalletService->>PostgreSQL: Credit Balance
WalletService->>Kafka: Publish Deposit Confirmed
WalletService->>Backend: Return Status
Backend->>Client: Return Status
- Client initiates deposit request
- Wallet Service creates deposit record
- Deposit address generated (for crypto)
- External system confirms deposit
- Balance credited to user account
- Deposit confirmed event published to Kafka
- Status returned to client
Configuration Update Flow
Section titled “Configuration Update Flow”sequenceDiagram
participant Admin
participant MetadataService
participant PostgreSQL
participant Outbox
participant Kafka
participant Consumer
Admin->>MetadataService: POST /instruments (Maker)
MetadataService->>PostgreSQL: Save Instrument (Pending)
MetadataService->>PostgreSQL: Write to Outbox
Admin->>MetadataService: POST /instruments/:symbol/approve (Checker)
MetadataService->>PostgreSQL: Update Status (Active)
MetadataService->>PostgreSQL: Write to Outbox
MetadataService->>Outbox: Process Outbox
Outbox->>Kafka: Publish Instrument Created
Kafka->>Consumer: Instrument Event
- Admin creates instrument (maker mode, status: pending)
- Instrument saved to database
- Event written to outbox table
- Admin approves instrument (checker mode, status: active)
- Status updated in database
- Event written to outbox
- Outbox worker processes events
- Events published to Kafka
- Downstream consumers receive events
Index Price Calculation Flow
Section titled “Index Price Calculation Flow”sequenceDiagram
participant ExternalExchanges
participant MarketData
participant PostgreSQL
participant Redis
participant Client
loop Every Interval
MarketData->>ExternalExchanges: Fetch Prices (ccxt)
ExternalExchanges->>MarketData: Return Prices
MarketData->>MarketData: Calculate Weighted Average
MarketData->>PostgreSQL: Store Index Price
MarketData->>Redis: Cache Index Price
MarketData->>Client: WebSocket Update
end
- Index Price Worker fetches prices from external exchanges
- Prices weighted by configured weights
- Index price calculated as weighted average
- Price stored in PostgreSQL and cached in Redis
- Update broadcast to WebSocket subscribers