← go back to TRACEY

Heuristics in TRACEY

A heuristic is a rule that is frequently correct, but not always. TRACEY uses heuristics to find probable patterns. The Bitcoin blockchain records amounts, addresses, transactions and times. It does not record names, wallets, companies or intentions. All other data that TRACEY adds is a guess. These guesses come from the usual structure of transactions.

A heuristic is not proof. It is frequently correct, but it can be very wrong. Some users and privacy tools make transactions that break heuristics intentionally. Use each heuristic only as a lead. Compare it with other evidence, for example court records, answers from exchanges or attributions. Do not state it as a fact.

Facts (from the blockchain)Addresses, amounts, transaction IDs, dates and times, address types, and the movement of coins from one address to an other address.
Guesses (heuristics)Probable change, wallet tags (common ownership), cj (CoinJoin), B/E/S (business, exchange or service), wallet software, fingerprints and peel chains.

On this page: Change · Common ownership · CoinJoin · B/E/S · Behavioral fingerprint · Peel chain · Trace settings

Change (“show change”)

When a wallet makes a payment, it usually sends the remaining amount back to the sender. This new output is the “change”. If you know which output is the change, you know where the money of the sender went next.

Rules

TRACEY examines only transactions with exactly two outputs. The change output is the output that:

  1. goes back to one of the input addresses of the transaction. If no output does this:
  2. is the only output with the same address type as the inputs. All inputs must have one type, and the other output must have a different type. If no output does this:
  3. is not a round amount when the other output is a round amount (a multiple of 0.001 BTC).

If these rules do not give one clear result, TRACEY does not mark an output. A grey dashed line shows a change output.

Limits

These conditions cause incorrect results: wallets that send change to the same address type as the payment, PayJoins, and change with a round amount. Many new wallets make the change type the same as the payment type. They do this to prevent this guess.

Sources: Bitcoin Wiki: Privacy, change address detection · Meiklejohn et al. (2013): A Fistful of Bitcoins · Ishaana Misra (2023): Wallet Fingerprints

Common ownership (“show common ownership”)

To spend coins, a wallet must sign each input. Thus, the addresses that pay into the same transaction usually belong to one wallet. This is the oldest heuristic in blockchain analysis. Analysts also use it more than all other heuristics.

Rules

Limits

A CoinJoin puts the coins of many unrelated persons into one transaction. If TRACEY does not identify a CoinJoin, common ownership puts these persons into one wallet. This error then moves along the links to more addresses. PayJoins break the rule intentionally. Exchanges spend the deposits of many customers together. Thus, one “wallet” can be one company, not one person.

Sources: Satoshi Nakamoto (2008): Bitcoin whitepaper, section 10 · Bitcoin Wiki: Common-input-ownership heuristic · Meiklejohn et al. (2013): A Fistful of Bitcoins

CoinJoin (“show CoinJoin”)

A CoinJoin is a privacy transaction. Many persons put their coins into one transaction, so it is difficult to know which coins went where. Some designs (for example Whirlpool or JoinMarket) give each person the same output amount. Other designs, for example WabiSabi (Wasabi Wallet), use many different amounts and mix them.

Rules

TRACEY uses the CoinJoin rule of mempool.space. All of these conditions must be true:

  1. The transaction has a minimum of 5 inputs and 5 outputs.
  2. The number of different input amounts plus the number of different output amounts is a maximum of half of all inputs and outputs.
  3. No output address occurs two times. This includes an output address that is also an input address.
  4. The transaction has no inscription and no OP_RETURN output.
  5. The ratio of inputs to outputs is between 1:5 and 5:1.

A transaction that agrees with these rules gets a yellow “cj” badge. TRACEY never uses CoinJoins for common ownership. This is true when you select the “show CoinJoin” box and when you do not select it. TRACEY finds inscriptions from their standard marker. mempool.space does a full analysis of inscriptions.

Limits

