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… and 718fd33c7307….

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?

  • Probably just an exchange’s hot wallet. Not that hard if you have thousands of outputs to pick from.
    – Mike D
    Jul 4 at 14:54

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 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. An algorithm implemenation with a detailed description can e.g. be found in Bitcoin Core's code base.

Disclaimer: The algorithm used by Bitcoin Core was proposed in my master's thesis, "An Evaluation of Coin Selection Strategies" (PDF).


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.