最初让我关注到比特币的 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 总结
- 要记住不同地址类型的 Dust Limit, 也就是最小 UTXO 大小的限制。
- 接收铭文用 bc1q 开头的地址是最保险的,可以接收任意大小的铭文
- 铸造铭文的时候 546 聪大小的 UTXO 兼容性最好,任何地址类型都可以支持。
- 还补充一点儿,OP_RETURN 指令可以打破这个限制,这个有空再聊。