Glossary

Dust Limit

The dust limit is the minimum UTXO value in Bitcoin below which a transaction output is rejected by nodes because it costs more to spend than it is worth.

Key Takeaways

  • The dust limit is a relay policy in Bitcoin Core that rejects transaction outputs worth less than the fee required to spend them. It is not a consensus rule: miners can still include dust outputs in blocks.
  • Dust thresholds vary by output type because of different spending costs: 546 sats for P2PKH, 294 sats for P2WPKH, and 330 sats for P2TR and P2WSH.
  • Dust outputs matter because they bloat the UTXO set permanently: no rational user would ever spend an output that costs more in fees than it holds, so it stays in every full node's memory indefinitely.

What Is the Dust Limit?

The dust limit is the minimum value a Bitcoin transaction output must carry for full nodes to accept and relay the transaction. An output is classified as "dust" when it holds fewer satoshis than the fee a user would need to pay to spend it. Because spending such an output would be economically irrational, nodes treat transactions that create dust outputs as non-standard and refuse to propagate them through the peer-to-peer network.

The concept was introduced in Bitcoin Core 0.8.2 (May 2013) through PR #2577 by Gavin Andresen. The original threshold was approximately 5,460 satoshis for P2PKH outputs, based on the default relay fee rate at the time. As relay fees decreased and new output types like SegWit and Taproot reduced spending costs, the thresholds dropped to the values used today.

How It Works

Bitcoin Core's GetDustThreshold() function in src/policy/policy.cpp determines whether an output qualifies as dust. The calculation combines the output's serialized size with the estimated cost of the input needed to spend it.

The Calculation

The function follows three steps:

  1. Compute the output's serialized size (8 bytes for the value field, 1 byte for the script length varint, plus the scriptPubKey bytes)
  2. Add the estimated input size required to spend it: 148 bytes for non-witness outputs, or 67 bytes for witness program outputs (which benefit from the witness discount)
  3. Multiply the total size by the dust relay fee rate (default: 3,000 sat/kvB) and divide by 1,000 to get the minimum value in satoshis

The 148-byte input estimate breaks down as: 32 bytes (previous txid) + 4 bytes (output index) + 1 byte (scriptSig length) + 107 bytes (signature and public key) + 4 bytes (nSequence). For witness outputs, the 107-byte witness data is divided by the witness scale factor of 4, yielding 26 bytes instead, for a total input estimate of 67 bytes.

// Simplified dust threshold calculation
function getDustThreshold(outputSize, isWitness, dustRelayFee = 3000) {
  const inputSize = isWitness
    ? 32 + 4 + 1 + Math.floor(107 / 4) + 4  // 67 bytes
    : 32 + 4 + 1 + 107 + 4;                  // 148 bytes
  const totalSize = outputSize + inputSize;
  return Math.floor(totalSize * dustRelayFee / 1000);
}

// P2PKH: outputSize=34, non-witness → (34+148) * 3 = 546
// P2WPKH: outputSize=31, witness   → (31+67)  * 3 = 294
// P2TR:   outputSize=43, witness   → (43+67)  * 3 = 330

Current Dust Thresholds by Output Type

The following thresholds apply at the default dust relay fee of 3,000 sat/kvB:

Output TypeOutput SizeInput SizeDust Threshold
P2PKH34 bytes148 bytes546 sats
P2SH32 bytes148 bytes540 sats
P2WPKH31 bytes67 bytes294 sats
P2WSH43 bytes67 bytes330 sats
P2TR (Taproot)43 bytes67 bytes330 sats

OP_RETURN outputs are provably unspendable, so their dust threshold is zero: they never enter the UTXO set.

Policy vs. Consensus

The dust limit is enforced at the mempool relay layer, not at the consensus layer. A block containing dust outputs is perfectly valid: every node will accept it. However, individual nodes refuse to relay transactions with dust outputs through the peer-to-peer network, making it difficult (though not impossible) for such transactions to reach miners.

Node operators can adjust the threshold via the -dustrelayfee configuration option, introduced in Bitcoin Core 0.14 (January 2017) through PR #9380. This separated the dust fee rate from -minrelaytxfee, preventing unintended changes to the dust threshold when operators adjusted their relay fee policy.

Why the Dust Limit Matters

