Mining with Bitcoin Knots
Bitcoin Knots is the node software powering Ocean, the decentralized mining pool co-founded by Luke Dashjr, whose 2023 seed round was led by Jack Dorsey's Block. This guide covers Knots-specific mining features and configuration.
Why Miners Choose Knots
Ocean Mining Pool
Ocean launched in 2023 with a mission to decentralize Bitcoin mining by giving miners control over their own block templates. Key facts:
- Runs Bitcoin Knots as its node software
- Filters inscriptions by default (configurable)
- Funding: Jack Dorsey's Block led Ocean's $6.2M seed round (2023)
- Tether: announced roughly $500M of investment in its own mining operations, and separately partnered with Ocean, deploying hashrate to the pool
- Headquarters in El Salvador (2024)
Dashjr's argument for filtering: "Spam-filtered blocks often have more fees anyway for some reason." The pool allows miners to construct their own templates, reducing reliance on centralized operators.
Block Template Control
Unlike Bitcoin Core, Knots gives miners fine-grained control over what goes into their blocks:
| Feature | Core | Knots |
|---|---|---|
-blockmaxsize | Removed | Restored |
-blockprioritysize | Removed | Restored |
| Per-call template params | No | Yes |
| Inscription filtering | No | Yes |
Block Size Configuration
Knots Defaults (Conservative)
# Knots defaults - smaller, healthier blocks
blockmaxsize=300000 # 300 KB (Core removed this option)
blockmaxweight=1200000 # 1.2 MWU
Maximum Revenue Settings
# Maximum block size for maximum fees
blockmaxweight=4000000 # 4 MWU (full blocks)
# Note: Remove blockmaxsize when using blockmaxweight
blockmaxweight is the preferred option since SegWit. Setting blockmaxsize to anything other than maximum will reduce your income. If you want full blocks, use only blockmaxweight=4000000.
Reserved Space
# Reserve weight for coinbase transaction
blockreservedweight=8000
# Reserve space for high-priority/low-fee transactions
blockprioritysize=50000
getblocktemplate Enhancements
Per-Call Parameters (Knots v27.1+)
Knots allows overriding block limits on each getblocktemplate call:
bitcoin-cli getblocktemplate '{
"rules": ["segwit"],
"blockmaxsize": 750000,
"blockmaxweight": 3000000,
"minfeerate": 5
}'
Parameters:
blockmaxsize— Override configured block size limitblockmaxweight— Override configured weight limitminfeerate— Only include transactions paying at least this fee rate, in sat/vB (default: set by-blockmintxfee)
Setting per-call parameters disables template caching, which may reduce efficiency with multiple applications using getblocktemplate.
Skip Validity Test
For advanced setups using BIP 23 template proposals:
bitcoin-cli getblocktemplate '{
"rules": ["segwit"],
"capabilities": ["proposal", "skip_validity_test"]
}'
This skips the internal validity check and disables caching. Only use if you plan to follow up with a template proposal call.
Transaction Filtering for Mining
Filter Inscriptions
# Reject inscription/ordinal transactions from mempool
rejectparasites=1
# Limit OP_RETURN data size
datacarriersize=42
# Charge full weight for data (no SegWit discount abuse)
datacarriercost=1.0
Filter Tokens
# Reject BRC-20 and similar token transactions
rejecttokens=1
The Filtering Debate
Critics argue filtering reduces miner income. Dashjr's response:
"Bitcoin works with the assumption that a majority of miners are honest, not malicious. Besides, spam-filtered blocks often have more fees anyway for some reason."
The choice is yours — Knots provides the options, you decide the policy.
BIP-110/RDTS Signaling
Miners running the standard Knots v29.3 build (v29.3.knots20260508) should know that their block templates signal for BIP-110 automatically: the Reduced Data Temporary Softfork (RDTS) is a BIP9-style deployment, and getblocktemplate sets version bit 4 for any deployment in its signaling phase. Confirming the upgrade in your configuration silences the hourly warnings but does not change signaling:
# Confirm the RDTS upgrade (Knots v29.3+); enforcement and signaling
# are properties of the build, not of this setting
consensusrules=rdts
Miners who do not want to signal or enforce RDTS should run the parallel non-RDTS build (v29.3.knots20260507). Ocean has been signaling for BIP-110 since around March 2026, though as of mid-2026 overall network signaling remains well below the 55% early lock-in threshold.
See BIP-110 / RDTS Integration for the mechanics and BIP-110: The Reduced Data Soft Fork for the full rules, activation timeline, and risks.
Fee Configuration
# Minimum fee for relay (affects mempool)
minrelaytxfee=0.00001
# Minimum fee for block inclusion
blockmintxfee=0.00001
# Sigops limits
bytespersigop=20
bytespersigopstrict=20
maxtxlegacysigops=2500
Pool Backend Setup
RPC Configuration
# Enable RPC server
server=1
# Authentication
rpcuser=miner
rpcpassword=SECURE_RANDOM_PASSWORD
# Allow pool server access
rpcbind=0.0.0.0
rpcallowip=192.168.1.0/24
# Increase connection limits for pool
rpcthreads=16
rpcworkqueue=64
Memory Optimization
For pools that need fast block assembly:
# Large mempool for more transaction selection
maxmempool=1000
# More database cache
dbcache=4096
# Keep entire UTXO set in memory (if RAM permits)
# Requires significant RAM but speeds up block creation
Mining-Specific RPC Commands
| Command | Description |
|---|---|
getblocktemplate | Get block template (enhanced in Knots) |
submitblock | Submit solved block |
getmininginfo | Mining statistics |
prioritisetransaction | Adjust transaction priority |
getblocklocations | Block file locations (Knots) |
Example Configurations
Ocean-Style (Filtered)
# Ocean-style configuration
server=1
rejectparasites=1
rejecttokens=1
datacarriersize=42
datacarriercost=1.0
blockmaxweight=3996000
blockreservedweight=4000
Maximum Revenue (Unfiltered)
# Maximum revenue configuration
server=1
corepolicy=1
blockmaxweight=4000000
maxmempool=1000
Test Mining (Regtest)
For experimenting with block templates without real hashrate, use regtest — a private test network where you can generate blocks on demand:
# Regtest mining sandbox
regtest=1
server=1
# Create a wallet and generate test blocks to your own address
bitcoin-cli -regtest createwallet "test"
bitcoin-cli -regtest generatetoaddress 101 $(bitcoin-cli -regtest getnewaddress)
The old gen=1 internal miner was removed from Bitcoin long ago. On mainnet, blocks are found by external mining hardware pointed at your node (directly or via a pool); generatetoaddress only works on regtest and similar test networks.
Performance Patches
Knots includes mining performance optimizations:
mining_avoid_block_copy— Reduces memory copies during block assemblygbt_rpc_options— Per-call template customizationmining_priority— Transaction priority support
See Also
- Ocean Mining Pool — Production pool running Knots
- Configuration Options — All mining options
- The OP_RETURN Controversy — Why filtering matters
- Transaction Filtering — Filtering details