What's partial spending? What does avoidpartialspend do?

1

2

Group outputs by address, selecting all or none, instead of selecting on a per-output basis. Privacy is improved as an address is only used once (unless someone sends to it after spending from it), but may result in slightly higher fees as suboptimal coin selection may result due to the added limitation (default: 0)

I don't understand. Isn't address reuse already avoided, if receiving/change address is used only once? Does this option mean that each receiving address would be tracked by the wallet internally, so that spending from multiple "sources" is generally avoided? Aren't there still some scenarios that "spending from multiple sources" is still unavoidable? How could this improve privacy? Won't this create a tracable "chain" of transactions?

Chris Chen

Posted 2019-03-11T05:52:49.023

Reputation: 458

Answers

3

Currently, best practices are to receive coins to an address only once - Any reasonably new wallet will generate a new receiving address for you if the previously displayed one has already received coins.

However, there are scenarios where an address might receive coins multiple times, such as being a saved address on an exchange, stored with an automatic payout system (mining pools etc), or just intentionally giving the same address to multiple people who send you coins.

In such cases, an address has multiple utxos, possibly of varying sizes, associated with it.

Additionally, if you also use your wallet normally have have many other addresses with just a single transaction, this one address with many transactions could result in coin selection algorithms spending this address' coins along with coins sent to other, single-use addresses, thereby linking them as belonging to the same wallet.

avoidpartialspend is a configuration option that tells the coinselection system to spend all utxos on a single address before attempting to source utxos from other addresses (which may still be necessary depending on the amount being sent). This ensures that, as much as possible, the utxos selected minimize the number of individual addresses that are linked together for a single transaction. However, this comes at the cost of a higher transaction fee due to potentially larger transaction sizes, and sub optimal utxo selection as opposed to selecting the best input(s) for the amount being sent.

This does improve privacy to some extent. However, as notes, it is not a complete solution, as future utxos to that address may be used in other transactions that link them to more wallet addresses, even after this process.

Raghav Sood

Posted 2019-03-11T05:52:49.023

Reputation: 10 897

Thanks. So I misunderstood this mechanism, because the wallet won't track the transaction, this mechanism only means multiple UTXOs on a single address would be treated as a whole, right?Chris Chen 2019-03-11T07:42:47.030

In other words, if any address belongs to the wallet receives only one UTXO, enabling avoidpartialspend won't make any difference, will it?Chris Chen 2019-03-11T07:46:25.613

@Chris Chen: indeed, if you never receive two outputs to the same address, it has no effect.Pieter Wuille 2019-03-11T07:50:30.237