Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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 MiningPool Mining
Rewards100% of block (when found)Proportional share
ConsistencyVariable (depends on capacity)More consistent
RequirementsRun full nodeWallet for assignment only
FeesNonePool fee (varies)
Best forLarge capacity, technical usersSmaller capacity, beginners

Prerequisites

System Requirements

ResourceMinimumRecommended
OSLinux (64-bit)Ubuntu 22.04+, Debian 12+, Fedora 38+
Disk (blockchain)50 GB100+ GB (SSD) - Solo only
Disk (plots)100 GBAs much as possible
RAM4 GB8+ GB (for plotting)
CPU2 cores4+ 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=mining line 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
OptionDescription
-iYour mining address from Step 3
-pPlot storage location
-wSize in warps (1 warp = 1 GiB)
-xCompression 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 URLhttps://pool.testnet.bitcoin-pocx.org
Forging Addresstpocx1qp00ljf5sy0kdk4h8x5n4erzdshkzj4cdrhq76k
Fee1%
Minimum Payout1.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.