The Fee Estimation Challenge
Poor fee estimation is a hidden tax on Bitcoin users. When fee estimators lag behind market conditions, exchanges may maintain high withdrawal fees even after congestion clears. These inflated costs get passed directly to users. One analysis found exchanges charging $60 for a withdrawal when actual network fees were under $2.
Self-custody wallets face their own challenge: they need to suggest fees that work the first time. While Child-Pays-For-Parent (CPFP) or Replace-By-Fee (RBF) exist, they add complexity that many users don't understand, and hardware wallets often don't support them. The result? Wallets recommend unnecessarily high fees "just to be safe," costing users millions in aggregate.
At Block, we’ve experienced firsthand how these inaccuracies directly affect user experience and profitability. To address this, we built Augur, an open-source Bitcoin fee estimator that relies on real-time mempool data instead of historical blocks. Augur has demonstrated consistent fee savings compared to benchmarked providers, while maintaining strong confirmation reliability.
Today, we’re excited to open-source Augur.
Why Traditional Fee Estimation Fails
Bitcoin Core’s fee estimation method looks backward, analyzing historical blocks and transaction confirmation times to predict future fees. While generally effective during stable conditions, it stumbles precisely when accuracy matters most:
- Lag during volatility: When mempool conditions change rapidly, historical data becomes misleading. Jameson Lopp's analysis showed Coinbase overpaying by 5-10x during fee spikes due to this lag.
- Ignoring Block Interval Variability: Blocks don't always arrive every 10 minutes—sometimes gaps exceed 30-40 minutes, drastically altering fee dynamics.
- No real-time awareness: By the time a block confirms and updates the historical model, market conditions have already shifted.
How Augur Works
Augur builds on the mempool-based approach pioneered by Felix Weis's source code powering WhatTheFee estimates. The core insight is that Augur focuses on what actually drives future confirmations: current mempool state, transaction arrival rates, and the inherent randomness of Bitcoin mining.
- Current mempool weight: Transactions grouped by fee rate into buckets, tracking total weight at each fee level
- Transaction inflow rates: Measured over both short (30 mins) and long (24h) windows to capture recent market dynamics
- Block production probability: Statistical modeling of how many blocks will likely be found in your target timeframe
Augur calculates the minimum fee rate required for your desired confidence level. For a 6-block target with 95% confidence, we determine the fee that accounts for worst-case scenarios—like only getting 3 blocks in an hour instead of the expected 6.
This approach provides probability distributions rather than point estimates. Users can choose their confidence level based on urgency: an "optimistic" 50% confidence for fee minimization, standard 80% for balanced estimates, or cautious 95% for critical transactions. Why pay 8 sat/vB for near-certainty when 3 sat/vB gives reasonable confidence?
Why One-Shot Fee Estimation Matters
Proper initial fee estimation remains crucial despite having fallback solutions like CPFP and RBF for stuck transactions, which we actively deploy in Cash App's bitcoin withdrawal process.
- Customer pricing: Users need to know transaction costs upfront. You can't quote a price and then increase it later without degrading the user experience.
- Wallet compatibility: Many wallets, especially hardware wallets and simplified mobile apps, don't support CPFP or RBF. For these users, getting the fee right the first time is essential.
- User trust: Nothing erodes confidence faster than transactions that don't confirm when expected, even if they can be "fixed" later.
Good fee estimation isn't about eliminating fee bumping; it's about minimizing the need for it. We aim to reduce the need for complex processes like CPFP and RFP while also increasing the certainty of transaction confirmation at the desired block target.
Understanding the Limitations
While mempool-based estimation significantly improves accuracy, it has important limitations that prevent it from being suitable for direct integration into Bitcoin Core:
- Mempool divergence: Your node's mempool may differ from miners' mempools due to network topology, policy differences (a pre-taproot node won't see taproot transactions), or out-of-band transaction submission. When miners accept transactions through private channels, public mempool data becomes less reliable.
- Policy assumptions: The estimator assumes standard transaction policies. Nodes with different relay policies or miners with custom selection algorithms can cause estimates to diverge from reality.
- Network connectivity: Poorly connected nodes may not see all transactions, leading to underestimation during high-activity periods.
Real-World Usage
To demonstrate Augur in action, we've deployed a public endpoint at https://pricing.bitcoin.block.xyz/fees that returns live fee estimates updated every 30 seconds.
json1{ 2 "estimates": { 3 "6": { 4 "probabilities": { 5 "0.50": { "fee_rate": 2.1135 }, 6 "0.80": { "fee_rate": 4.0277 }, 7 "0.95": { "fee_rate": 6.008 } 8 } 9 }, 10 "144": { 11 "probabilities": { 12 "0.50": { "fee_rate": 1.0101 }, 13 "0.80": { "fee_rate": 1.0202 }, 14 "0.95": { "fee_rate": 1.1052 } 15 } 16 } 17 }, 18 "mempool_update_time": "2025-05-27T16:09:18.461Z" 19}
This API powers Cash App's Bitcoin withdrawals, providing real-time fee estimates across multiple confirmation targets and confidence levels.
Interpreting the API output
In the sample API output above you can interpret the 1.1052 value, for example, as: "If I pay 1.1052 sat/vB in fees, then I can be 95% confident that my transaction will be confirmed within 144 blocks."
Key patterns to notice about the sample output are:
- The higher the probability, the higher the estimated fee rate. (To be more confident that your transaction will be confirmed, you need to pay more.)
- The higher the block target, the lower the estimated fee rate. (If you're willing to wait longer for your transaction to be confirmed, you can pay less.)
Benchmarking Methodology: How We Measure Success
To rigorously evaluate fee estimators, we developed a comprehensive benchmarking framework that simulates how each estimate would have performed in reality. Here's how it works:
Historical Block Analysis
For every block in our test period, we extract fee rate percentiles from actual confirmed transactions:
- 5th percentile (p5): The confirmation threshold. Transactions below this fee rate likely wouldn't have made it into the block.
- 75th percentile (p75): The overestimation threshold. Fees above this level are considered unnecessarily high.
Key Metrics
Our benchmarking tracks three critical metrics:
- Miss Rate: Percentage of estimates that were too low (below p5 threshold)
- Average Overestimate: How much users overpaid when estimates were high
- Total Difference: Combined measure of accuracy accounting for both over and underestimation
This methodology ensures we're not just optimizing for low miss rates (which encourages massive overpayment) or low fees (which causes stuck transactions), but finding the optimal balance between cost savings and transaction confirmation.
Benchmark Results: Augur in Production
We evaluated Augur using 80% confidence during two high-volatility periods against major fee providers. Here's what we found:
May 2025: Recent Performance
During a two-week period of normal-to-moderate volatility (May 2-15, 2025), Augur demonstrated a solid balance between confirmation timeliness and cost efficiency:
Next-Block (1-3 blocks depending on provider) Performance:
Provider | Miss Rate | Avg Overpayment | Total Difference |
---|---|---|---|
Augur | 14.1% | 15.9% | 13.6% |
WhatTheFee | 14.0% | 18.7% | 16.1% |
Mempool.space | 24.4% | 21.7% | 16.4% |
Bitcoiner.Live | 3.6% | 65.5% | 63.2% |
Blockstream | 18.7% | 44.2% | 35.9% |
Key insight: Bitcoiner.Live achieves a 3.6% miss rate by massively overpaying; users pay 65% more than necessary. Augur finds the optimal balance with comparable reliability at 1/4 the cost.
Longer-term (12-block) Performance:
Provider | Miss Rate | Avg Overpayment | Total Difference |
---|---|---|---|
Augur | 1.6% | 25.3% | 24.9% |
WhatTheFee | 1.0% | 33.8% | 33.4% |
Bitcoiner.Live | 0.1% | 130.7% | 130.6% |
Blockstream | 9.3% | 23.3% | 21.2% |
For 12-block targets (~2 hours), Augur maintains the best balance. While Bitcoiner.Live achieves near-zero miss rates, users pay 130% more than necessary—essentially paying double. Augur delivers reliable confirmations with 5x lower costs than Bitcoiner.live while achieving a substantially lower miss rate than Blockstream.
April 2024: Bitcoin Halving Fee Chaos
We backtested Augur to see how it would handle the extreme volatility of Bitcoin's April 2024 halving, when fees spiked from 20 to 500+ sat/vB in hours, and Augur's advantages became even clearer. Special thanks to Felix Weis for providing the historical mempool data that made this halving analysis possible.
Next-Block Performance During Halving:
Provider | Miss Rate | Avg Overpayment | Total Difference |
---|---|---|---|
Augur | 13.0% | 13.3% | 13.6% |
WhatTheFee | 9.5% | 19.4% | 19.3% |
Bitcoiner.Live | 10.7% | 21.1% | 20.5% |
Blockstream | 4.3% | 224.5% | 215.5% |
Blockstream achieved low miss rates by recommending fees 224% higher than necessary, essentially telling users to pay $50 when $15 would suffice.
Getting Started Locally with Augur
Prerequisites
- Java 17 or higher
- A fully synced Bitcoin Core node with RPC access
- Hermit - CashApp's tooling manager that ensures consistent tooling across your team and CI
Quick Start
Clone and run the reference implementation:
shell1# Clone the repository 2git clone https://github.com/block/bitcoin-augur-reference 3cd bitcoin-augur-reference 4 5# Activate Hermit environment (one-time setup recommended: enable shell hooks) 6# OR manually source the environment: 7. ./bin/activate-hermit 8 9# Configure Bitcoin RPC credentials 10export BITCOIN_RPC_USERNAME=myuser 11export BITCOIN_RPC_PASSWORD=mypassword 12export BITCOIN_RPC_URL=http://localhost:8332 13 14# Run the application 15bin/gradle run
Or use Docker:
shell1docker build -t bitcoin-augur-reference . 2docker run -p 8080:8080 \ 3 -e BITCOIN_RPC_USERNAME=myuser \ 4 -e BITCOIN_RPC_PASSWORD=mypassword \ 5 -e BITCOIN_RPC_URL=http://host.docker.internal:8332 \ 6 bitcoin-augur-reference
Once running, query the API:
shell1curl http://localhost:8080/fees
The reference implementation demonstrates:
- Collecting mempool snapshots every 30 seconds from Bitcoin Core
- Persisting historical data for analysis
- Calculating fee estimates using the Augur library
- Exposing estimates via REST API
See the full documentation for configuration options and deployment details.
The Bigger Picture
Fee estimation might seem like a narrow technical problem, but it's fundamental to Bitcoin's usability. Every stuck transaction frustrates a user. Every overpayment makes Bitcoin more expensive than necessary.
By open-sourcing Augur, we're not just sharing code; we're investing in Bitcoin's future. We believe that collaborative, open development of core infrastructure benefits everyone: users pay fair fees, businesses operate more efficiently, and Bitcoin becomes everyday money.
Get Involved
Augur is production-tested but far from perfect. We need your help to make it better:
- Try it out: Run the reference implementation and compare against your current provider.
- Report issues: Found a bug or edge case? Open an issue.
- Contribute: PRs welcome for features, optimizations, and documentation in Augur.
- Share data: Have historical mempool data or unique fee market insights? Let's collaborate.
- Benchmark data: Use our open-source benchmarking tool to benchmark more providers. We did not explicitly benchmark Augur against Bitcoin Core but would like to do that in the future. Thanks to @ismaelsadeeq for pointing out that when we do, we should use v28.0+ for its economical mode.