Skip to content

Wallet Fingerprinting

Different wallet software produces transactions with subtly different structural characteristics. By examining the raw transaction data, it is often possible to identify the wallet that created it - or at least narrow the possibilities significantly.

Research shows approximately 45% of Bitcoin transactions are identifiable by wallet software based on transaction structure alone.


What Gets Analyzed

nLockTime

The nLockTime field specifies the earliest block height (or timestamp) at which a transaction can be mined. Different wallets set this differently:

  • Bitcoin Core: Sets nLockTime to the current block height as an anti-fee-sniping measure. This is a strong fingerprint.
  • Electrum: Also sets nLockTime to the current block height (since version 3.x).
  • Most mobile wallets: Set nLockTime to 0.
  • Wasabi Wallet: Sets nLockTime to the current block height with occasional random offset.

nVersion

  • Version 1: Legacy default. Increasingly rare in modern transactions.
  • Version 2: Required for BIP68 relative timelocks. Used by wallets that enable RBF by default.

A version 1 transaction in recent years is itself a mild fingerprint, indicating older or deliberately conservative software.

nSequence Values

The sequence number on each input encodes RBF and timelock information:

  • 0xffffffff: Final. No RBF, no relative timelock. Common in legacy wallets.
  • 0xfffffffe: No RBF, no relative timelock, but transaction is not final (allows nLockTime). Used by wallets that set nLockTime for anti-fee-sniping but disable RBF.
  • 0xfffffffd: RBF opt-in (BIP125), no relative timelock. Bitcoin Core default since version 0.25.

Different wallets set different default nSequence values. Some always signal RBF, some never do, some let the user choose. This is a distinguishing signal.

BIP69 Lexicographic Ordering

BIP69 specifies a deterministic ordering of inputs and outputs based on lexicographic sorting. Electrum and some other wallets implement this.

Inputs sorted by: txid ascending, then vout ascending
Outputs sorted by: value ascending, then scriptPubKey ascending

BIP69 was intended to improve privacy by standardizing ordering, but because adoption is not universal, it ironically became a fingerprint for the wallets that implement it.

Low-R Signatures

Bitcoin Core since version 0.17 grinds the ECDSA nonce to produce signatures where the R value is in the lower half of the curve order. This produces 71-byte signatures instead of 72-byte, saving 1 byte per input.

This is a distinctive fingerprint - most other wallets do not implement low-R grinding.


Why Wallet Fingerprinting Matters

Wallet fingerprinting reduces the anonymity set. If an adversary can determine that a transaction was created by Bitcoin Core, they have eliminated all Electrum, Wasabi, mobile wallet, and hardware wallet users from consideration.

Combined with other metadata (geographic IP data, timing patterns, transaction amounts), wallet identification significantly aids deanonymization.


Common Wallet Fingerprints

Wallet Fingerprint Signals
Bitcoin Core nLockTime = block height, nVersion 2, nSequence 0xfffffffd, low-R signatures
Electrum nLockTime = block height, BIP69 ordering
Wasabi Wallet nVersion 1, nLockTime = 0 (distinctive pattern)
Samourai/Ashigaru Niche privacy wallet, small anonymity set
Sparrow Niche privacy wallet, small anonymity set
Most mobile wallets nLockTime = 0, nSequence 0xffffffff

How to Defend Against Wallet Fingerprinting

Use Bitcoin Core

Bitcoin Core has the largest anonymity set (~40% of the network). Being indistinguishable from the crowd is the goal.

Randomize Transaction Fields

Some wallets randomize nLockTime, nVersion, and nSequence values to avoid creating a consistent fingerprint.

Use Taproot

Taproot transactions have different witness structures that can obscure some fingerprinting signals.

Avoid BIP69

Use wallets that randomize input and output ordering rather than sorting them deterministically.


Behavioral Fingerprinting

Beyond structural signals, behavioral patterns also identify wallets:

  • Round fee rates: Wallets offering only discrete fee tiers ("low / medium / high") produce exact integer sat/vB rates
  • RBF signaling: Whether a wallet signals RBF by default narrows possibilities
  • Coin selection patterns: Value-ascending or value-descending ordering reveals algorithm choices
  • Witness data patterns: Mixed witness/non-witness inputs, varying stack depths

When 2 or more behavioral signals fire together, their combined fingerprinting power exceeds the sum of individual impacts. With 4+ signals, the wallet is highly identifiable, likely attributable to a specific software version.