關于比特幣 Dust Limit

最初讓我關注到比特幣的 Dust Limit, 是因為比特幣銘文。按說比特幣銘文是和一個獨立的 Sat(聰) 關聯在一起的,為啥銘文的大小不是一個 Sat(聰) 而是不同的數量呢?最近再次關注到這個問題,是因為所參與的比特幣生態跨鏈橋項目,用戶要將一些銘文從比特幣二層提到他的一層比特幣 bc1p 地址時竟然提幣失敗了,因為那些銘文所在 UTXO 的值為 294,為什么?

0x01 什么是比特幣 Dust

比特幣 Dust 也經常被稱為比特幣粉塵。當比特幣 UTXO 所帶的值太小,以至于單獨花費這個 UTXO 所要花的礦工費比這個值還要大時,就可以稱這個 UTXO 為比特幣粉塵。這是個非?;\統的概念,因為礦工費隨著網絡擁堵情況時高時低,這里沒有明確多大的 UTXO 算是粉塵。
花費或產生 Dust UTXO 的交易稱為粉塵交易,除了正常找零,這些交易基本都可以認為是徒增節點負擔的無價值交易,大量的粉塵交易產生時很多時候就稱這個網絡受到了粉塵攻擊。

0x02 什么是比特幣 Dust Limit

比特幣網絡本身肯定都不希望有太多粉塵。于是就對 UTXO 的最小值加了一個限制,這個限制值就是比特幣 Dust Limit。當某一筆交易的 input/output 包含小于 Dust Limit 的 UTXO 時,節點回報錯并拒絕接收這筆交易。

Dust Limit 設為多少合理呢?

因為比特幣的礦工費都是由交易大小確定的,Dust Limit 的值也和交易大小有關,下面是計算 Dust Limit 的一個公式:

dust limit = (input_vsize + output_size) × dustRelayFee/1000

dustRelayFee 是比特幣節點可以設置的一個值,默認為 3000,所以上面的那個公式也可以變為

dust limit = (input_vsize + output_size) × 3

這里的 output_size 為一個 output 的大小,input_vsize 為消費這個 output 所需要的 input 的大小

因為不同比特幣地址類型所構造的交易的 input 和 output 大小不同,導致不同地址類型的 Dust Limit 也不同

  • P2PKH 地址 ('1' 開頭): 546
  • P2SH-P2WPKH 地址 ('3' 開頭): 540
  • P2WPKH 地址 ('bc1q' 開頭): 294
  • P2TR 地址 ('bc1p' 開頭): 330

0x03 比特幣 Dust Limit 要注意什么呢

首先,小于這個值的 UTXO 是花不出去的,這也是為什么銘文 UTXO 很多都是帶有 546 聰甚至更多聰 BTC 的原因
其次,這個值的大小是和地址類型相關聯的。怎么理解呢?比如我現在有個 294 聰的銘文在我的 bc1q 地址上,但你的地址是是 bc1p 開頭的 P2TR 地址,我是沒辦法把這個銘文直接轉給你的。你要準備一個 bc1q 的地址才好接收那個 294 聰大小的銘文。

0x04 總結

  1. 要記住不同地址類型的 Dust Limit, 也就是最小 UTXO 大小的限制。
  2. 接收銘文用 bc1q 開頭的地址是最保險的,可以接收任意大小的銘文
  3. 鑄造銘文的時候 546 聰大小的 UTXO 兼容性最好,任何地址類型都可以支持。
  4. 還補充一點兒,OP_RETURN 指令可以打破這個限制,這個有空再聊。
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容