Small UTXOs: separate relay dust from economic spendability
An unspent Bitcoin output can be valid and mature while contributing very little after the cost of spending it. A small output can also fall below a node’s relay-policy dust threshold without becoming nonexistent or intrinsically forbidden by consensus. Keep economic value, relay treatment and consensus eligibility in separate columns.
This worksheet values hypothetical marginal input costs for research. It does not recommend when to transact, combine outputs or choose a fee. The question is whether a reported inventory amount hides material transaction-size assumptions.
Fix the policy version before citing a threshold
The source examined here is Bitcoin Core v30.0 policy.cpp, GetDustThreshold and IsDust. It is a pinned historical implementation, not a statement that every node currently runs this version or configuration.
The file explicitly concerns local node policy. Its dust calculation uses output size, an estimated future input size and a dust-relay fee parameter. The comments illustrate 546 satoshis for a conventional non-witness output and 294 for the stated witness example at 3000 satoshis per kilobyte. These estimates must not be mistaken for an observed fee quote for spending a particular wallet today.
Record script type, policy version and configured dust parameter beside any threshold. A single universal label saying dust can conceal different reasons: relay policy, very small nominal value or an analyst’s chosen economic-cost assumption.
Define the marginal-cost calculation
Let V be output value in satoshis, s the assumed additional virtual bytes contributed by its input, and f the assumed fee rate in satoshis per virtual byte. Define the modeled contribution after marginal input fees as C = V − s × f.
This calculation excludes shared transaction overhead, new outputs and other inputs. It therefore is not an all-in amount guaranteed to reach a recipient. When allocating those additional costs, show them separately and explain the allocation rule. Changing that rule can change the contribution assigned to one small output.
Treat s as an explicit assumption. The 68 virtual bytes used below are stipulated for arithmetic; they are not a protocol constant for every witness input, signature, script path or wallet. A known spend template can support a more specific estimate, while unknown conditions require a range.
Hypothetical output contributions
Assume three ordinary unspent outputs of 250, 1000 and 10000 satoshis. For this example alone, each would add 68 virtual bytes. Compare fee assumptions of 5 and 20 satoshis per virtual byte.
| Output V | Input fee at 5 | Contribution at 5 | Input fee at 20 | Contribution at 20 |
|---|---|---|---|---|
| 250 sat | 340 sat | −90 sat | 1360 sat | −1110 sat |
| 1000 sat | 340 sat | 660 sat | 1360 sat | −360 sat |
| 10000 sat | 340 sat | 9660 sat | 1360 sat | 8640 sat |
The fees follow 68 × 5 = 340 and 68 × 20 = 1360. Negative contribution means that under the stated marginal model, adding that input costs more than its nominal value. It does not mean the blockchain records a negative output or that the owner owes the network the difference merely by holding it.
For the one-thousand-satoshi output, the modeled break-even rate is V/s = 1000/68, about 14.706 satoshis per virtual byte. This is a conditional arithmetic threshold. It is not a forecast of network fees, a recommended transaction time or a relay-policy parameter.
Compare the policy calculation separately
Use the source’s stated witness-policy illustration: output size 31 bytes plus estimated spend size 67 gives 98 bytes. At the specified dust-relay parameter, 98 × 3000/1000 = 294 satoshis.
This calculation intentionally differs from the worksheet’s assumed 68 additional virtual bytes. The policy considers a standardized output-and-spend size model; the economic column considers a hypothesized marginal input. Substituting one number for the other would erase the distinction being studied.
Under that policy illustration, a 1000-satoshi new output is above 294, yet its modeled contribution at 20 is negative. Passing the dust check does not establish low-cost economic availability. Conversely, an already confirmed small output does not disappear because a node would apply a dust restriction to relaying a transaction creating a similar new output.
Boundary case: the total transaction remains positive
Suppose a hypothetical transaction uses the 1000 and 10000 outputs together. Their face value totals 11000. At the assumed 20 rate, the two marginal input fees total 2 × 1360 = 2720, leaving 8280 before other costs.
The transaction-level contribution is positive even though the smaller input’s contribution is negative. Using only the 10000 input would have a modeled contribution of 8640 before the same excluded costs; the difference is 360. This comparison explains accounting attribution, not whether either transaction should be made.
If a mandatory transaction purpose requires the small input, or a different script path changes its size, the relevant research assumption changes. Do not infer the owner’s objective from a negative contribution in an analyst’s simplified table.
Check rounding at the scenario boundary. The break-even number above is rounded for display; treating 14.706 as an exact policy cutoff would add precision the model never supplied. When the input size is uncertain, calculate both endpoints of a defensible size interval and retain the assumption. A one-byte change can matter more for a small output than another decimal place in the fee display.
For example, if the assumed input size ranges from 66 to 70 virtual bytes, the one-thousand-satoshi output’s break-even rate ranges from approximately 15.152 to 14.286 satoshis per virtual byte. Preserve this conditional range rather than adding decimals to the 68-byte point estimate. A satoshis-per-kilobyte input also must not be used as satoshis per virtual byte.
Evidence to collect and triggers to revisit
| Item | Check | Consequence of missing evidence |
|---|---|---|
| Nominal inventory | Distinct outpoint, value and cutoff | No reliable starting amount |
| Consensus conditions | Maturity and known script restrictions | Eligible spend remains unresolved |
| Input-size assumption | Template or explicit hypothetical range | Report sensitivity, not one exact net value |
| Economic fee assumption | Unit, observation or scenario label | Do not present a scenario as a live quote |
| Relay policy | Version, script category and configuration | Avoid a network-wide dust assertion |
| Other transaction costs | Shared overhead and output allocation | Do not call marginal contribution net receipts |
Revisit the table after a script-path clarification, changed cost assumption or corrected outpoint list. Preserve nominal inventory alongside the conditional economic view. A useful research note explains why two otherwise correct balances differ in practical interpretation, without silently writing small outputs off the chain or treating every mature satoshi as equally inexpensive to access.
FAQ
Does a negative modeled contribution mean the output is invalid?
No. It reflects value minus assumed marginal input cost. Consensus validity requires a separate check of the actual spending conditions.
Is the v30.0 dust threshold the current fee to spend the output?
No. It is a historical policy calculation under specified parameters. A transaction’s cost depends on its actual structure and chosen fee conditions.