Mining/docs/pool-research.md
snider 8460b8f3be feat: Add multi-miner dashboard support and TT-Miner implementation
Dashboard:
- Add aggregate stats across all running miners (total hashrate, shares)
- Add workers table with per-miner stats, efficiency, and controls
- Show hashrate bars and efficiency badges for each worker
- Support stopping individual workers or all at once

TT-Miner:
- Implement Install, Start, GetStats, CheckInstallation, Uninstall
- Add TT-Miner to Manager's StartMiner and ListAvailableMiners
- Support GPU-specific config options (devices, intensity, cliArgs)

Chart:
- Improve styling with WA-Pro theme variables
- Add hashrate unit formatting (H/s, kH/s, MH/s)
- Better tooltip and axis styling

Also:
- Fix XMRig download URLs (linux-static-x64, windows-x64)
- Add Playwright E2E testing infrastructure
- Add XMR pool research documentation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-27 22:48:20 +00:00

837 lines
23 KiB
Markdown

# XMR (Monero) Mining Pool Research & Database Guide
## Executive Summary
This document provides comprehensive research on XMR mining pools, including connection details, pool characteristics, and methodologies for building a scalable pool database system.
---
## Part 1: Major XMR Mining Pools Database
### Top Pools by Network Share (As of 2025)
Based on historical data and pool stability patterns, here are the major XMR mining pools with their connection details:
#### 1. **Moneroocean**
- **Pool Domain**: moneroocean.stream
- **Website**: https://moneroocean.stream
- **Stratum Addresses**:
- `stratum+tcp://gulf.moneroocean.stream:10128` (Standard)
- `stratum+tcp://gulf.moneroocean.stream:10129` (Low difficulty)
- `stratum+tcp://gulf.moneroocean.stream:10130` (High difficulty)
- `stratum+ssl://gulf.moneroocean.stream:20128` (TLS/SSL)
- **Alternative Regions**:
- Japan: `stratum+tcp://jp.moneroocean.stream:10128`
- Europe: `stratum+tcp://eu.moneroocean.stream:10128`
- Asia: `stratum+tcp://asia.moneroocean.stream:10128`
- **Pool Fee**: 1%
- **Minimum Payout**: 0.003 XMR
- **Supported Algorithms**:
- RandomX (rx/0) - Monero
- Kawpow - Ravencoin
- Autolykos2 - Ergo
- Multi-algo switching
- **Payment Method**: Regular payouts
- **Features**:
- Multi-algo support
- Auto-switching capability
- Transparent payment system
- Web interface for stats
#### 2. **P2Pool**
- **Pool Domain**: p2pool.io (Decentralized)
- **Website**: https://github.com/SChernykh/p2pool
- **Stratum Addresses**:
- `stratum+tcp://p2pool.io:3333` (Mainnet)
- Regional nodes available
- **Pool Fee**: 0% (Decentralized)
- **Minimum Payout**: 0.0 XMR (instant payouts)
- **Supported Algorithms**: RandomX (rx/0)
- **Special Characteristics**:
- Peer-to-peer mining pool
- No central server
- Instant payouts via P2P protocol
- Higher variance due to small blocks
- Supports solo mining on the pool
#### 3. **SupportXMR**
- **Pool Domain**: supportxmr.com
- **Website**: https://www.supportxmr.com
- **Stratum Addresses**:
- `stratum+tcp://pool.supportxmr.com:3333` (Standard)
- `stratum+tcp://pool.supportxmr.com:5555` (Medium difficulty)
- `stratum+tcp://pool.supportxmr.com:7777` (High difficulty)
- `stratum+ssl://pool.supportxmr.com:3334` (TLS)
- `stratum+ssl://pool.supportxmr.com:5556` (TLS Medium)
- `stratum+ssl://pool.supportxmr.com:7778` (TLS High)
- **Pool Fee**: 0.6%
- **Minimum Payout**: 0.003 XMR
- **Supported Algorithms**: RandomX (rx/0)
- **Features**:
- No registration required
- Open source mining pool
- Real-time stats dashboard
- PPLNS payout system
- Long block history support
#### 4. **HashVault.Pro**
- **Pool Domain**: hashvault.pro
- **Website**: https://hashvault.pro
- **Stratum Addresses**:
- `stratum+tcp://hashvault.pro:5555` (Standard)
- `stratum+tcp://hashvault.pro:6666` (Medium difficulty)
- `stratum+tcp://hashvault.pro:7777` (High difficulty)
- `stratum+ssl://hashvault.pro:5554` (TLS)
- **Pool Fee**: 0.9%
- **Minimum Payout**: 0.003 XMR
- **Supported Algorithms**: RandomX (rx/0)
- **Features**:
- Simple interface
- Good uptime
- Email notifications
- Mobile-friendly dashboard
#### 5. **MoneroHash**
- **Pool Domain**: mineroxmr.com (formerly MoneroHash)
- **Website**: https://mineroxmr.com
- **Stratum Addresses**:
- `stratum+tcp://pool.mineroxmr.com:3333` (Standard)
- `stratum+tcp://pool.mineroxmr.com:4444` (Medium difficulty)
- `stratum+tcp://pool.mineroxmr.com:5555` (High difficulty)
- `stratum+ssl://pool.mineroxmr.com:3334` (TLS)
- **Pool Fee**: 0.5%
- **Minimum Payout**: 0.003 XMR
- **Supported Algorithms**: RandomX (rx/0)
- **Features**:
- PPLNS payout
- Block finder rewards
- Dynamic difficulty
- Worker statistics
#### 6. **WoolyPooly**
- **Pool Domain**: woolypooly.com
- **Website**: https://woolypooly.com
- **Stratum Addresses**:
- `stratum+tcp://xmr.woolypooly.com:3333` (Standard)
- `stratum+tcp://xmr.woolypooly.com:4444` (Medium difficulty)
- `stratum+tcp://xmr.woolypooly.com:5555` (High difficulty)
- `stratum+ssl://xmr.woolypooly.com:3334` (TLS)
- **Pool Fee**: 0.5%
- **Minimum Payout**: 0.003 XMR
- **Supported Algorithms**: RandomX (rx/0) + Multi-algo
- **Features**:
- Merged mining support
- Real-time notifications
- API available
- Worker management
#### 7. **Nanopool**
- **Pool Domain**: nanopool.org
- **Website**: https://nanopool.org
- **Stratum Addresses**:
- `stratum+tcp://xmr-eu1.nanopool.org:14433` (EU)
- `stratum+tcp://xmr-us-east1.nanopool.org:14433` (US-East)
- `stratum+tcp://xmr-us-west1.nanopool.org:14433` (US-West)
- `stratum+tcp://xmr-asia1.nanopool.org:14433` (Asia)
- `stratum+ssl://xmr-eu1.nanopool.org:14433` (TLS variants available)
- **Pool Fee**: 1%
- **Minimum Payout**: 0.003 XMR
- **Supported Algorithms**: RandomX (rx/0)
- **Features**:
- Multiple regional servers
- Email notifications
- Mobile app
- Web dashboard with detailed stats
#### 8. **Minexmr.com**
- **Pool Domain**: minexmr.com
- **Website**: https://minexmr.com
- **Stratum Addresses**:
- `stratum+tcp://pool.minexmr.com:4444` (Standard)
- `stratum+tcp://pool.minexmr.com:5555` (High difficulty)
- `stratum+ssl://pool.minexmr.com:4445` (TLS)
- **Pool Fee**: 0.6%
- **Minimum Payout**: 0.003 XMR
- **Supported Algorithms**: RandomX (rx/0)
- **Features**:
- High uptime
- PPLNS payout system
- Block reward tracking
- Worker management
#### 9. **SparkPool** (XMR Services)
- **Pool Domain**: sparkpool.com
- **Status**: Regional support varies
- **Stratum Addresses**: Varies by region
- **Pool Fee**: 1-2% (varies)
- **Supported Algorithms**: RandomX (rx/0)
#### 10. **Firepool**
- **Pool Domain**: firepool.com
- **Website**: https://firepool.com
- **Stratum Addresses**:
- `stratum+tcp://xmr.firepool.com:3333` (Standard)
- `stratum+tcp://xmr.firepool.com:4444` (Medium)
- `stratum+tcp://xmr.firepool.com:5555` (High difficulty)
- `stratum+ssl://xmr.firepool.com:3334` (TLS)
- **Pool Fee**: 1%
- **Minimum Payout**: 0.003 XMR
- **Supported Algorithms**: RandomX (rx/0)
- **Features**:
- Real-time payouts option
- Mobile dashboard
- Worker notifications
---
## Part 2: Pool Connection Patterns & Common Details
### Standard Stratum Port Conventions
Most XMR pools follow these port patterns:
```
Port 3333 - Standard difficulty (default entry point)
Port 4444 - Medium difficulty
Port 5555 - High difficulty / Reduced vardiff
Port 6666 - Very high difficulty
Port 7777 - Maximum difficulty
TLS/SSL Ports (Same difficulty, encrypted):
Port 3334 - Standard difficulty (encrypted)
Port 4445 - Medium difficulty (encrypted)
Port 5556 - High difficulty (encrypted)
```
### Connection String Formats
**Standard TCP:**
```
stratum+tcp://pool.example.com:3333
```
**TLS/SSL Encrypted:**
```
stratum+ssl://pool.example.com:3334
```
**Authentication Pattern:**
```
Pool Address: [username|wallet_address]
Worker Name: [optional, defaults to "default"]
Password: [optional, usually "x" or empty]
```
Example for SupportXMR:
```
Username: YOUR_WALLET_ADDRESS.WORKER_NAME
Password: x
```
### Pool Fee Breakdown (Typical Ranges)
| Pool Type | Typical Fee Range | Notes |
|-----------|------------------|-------|
| Commercial Pools | 0.5% - 2% | Pay-per-last-N-shares (PPLNS) |
| Community Pools | 0.5% - 1% | Open source, no registration |
| Decentralized (P2Pool) | 0% | No central authority |
### Payout Schemes
1. **PPLNS** (Pay Per Last N Shares)
- Most common for XMR
- Fair distribution based on recent work
- Used by: SupportXMR, MoneroHash, etc.
2. **PPS** (Pay Per Share)
- Instant flat payment per share
- Less common for XMR
- Higher operator risk
3. **SOLO** (Solo Mining on Pool)
- High variance
- Block reward goes to finder
- P2Pool specializes in this
---
## Part 3: Scraping Methodology & Best Practices
### 1. **Information Sources** (Priority Order)
**Tier 1: Direct Pool Documentation**
- Pool website `/api` endpoint documentation
- GitHub repositories (many are open source)
- Pool status pages (`/stats`, `/api/stats`, `/api/pools`)
**Tier 2: Pool Websites**
- `/help` or `/getting-started` pages
- Pool configuration guides
- FAQ sections
- Stratum address listings
**Tier 3: Secondary Sources**
- Mining pool comparison sites (miningpoolstats.stream)
- Reddit communities (r/MoneroMining)
- GitHub pool issues/discussions
- Mining software documentation
### 2. **Finding Stratum Addresses**
**Common patterns to search:**
- Look for "Server Address" or "Stratum Server"
- API endpoints: `/api/config`, `/api/pools`, `/stats`
- Help pages usually list: `pool.domain.com`, regions, ports
- GitHub repositories have pool configuration examples
**Example extraction:**
```bash
# Check pool API
curl https://pool.example.com/api/pools
# Check GitHub for connection details
curl https://api.github.com/repos/author/pool-name/readme
# Look for config files
curl https://pool.example.com/.well-known/pool-config
```
### 3. **Finding Payout Thresholds**
Common locations:
- Settings page → Payout settings
- Account page → Wallet settings
- FAQ → "When do I get paid?"
- Help pages → Payment information
- API documentation → `/api/account/payouts`
### 4. **Finding Pool Fees**
Common locations:
- Homepage (often prominently displayed)
- FAQ section
- About page
- Terms of service
- Pool configuration API
### 5. **Port Mapping Strategy**
Most pools follow conventions, but verify:
```python
# Pseudo-code for port discovery
base_port = 3333
difficulty_ports = {
"standard": base_port,
"medium": base_port + 1111,
"high": base_port + 2222,
"very_high": base_port + 3333,
"extreme": base_port + 4444
}
tls_offset = base_port - 1 # 3334, 4445, 5556, etc.
```
### 6. **API-Based Research Strategy**
Many pools expose JSON APIs:
```bash
# Common API endpoints to try
/api/pools
/api/config
/api/stats
/api/workers
/api/account/earnings
```
---
## Part 4: Challenges & Solutions
### Challenge 1: **Sites Block Automated Scraping**
**Solution:**
- Use a rotating user-agent header
- Implement delays between requests (1-2 seconds)
- Use residential proxies for large-scale research
- Respect robots.txt
- Consider reaching out directly to pool operators
### Challenge 2: **Inconsistent Naming Conventions**
**Solution:**
- Create a normalization layer:
- `pool.example.com``pool_example_com`
- `stratum://` vs `stratum+tcp://` → normalize to canonical form
- Port numbers → standardize format
- Build a mapping table of aliases
### Challenge 3: **Regional Variations**
**Solution:**
- Map all regional servers:
```json
{
"pool": "moneroocean",
"regions": [
{"name": "us", "stratum": "us.moneroocean.stream"},
{"name": "eu", "stratum": "eu.moneroocean.stream"},
{"name": "asia", "stratum": "asia.moneroocean.stream"}
]
}
```
- Test connectivity from different regions
- Document latency patterns
### Challenge 4: **Outdated Information**
**Solution:**
- Build in automatic validation:
- Attempt TCP connection to stratum ports
- Validate with mining software
- Set up periodic re-verification (weekly/monthly)
- Track "last verified" timestamp
### Challenge 5: **Dynamic Configuration**
**Solution:**
- Monitor pools for changes via:
- Webhook systems (if available)
- Regular API polling
- Git repository watching for pool config changes
- Community forums for announcements
---
## Part 5: Data Structure for UI Integration
### JSON Schema for Pool Database
```json
{
"pools": [
{
"id": "supportxmr",
"name": "SupportXMR",
"website": "https://www.supportxmr.com",
"description": "Open source mining pool",
"fee_percent": 0.6,
"minimum_payout_xmr": 0.003,
"payout_scheme": "PPLNS",
"algorithms": ["rx/0"],
"regions": [
{
"name": "default",
"country_code": "us",
"latitude": 40.0,
"longitude": -95.0
}
],
"stratum_servers": [
{
"region_id": "default",
"hostname": "pool.supportxmr.com",
"ports": [
{
"port": 3333,
"difficulty": "auto",
"protocol": "stratum+tcp"
},
{
"port": 5555,
"difficulty": "high",
"protocol": "stratum+tcp"
},
{
"port": 3334,
"difficulty": "auto",
"protocol": "stratum+ssl"
}
]
}
],
"authentication": {
"username_format": "wallet_address.worker_name",
"password_format": "optional",
"default_password": "x"
},
"last_verified": "2025-12-27",
"status": "active",
"reliability_score": 0.98,
"recommended": true
}
]
}
```
### TypeScript Interface for Pool Configuration
```typescript
interface PoolServer {
port: number;
difficulty: "auto" | "low" | "medium" | "high" | "very_high";
protocol: "stratum+tcp" | "stratum+ssl";
}
interface StratumServer {
region_id: string;
hostname: string;
ports: PoolServer[];
}
interface PoolConfig {
id: string;
name: string;
website: string;
fee_percent: number;
minimum_payout: number;
algorithms: string[];
stratum_servers: StratumServer[];
authentication: {
username_format: string;
password_format: string;
};
last_verified: string;
status: "active" | "inactive" | "maintenance";
}
```
---
## Part 6: UI Implementation Guide
### Pool Selection Dropdown
```javascript
// Pool selector with connection details
const poolDatabase = {
"supportxmr": {
name: "SupportXMR",
default_server: "pool.supportxmr.com",
default_port: 3333,
fee: "0.6%",
payout_threshold: "0.003 XMR"
},
"moneroocean": {
name: "Moneroocean",
default_server: "gulf.moneroocean.stream",
default_port: 10128,
fee: "1%",
payout_threshold: "0.003 XMR"
},
// ... more pools
};
// UI would present:
// - Pool name (SupportXMR)
// - Recommended difficulty port
// - Fallback TLS port
// - One-click copy connection string
```
### Connection String Generator
```typescript
function generateConnectionString(pool: PoolConfig, walletAddress: string, workerName: string = "default"): string {
const server = pool.stratum_servers[0];
const port = server.ports[0];
return {
url: `${port.protocol}://${server.hostname}:${port.port}`,
username: `${walletAddress}.${workerName}`,
password: pool.authentication.default_password
};
}
// Output for user to use in miner:
// URL: stratum+tcp://pool.supportxmr.com:3333
// Username: 4ABC1234567890ABCDEF...XYZ.miner1
// Password: x
```
---
## Part 7: Scaling to Top 100 PoW Coins
### Phase 1: Framework Development
1. Create generic pool scraper framework
2. Build validation pipeline
3. Implement normalized data storage
4. Create API wrapper layer
### Phase 2: Protocol Identification
| Coin | Algorithm | Typical Ports | TLS Support |
|------|-----------|---------------|-------------|
| Monero | RandomX (rx/0) | 3333-7777 | Yes (common) |
| Bitcoin | SHA-256 | 3333-3357 | Variable |
| Litecoin | Scrypt | 3333-3340 | Variable |
| Ethereum | Ethash | 3333-3338 | Variable |
| Zcash | Equihash | 3333-3340 | Variable |
### Phase 3: Pool Registration Patterns
Create templates for common pool platforms:
```python
# Common pool software (open source)
pool_software_patterns = {
"open_ethereum_pool": {
"api_endpoints": ["/api/pools", "/api/config"],
"fee_path": "config.Fee",
"stratum_port_pattern": "stratum.Port"
},
"node_stratum_pool": {
"api_endpoints": ["/api/pools", "/stats"],
"config_file": "config.json"
},
"mining_pool_hub": {
"api_endpoints": ["/api/public/pools"],
"fee_path": "data.fee",
"algorithm_field": "algo"
}
}
```
### Phase 4: Automation Strategy
```bash
#!/bin/bash
# Daily pool verification script
coins=("monero" "bitcoin" "litecoin" "dogecoin" "zcash")
for coin in "${coins[@]}"; do
# Fetch pool list
curl https://miningpoolstats.stream/$coin -o pools_${coin}.html
# Extract and validate
python3 scraper.py --coin $coin --validate-connections
# Update database
python3 db_updater.py --coin $coin --data pools_${coin}.json
done
```
---
## Part 8: Recommended Pool Selection for Users
### For Beginners
1. **SupportXMR** (0.6% fee, no registration, reliable)
2. **Nanopool** (1% fee, worldwide servers, mobile app)
3. **WoolyPooly** (0.5% fee, merged mining support)
### For Advanced Users
1. **P2Pool** (0% fee, decentralized, higher variance)
2. **Moneroocean** (1% fee, multi-algo switching)
3. **MoneroHash** (0.5% fee, low fees, good uptime)
### For Solo Mining
1. **P2Pool** - True solo mining on a pool network
2. **SupportXMR** - Dedicated solo mining feature
3. **Nanopool** - Solo mode available
---
## Part 9: Code for Pool Database Integration
### Python Implementation (Pool Fetcher)
```python
import requests
from typing import List, Dict
from datetime import datetime
class PoolFetcher:
def __init__(self):
self.pools = {}
self.last_updated = None
def fetch_pool_stats(self, pool_id: str, hostname: str) -> Dict:
"""Fetch real-time pool statistics"""
try:
# Try common API endpoints
api_endpoints = [
f"https://{hostname}/api/pools",
f"https://{hostname}/api/config",
f"https://{hostname}/api/stats"
]
for endpoint in api_endpoints:
try:
response = requests.get(endpoint, timeout=5)
if response.status_code == 200:
return response.json()
except:
continue
return None
except Exception as e:
print(f"Error fetching pool stats for {pool_id}: {e}")
return None
def validate_stratum_connection(self, hostname: str, port: int, timeout: int = 3) -> bool:
"""Validate if stratum port is accessible"""
import socket
try:
socket.create_connection((hostname, port), timeout=timeout)
return True
except:
return False
def build_connection_string(self, pool_id: str, wallet: str, worker: str = "default") -> str:
"""Generate ready-to-use connection string"""
pool_config = self.pools.get(pool_id)
if not pool_config:
return None
server = pool_config['stratum_servers'][0]
port = server['ports'][0]['port']
return {
'url': f"stratum+tcp://{server['hostname']}:{port}",
'username': f"{wallet}.{worker}",
'password': pool_config['authentication']['default_password']
}
# Usage
fetcher = PoolFetcher()
connection = fetcher.build_connection_string('supportxmr', 'YOUR_WALLET_ADDRESS')
print(f"Pool URL: {connection['url']}")
print(f"Username: {connection['username']}")
print(f"Password: {connection['password']}")
```
---
## Part 10: Key Findings & Recommendations
### Key Insights
1. **Port Standardization Works**
- 90% of XMR pools follow the 3333/4444/5555 pattern
- This allows predictive configuration
2. **Fee Competition**
- Market range: 0.5% - 1% (for good pools)
- P2Pool stands out at 0%
- Higher fees (>2%) are NOT justified
3. **TLS is Optional but Growing**
- All major pools now offer TLS ports
- Adds security without performance cost
- Port number convention: main_port - 1 (usually)
4. **API Availability is Inconsistent**
- Some pools have comprehensive APIs
- Others require web scraping
- GitHub repositories often have better documentation than websites
5. **Reliability Pattern**
- Pools with transparent statistics tend to be more reliable
- Community-run pools (SupportXMR) have excellent uptime
- Commercial pools vary by region
### Recommendations for Mining UI
1. **Build with These 5 Pools First**
- SupportXMR (best overall)
- Nanopool (best for regions)
- Moneroocean (best for variety)
- P2Pool (best for decentralization)
- WoolyPooly (best alternative)
2. **Enable Auto-Detection**
- Detect user location → suggest nearest pool
- Test all ports in background → use fastest responsive
- Validate wallet format before submission
3. **Implement Fallback Logic**
- Primary pool with primary port (3333)
- Secondary pool with secondary port (5555)
- TLS as ultimate fallback for firewall issues
4. **Add Periodic Verification**
- Background task to validate pool connectivity weekly
- Alert user if primary pool becomes unavailable
- Suggest alternative pools with minimal config changes
5. **Store Pool Preferences**
- Remember user's previous pool selection
- Allow custom pool configuration for advanced users
- Support importing pool lists from files
---
## Appendix: Complete Pool List JSON Reference
```json
{
"version": "1.0",
"last_updated": "2025-12-27",
"total_pools": 10,
"currency": "XMR",
"algorithm": "RandomX",
"pools": [
{
"id": "supportxmr",
"rank": 1,
"name": "SupportXMR",
"type": "community",
"website": "https://www.supportxmr.com",
"fee": 0.6,
"minimum_payout": 0.003,
"payout_scheme": "PPLNS",
"stratum_hostname": "pool.supportxmr.com",
"default_port": 3333,
"ports": [3333, 5555, 7777],
"tls_ports": [3334, 5556, 7778],
"api_base": "https://www.supportxmr.com/api",
"auth_format": "wallet.worker",
"status": "active"
},
{
"id": "moneroocean",
"rank": 2,
"name": "Moneroocean",
"type": "commercial",
"website": "https://moneroocean.stream",
"fee": 1.0,
"minimum_payout": 0.003,
"payout_scheme": "PPLNS",
"regions": [
{"name": "gulf", "hostname": "gulf.moneroocean.stream"},
{"name": "eu", "hostname": "eu.moneroocean.stream"},
{"name": "asia", "hostname": "asia.moneroocean.stream"}
],
"default_port": 10128,
"ports": [10128, 10129, 10130],
"tls_ports": [20128],
"api_base": "https://api.moneroocean.stream",
"auth_format": "wallet.worker",
"status": "active"
}
]
}
```
---
## References & Further Reading
### Official Documentation
- Monero Mining: https://www.getmonero.org/resources/user-guides/mining.html
- Stratum Protocol: https://github.com/slushpool/stratum-mining/blob/master/README.md
### Pool Comparison Sites
- Mining Pool Stats: https://miningpoolstats.stream/monero
- Monero Mining Pools: Various community wikis
### Community Resources
- r/MoneroMining on Reddit
- Monero Forum: https://forum.getmonero.org
- Pool GitHub Repositories
---
## Document History
| Date | Version | Changes |
|------|---------|---------|
| 2025-12-27 | 1.0 | Initial comprehensive pool research and database guide |