<p>If your wallet has a large UTXO pool with some variance in the values, it is often possible to find a combination of inputs that provide a matching amount to pay for recipient output and transaction fees. The range of matching amounts is larger than one might expect, when considering that it is cheaper to drop a negligible input excess to fees than to pay for creating and spending a change output.</p>
<p>This strategy is referred to as &quot;change avoidance&quot; and has multiple benefits:</p>
<ul>
<li><strong>Smaller transaction</strong>: Each output adds 31–43 vbytes to a transaction. Avoiding a change output decreases the cost of a transaction (assuming the same weight of inputs).</li>
<li><strong>Reduced cost in the future</strong>: Every UTXO added to a wallet incurs the delayed cost of it being spent in the future. By avoiding the change output, there is one fewer UTXO that needs to be spend.</li>
<li><strong>Consolidating effect</strong>: Many services have an overhang of inbound payments and need to actively work on reducing their UTXO pool. Change avoidant transactions always reduce the number of UTXOs in a wallet (which is not the case for 1 input transactions with change).</li>
<li><strong>Slows growth of global UTXO set</strong>: Avoiding change means that there is one less UTXO added to be tracked by every full node on the network</li>
<li><strong>Improves privacy</strong>: <a href="https://en.bitcoin.it/wiki/Privacy#Change_address_detection" rel="nofollow noreferrer">Change address detection</a> is a common tool in clustering addresses. Transactions that don't have a change output cannot be leveraged in this fashion, or might even confuse such approaches if they are mistaken for a self-send, or if there are multiple recipient outputs but no change output.</li>
</ul>
<p>All of these benefits come at the one-time cost of some development effort, and slightly more computation for each input selection.</p>
<p>There are multiple wallets that employ coin selection algorithms which actively search for change avoidant input sets. One such algorithm with a detailed description is e.g. implemented in <a href="https://github.com/bitcoin/bitcoin/blob/7a49fdc58115845ece3a9890bf9498bee6b559de/src/wallet/coinselection.cpp#L21" rel="nofollow noreferrer">Bitcoin Core</a>.</p>
<p><em>Disclaimer: The algorithm used by Bitcoin Core was proposed in my master's thesis, &quot;An Evaluation of Coin Selection Strategies&quot; (<a href="https://murch.one/wp-content/uploads/2016/11/erhardt2016coinselection.pdf" rel="nofollow noreferrer">PDF</a>).</em></p>

CC BY-SA 4.0
2021-07-04T16:34:07.503Z
2022-07-14T18:20:52.163Z
2022-07-14T18:20:52.163Z
Murch
<p>I am looking into a cluster of addresses that seem to be repeatedly sending transactions with a round number output and no change. How/why is this happening?
For example <a href="https://www.blockchain.com/btc/tx/c809850a2d8bba34cf74c0310094d8c4c39058f4d565d6fb790984b2e50639b0" rel="nofollow noreferrer">c809850a2d8b…</a>
and
<a href="https://www.blockchain.com/btc/tx/718fd33c73077035cd3ce158ffc9635cc795b8e8d27b6c6782a5cc997b9bcbcb" rel="nofollow noreferrer">718fd33c7307…</a>.</p>
<p>The only thing I could think of is that the wallet somehow orchestrated this. Like it knew ahead of time that it wanted to send a round number so it prepared the inputs so that there would be no change. But what kind of wallet would do this? And why?</p>

CC BY-SA 4.0
2021-07-04T14:54:27.663Z
Probably just an exchange’s hot wallet. Not that hard if you have thousands of outputs to pick from.
Mike D
<change><coin-selection>
Why are there round numbers after the fees and no change?
Shm
# Why are there round numbers after the fees and no change?

(Asked by: username_0 on 2021-07-04)

I am looking into a cluster of addresses that seem to be repeatedly sending transactions with a round number output and no change. How/why is this happening?
For example [c809850a2d8b…](https://www.blockchain.com/btc/tx/c809850a2d8bba34cf74c0310094d8c4c39058f4d565d6fb790984b2e50639b0)
and
[718fd33c7307…](https://www.blockchain.com/btc/tx/718fd33c73077035cd3ce158ffc9635cc795b8e8d27b6c6782a5cc997b9bcbcb).

The only thing I could think of is that the wallet somehow orchestrated this. Like it knew ahead of time that it wanted to send a round number so it prepared the inputs so that there would be no change. But what kind of wallet would do this? And why?

**Tags:** change, coin-selection

> **Comments:**
> **username_1**: Probably just an exchange’s hot wallet. Not that hard if you have thousands of outputs to pick from.  

---

## 1 answers

### Answer by username_2 on 2021-07-04. Score: 6 | Accepted answer

If your wallet has a large UTXO pool with some variance in the values, it is often possible to find a combination of inputs that provide a matching amount to pay for recipient output and transaction fees. The range of matching amounts is larger than one might expect, when considering that it is cheaper to drop a negligible input excess to fees than to pay for creating and spending a change output.

This strategy is referred to as "change avoidance" and has multiple benefits:

* **Smaller transaction**: Each output adds 31–43 vbytes to a transaction. Avoiding a change output decreases the cost of a transaction (assuming the same weight of inputs).
* **Reduced cost in the future**: Every UTXO added to a wallet incurs the delayed cost of it being spent in the future. By avoiding the change output, there is one fewer UTXO that needs to be spend.
* **Consolidating effect**: Many services have an overhang of inbound payments and need to actively work on reducing their UTXO pool. Change avoidant transactions always reduce the number of UTXOs in a wallet (which is not the case for 1 input transactions with change).
* **Slows growth of global UTXO set**: Avoiding change means that there is one less UTXO added to be tracked by every full node on the network
* **Improves privacy**: [Change address detection](https://en.bitcoin.it/wiki/Privacy#Change_address_detection) is a common tool in clustering addresses. Transactions that don't have a change output cannot be leveraged in this fashion, or might even confuse such approaches if they are mistaken for a self-send, or if there are multiple recipient outputs but no change output.

All of these benefits come at the one-time cost of some development effort, and slightly more computation for each input selection.

There are multiple wallets that employ coin selection algorithms which actively search for change avoidant input sets. One such algorithm with a detailed description is e.g. implemented in [Bitcoin Core](https://github.com/bitcoin/bitcoin/blob/7a49fdc58115845ece3a9890bf9498bee6b559de/src/wallet/coinselection.cpp#L21).

*Disclaimer: The algorithm used by Bitcoin Core was proposed in my master's thesis, "An Evaluation of Coin Selection Strategies" ([PDF](https://username_2.one/wp-content/uploads/2016/11/erhardt2016coinselection.pdf)).*


---

