天天看點

Bitcoin SV 交易的粉塵限制回顧現狀驗證

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
Bitcoin SV 交易的粉塵限制回顧現狀驗證
Bitcoin SV 交易的粉塵限制回顧現狀驗證

根據定義,如果花費一個 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
Bitcoin SV 交易的粉塵限制回顧現狀驗證
Bitcoin SV 交易的粉塵限制回顧現狀驗證

花費一筆 P2PKH 的輸出需要 182 位元組,包括 148 位元組的輸入和 34 位元組的輸出。傳入的費率是

dustRelayFee

,由

DUST_RELAY_TX_FEE

的值初始化為 1 聰/位元組。是以最終計算出的 dust 門檻值是 546 聰。

dustThreshold = 3 * minRelayFee.GetFee(nSize) = 3 * int(1000 * 182 / 1000) = 546
           

現狀

創世紀更新調整了全網的預設交易費率。

  • 預設的最小交易打包費率

    DEFAULT_BLOCK_MIN_TX_FEE

    降為 0.5 聰/位元組
  • 預設的最小交易傳播費率

    DEFAULT_MIN_RELAY_TX_FEE

    降為 0.25 聰/位元組

DUST_RELAY_TX_FEE

當時并未調整,仍為 1 聰/位元組。這會造成困擾,因為從函數定義和變量命名來看,dust 門檻值跟最小交易傳播費率有關。

Bitcoin SV 交易的粉塵限制回顧現狀驗證

檢視 1.0.5 版本的送出記錄,能找到今年 5 月的一次更新。

Bitcoin SV 交易的粉塵限制回顧現狀驗證

新代碼并未修改 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
Bitcoin SV 交易的粉塵限制回顧現狀驗證
Bitcoin SV 交易的粉塵限制回顧現狀驗證
Bitcoin SV 交易的粉塵限制回顧現狀驗證
Bitcoin SV 交易的粉塵限制回顧現狀驗證

是以從 1.0.5 版本開始,dust 将降為 135 聰。

dustThreshold = 3 * minRelayFee.GetFee(nSize) = 3 * int(250 * 182 / 1000) = 135
           

驗證

構造交易包含一個 135 聰的輸出,在 WoC 上可以廣播成功。

Bitcoin SV 交易的粉塵限制回顧現狀驗證

構造交易包含一個 134 聰的輸出,廣播失敗。

Bitcoin SV 交易的粉塵限制回顧現狀驗證

原始交易為

0100000001477a5b512c95704c0a8d652b2bce4e4b170bbf2a53d59543e22489d640914f8e000000006a473044022007cda4515046d56836dd704ddc5b9ef766a4a648aa09d90916ad6872421e0d8d022072424611f754b362d1af04e60b7302e89c88ff6c14a72654125d52cc6573221541210272da37fa8c7873db2e57ade507525737f8f67ba3e7a61c7667e27a4cd9c743c7feffffff0286000000000000001976a9144b267d063a80f3e4ae65149c7c80107a5d4f3ce688ac42110000000000001976a914570abc2c148eefccd119fbb2eccf82c3e55280e088ac640c0a00
           

驗證結果符合預期。

繼續閱讀