Miner Guide
Mine Bitcoin-PoCX using Proof of Capacity. Choose between solo mining (direct rewards) or pool mining (consistent rewards).
Prefer automated setup? Use the Quick Start installer.
Solo vs Pool Mining
| Solo Mining | Pool Mining | |
|---|---|---|
| Rewards | 100% of block (when found) | Proportional share |
| Consistency | Variable (depends on capacity) | More consistent |
| Requirements | Run full node | Wallet for assignment only |
| Fees | None | Pool fee (varies) |
| Best for | Large capacity, technical users | Smaller capacity, beginners |
Prerequisites
System Requirements
| Resource | Minimum | Recommended |
|---|---|---|
| OS | Linux (64-bit) | Ubuntu 22.04+, Debian 12+, Fedora 38+ |
| Disk (blockchain) | 50 GB | 100+ GB (SSD) - Solo only |
| Disk (plots) | 100 GB | As much as possible |
| RAM | 4 GB | 8+ GB (for plotting) |
| CPU | 2 cores | 4+ cores (for plotting) |
Pool miners don’t need to store the full blockchain permanently - only temporarily for creating assignments.
Install Dependencies
# Debian/Ubuntu
sudo apt update && sudo apt install -y curl tar openssl
# Fedora
sudo dnf install -y curl tar openssl
# Arch
sudo pacman -S --noconfirm curl tar openssl
Step 1: Install Bitcoin Core PoCX
mkdir -p ~/bitcoin-pocx && cd ~/bitcoin-pocx
# Get latest release
LATEST=$(curl -s https://api.github.com/repos/PoC-Consortium/bitcoin/releases/latest \
| grep "browser_download_url.*x86_64-linux-gnu.tar.gz" \
| cut -d '"' -f 4)
curl -LO "$LATEST"
tar -xzf *.tar.gz
# Add to PATH
BINDIR=$(find . -type d -name "bin" | head -1)
export PATH="$PWD/$BINDIR:$PATH"
echo "export PATH=\"$PWD/$BINDIR:\$PATH\"" >> ~/.bashrc
Step 2: Configure Node
Generate RPC Password
RPCPASS=$(openssl rand -hex 32)
echo "Save this password: $RPCPASS"
Create Configuration
Create ~/.bitcoin-pocx/bitcoin.conf:
mkdir -p ~/.bitcoin-pocx
cat > ~/.bitcoin-pocx/bitcoin.conf << EOF
testnet=1
server=1
rpcuser=bitcoinrpc
rpcpassword=$RPCPASS
listen=1
maxconnections=40
dbcache=450
[test]
rpcport=18332
# Auto-load mining wallet on startup
wallet=mining
EOF
Note: Miners need RPC password authentication (not cookie auth) for the miner to connect. The
wallet=miningline ensures your wallet loads automatically on node restart.
Step 3: Start Node and Create Wallet
# Start node
bitcoind -testnet -daemon
# Wait for startup (~30 seconds)
sleep 30
# Create wallet
bitcoin-cli -testnet createwallet "mining"
# Generate mining address
bitcoin-cli -testnet getnewaddress "mining_rewards"
Save your mining address! You need it for plotting.
⚠️ BACKUP YOUR WALLET - DO THIS NOW ⚠️
🔴 CRITICAL - READ THIS BEFORE CONTINUING 🔴
Your wallet contains the private keys to your mining rewards.
If you lose the wallet without a backup, YOUR COINS ARE LOST FOREVER.
There is NO recovery possible without a backup. No one can help you.
Back it up NOW before proceeding.
# Create backup file
bitcoin-cli -testnet backupwallet ~/mining-wallet-backup.dat
Store this backup safely:
- ✅ Copy to an encrypted USB drive
- ✅ Store in a different physical location (fire, flood, theft)
- ✅ Make multiple backup copies
- ❌ NEVER share your wallet file or private keys with anyone
- ❌ NEVER store backups in cloud services unencrypted
Optional: Export private key for paper backup
# Get private key for your address (KEEP THIS SECRET!)
bitcoin-cli -testnet dumpprivkey "YOUR_MINING_ADDRESS"
Write down this key and store it offline (e.g., safe deposit box, fireproof safe).
For solo mining, wait for the blockchain to sync before mining:
# Check sync progress
bitcoin-cli -testnet getblockchaininfo
Step 4: Install PoCX Framework
cd ~/bitcoin-pocx
# Get latest pocx release (musl build for maximum compatibility)
LATEST=$(curl -s https://api.github.com/repos/PoC-Consortium/pocx/releases/latest \
| grep "browser_download_url.*x86_64-unknown-linux-musl.tar.gz" \
| cut -d '"' -f 4)
curl -LO "$LATEST"
tar -xzf pocx-*.tar.gz
Step 5: Create Plots
Plots are pre-computed hashes stored on disk. More capacity = higher rewards.
./pocx_plotter \
-i YOUR_MINING_ADDRESS \
-p /path/to/plots \
-w 100 \
-x 1
| Option | Description |
|---|---|
-i | Your mining address from Step 3 |
-p | Plot storage location |
-w | Size in warps (1 warp = 1 GiB) |
-x | Compression level (1 = none, 2 = 50%, 4 = 75%) |
Example for 100 GiB plot:
./pocx_plotter -i tpocx1q... -p /mnt/plots -w 100 -x 1
Plotting takes hours to days depending on size. You can proceed to Step 6 while plotting if you have existing plots.
Step 6: Configure Mining
Choose your mining approach:
6a. Solo Mining
Solo mining submits directly to your local node. You keep 100% of block rewards.
Create ~/bitcoin-pocx/miner.yaml:
chains:
- name: 'Bitcoin-PoCX Testnet'
rpc_transport: http
rpc_host: '127.0.0.1'
rpc_port: 18332
rpc_auth:
type: user_pass
username: 'bitcoinrpc'
password: 'YOUR_RPC_PASSWORD'
block_time_seconds: 120
submission_mode: wallet
plot_dirs:
- '/path/to/plots'
Replace YOUR_RPC_PASSWORD with your password from Step 2.
Start mining:
./pocx_miner --config miner.yaml
6b. Pool Mining
Pool mining requires a forging assignment that authorizes the pool to mine on your behalf.
Testnet Pool
| Pool URL | https://pool.testnet.bitcoin-pocx.org |
| Forging Address | tpocx1qp00ljf5sy0kdk4h8x5n4erzdshkzj4cdrhq76k |
| Fee | 1% |
| Minimum Payout | 1.0 BTCX |
Create Forging Assignment
bitcoin-cli -testnet create_assignment \
"YOUR_MINING_ADDRESS" \
"tpocx1qp00ljf5sy0kdk4h8x5n4erzdshkzj4cdrhq76k"
- First argument: your mining/plot address
- Second argument: pool’s forging address
Note: Assignments become active after 30 blocks (~1 hour).
Verify your assignment:
bitcoin-cli -testnet get_assignment "YOUR_MINING_ADDRESS"
Revoking Assignments
To switch pools or return to solo mining, you must revoke your current assignment:
bitcoin-cli -testnet revoke_assignment "YOUR_MINING_ADDRESS"
Important timing:
- Revocation takes effect after 720 blocks (~24 hours)
- After revocation completes, wait before creating a new assignment
- New assignments then take another 30 blocks (~1 hour) to activate
So switching pools takes approximately 25 hours total.
Configure Miner for Pool
Create ~/bitcoin-pocx/miner.yaml:
chains:
- name: 'Testnet Pool'
rpc_transport: https
rpc_host: 'pool.testnet.bitcoin-pocx.org'
rpc_port: 443
block_time_seconds: 120
submission_mode: pool
plot_dirs:
- '/path/to/plots'
Start mining:
./pocx_miner --config miner.yaml
Stop Local Node (Optional)
Once your assignment is confirmed (after 30 blocks), pool miners can stop the local node:
bitcoin-cli -testnet stop
Verification
Check Miner Output
Working miner shows:
[INFO] Connected to local/pool at http://...
[INFO] Scanning plots: /path/to/plots
[INFO] Found X plot files (Y GB capacity)
[INFO] Waiting for new block...
Solo Mining
# Check wallet balance (after finding blocks)
bitcoin-cli -testnet getbalance
Pool Mining
Check your pool’s dashboard for:
- Your address appears as active miner
- Capacity matches your plots
- Submissions being recorded
Block Explorer
Check your address: https://explorer.testnet.bitcoin-pocx.org/
Systemd Services
Miner Service
Create /etc/systemd/system/pocx_miner.service:
[Unit]
Description=PoCX Miner
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=YOUR_USERNAME
ExecStart=/home/YOUR_USERNAME/bitcoin-pocx/pocx_miner --config /home/YOUR_USERNAME/bitcoin-pocx/miner.yaml
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
For solo mining, also add After=bitcoind.service and see Node Operator Guide for the bitcoind service.
sudo systemctl daemon-reload
sudo systemctl enable pocx_miner
sudo systemctl start pocx_miner
Troubleshooting
Miner can’t connect
- Solo: Verify bitcoind is running and synced
- Pool: Check pool URL and status
- Verify RPC credentials match
No plots found
- Check plot path in
miner.yaml - Verify plots exist:
ls /path/to/plots/*.plot - Ensure plots match your wallet address
Pool doesn’t see capacity
- Wait for activation - assignments take 30 blocks (~1 hour at 120s/block) to activate
- Verify assignment is confirmed:
bitcoin-cli -testnet get_assignment "YOUR_MINING_ADDRESS" - Check assignment hasn’t expired
- Ensure plots are for correct address
No rewards
- Solo: Normal - depends on capacity vs network
- Pool: Check minimum payout threshold
Maintenance
Renew Pool Assignments
Before expiration, create a new assignment (renewing the same pool doesn’t require revoking):
bitcoind -testnet -daemon # if stopped
sleep 30
bitcoin-cli -testnet create_assignment \
"YOUR_MINING_ADDRESS" \
"tpocx1qp00ljf5sy0kdk4h8x5n4erzdshkzj4cdrhq76k"
Add More Capacity
Create additional plots and add to miner.yaml:
plot_dirs:
- '/path/to/plots'
- path: '/path/to/more/plots'
Restart miner to pick up new plots.