Every unspent transaction output in Bitcoin must be tracked by every full node in memory. The UTXO set is one of the most resource-intensive data structures a node maintains: it must be accessed on every transaction validation. Dust outputs that nobody would ever rationally spend become permanent residents of this set, growing the storage and memory burden on every participant in the network.

Without a dust limit, an attacker could cheaply pollute the UTXO set with millions of 1-satoshi outputs. Each output occupies space in every node's database indefinitely, effectively imposing an ongoing cost on the entire network for a one-time transaction fee. The dust limit ensures that every output created is at least theoretically worth spending, giving it a path to eventual removal from the UTXO set.

For users managing their own UTXOs, the dust limit also serves as a practical guide. UTXO consolidation strategies should target outputs near the dust threshold during low-fee periods, before rising fees make them permanently uneconomical to spend. For a deeper look at practical UTXO management, see the Bitcoin UTXO management strategies research article.

Use Cases and Interactions

Dust Attacks

A dust attack sends tiny amounts of Bitcoin to many addresses to track spending patterns through chain analysis. The dust limit constrains these attacks by setting a floor on how cheaply attackers can create tracking outputs: each one must carry at least 294 to 546 satoshis depending on the address type. While not a complete defense, the dust limit raises the economic cost of large-scale dust-based surveillance.

Anchor Outputs and Ephemeral Dust

Anchor outputs in Lightning Network commitment transactions allow either party to fee-bump a force-close transaction via CPFP. These anchors are intentionally small: their purpose is to be spent immediately, not to store value.

Bitcoin Core 29.0 introduced ephemeral dust (PR #30239), which carves out a narrow exception to the dust rule: a transaction may contain a single dust output if the transaction pays zero fees, and the child transaction spending it must also consume the dust output. This ensures the dust never persists in the UTXO set. Ephemeral dust enables cleaner designs for Lightning anchor outputs, Ark connector outputs, and other protocols that require temporary low-value UTXOs.

Ordinals and Inscriptions

The Ordinals protocol assigns identity to individual satoshis, and inscriptions attach data to them. Each inscription-bearing UTXO must carry at least the dust threshold to be relayable. For P2TR outputs (the standard for inscriptions), that floor is 330 satoshis.

This creates tension: inscriptions generate large numbers of small UTXOs that may never be spent for their monetary value, effectively using the UTXO set as a data storage layer. The dust limit places a minimum economic cost on each inscription UTXO, but critics argue the threshold is too low to meaningfully deter UTXO set growth. Some community members have proposed elevating dust limits to consensus rules or introducing stricter per-transaction limits on dust-level outputs.

Layer 2 Protocols

Layer 2 systems like the Lightning Network and Spark interact with dust limits in their on-chain transactions. Lightning commitment transactions must ensure every output exceeds the dust threshold, which sets a minimum for HTLC values and channel reserves. Very small Lightning payments that would produce dust-level on-chain outputs are handled as "trimmed HTLCs": their value is added to the transaction fee rather than creating an unspendable output.

Spark avoids these constraints entirely by moving transaction processing off-chain, enabling transfers of any amount (including sub-satoshi values) without concern for on-chain dust thresholds.

Risks and Considerations

UTXO Set Growth

Even at current thresholds, the UTXO set contains millions of outputs that are uneconomical to spend at typical fee market rates. A 330-sat P2TR output requires a fee of at least 330 sats to spend (at 3 sat/vB), but during fee spikes the cost can be many times higher. Outputs created during low-fee periods may become permanently stranded as baseline fees rise over time.

Threshold Debates

The current dust thresholds reflect a compromise. Lower thresholds allow more granular on-chain transactions but risk accelerating UTXO set bloat. Higher thresholds protect node operators but limit the usefulness of small on-chain payments. Proposals to make dust limits dynamic (scaling with current fee rates) have been discussed but not adopted, partly because changing the threshold affects which transactions are considered standard and can break existing wallet software.

Privacy Implications

Outputs near the dust limit are difficult to spend privately. CoinJoin transactions and other privacy techniques require outputs large enough to cover fees and still produce useful change. Dust outputs in a wallet can also serve as tracking vectors if spent carelessly, linking otherwise unrelated addresses through the common-input heuristic.

This glossary entry is for informational purposes only and does not constitute financial or investment advice. Always do your own research before using any protocol or technology.