Privacy Score
The Privacy Score says in one number how easy a wallet is to follow, or to tie to other wallets and to a person. 100 means nothing the scan can see links the wallet to anything. 0 means it is fully exposed.
The formula is the same for every wallet. The tables and the worked example on this page are read from the engine’s source when the docs are built (rules 1.3.0), so they always match what the scan does.
The formula
Section titled “The formula”Every wallet starts at 100. Each finding costs its severity’s points, scaled by its confidence. Within one detector the costliest finding counts first, and once the detector reaches its cap the rest cost nothing. The score is what is left, and it never goes below 0. A wallet with a public name has a lower ceiling.
cost of a finding = round(severity points × confidence) cost of a detector = min(cap, sum of its findings' costs, costliest first) score = max(0, 100 - sum of all detector costs) with a public name score = min(score, 34)
Named-wallet ceiling. A wallet with a public name is identified: anyone can see who it is. When public_identity.ens_reverse or public_identity.public_label fires at confidence 0.9 or more, the score is never above 34, the top of the exposed band, whatever else the scan finds. The naming finding then takes the extra points itself, so the costs still add up exactly.
Severity points
Section titled “Severity points”| Severity | Points at confidence 1.0 | At confidence 0.6 |
|---|---|---|
| info | 0 | 0 |
| low | 4 | 2 |
| medium | 8 | 5 |
| high | 14 | 8 |
| critical | 22 | 13 |
A high finding at confidence 0.5 costs half of what it costs at 1.0.
Caps per detector
Section titled “Caps per detector”| Finding | Detector | Cap |
|---|---|---|
| ENS and public identity | public_identity | 30 |
| Linked wallets | linked_wallets | 25 |
| Funding source reuse | funding_reuse | 20 |
| CEX exposure | cex_exposure | 20 |
| Cross-chain traceability | cross_chain | 12 |
| Behavioral fingerprint | behavioral_fingerprint | 12 |
| Recurring counterparties | recurring_counterparties | 10 |
The caps add up to more than 100 on purpose: a wallet that leaks in every way at once can reach 0. When that happens, the cheapest findings are trimmed first, so the costs still add up.
Score bands
Section titled “Score bands”| Score | Band | What it means |
|---|---|---|
| 80 to 100 | private | Little on chain ties this wallet to anything else. |
| 60 to 79 | moderate | Some links exist. A patient observer could follow them. |
| 35 to 59 | traceable | Several strong links. Most analytics tools would connect this wallet. |
| 0 to 34 | exposed | This wallet is easy to tie to other wallets or to a person. |
Worked example
Section titled “Worked example”A small synthetic wallet, run through the engine’s real detectors without network (the fixture
worked-example.json in the privacy-scan repository). On Ethereum and on Base, its first
transaction was paid with coins from one personal wallet that funded three other fresh wallets the
same day. It has back and forth transfers with one friend, it pays into an exchange deposit address
that one other wallet also uses, and it sent a fresh wallet its first funds.
| Finding | Severity | Confidence | Points | Counted |
|---|---|---|---|---|
cex_exposure.deposit_address | critical (22) | 0.80 | 18 | 18 |
funding_reuse.shared_funder | high (14) | 0.75 | 11 | 11 |
linked_wallets.shared_deposit | high (14) | 0.70 | 10 | 10 |
linked_wallets.back_and_forth | high (14) | 0.61 | 9 | 9 |
funding_reuse.same_funder_multichain | medium (8) | 0.85 | 7 | 7 |
linked_wallets.funded_by_you | high (14) | 0.60 | 8 | 6 |
recurring_counterparties.top | medium (8) | 0.61 | 5 | 5 |
cross_chain.multichain_presence | low (4) | 1.00 | 4 | 4 |
- Each finding costs its severity's points times its confidence, rounded: for example 22 × 0.80 = 17.6, rounded to 18.
linked_walletsfinds 10 + 9 + 8 = 27 points, more than its cap of 25. The costliest count first, sofunded_by_youcounts 6 of its 8.- The counted points add up to -70: the score is 100 - 70 = 30, band exposed.
The wallets it is linked to, each with its word and confidence:
- Likely 70%: same CEX deposit address
- Possible 61%: back and forth transfers
- Possible 60%: you sent its first funds
- Possible 56%: shared funder (3 wallets)
With a public name
Section titled “With a public name”The same formula, for a wallet with three findings, one of them a primary ENS name. Scored by the engine when the docs are built:
| Finding | Rule | Severity | Confidence | Points |
|---|---|---|---|---|
| The address shows a primary ENS name | public_identity.ens_reverse | critical | 1.0 | 22 |
| Its funder also paid 3 other wallets within 3 days | funding_reuse.shared_funder | high | 0.75 | 11 |
| 5 near-silent hours a day over 40 signed transactions | behavioral_fingerprint.timezone | low | 0.46 | 2 |
The points: 22 × 1.0, 14 × 0.75, 4 × 0.46, each rounded. No detector reaches its cap, so the formula gives 100 - 22 - 11 - 2 = 65.
But the wallet has a primary ENS name: anyone can see who it is. The named-wallet ceiling applies and the score is 34, exposed. The ENS finding takes the extra 31 points itself, so its cost shows as 53, and the costs still add up to 100 minus the score. Without the name, the same wallet scores 87, private.
Every point is accountable
Section titled “Every point is accountable”- Each finding in a result shows its cost after confidence, cap and ceiling. The costs add up exactly to 100 minus the score.
- The result shows the points lost per detector, which detectors hit their cap, and whether the named-wallet ceiling applied.
- The rules, the formula and a test suite are public under the MIT license in the
privacy-scanrepository. Every result names the rules version it was scored with.
What changes the score
Section titled “What changes the score”- New activity. A new transaction can create a new pattern.
- Coverage. A chain that failed or was cut off at the read limit may hide findings. The result shows coverage per chain next to the score.
- New rules. A change to the rules gets a new rules version, published in the repository.