Mining Integration
The reference node includes mining coordination functionality as part of the Bitcoin protocol. The system provides block template generation, mining coordination, and optional Stratum V2 protocol support.
Block Template Generation
Block templates are created using a formally verified algorithm from blvm-consensus that ensures correctness per Orange Paper Section 12.4.
Algorithm Overview
- Get Chain State: Retrieve current chain tip, height, and difficulty
- Get Mempool Transactions: Fetch transactions from mempool
- Get UTXO Set: Load UTXO set for fee calculation
- Select Transactions: Choose transactions based on fee priority
- Create Coinbase: Generate coinbase transaction with subsidy + fees
- Calculate Merkle Root: Compute merkle root from transaction list
- Build Template: Construct block header with all components
Code: mining.rs
Transaction Selection
Transactions are selected using a fee-based priority algorithm:
- Prioritize by Fee Rate: Transactions sorted by fee rate (satoshis per byte)
- Size Limits: Respect maximum block size (1MB) and weight (4M weight units)
- Minimum Fee: Filter transactions below minimum fee rate (1 sat/vB default)
- UTXO Validation: Verify all transaction inputs exist in UTXO set
Code: miner.rs
Fee Calculation
Transaction fees are calculated using the UTXO set:
#![allow(unused)]
fn main() {
fee = sum(input_values) - sum(output_values)
fee_rate = fee / transaction_size
}
The coinbase transaction includes:
- Block Subsidy: Calculated based on halving schedule
- Transaction Fees: Sum of all fees from selected transactions
Code: miner.rs
Block Template Structure
#![allow(unused)]
fn main() {
pub struct Block {
header: BlockHeader {
version: 1,
prev_block_hash: [u8; 32],
merkle_root: [u8; 32],
timestamp: u32,
bits: u32,
nonce: 0, // To be filled by miner
},
transactions: Vec<Transaction>, // Coinbase first
}
}
Code: miner.rs
Mining Process
Template Generation
The getblocktemplate RPC method generates a block template:
- Uses formally verified
create_block_templatefromblvm-consensus - Converts to JSON-RPC format (BIP 22/23)
- Returns template ready for mining
Code: mining.rs
Proof of Work
Mining involves finding a nonce that satisfies the difficulty target:
- Nonce Search: Iterate through nonce values (0 to 2^32-1)
- Hash Calculation: Compute SHA256(SHA256(block_header))
- Target Check: Verify hash < difficulty target
- Success: Return mined block with valid nonce
Code: miner.rs
Block Submission
Mined blocks are submitted via submitblock RPC method:
- Validation: Block validated against consensus rules
- Connection: Block connected to chain
- Confirmation: Block added to blockchain
Code: mining.rs
Mining Coordinator
The MiningCoordinator manages mining operations:
- Template Generation: Creates block templates from mempool
- Mining Loop: Continuously generates and mines blocks
- Stratum V2 Integration: Coordinates with Stratum V2 protocol
- Merge Mining: Available via optional
blvm-merge-miningmodule (paid plugin)
Code: miner.rs
Stratum V2 Support
Optional Stratum V2 protocol support provides:
- Binary Protocol: 50-66% bandwidth savings vs Stratum V1
- Encrypted Communication: TLS/QUIC encryption
- Multiplexed Channels: QUIC stream multiplexing
- Merge Mining: Simultaneous mining of multiple chains
Code: mod.rs
Configuration
Mining Configuration
[mining]
enabled = false
mining_threads = 1
Stratum V2 Configuration
[stratum_v2]
enabled = true
listen_addr = "0.0.0.0:3333"
Code: mod.rs
See Also
- Node Operations - Node operation and management
- RPC API Reference - Mining-related RPC methods (
getblocktemplate,submitblock) - Stratum V2 + Merge Mining - Stratum V2 protocol details
- Node Configuration - Mining configuration options
- Protocol Specifications - Stratum V2 and mining protocols