Key takeaways
- Clustering groups addresses under one controller — the step that turns an address-level graph into an entity-level one. On TRON the Bitcoin workhorse for it, the co-spend heuristic, cannot run: every transaction carries exactly one signing account.
- Co-spend was strong because it rested on a protocol invariant — signing a multi-input spend requires every input's private key. Its TRON replacements rest on usage patterns, which can drift and can be faked.
- Four signals do the work on TRON: shared permission keys, funding/activation lineage, behavioral co-movement, and deposit-and-sweep structure. Deposit reuse is the closest heir to co-spend; co-movement is the softest.
- A cluster names an entity, never a person, and with no on-chain ground truth its error rate cannot be cleanly measured. Guard conditions and corroboration belong to the method itself.
An investigation rarely ends at one address. The wallet that received the funds is one node in a set — the operator’s other wallets, the burner that staged the transfer, the deposit address where proceeds cashed out. Address clustering is the discipline of finding that set: grouping the addresses that are likely controlled by a single entity, so the analysis can reason about the controller instead of each address in isolation.
On Bitcoin, one heuristic has carried most of this weight for over a decade. On TRON it cannot be used at all — not because it is weak here, but because the transaction structure it exploits does not exist. What replaces it is a toolkit of softer signals, each of which earns its place only if its false-positive mode is stated alongside it. This article walks that toolkit; it sits under the broader attribution guide at Who Controls a TRON Wallet?.
Clustering is the bridge from addresses to entities
The point of clustering is entity-level analysis. Victor’s FC 2020 paper — the origin of clustering work on account-model chains — states the goal plainly: to yield “entities that are likely in control of multiple addresses,” because entity identification “forms the basis for entity graph analysis.” Flow tracing, counterparty profiling, and exposure analysis all assume you can collapse an entity’s addresses into one node first.
Without that collapse, an operator splits activity across twenty addresses and each looks unremarkable. With it, the twenty addresses become one actor with a legible history. Everything downstream in an investigation inherits the quality of this step — which is why the false-positive rate of each clustering signal matters as much as the signal itself.
Bitcoin’s workhorse: the co-spend heuristic
The dominant clustering rule on Bitcoin is disarmingly simple. As formalized by Meiklejohn et al. in the 2013 “Fistful of Bitcoins” study: “If two (or more) addresses are inputs to the same transaction, they are controlled by the same user.” A Bitcoin transaction can gather coins from many addresses into one spend, and whoever built it had to sign for every input.
That signing requirement is what makes the heuristic strong. The paper’s own reasoning: “the sender in the transaction must know the private signing key belonging to each public key used as an input, so it is unlikely that the collection of public keys are controlled by multiple entities.” The link is not a behavioral guess — it is close to a protocol invariant. (Coordinated multi-party transactions, in which strangers deliberately share one transaction’s inputs, are the well-known exception; the technique post-dates the paper’s “quite safe” assessment.)
The heuristic is also transitive, which is where its power compounds. Meiklejohn et al. again: observe one transaction with inputs A and B, another with inputs B and C, “then we conclude that A, B, and C all belonged to the same user.” Chained across a whole blockchain, one rule collapses large populations of addresses into entities.
Why co-spend has nothing to grab on TRON
TRON is an account-model chain, and the account model removes the multi-input spend entirely. Victor states the consequence for the whole model family: a regular transaction “has one source and one destination account address,” and “existing address clustering heuristics based on multiple inputs or outputs cannot be used for transactions with single inputs and outputs.” His paper is about Ethereum, but the observation is structural — it holds for any account-model chain, TRON included.
The TRON protocol makes this concrete at the protobuf level. A TransferContract carries three fields: owner_address, to_address, amount. One sending account, one receiving account. There is no construct in which several distinct accounts contribute inputs to a single spend, so there is no transaction shape from which a co-spend link between accounts could ever be read.
TRON’s multi-signature support does not smuggle co-spend back in. Under the permission system, up to five keys can share an account’s owner permission and a weighted threshold decides when a signature set is sufficient — but those keys are jointly authorizing one account’s transaction. The owner_address on the wire is still a single account. Multiple keys behind one account is the inverse of co-spend’s shape, which was multiple accounts behind one spend.
The replacements — four signals, each with a false-positive bill
Every clustering signal that works on an account-model chain is behavioral. Victor says this of his own heuristics: they “are based on usage patterns that can be observed on the… ledger. This means they are not inherent to the protocol, so that their effectiveness could change over time.” Set that against Meiklejohn’s inherent-property claim for co-spend and you have the honest frame for everything below: the TRON toolkit is real and productive, and none of it carries co-spend’s near-cryptographic guarantee.
Shared permission keys
TRON’s permission system lets the same signing address hold authority over many accounts, and when one address appears in several accounts’ key lists, those accounts share an operator. This is the one clustering edge with no UTXO analog — a deliberate on-chain grant rather than an inferred pattern. The detector, its evidentiary tiers, and its failure modes are covered in Same-Permission-Key Detection; treat it here as one edge type in the cluster graph.
The false-positive bill: custodians and service operators legitimately hold keys across many customer accounts. A shared key proves a shared operator — it does not by itself prove a shared beneficial owner. That gap between operator and owner is the attribution ceiling this whole article closes on.
Funding and activation lineage
A TRON account does not exist on-chain until something activates it, and the activator leaves a signature. When activation happens by explicit AccountCreateContract, the transaction’s owner_address is the account that paid to bring the new account into existence — a hard on-chain edge from every account back to its creator. Chained, these edges form a lineage tree: one funder activating a fan of addresses is a classic single-operator shape. The activation mechanics live in Account Activation.
Here the false-positive rate is steep. Exchanges, on-ramps, and faucets routinely activate accounts on a user’s behalf, so the activator is often infrastructure — a candidate for ownership, never proof of it. Lineage clusters an account to whoever bankrolled its existence, and against beneficial ownership that read fails constantly. It also mixes two questions worth keeping apart — where an account came from versus who runs it now — a distinction developed in One Wallet, Two Answers.
Behavioral co-movement
Addresses that act in lockstep — transacting in synchronized bursts, holding matching transaction tempo, staking and unstaking resources in coordinated windows — can be grouped as likely co-operated. On TRON, coordinated delegation and undelegation timing is a distinctive version of this, since resource management produces its own visible rhythm; the underlying mechanics are in The Resource-Delegation Trail. Co-movement is genuinely useful for surfacing candidate sets, sybil farms especially, because coordination at scale is hard to fully randomize.
It is also the softest signal in the toolkit, and should be ranked last. It has no protocol anchor at all — no key, no creation edge, only correlation — and shared infrastructure manufactures correlation between strangers: energy marketplaces serving many customers on one schedule, batch payout tooling, common bot frameworks. Co-movement nominates a cluster; some harder edge has to confirm it.
Deposit-and-sweep structure
Exchange deposit addresses give the account model its nearest thing to a co-spend join. Exchanges issue deposit addresses per customer, so — in Victor’s formulation — “multiple addresses that send funds to the same deposit address are highly likely to be controlled by the same entity.” Comparing his account-model heuristics empirically, he concludes “the deposit address heuristic is currently the most effective approach.” The identifying fingerprint is structural: a deposit address forwards what it receives to the exchange’s main wallet, typically slightly less than it received, since the sweep pays transaction costs. The TRON-specific mechanics of that pattern are covered in Reading Exchange Deposit Addresses on TRON.
The false-positive mode is documented by the heuristic’s own author. Victor’s limitations analysis plays the adversary: receive a transaction from an arbitrary address, promptly forward the same amount to a known exchange wallet, and your ordinary account now looks like a forwarding deposit address — poisoning any cluster built through it. His mitigations are the lesson: require that a candidate deposit address forwards to a single exchange, and bound the match with amount-difference and time-window thresholds. Account-model heuristics need guard conditions that co-spend never did.
The ceiling: a cluster is an entity, not a person
Run all four signals well and the output is still an entity — a controller inferred to stand behind a set of addresses — with an error rate you cannot measure. Victor is direct about this: heuristic clustering means “some addresses could be clustered incorrectly,” and “due to a lack of ground truth, quantifying the error rate is very difficult.” No registry exists against which a cluster can be checked.
Two consequences for practice. State each cluster edge with its signal type and its known false-positive mode, so a reviewer can weigh it — the standard From Finding to Evidence applies to cluster claims exactly as it does to any other finding. And treat “one controller” as the end of the clustering step, not the end of the question: whether that controller is an individual or a service handling thousands of customers is its own analysis, taken up in Person or Service?.
Clustering on TRON, done honestly, is an exercise in weighing edges rather than applying a rule. Co-spend gave Bitcoin analysts one near-invariant they could chain mechanically; the account model gives TRON analysts four behavioral signals of unequal strength, each with its own way to be wrong. The method is to build the cluster from the hard edges — permission keys first, deposit structure second — let lineage and co-movement extend it, and keep every edge’s failure mode attached to the conclusion it supports.
Sources
- Meiklejohn et al., “A Fistful of Bitcoins: Characterizing Payments Among Men with No Names” (ACM IMC 2013) — canonical formal statement of the co-spend (common-input) heuristic, its inherent-protocol-property justification, and its transitivity.
- Victor, “Address Clustering Heuristics for Ethereum” (Financial Cryptography and Data Security 2020, pre-proceedings) — origin paper for account-model clustering: why multi-input heuristics cannot run on single-source transactions, the deposit-address-reuse heuristic and its adversarial false positive, and the usage-pattern (non-invariant) caveat.
- TRON Protocol document (tronprotocol/protocol) — protobuf definition of
TransferContractshowing the singleowner_address/to_addresstransaction structure. - TRON Developer Hub — Transactions —
TransferContractparameter reference (owner address, to address, amount). - TRON Developer Hub — Multi-Signature (Account Permission Management) — permission model: keyed addresses, weights, thresholds, and key-count limits per account.
- java-tron documentation — Multi-Signatures — threshold mechanics confirming multi-key signing authorizes a single account’s transaction.
- TRON Developer Hub — Accounts — account activation requirement underpinning the funding/activation lineage signal.
- account_contract.proto — tronprotocol/protocol — the protocol definition of
AccountCreateContract(owner_address,account_address,type) — the message type this chapter names. Protocol-authoritative: a contract type is either declared incore/contract/or it does not exist. - balance_contract.proto — tronprotocol/protocol — the protocol definition of
TransferContract(owner_address,to_address,amount) — the message type this chapter names. Protocol-authoritative: a contract type is either declared incore/contract/or it does not exist.