术语表 /挖矿与共识
区块权重
- 区块权重是什么?
- 区块权重是衡量比特币区块大小的一种尺度:1个字节的见证数据计1个单位,其他每个字节计4个单位,上限为4,000,000个单位。
规定于 BIP-141。
之所以有权重,是因为对节点而言,并非所有字节的成本都相同。交易被充分确认后,签名数据可以丢弃,因此 BIP141 将其定价为其他数据的四分之一,并把每个区块的预算设为4,000,000个单位。您的提币要争用这份预算,而这一折扣正是从现代地址发送比从旧地址发送费用更低的原因。
运作方式
BIP141 中的公式为:权重等于基础大小乘以3,再加上总大小。基础大小是按旧方式序列化(剔除见证数据)的区块大小;总大小是完整序列化后的大小。换一种写法,同一规则表示为:每个非见证字节计4个单位,每个见证字节计1个单位,这个版本最值得记住。
将权重除以4并向上取整,就得到虚拟字节,这是所有手续费估算工具和所有钱包使用的单位。一笔花费2个输入、生成2个输出且全部为原生 SegWit 的付款,约为208虚拟字节,即约832权重单位。如果区块里只装这类交易,大约能容纳4,800笔。同样的付款若采用传统的 pay to public key hash 地址,约为374字节,权重为1,496单位,因为其中没有任何部分适用折扣,所以大约只能容纳2,670笔。
这一差距正是该设计的核心。对见证数据打折,使 SegWit 的采用得以自我回报:升级后的钱包每笔交易的手续费都更低,而无需说服任何人相信更大的区块是安全的。它还把行为引向网络所期望的方向,因为花费旧输出并将其合并为新输出,每个输入的成本比以前更低。
有两个细节容易让人困惑。权重按每笔交易计算后再求和,因此一个区块的权重是其各笔交易的权重之和,加上区块头和计数器,矿工打包区块时面对的是针对4,000,000个单位预算的背包问题,而不是字节数。此外,权重与价值无关:一笔900权重单位的交易,无论转移40个比特币还是40,000聪,支付的手续费都相同,因为网络按空间收费,从不按金额收费。
在哪里会遇到它
每个区块浏览器都会在大小旁边显示权重,Bitcoin Core 的 RPC 命令 getblock 会将 weight、size 和 strippedsize 作为三个独立字段返回。内存池可视化也以它为基础:显示等待确认交易的柱状条按费率(单位 sat/vB)堆叠,而 sat/vB 的分母就是权重除以4。
权重也是交易所在提币手续费中真正向您收取的对象。标出以比特币计价的固定手续费的平台,是在对其预计构建的交易权重取平均值,内存池空闲时获利,繁忙时亏损。采用批量处理的平台会把数十笔客户提币作为单笔交易的输出一并发送,只需为一组输入付费,而不是为数十组输入付费,因此批量处理的交易所能承受的手续费远低于逐笔广播每笔提币的交易所。
区块权重 vs 虚拟字节
区块权重是原始度量,虚拟字节是同一度量除以4。两者描述的是同样的数据,只是尺度不同。权重是写入共识规则的单位,因此4,000,000这一数字在代码中以权重形式出现。虚拟字节是写入钱包界面的单位,因为8 sat/vB 的费率比每权重单位2 sat 更便于理解。当钱包显示您的交易为141虚拟字节时,其所在区块的剩余空间就少了564个单位。