<p>This is usually (intentionally) not possible.</p>

<p>Well designed wallets attempt to obfuscate the change vs. non-change addresses to make it harder to find out which part is the payment for privacy reasons.</p>

<p>Traditionally, some clues existed, which are now fixed in any decent wallet:</p>

<ol>
<li>The change would go to an address of the same type as the input - This was an issue when P2SH was new, and when segwit just started out. These days, wallets such as Bitcoin Core will try and match the change output to a similar address type as your regular output. That is to say, if you use a native-segwit address to send BTC to a P2SH address, Bitcoin Core will send the change output to a P2SH address as well, even though your wallet is predominantly native segwit addresses</li>
<li>Change outputs often appeared last in the list of outputs - This allows people to guess at the change address by simply looking at the output ordering. Today, many wallets implement <a href="https://github.com/bitcoin/bips/blob/master/bip-0069.mediawiki" rel="nofollow noreferrer">BIP 69</a>, which orders outputs lexicographically, thus removing any guarantee that the change address will be the last output.</li>
</ol>

<p>It should be noted that the above are not adopted by every wallet. In fact, many systems, such as several exchanges' withdrawal systems, will still send the change to the last output, and also to an address of the same type as the input. That said, there are currently enough wallets that do follow some/all of the above to make change detection unreliable without additional data (such as knowing if some input was spent by a specific wallet program, and how that wallet would behave)</p>

CC BY-SA 4.0
2018-07-24T00:40:17.243Z
2018-07-24T00:40:17.243Z
Raghav Sood
<p>You can guess at which output is a change address, but the only way to be certain is if you are the person initiating the transaction. </p>

<p>In fact, some wallet software could be designed to intentionally obfuscate this data, to improve user privacy. At best, services like blockchain.info can only guess. </p>

CC BY-SA 4.0
2018-07-23T19:22:32.687Z
2018-07-23T19:22:32.687Z
chytrik
<p>Is there a way to determine which transaction output is a likely a change address and which is not?</p>

<p>Looking at <a href="https://www.blockchain.com/en/btc/tx/4b3ebcb9fc043d1e0c43c937654e966a5d428991aab489ddf12b23b9af98b834" rel="nofollow noreferrer">this transaction</a>, there are two outputs - a change address and the output address. Blockchain.info says "Estimated BTC transacted: 0.5 BTC", but I'm not sure how it's estimating that.</p>

<change><chainanalysis>
Determine which transaction output is a change address and which is not
Gabriel Bauman
# Determine which transaction output is a change address and which is not

(Asked by: username_0 on 2018-07-23)

Is there a way to determine which transaction output is a likely a change address and which is not?

Looking at [this transaction](https://www.blockchain.com/en/btc/tx/4b3ebcb9fc043d1e0c43c937654e966a5d428991aab489ddf12b23b9af98b834), there are two outputs - a change address and the output address. Blockchain.info says "Estimated BTC transacted: 0.5 BTC", but I'm not sure how it's estimating that.

**Tags:** change, chainanalysis


---

## 2 answers

### Answer by username_1 on 2018-07-24. Score: 3 | Accepted answer

This is usually (intentionally) not possible.

Well designed wallets attempt to obfuscate the change vs. non-change addresses to make it harder to find out which part is the payment for privacy reasons.

Traditionally, some clues existed, which are now fixed in any decent wallet:

1. The change would go to an address of the same type as the input - This was an issue when P2SH was new, and when segwit just started out. These days, wallets such as Bitcoin Core will try and match the change output to a similar address type as your regular output. That is to say, if you use a native-segwit address to send BTC to a P2SH address, Bitcoin Core will send the change output to a P2SH address as well, even though your wallet is predominantly native segwit addresses
2. Change outputs often appeared last in the list of outputs - This allows people to guess at the change address by simply looking at the output ordering. Today, many wallets implement [BIP 69](https://github.com/bitcoin/bips/blob/master/bip-0069.mediawiki), which orders outputs lexicographically, thus removing any guarantee that the change address will be the last output.

It should be noted that the above are not adopted by every wallet. In fact, many systems, such as several exchanges' withdrawal systems, will still send the change to the last output, and also to an address of the same type as the input. That said, there are currently enough wallets that do follow some/all of the above to make change detection unreliable without additional data (such as knowing if some input was spent by a specific wallet program, and how that wallet would behave)


---

### Answer by username_2 on 2018-07-23. Score: 3

You can guess at which output is a change address, but the only way to be certain is if you are the person initiating the transaction.

In fact, some wallet software could be designed to intentionally obfuscate this data, to improve user privacy. At best, services like blockchain.info can only guess.


---

