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>
837 lines
23 KiB
Markdown
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 |
|
|
|