I've seen the term "dust" used to describe small transactions that might be considered as spam by the Bitcoin network. Is there is a generally accepted definition of this term?
The definition of dust is client-specific and not a network rule.
Bitcoin Core considers a transaction output to be dust, when its value is lower than the cost of spending it at the
dustRelayFee rate. The default value for
dustRelayFee is 3,000 sat/kvB¹, which results in the same dust values as the prior dust definition used before Bitcoin Core 0.15.0. The previous dust definition tied the dust limit to the minRelayTxFee rate and the spending cost of an output exceeding 1/3 of its value.
At the default
dustRelayFee of 3,000 sat/kvB, given the size of a P2PKH input being 148 bytes and the size of a P2PKH output being 34 bytes, P2PKH outputs worth less than 546 satoshis are considered dust by Bitcoin Core (546 satoshi being the smallest non-dust value). For P2WPKH outputs, Bitcoin Core considers outputs worth less than 294 satoshis² dust. Since the input sizes of scripthash and taproot outputs are unknowable, Bitcoin Core combines their actual output sizes with the input sizes of the corresponding keyhash types for dust thresholds of 540 satoshis for P2SH, and 330 satoshis for P2WSH and P2TR.
dustRelayFee can be set with the hidden command line option
Additionally, Bitcoin Core 0.15.0 added a
discard_rate matches the longest target fee rate estimate (currently the 1,000 block fee rate estimate), but is bounded to be between at least
dustRelayFee and at most 10,000 satoshi/kvB. Any change output that would be dust at the
discard_rate, i.e. would cost more to spend than its value at the
discard_rate, will automatically be dropped to the fee instead of being created as a change output.
Other uses of "dust"
Note that the term "dust" is also colloquially used to refer to any UTXOs of vanishingly low value and for UTXOs that are uneconomic to create or spend at the current feerate. I prefer to use the term "sand" for small but spendable UTXOs.
¹ The transaction size was measured in bytes before segwit. Since segwit, the relevant measure is transaction weight which is either given in virtualbytes (vbyte, vB) or weight units (wu) where 4 wu = 1 vB. For non-segwit transactions, their size is equal to their virtualsize: 1 B = 1 vB. For segwit transactions, their virtualsize is smaller or equal to their size. You can read more about these units on Is there a difference between bytes and virtual bytes (vbytes)?.
² The attentive reader might expect the dust limit for P2WPKH outputs to be 297 satoshis as P2WPKH outputs are 31 bytes and P2WPKH inputs are about 68 vbytes, but it appears that when the dust limit for P2WPKH outputs was implemented, the code contained a rounding error in the vsize of the input that caused it to be assumed one vbyte smaller than it actually is. (Hat tip to Crypt-iQ for pointing this out.)
I'm not sure there is an exact definition of dust. The Armory client wiki says:
Sending less than 0.01 BTC to any recipient — The network considers these small outputs to be “dust,” and discourages them by requiring a fee. If it was not discouraged, someone could take 1.0 BTC, and create 1,000,000 transactions of 0.000001 BTC each, for free, which would clog the network. So, that's one definition of dust.
Another definition of dust is the new 5.46uBTC minimum output size that is being added to 0.8.2.
This pull defines 'uneconomic dust' as 5.46 uBTC (546 satoshis, about $0.007 at current prices), and treats any transaction with outputs less than 546 satoshis as non-standard (won't be relayed, won't be mined). 546 satoshis is derived from the cost (in fees) to spend a TxOut/TxIn.
I don't think the definition of dust fundamentally changes the gist of the answer though.
In general, the exact definition of dust, and the threshold for what is considered dust may change over time with the transaction volume (and therefore competition for space in the blockchain) and exchange rates.
To understand 'dust' you must understand a few things:
Firstly, a UTXO is an unspent transaction output. This is essentially a piece of bitcoin somewhere on the blockchain that is unspent.
To create a transaction, 1 or more UTXOs are used to form the inputs, and 1 or more UTXOs are "born" in the process. After the transactions are confirmed, the UTXOs that formed the inputs are now just "TXOs" (ie. they've been spent).
To ensure a transaction is confirmed, a fee must be added, that fee is proportional to the overall size of the transaction, which is the number of bytes the transaction takes up on the blockchain. The more UTXOs are used as inputs, the bigger the transaction will be, thus the higher the fee that needs to be paid.
If I have 1 BTC stored in 1 UTXO, it will cost me less to send that than 1 BTC spread across 10 UTXOs of 0.1 BTC, and it will cost me less to send that than 100 UTXOs of 0.01 BTC.
The fees are calculated as satoshis per byte, and the fees fluctuate depending on how busy the network is.
Every UTXO you want to use in a transaction will incur an increase in fee.
Every UTXO takes up a number of bytes in the transaction.
If you multiply fee per byte by the number of bytes taken by the UTXO and it exceeds the value held in the UTXO, then this UTXO is said to be 'dust'.
So a 'dust' UTXO is a UTXO that isn't worth including in a transaction because to do so would incur a fee increase higher than the value of the UTXO.
Comment definition of dust from the actual Bitcoin repo on Github found on file policy.cpp:
// "Dust" is defined in terms of dustRelayFee, // which has units satoshis-per-kilobyte. // If you'd pay more in fees than the value of the output // to spend something, then we consider it dust. // A typical spendable non-segwit txout is 34 bytes big, and will // need a CTxIn of at least 148 bytes to spend: // so dust is a spendable txout less than // 182*dustRelayFee/1000 (in satoshis). // 546 satoshis at the default rate of 3000 sat/kB. // A typical spendable segwit txout is 31 bytes big, and will // need a CTxIn of at least 67 bytes to spend: // so dust is a spendable txout less than // 98*dustRelayFee/1000 (in satoshis). // 294 satoshis at the default rate of 3000 sat/kB.
Dusty outputs are really small sized outputs from a transaction. Bitcoin transactions are 0 sum so what goes in must come out. When you make a transaction to send some money from your address to another address, any remainder gets sent to a change address that you'll be in control of. Now if that remainder is really small then it becomes "dusty." Then if you try to make another transaction with that dusty unspent output (UTXOs) miners will reject the transaction and it won't get confirmed, ergo the bitcoin won't move.
The bitcoin network depending on the version a miner is running has different definitions of what is considered dusty UTXOs. If this site is correct version of bitcoind running on nodes the bulk of the network is at 0.10 and 0.9.*.For 0.9.3 the dust limit is 546 satoshis. For version .10 I believe it is 546 and earlier versions of 0.9 I believe was higher at 10x around 5k satoshis.