This commit introduces a new audit file, `AUDIT-COMPLEXITY.md`, which provides a detailed analysis of the codebase's quality and maintainability. The audit identifies several key areas for improvement, including: - A "God Class" (`Manager`) that violates the Single Responsibility Principle. - Code duplication in miner installation and verification logic. - Several long and complex methods with high cognitive complexity. For each finding, the audit provides concrete recommendations for refactoring, including the application of design patterns such as the Template Method and the use of the Extract Method technique. This document will serve as a valuable guide for future refactoring efforts to improve the long-term health of the codebase. Co-authored-by: Snider <631881+Snider@users.noreply.github.com> |
||
|---|---|---|
| .claude | ||
| .github | ||
| .playwright-mcp | ||
| cmd | ||
| docs | ||
| miner | ||
| pkg | ||
| site-docs | ||
| ui | ||
| .coderabbit.yaml | ||
| .gitignore | ||
| .goreleaser.yaml | ||
| AUDIT-COMPLEXITY.md | ||
| CHANGELOG.md | ||
| CLAUDE.md | ||
| CODE_OF_CONDUCT.md | ||
| CONTRIBUTORS.md | ||
| docker-compose.p2p.yml | ||
| Dockerfile.node | ||
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| Makefile | ||
| mkdocs.yml | ||
| openapi-3.json | ||
| qodana.yaml | ||
| README.md | ||
Mining
A modern, modular cryptocurrency mining management platform with GPU support, RESTful API, and cross-platform desktop application.
Features
Supported Algorithms
| Algorithm | Coin | CPU | GPU (OpenCL) | GPU (CUDA) |
|---|---|---|---|---|
| RandomX | Monero (XMR) | ✅ | ✅ | ✅ |
| KawPow | Ravencoin (RVN) | ❌ | ✅ | ✅ |
| ETChash | Ethereum Classic (ETC) | ❌ | ✅ | ✅ |
| ProgPowZ | Zano (ZANO) | ❌ | ✅ | ✅ |
| Blake3 | Decred (DCR) | ✅ | ✅ | ✅ |
| CryptoNight | Various | ✅ | ✅ | ✅ |
Core Capabilities
- Multi-Algorithm Mining: Support for CPU and GPU mining across multiple algorithms
- Dual Mining: Run CPU and GPU mining simultaneously with separate pools
- Profile Management: Save and switch between mining configurations
- Real-time Monitoring: Live hashrate, shares, and performance metrics
- RESTful API: Full control via HTTP endpoints with Swagger documentation
- Web Dashboard: Embeddable Angular web component for any application
- Desktop Application: Native cross-platform app built with Wails v3
- Mobile Responsive: Touch-friendly UI with drawer navigation
- Simulation Mode: Test the UI without real mining hardware
Why Mining Platform?
| Feature | Mining Platform | NiceHash | HiveOS | Manual XMRig |
|---|---|---|---|---|
| Open Source | ✅ | ❌ | ❌ | ✅ |
| No Fees | ✅ | ❌ (2%+) | ❌ ($3/mo) | ✅ |
| Multi-Algorithm | ✅ | ✅ | ✅ | ❌ |
| GUI Dashboard | ✅ | ✅ | ✅ | ❌ |
| Profile Management | ✅ | ❌ | ✅ | ❌ |
| Dual Mining | ✅ | ❌ | ✅ | ❌ |
| Desktop App | ✅ | ❌ | ❌ | ❌ |
| Embeddable Component | ✅ | ❌ | ❌ | ❌ |
| Self-Hosted | ✅ | ❌ | ❌ | ✅ |
| Simulation Mode | ✅ | ❌ | ❌ | ❌ |
Mining Software
Manages installation and configuration of:
- XMRig - High-performance CPU/GPU miner (RandomX, CryptoNight)
- T-Rex - NVIDIA GPU miner (KawPow, Ethash, and more)
- lolMiner - AMD/NVIDIA GPU miner (Ethash, Beam, Equihash)
- TT-Miner - NVIDIA GPU miner (Ethash, KawPow, Autolykos2)
Quick Start
Docker (Fastest)
# Run with Docker - no dependencies required
docker run -p 9090:9090 ghcr.io/snider/mining:latest
# Access the dashboard at http://localhost:9090
CLI
# Install
go install github.com/Snider/Mining/cmd/mining@latest
# Start the API server
miner-ctrl serve --host localhost --port 9090
# Or use the interactive shell
miner-ctrl serve
Web Component
<script type="module" src="./mbe-mining-dashboard.js"></script>
<snider-mining api-base-url="http://localhost:9090/api/v1/mining"></snider-mining>
Desktop Application
Download pre-built binaries from Releases or build from source:
cd cmd/desktop/mining-desktop
wails3 build
Architecture
Mining/
├── cmd/
│ ├── mining/ # CLI application (miner-ctrl)
│ └── desktop/ # Wails desktop app
├── pkg/mining/ # Core Go package
│ ├── mining.go # Interfaces and types
│ ├── manager.go # Miner lifecycle management
│ ├── service.go # RESTful API (Gin)
│ └── profile_manager.go # Profile persistence
├── miner/ # Standalone C++ mining tools
│ ├── core/ # CPU/GPU miner binary
│ ├── proxy/ # Stratum proxy for farms
│ ├── cuda/ # CUDA plugin for NVIDIA
│ └── README.md # Miner documentation
└── ui/ # Angular 20+ web dashboard
└── src/app/
├── components/ # Reusable UI components
└── pages/ # Route pages
Standalone Miner Tools
The miner/ directory contains standalone C++ mining programs that can be used independently without the GUI:
# Build miner binaries
make build-miner
# Or build individually
make build-miner-core # CPU/GPU miner
make build-miner-proxy # Stratum proxy
# Run directly
./miner/core/build/miner -o pool.example.com:3333 -u WALLET -p x
./miner/proxy/build/miner-proxy -o pool.example.com:3333 -b 0.0.0.0:3333
Pre-built binaries are available from Releases. See miner/README.md for full documentation.
API Reference
Base path: /api/v1/mining
| Method | Endpoint | Description |
|---|---|---|
| GET | /info |
System info and installed miners |
| GET | /miners |
List running miners |
| POST | /miners/:name |
Start a miner |
| DELETE | /miners/:name |
Stop a miner |
| GET | /miners/:name/stats |
Get miner statistics |
| GET | /profiles |
List saved profiles |
| POST | /profiles |
Create a profile |
| PUT | /profiles/:id |
Update a profile |
| DELETE | /profiles/:id |
Delete a profile |
| POST | /miners/:name/install |
Install miner software |
Swagger UI: http://localhost:9090/api/v1/mining/swagger/index.html
Development
Prerequisites
- Go 1.24+
- Node.js 20+ (for UI development)
- CMake 3.21+ (for miner core)
- OpenCL SDK (for GPU support)
Build Commands
# Go Backend
make build # Build CLI binary
make test # Run all tests (Go + C++)
make dev # Start dev server on :9090
# Miner (C++ Binaries)
make build-miner # Build miner and proxy
make build-miner-all # Build and package to dist/miner/
# Frontend
cd ui
npm install
npm run build # Build web component
npm test # Run unit tests
# Desktop
cd cmd/desktop/mining-desktop
wails3 build # Build native app
Configuration
Mining profiles are stored in ~/.config/lethean-desktop/mining_profiles.json
Example profile:
{
"id": "uuid",
"name": "My XMR Mining",
"minerType": "xmrig",
"config": {
"pool": "stratum+tcp://pool.supportxmr.com:3333",
"wallet": "YOUR_WALLET_ADDRESS",
"algo": "rx/0"
}
}
Contributing
We welcome contributions! Please read our Code of Conduct and Contributing Guidelines first.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
See CONTRIBUTORS.md for the list of contributors.
License
This project is licensed under the EUPL-1.2 License - see the LICENSE file for details.