The mempool.space code calls this rule a “fast but bad heuristic”. It does not find CoinJoins with many different amounts or with fewer than 5 persons. It can incorrectly mark usual payouts that have many equal amounts.

Sources: mempool.space source code: getTransactionFlags (common.ts) · Bitcoin Wiki: CoinJoin

B/E/S: probable business, exchange or service

Analysis companies and researchers usually do not identify exchanges from one pattern. They start with addresses that they know belong to an exchange. These addresses come from their own test deposits and withdrawals, from published addresses and from court records. Then they use common ownership to find more addresses. TRACEY cannot know the start addresses of an exchange. You must supply them as labels.

Rules

An address gets the purple B/E/S badge when one of these conditions is true:

  1. Large payout: the address spends in a transaction that pays more than N outputs of 2 or more different address types. The setting “exchange / service: pays > N outputs” sets N (default 20). TRACEY marks all input addresses of that transaction. It does not follow the outputs of that payout. TRACEY made this rule from the patterns of batch payouts.
  2. Same wallet: when you select “show common ownership”, the badge also goes to each address in the same wallet group as a marked address.

TRACEY does not use the number of transactions of an address for this rule. That number only sets when TRACEY stops at an address. Put the pointer on the badge to see which rule applies.

Limits

A person or a mining pool that pays many persons at the same time looks like a large payout. A large CoinJoin can also look like a large payout. When the badge goes along common ownership, it also takes all the errors of that heuristic. TRACEY does not find services that do not pay many outputs in one transaction.

How analysts usually identify exchanges: Meiklejohn et al. (2013): A Fistful of Bitcoins · United States v. Sterlingov (D.D.C. 2024): co-spend clustering in court · Cryptocurrency Address Clustering and Labeling (deposit address heuristic, Ethereum) · Kappos et al. (2022): How to Peel a Million · Harlev et al. (2018): Breaking Bad · Zola et al. (2019): Cascading Machine Learning to Attack Bitcoin Anonymity

Background information (TRACEY does not use these for the large-payout rule): Bitcoin Optech: Payment batching · mempool.space source code: batch payout flag (common.ts)

Behavioral fingerprint (“show behavioral fingerprint”)

A behavioral fingerprint shows that transactions probably come from the same wallet software or setup. It does not show the same person or the same wallet. Unusual fingerprints with rare custom setups can show the same service. Behavioral heuristics are the least reliable heuristics.

Each wallet program sets the technical details of a transaction in its own way. These details include the version number, the locktime, the sequence numbers, the order of inputs and outputs, and the change. These default settings can show which software made a transaction.

Known wallet software (teal tag)

TRACEY removes wallets from the list one at a time. It removes a wallet when the transaction has a property that the wallet never makes with its default settings. The wallets that remain are the result. If 3 or fewer wallets remain, the tag shows all of them (“Bitcoin Core or Sparrow”). If 4 or more wallets remain, there is no tag.

WalletVersionLocktimenSequenceOrder and other traitsCompared with
Bitcoin Core2block heightMAX-2random order; only low-R signatures; the change type is the same as the payment typecurrent code (Nov 2026)
Electrum2block heightMAX-2BIP69 inputs and outputs; only low-R signaturescurrent code (4.8.4)
Sparrow2block heightMAX-2random order of inputs and outputscurrent code
BlueWallet20exactly 2,147,483,648the change is the last outputcurrent code (8.0.2)
Trezor Suite10MAX-2random ordercurrent code
Ledger Live10exactly 0oldest coins first; the change is the last outputcurrent code
Wasabi Wallet2random: 0 in 90% of transactions, if not, near the block heightfinal, or MAX-1 with a locktime (no RBF signal)random order of inputs and outputscurrent code (2.8.5) · no tag
BitBoxApp (BitBox02)10MAX-2random order of inputs and outputs: on the blockchain, the same as Trezor Suitecurrent code (4.52.0)

