2

I'm trying to analyze transaction data and wondering if there's a way to tell how much was transferred from one wallet address to another when there are multiple inputs and outputs for one transaction.

For example, the transaction data looks like this

      Hash        Input_Addresses        Output_Addresses      Input_Amounts      Output_Amounts
a77c56410e71...  [Address1, Address2]   [Address3, Address4]  [0.5BTC, 1.5BTC]  [1.1BTC,  0.9BTC]

In this transaction, there were two inputs and two outputs. Address1 paid 0.5 BTC and Address2 Paid 1.5 BTC. Address3 received 1.1 BTC and Address4 received 0.9 BTC.

Is there any way to tell how much of the 1.1 BTC Address3 received was actually from Address1 or Address2? The total amount of input matches the total amount of output, which is 2 BTC (please ignore the transaction fee for the calculation) but I wonder if it's possible to trace which wallet the individual output amounts are from.

If it's possible, what data should I look at to trace those flows?

1
3

By definition of a bitcoin transaction, each of the outputs have all inputs as a part of their history. There is no way to trace which input contributes to which output, because all inputs contribute to all outputs equally.

Now, if the transaction is from multiple owners and requires multiple signatures, you could say that each of the signers of the tx only signs when the overall tx adds to addresses they control, and in that way, certain inputs lead to certain outputs.

In that sense, if the construction of the tx itself was done publicly, you could listen for data as it is being constructed by communication among the peers in the tx. However, such coordination is usually done for privacy purposes, under a black-box coordinator, so such data would not be observable.

In terms of data that actually is put on the blockchain, there would be no way to reverse engineer any more granular of a construction than the list of inputs and outputs.

1

There is no one-to-one relationship between inputs and outputs.

"Bitcoins are recast with every spend".

Bitcoins are held in unspent transaction outputs (UTXOs). An transaction input references a specific UTXO and consumes it. In the same step, these "ephemeral" bitcoins are then used to create new UTXOs. There is no direct link between specific inputs and outputs beyond them all being defined in one transaction: all UTXOs consumed in a transaction were predecessors of all UTXOs created by that transaction. There is generally no "from-address" in Bitcoin, both in the sense that it often cannot be narrowed down to a single one as well as the fact that the instigator of the transaction may not control the addresses associated with the UTXOs being spent e.g. when sending from a custodial account.

There are some tracking approaches that use heuristics e.g. to make guesses whether outputs assigned funds to a receiver or the sender, but those apply more to the transaction graph than the input-output relationship and often only confer probabilities.
Some non-standard transactions do reveal a bit more information, e.g. in a SIGHASH_SINGLE transaction an input only commits to one specific output. But on the other hand, there are also more ways to create multiparty transactions that break the common-ownership heuristic as well.

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.