Learning how to trace crypto transactions begins with a transaction hash and a named blockchain. The goal is to reconstruct observable ledger events: what record was included, which prior value funded it, which outputs or state changes resulted, and where those outputs or assets moved next. The goal is not to guess a person’s identity from an address.

Public-ledger tracing is chain-specific. Bitcoin uses unspent transaction outputs, or UTXOs. Ethereum uses accounts, top-level transactions, contract execution, receipts, and logs. A researcher should preserve the native record before relying on an explorer’s labels or visual graph.

What tracing can and cannot establish

A public blockchain can establish protocol facts such as transaction identifiers, block inclusion, addresses or scripts, values, contract calls, execution status, and recorded events. Those facts can support a movement graph.

They do not automatically establish:

  • the real-world person or organization behind an address;
  • whether several addresses have one controller;
  • whether an output is change rather than a payment;
  • the beneficial owner of funds held by an exchange or custodian;
  • the purpose or legal character of a transfer; or
  • what happened after value entered another chain, a private ledger, or an off-chain service.

Ethereum documentation defines an externally owned account by cryptographic key control. A transaction signature can support the conclusion that the relevant key authorized that transaction. It does not prove who possessed the key at the time. Labels, exchange records, signed statements, account records, and legally obtained evidence belong in a separate attribution layer.

1. Preserve the starting transaction

Record the starting point before following links:

  • blockchain and network, such as Bitcoin mainnet or Ethereum mainnet;
  • transaction hash exactly as supplied;
  • source that supplied it;
  • time the research began;
  • explorer or node endpoints used; and
  • current pending, included, failed, replaced, or confirmed state.

The same-looking hexadecimal string can exist in different systems. A hash without its chain and network is incomplete evidence. Preserve the raw response or export, not only a screenshot. Screenshots help document presentation, while machine-readable data preserves exact fields.

If the transaction is not found, do not conclude it never existed. Check for a wrong network, transcription error, pending state, node indexing limits, transaction replacement, or an explorer outage. How cryptocurrency transactions are verified explains the difference between broadcast, inclusion, and finality.

2. Verify the record independently

Open the hash in a reputable explorer for the correct chain, then compare important fields with a node, RPC provider, or second independent data source. A blockchain explorer is an indexed view, not the consensus system itself.

For every starting transaction, capture:

  • included block number or height and block hash;
  • transaction position where exposed;
  • confirmation or finality status;
  • protocol-level success or failure;
  • fee and fee units; and
  • the raw transaction or native API response.

On Ethereum, eth_getTransactionByHash supplies the transaction envelope. eth_getTransactionReceipt supplies post-execution information after mining, including block references, a success or failure status, gas use, contract-creation address when applicable, and logs. A pending transaction has no receipt. A receipt with failed status can still consume gas and appear in a block even though its intended state changes reverted.

Explorer APIs can simplify collection, but record their data version, request time, pagination, and any missing fields. Blockchain explorer API limitations covers indexing delay, rate limits, and reorganizations.

3. Read Bitcoin inputs and outputs

A Bitcoin transaction consumes earlier outputs and creates new outputs. Each non-coinbase input points to an outpoint: the prior transaction ID plus the prior output index, commonly called vout. The new output contains a value and locking script. It remains a UTXO until a later transaction input spends that exact outpoint.

Trace backward by opening every input’s prior transaction and selecting the referenced output index. Record:

FieldMeaning
Previous txidTransaction that created the spent output
Previous voutExact output index within that transaction
Previous valueAmount controlled by the spent output
Unlocking/witness dataData satisfying the prior output’s spending conditions
Current outputsNewly created values and locking scripts
FeeSum of inputs minus sum of outputs, excluding coinbase rules

Trace forward by asking whether each newly created outpoint has been spent. If it has, follow the spending transaction. If it remains unspent, that path currently stops at the ledger.

Do not label the larger or smaller output as change by rule. Change detection is a heuristic affected by wallet behavior, output type, batching, coin selection, and address reuse. Multiple inputs may suggest common control in some ordinary wallet patterns, but collaborative transactions and service batching create counterexamples. Keep such conclusions marked as hypotheses.

4. Read Ethereum transaction and receipt data

An Ethereum top-level transaction includes a sender, optional destination, nonce, value, gas parameters, and input data. It is a signed instruction from an externally owned account. The destination can be another account or a contract; an empty destination indicates contract creation.