MAX-2 is the sequence value 0xfffffffd. MAX-1 is 0xfffffffe. TRACEY examines “oldest coins first” only for transactions with 3 or more inputs, and only while Ledger is still possible. This examination needs one more request for each input. Trezor Suite and BitBoxApp make transactions in the same way. Thus, TRACEY always shows them together. Wasabi Wallet is in the list, but TRACEY never shows a Wasabi tag. Wasabi intentionally makes its usual transactions look like usual network traffic: version 2, a random locktime that is usually 0, and no RBF signal. In a test on 1,500 recent transactions, a Wasabi tag matched 214 transactions. Almost all of them were the most usual type of transaction. Thus, the tag shows mostly other software. The CoinJoin rule still finds Wasabi CoinJoins. Coldcard is not in the list. It only signs transactions that other software makes (for example Sparrow or Electrum). Thus, its transactions show the fingerprint of that software. The rules for address reuse, OP_RETURN and Taproot spends come from the 2023 study by Misra. Exodus, Coinbase Wallet and Trust Wallet are not in the list. Their code is not public, and only data from 2023 is available.

Unusual fingerprints (orange tag)

TRACEY compares the transactions that do not agree with a known wallet. It uses the traits below. Each wallet (grouped by common ownership) gets a profile. The profile contains the traits that all of these transactions of the wallet have. Two or more wallets get the same “fingerprint” tag when they have the same traits. The number of these traits must be equal to or more than the setting (default 9/9). TRACEY does not use CoinJoins.

TraitUsedHow TRACEY examines itReason / cost
Version 1yesthe transaction version is 1most wallets use version 2
Locktime 0yesthe transaction has no locktimefrequent, thus weak alone
RBF offyesthe sequence of each input is finalmost wallets signal RBF
BIP69 inputsyes, 3+ inputsinputs in the order of previous txid, then indexwith 2 inputs, the order is correct by chance in half of all transactions
BIP69 outputsyes, 3+ outputsoutputs in the order of amount, then scriptsame reason
Same whole-number fee rateyesthe fee rate is within 0.05 of a whole number, and the number is the samea fixed rate can show a fixed setting
Rare input typeyesall inputs are the same multisig type (for example 1-of-1), bare multisig or P2PKusual wallets do not make these
Change to a rare address typeyesTRACEY finds the change with the wallet-fingerprint change rules. It counts the change only if it goes to P2WSH, P2SH or P2PKHcommon types (P2WPKH, Taproot) are too frequent to show a pattern; the change rules can select the incorrect output
Close in timeyesthe two wallets have transactions within 6 blocks (approximately one hour)this can show one sender, not one software; it needs no more requests
Single-use input addressesno–needs one more request for each input
Inputs from exchange-type payoutsno–needs one request for each input; it shows the source of the money, not the software
The same fingerprint spends the change laterpartiallyonly if the change address is in the same wallet group–
Same payout amountno, intentionally–it is specific to one case and is not a fingerprint
Peel chain patternseparatesee Peel chain–

Limits

Profiles show the default settings of specific versions. Users can change settings, and wallets change their defaults. Wallets that are not in the list can look like a wallet in the list. The tag means “behaves like”, not “is”. In the study by Misra, one transaction identified its wallet in approximately half of the cases.

Sources: Ishaana Misra (2023): Wallet Fingerprints: Detection & Analysis · Misra: detection code · Bitcoin Core: spend.cpp · Electrum: wallet.py · Sparrow: Wallet.java · BlueWallet: abstract-hd-electrum-wallet.ts · Trezor Suite: sorting default · Ledger Live: buildTransaction.ts · Wasabi: LockTimeSelector.cs · Wasabi: TransactionFactory.cs · NBitcoin (used by Wasabi): TransactionBuilder.cs · BitBoxApp: maketx.go · Bitcoin Optech #410 (2026): RBF signaling as a fingerprint · Discrypt (2025): Wallet fingerprinting in Bitcoin

Peel chain (“show peel chain”)

