How to safely spend/burn dust?
How to safely spend/burn dust?
Loading saved threads...
ignacio porte · External communityPost link
External question — Bitcoin Stack Exchange
Author: ignacio porte
Original post: https://bitcoin.stackexchange.com/questions/125702
License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/
Adaptation: HTML converted to plain text; contact email addresses removed.
I am making a tool to safely remove dust UTXOs from a wallet in a privacy-preserving way. My main goals are:
Never mix these dust inputs with my other UTXOs, to avoid linking my addresses.
Ideally, remove all dust completely, so I'm not left with new dust afterward.
Create valid, standard transactions accepted by Bitcoin Core and the network.
So far, I have this approach working in regtest mode:
Send all accumulated dust to a burn address
Idea:
Create a transaction with all dust UTXOs as inputs and a single output sending all value directly to a known burn address (e.g.,
"1BitcoinEaterAddressDontSendf59kuE"
).
Issue:
If the total dust amount is below the standard amount/fee threshold, this transaction will be rejected.
My question
How can I safely remove dust UTXOs completely without creating new dust outputs or mixing these dust inputs with my regular funds?
Is there a recommended best practice or standard technique for this situation other than simply leaving the dust unspent?
Quote
Report
Murch · External communityPost link
External answer — Bitcoin Stack Exchange
Author: Murch
Original post: https://bitcoin.stackexchange.com/a/125850
License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/
Adaptation: HTML converted to plain text; contact email addresses removed.
What you are trying to do does not seem to be possible.
A standard transaction pays at least a feerate of 1 sat/vB (
minRelayTxFee
). Many low-value UTXOs have too little value to pay for themselves even at the lowest standard feerate. Even when a low-value UTXO has enough value to pay for the input that spends it, often it will not have enough value to pay for the whole transaction. This means that another UTXO needs to provide additional funds to raise the transaction to the minimum feerate. It seems to me that per definition, you cannot create standard transactions using only the UTXOs that you want to get rid off.
Outputs with spendable scripts themselves must receive a larger than dust amount in order for a transaction to be standard. If you pay an address such as
1BitcoinEater
, you would need to pony up for the additional amount to make the transaction standard. Additionally, these UTXOs would live in the UTXO set forever. You can avoid those problems by burning into an OP_RETURN output which can also have a smaller output script and therefore make the entire transaction lighter. Some of your dust UTXOs may be valuable enough that they can fund such a transaction by themselves.
Adding more UTXOs to fund the burn transaction increases your cost and reduces your privacy. You may be able to mitigate both: if multiple owners of UTXOs that can pay for themselves collaborate to create one transaction together that pays all funds to an
OP_RETURN
output, the additional value of the UTXOs in sum may be big enough to pay for the transaction overhead, and the multiple co-senders would at least confuse the
common-input-ownership heuristic
. Organizing such a transaction itself may introduce new privacy leaks unless conducted carefully.
For the lowest-value UTXOs it may be cheaper and easier to instruct your wallet to ignore them and forever leave them unspent.
Update in 2026
Bitcoin Core’s minimum feerate has shifted to 0.1 s/vB, and we now frequently see transactions of less than 1 s/vB get confirmed. This reduces the minimum amount necessary to make a viable transaction by a factor 10 compared to what I was describing above.
BIP451: Dust UTXO Disposal Protocol
proposes a set of best practices how to burn funds. It seems directly applicable to your question, so you might want to check it out.
Quote
Report
Post Reply
Checking account access…