Start with the envelope:

  • from: address recovered from the signature;
  • to: destination account or null for creation;
  • value: native ETH value in wei;
  • input: calldata, which may select a contract function and encode arguments;
  • nonce: sender sequence value; and
  • block fields: null while pending, populated after inclusion.

Then inspect the receipt. Confirm status, block hash and number, gas used, created-contract address, and logs. A successful top-level status does not mean every business expectation was met. A contract can perform multiple internal calls, transfer tokens, emit events, or deliberately handle a failed subcall. Trace or debug APIs can expose internal call behavior, but they are client- or provider-specific and should be recorded separately from consensus receipt fields.

Native ETH movement can occur through the top-level value field and during contract calls. Token movement is normally represented by contract state changes and often an emitted event, not by the top-level transaction’s value.

5. Decode token transfers and contract events

Receipt logs have an emitting contract address, indexed topics, and data. Decode them with the verified contract ABI and the event signature. For a conventional fungible-token Transfer event, indexed topics commonly represent sender and recipient while the data represents amount, but verify the exact contract and ABI rather than assuming every event follows a familiar interface.

Use this sequence:

  1. confirm the log’s emitting contract address;
  2. verify the contract’s source or ABI provenance;
  3. match topic zero to the expected event signature;
  4. decode indexed and non-indexed parameters;
  5. preserve raw topics and data beside the decoded view; and
  6. check transaction status before treating logs as completed effects.

A log is a contract-generated record. It can describe deposits, withdrawals, swaps, mints, burns, bridge messages, or application-specific activity. Do not treat any event named Transfer as proof of a valuable asset movement without confirming the token contract, network, decimals, amount, and state.

6. Follow later transfers

Build a directed graph where each edge is an observed ledger relation and each node retains its chain-native identifier. For Bitcoin, follow outpoints into the transactions that later spend them. For Ethereum native value or tokens, search later transactions and logs involving the receiving address and specific asset contract. Preserve chronological order, but do not assume the next outgoing transfer spends the exact units received in an account-based balance.

Set a bounded scope before expanding:

  • maximum number of hops;
  • asset and network;
  • value threshold;
  • time window;
  • whether service deposit addresses are terminal; and
  • whether bridge deposits require research on a destination chain.

A bridge is a boundary, not one continuous transaction. Record the source-chain deposit or burn, the bridge message or identifier, and the separately observed destination-chain mint or release. What a crypto bridge is explains why bridge contracts, validators, relayers, and destination execution must be assessed independently.

When funds enter a custodian, mixer, privacy system, high-volume service, or contract with pooled balances, simple address-following may no longer support one-to-one continuity. Stop or downgrade confidence rather than drawing a visually convenient line.

7. Record confidence and alternative explanations

Separate each finding into three layers:

  1. Observed: exact field or relationship reproduced from the ledger.
  2. Decoded: interpretation using a named protocol rule, ABI, or script type.
  3. Inferred: hypothesis such as change, common control, service ownership, or economic purpose.

For every inference, record supporting evidence, conflicting evidence, alternative explanations, confidence, and the date checked. A third-party address label is a lead. Capture who supplied it and how current it is; do not silently promote it to a protocol fact.

Transaction graphs also change at the edge. A pending record can be replaced. Recent blocks can reorganize. An unspent output can be spent later. A service can reassign infrastructure. Save the block hash and recheck important conclusions after the chain’s appropriate confirmation or finality threshold.

Research worksheet

Use one row per observed relation:

FieldRecord
Chain and networkExact network
Object typeTransaction, input, output, log, trace, or label
Native identifierHash plus index, log index, or address
Block referenceHeight/number and block hash
Observed relationSpends, creates, emits, calls, or transfers
Value and assetNative units plus decoded display units
Primary sourceNode method, raw record, or explorer endpoint
Interpretation sourceProtocol specification, verified ABI, or script rule
ConfidenceObserved, decoded, or inferred
LimitationIdentity unknown, change uncertain, pooled service, bridge boundary, or incomplete index
Checked atTimestamp

Stop when the owned question is answered or when the next hop requires evidence you do not have. A good public-ledger trace is reproducible and explicit about uncertainty. It follows hashes, inputs, outputs, receipts, and logs; it does not turn an address graph into unsupported personal attribution.

Sources and references