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

Looking at this transaction, 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.


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, 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)


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.

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