Discard Threshold
In Bitcoin Core's wallet, the smallest change output worth creating. Change below it is left out and goes to the miner as part of the fee.
The discard threshold is the smallest change output Bitcoin Core's wallet will create. When the change left over from a payment would come in under it, the wallet leaves the change output out, and the leftover goes to the miner as part of the fee.
The reason is cost. Change is only worth having if you can spend it later, and spending it means paying for one more input. If that future fee would eat the whole amount, the output is worth nothing to you, so the wallet doesn't make it.
How Bitcoin Core works it out:
- It picks a discard fee rate. The default is 10 sat/vB (the
-discardfeesetting). If the node's fee estimate for its longest target is lower, the wallet uses that instead, and it never goes below the dust relay rate of 3 sat/vB. - At that rate, the threshold is the larger of two amounts: the fee to spend the change output later plus one satoshi, and the output's dust limit.
- Change below the threshold is added to the fee. Change at or above it gets its own output.
The setting arrived in Bitcoin Core 0.15.0 (2017), in the same change that redefined dust as an output that would cost its own value in fees to create and spend at the dust relay rate.
Don't confuse it with the mempool's minimum fee. That one decides which unconfirmed transactions a node keeps:
- Bitcoin Core caps its mempool at 300 MB of memory by default.
- When the mempool is full, the node evicts the lowest-feerate transactions and raises its minimum fee to just above the feerate of what it evicted. That floor then decays, halving every 12 hours, or faster once the mempool is under half full.
- In calm periods the floor is the relay minimum, which Bitcoin Core 29.1 (September 2025) cut from 1 to 0.1 sat/vB. The release notes say the dust rate and the wallet's fee rates stayed the same.
- mempool.space shows this floor on its dashboard as "Minimum fee", relabeled "Purging" when it rises above the relay minimum.
Key takeaways
- Change too small to be worth spending later becomes extra fee instead of a new output
- Bitcoin Core works it out from a discard fee rate: 10 sat/vB by default, never below the 3 sat/vB dust rate
- Not the same as the mempool's minimum fee, which decides which unconfirmed transactions a node keeps
Corrected
-
Was: The entry defined the discard threshold as the minimum fee rate a transaction must pay to stay in a Bitcoin Core node's mempool when memory runs short.
Now: In Bitcoin Core, the discard threshold is the smallest change output the wallet will create. Smaller change is added to the fee instead. The wallet works it out from its -discardfee rate, 10 sat/vB by default. The mempool's minimum fee is a separate rule. Details
-
Was: The entry said mempool.space's next-block fee estimate shows the discard threshold, and gave about 1 sat/vB as the floor in calm periods.
Now: mempool.space shows the mempool's fee floor on its dashboard as 'Minimum fee', relabeled 'Purging' when it rises above the relay minimum. Bitcoin Core 29.1 (September 2025) lowered the default relay minimum from 1 to 0.1 sat/vB. The entry's definition was itself corrected on 10 October 2026: in Bitcoin Core the discard threshold is a wallet setting for dropping tiny change, not the mempool floor. Details
Sources (14)
- Bitcoin Core 31 - wallet/init.cpp (-discardfee: your tolerance for discarding change by adding it to the fee; an output is discarded if it is dust at this rate)
- Bitcoin Core 31 - wallet/wallet.h (DEFAULT_DISCARD_FEE 10,000 sat/kvB, which is 10 sat/vB)
- Bitcoin Core 31 - wallet/fees.cpp (GetDiscardRate: capped by the longest-target fee estimate, never below the dust relay rate)
- Bitcoin Core 31 - wallet/spend.cpp (smallest change: the larger of the dust threshold and 1 sat more than the fee to spend it, both at the discard rate)
- Bitcoin Core 31 - wallet/coinselection.cpp (GetChange returns no change when it is below that minimum)
- Bitcoin Core 31 - policy/policy.h (DUST_RELAY_TX_FEE 3,000 sat/kvB; DEFAULT_MIN_RELAY_TX_FEE 100 sat/kvB)
- Bitcoin Core pull request 10817 - Redefine Dust and add a discard_rate (merged July 2017)
- Bitcoin Core 0.15.0 release notes (change log lists #10817, Redefine Dust and add a discard_rate)
- Bitcoin Core 31 - kernel/mempool_options.h (DEFAULT_MAX_MEMPOOL_SIZE_MB 300)
- Bitcoin Core 31 - txmempool.cpp (TrimToSize sets the minimum fee to the evicted feerate plus the incremental relay fee; GetMinFee decays it, faster when the mempool is under half full)
- Bitcoin Core 31 - txmempool.h (ROLLING_FEE_HALFLIFE 12 hours)
- Bitcoin Core 29.0 - policy/policy.h (DEFAULT_MIN_RELAY_TX_FEE 1,000 sat/kvB, which is 1 sat/vB)
- Bitcoin Core 29.1 release notes (September 2025) - default minrelaytxfee lowered to 100 sat/kvB (0.1 sat/vB); the dust feerate and the wallet's feerates unchanged
- mempool.space source - dashboard shows mempoolminfee as 'Minimum fee', or 'Purging' when it differs from minrelaytxfee
Related terms (10)
Published . Revised . Two corrections logged for this page.
Edit this page on GitHub