Mining/site-docs/architecture/overview.md

5.3 KiB

Architecture Overview

The Mining Dashboard follows a modular architecture with clear separation of concerns.

High-Level Architecture

┌─────────────────────────────────────────────────────────────┐
│                     Web Browser                              │
│                   Angular UI (4200)                         │
└─────────────────────┬───────────────────────────────────────┘
                      │ HTTP/REST
┌─────────────────────▼───────────────────────────────────────┐
│                   Go Backend (9090)                         │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                  REST API (Gin)                       │  │
│  │            /api/v1/mining/*                          │  │
│  └──────────────────────────────────────────────────────┘  │
│                          │                                  │
│  ┌──────────────────────▼──────────────────────────────┐   │
│  │                 Mining Manager                       │   │
│  │  - Process lifecycle     - Stats collection         │   │
│  │  - Profile management    - Hashrate history         │   │
│  └──────────────────────────────────────────────────────┘  │
│                          │                                  │
│  ┌───────────┬───────────┴────────────┬────────────────┐   │
│  │  XMRig    │      TT-Miner          │    Future...   │   │
│  │  Adapter  │      Adapter           │    Miners      │   │
│  └───────────┴────────────────────────┴────────────────┘   │
└─────────────────────────────────────────────────────────────┘
                          │
          ┌───────────────┼───────────────┐
          ▼               ▼               ▼
     ┌─────────┐    ┌─────────┐    ┌─────────┐
     │ XMRig   │    │TT-Miner │    │ SQLite  │
     │ Process │    │ Process │    │   DB    │
     └─────────┘    └─────────┘    └─────────┘

Component Responsibilities

Frontend (Angular)

Component Purpose
Dashboard Real-time hashrate display, stats bar
Profiles CRUD for mining configurations
Console Live miner output with ANSI colors
Workers Running miner instances
Nodes P2P peer management

Backend (Go)

Package Purpose
pkg/mining Core miner management, API service
pkg/node P2P networking, identity, transport
pkg/database SQLite persistence layer
cmd/mining CLI commands via Cobra

Data Flow

Starting a Miner

1. UI: POST /api/v1/mining/profiles/{id}/start
2. Service: Validates profile, calls Manager.StartMiner()
3. Manager: Creates miner instance (XMRig/TT-Miner)
4. Miner: Generates config, spawns process
5. Manager: Starts stats collection goroutine
6. Response: Returns miner name to UI

Stats Collection

Every 10 seconds:
1. Manager iterates running miners
2. Each miner adapter polls stats (HTTP API or stdout parsing)
3. Stats stored in memory + SQLite
4. UI polls /api/v1/mining/miners for updates

Storage

Configuration Files

~/.config/lethean-desktop/
├── mining_profiles.json    # Saved profiles
├── miners.json            # Autostart config
├── node.json              # P2P identity
└── peers.json             # Known peers

Data Files

~/.local/share/lethean-desktop/
├── miners/                # Installed miner binaries
│   ├── xmrig/
│   └── tt-miner/
├── node/
│   └── private.key        # X25519 private key
└── mining.db              # SQLite database

Key Design Decisions

Decision Rationale
Interface-based miners Easy to add new miner types
Gorilla WebSocket P2P transport with good browser support
SQLite Zero-config persistence, embedded
Gin framework Fast, widely used Go HTTP framework
Angular standalone Modern, tree-shakable components