In a peel chain, the owner spends a large coin again and again. Each transaction pays out (“peels off”) a smaller amount. It sends the larger remaining amount to a new address. The next transaction spends that address in the same way. Services that pay customers make peel chains. Persons who move money in steps also make them. Frequently, automatic software makes these transactions.

Rules

Limits

TRACEY finds only chains that the graph shows. Expand transactions to follow a chain farther. TRACEY assumes that the larger output is the remaining amount. This is usually correct, but not always. A person who makes many usual payments in a sequence from one coin looks the same.

Sources: Meiklejohn et al. (2013): A Fistful of Bitcoins (peeling chains) · Kappos et al. (2022): How to Peel a Million

Trace settings (not heuristics)

These settings control what the graph shows. They are limits. They are not guesses about the owner of an address.

Address / transaction IDLabelLabel source
iChangeTRACEY examines only transactions with exactly 2 outputs. The change output is the output that:
1. goes back to an input address. If no output does this:
2. is the only output with the same address type as the inputs. If no output does this:
3. is not round when the other output is a round amount.
If there is no clear result, TRACEY does not mark an output.
A grey dashed line shows a change output.
iCommon ownershipTRACEY counts addresses that pay into the same transaction as one wallet. The links connect: A+B and B+C make one wallet.
TRACEY does not use CoinJoins (mempool.space rules).
Each wallet in the graph that these rules apply to gets a tag and its own colour.
iCoinJoinmempool.space rules. All must be true:
1. a minimum of 5 inputs and 5 outputs
2. different input amounts + different output amounts are a maximum of half of all inputs + outputs
3. no output address occurs two times
4. no inscription or OP_RETURN
5. the ratio of inputs to outputs is between 1:5 and 5:1
A yellow cj badge shows a CoinJoin.
iBehavioral fingerprintA behavioral fingerprint shows that transactions probably come from the same wallet software or setup. It does not show the same person or the same wallet. Unusual fingerprints with rare custom setups can show the same service. Behavioral heuristics are the least reliable heuristics.

Known walletsAll known wallets have one colour. TRACEY removes each wallet whose default settings do not agree with the transaction. It compares the version, locktime, exact nSequence, signatures, order of inputs and outputs, change and address reuse. The list contains Bitcoin Core, Electrum, Sparrow, BlueWallet, Trezor Suite, BitBoxApp and Ledger Live. TRACEY compared each wallet with its current code (Nov 2026). The method comes from the 2023 study by Ishaana Misra. Trezor Suite and BitBoxApp look the same on the blockchain. TRACEY does not show a Wasabi Wallet tag, because Wasabi makes its transactions look like usual network traffic. Coldcard only signs, and it has no fingerprint of its own. If 3 or fewer wallets agree, the tag shows all of them.

Unusual fingerprintsThese are transactions that do not agree with a known wallet. 2 or more wallets get the same “fingerprint” tag when they have the same traits. The number of these traits must be equal to or more than the setting. There are 9 traits: version 1, locktime 0, RBF off, BIP69 inputs (3+), BIP69 outputs (3+), the same whole-number fee rate, the same multisig or other rare input type, change to the same rare address type (P2WSH, P2SH or P2PKH), and transactions within 6 blocks of each other. TRACEY does not use CoinJoins.
iPeel chainA peel chain is a sequence of transactions. Each transaction spends one coin and pays out (“peels off”) a smaller amount. It sends the larger remaining amount to a new address. The next transaction spends that address in the same way.
TRACEY marks 3 or more of these transactions in a sequence: 1 input, 2 outputs, and the next transaction spends the larger output.
Peel chains frequently come from automatic software. Services that pay out money make them. Persons who move money in steps also make them.
more information about heuristics

Type Bitcoin addresses or transaction IDs. You can also type labels. TRACEY traces each address in the list. For a transaction ID, TRACEY shows the addresses that paid into it and the sources of those coins (one hop back). It also traces each output forward. You can paste a list with one address on each line. After an address, you can add a comma and a label.

Type addresses above and click TRACE.