https://aaron67.cc/2020/10/28/bitcoin-sv-dust/
在第一屆“打點創新營”上,我分享了有關 546 的故事。
對 Bitcoin SV 交易的非 OP_RETURN 輸出,如果其金額小于 546 聰,則該交易是粉塵交易(dust),不會被網絡接受。
從 1.0.5 版本的節點開始,這個限制将變成 135 聰。
回顧
之前的文章中提到,交易輸出的 dust 門檻值由函數
GetDustThreshold
計算。
- https://github.com/bitcoin-sv/bitcoin-sv/blob/v0.2.1/src/policy/policy.cpp#L103
- https://github.com/bitcoin-sv/bitcoin-sv/blob/v0.2.1/src/primitives/transaction.h#L178

根據定義,如果花費一個 UTXO 時需要支付的手續費超過了這個 UTXO 面值的 1/3,那麼這個 UTXO 是 dust,生成該 UTXO 的交易不會被網絡接受。
請注意調用
IsDust
時的實參
dustRelayFee
,找一下變量定義。
- https://github.com/bitcoin-sv/bitcoin-sv/blob/v0.2.1/src/policy/policy.cpp#L158
- https://github.com/bitcoin-sv/bitcoin-sv/blob/v0.2.1/src/policy/policy.h#L83
花費一筆 P2PKH 的輸出需要 182 位元組,包括 148 位元組的輸入和 34 位元組的輸出。傳入的費率是
dustRelayFee
,由
DUST_RELAY_TX_FEE
的值初始化為 1 聰/位元組。是以最終計算出的 dust 門檻值是 546 聰。
dustThreshold = 3 * minRelayFee.GetFee(nSize) = 3 * int(1000 * 182 / 1000) = 546
現狀
創世紀更新調整了全網的預設交易費率。
- 預設的最小交易打包費率
降為 0.5 聰/位元組DEFAULT_BLOCK_MIN_TX_FEE
- 預設的最小交易傳播費率
降為 0.25 聰/位元組DEFAULT_MIN_RELAY_TX_FEE
但
DUST_RELAY_TX_FEE
當時并未調整,仍為 1 聰/位元組。這會造成困擾,因為從函數定義和變量命名來看,dust 門檻值跟最小交易傳播費率有關。
檢視 1.0.5 版本的送出記錄,能找到今年 5 月的一次更新。
新代碼并未修改 dust 的計算邏輯,隻是将
DUST_RELAY_TX_FEE
調整為 0.25 聰/位元組,與預設的最小交易傳播費率保持一緻。
- https://github.com/bitcoin-sv/bitcoin-sv/blob/v1.0.5/src/policy/policy.cpp#L166
- https://github.com/bitcoin-sv/bitcoin-sv/blob/v1.0.5/src/policy/policy.cpp#L252
- https://github.com/bitcoin-sv/bitcoin-sv/blob/v1.0.5/src/policy/policy.h#L107
- https://github.com/bitcoin-sv/bitcoin-sv/blob/v1.0.5/src/primitives/transaction.h#L188
是以從 1.0.5 版本開始,dust 将降為 135 聰。
dustThreshold = 3 * minRelayFee.GetFee(nSize) = 3 * int(250 * 182 / 1000) = 135
驗證
構造交易包含一個 135 聰的輸出,在 WoC 上可以廣播成功。
構造交易包含一個 134 聰的輸出,廣播失敗。
原始交易為
0100000001477a5b512c95704c0a8d652b2bce4e4b170bbf2a53d59543e22489d640914f8e000000006a473044022007cda4515046d56836dd704ddc5b9ef766a4a648aa09d90916ad6872421e0d8d022072424611f754b362d1af04e60b7302e89c88ff6c14a72654125d52cc6573221541210272da37fa8c7873db2e57ade507525737f8f67ba3e7a61c7667e27a4cd9c743c7feffffff0286000000000000001976a9144b267d063a80f3e4ae65149c7c80107a5d4f3ce688ac42110000000000001976a914570abc2c148eefccd119fbb2eccf82c3e55280e088ac640c0a00
驗證結果符合預期。