Block Weight 是 Bitcoin 衡量区块容量占用的方法。区块是一组加入共同历史记录的交易,其中不同部分的数据按不同权重计算。权重有固定上限,但它并不规定交易笔数,也不衡量转移的比特币价值。
安娜发送了 Bitcoin,但下一个区块没有收录她的付款。这本身不代表钱丢了。尚未确认的交易可能还在 Mempool 中等待,也就是某个节点自己的待处理交易队列。节点是验证交易和区块、并与其他网络参与者通信的软件。矿工从中选择交易,组成容量有限的区块,也可以选择生成更小的区块。手续费是激励,不是要求矿工必须收录某笔付款的命令。Block Weight 解释的是这种选择的一项约束,而不是延迟的所有原因。 [1] [7]
上限是 4 000 000 WU,恰好等于这个值也允许。WU 表示权重单位。Full Node 是独立核对 Bitcoin 规则的节点,会拒绝超过上限的区块。再高的手续费也无济于事,有效的 Proof of Work 也不行;后者是挖出区块所需的计算工作证明。找到工作证明和构造符合规则的区块,两项条件必须同时满足。因此,容量并非由矿工的意愿单方面决定。 [1] [3] [4]
字节是衡量数据大小的常用单位。SegWit 分离出一部分证明花费权限的数据,例如签名。这部分叫作 witness。一个基础数据字节计为 4 WU,而包含 witness 的完整格式新增的一个字节计为 1 WU。新增表示中的辅助字段 marker 和 flag 也属于后一类。这样既保留交易的基础结构,也为验证数据提供空间,而不是让所有字节都按相同权重计入。 [1] [2]
签名用于证明发送者有权花费特定的币。具体花费条件由一个叫作脚本的小程序描述。witness 计入的权重较低,不代表验证节点可以忽略相应的签名或脚本条件。这些数据也仍然存在于完整表示中。这是一条计算容量占用的规则,并不表示处理器工作量、网络传输量和存储需求都会按相同比例下降。 [1] [4]
序列化就是把区块写成计算机之间交换的精确字节序列。用 B 表示不含 witness 的大小,用 T 表示完整大小。BIP 141 采用 W = 3 × B + T。基础数据已经包含在 T 中,因此合计被计算四次;witness 表示新增的数据计算一次。这个公式针对整个区块,而不只是其中的普通付款。 [1] [8]
假设 B = 500000、T = 2500000 字节,得到 W = 4000000 WU。另一种数据组合可以是 B = 750000、T = 1750000 字节,同样得到 W = 4000000 WU。这些是演算示例,并非对实际区块的测量。两个区块占用相同权重,但后者需要传输的字节更少。因此,“满块总是 4 MB”并不正确。满块包含的交易笔数也不是固定的。 [1]
区块不只是把用户付款拼在一起。它有一个 80 字节的区块头,其中包括对前一区块的引用和交易摘要。之后是使用 CompactSize 编码的交易数量;CompactSize 是一种变长整数编码。第一笔交易是 Coinbase Transaction,即矿工领取奖励的特殊交易,这里的名称不是指交易所。这些部分都参与计算。因此,只把其余交易的权重相加,还不是整个区块的权重。 [5] [7] [8]
钱包是接收和发送比特币的应用程序或设备。它通常使用以 vByte 为单位的交易虚拟大小。它等于整笔交易的权重除以 4,再向上取整,方便比较单位容量对应的手续费。但把这些已经取整的交易大小相加,并不能得到区块的精确权重:单位不同,各笔交易分别取整,而且还缺少区块本身的结构开销。转账金额很大,并不一定意味着交易数据很多。 [1] [8]
权重并不能描述节点的全部工作。按照相应规则,签名验证操作还有 80 000 个加权成本单位的上限。这并不是对区块中所有签名的简单计数。随 Taproot 引入的脚本语言 Tapscript 为每个输入设置单独预算;输入就是交易中花费此前收到的币的部分。其签名操作不计入上述较早的区块级上限。BIP 342 描述了这种不同的限制。因此,符合权重上限并不意味着验证工作可以任意复杂。 [1] [3] [9]
区块浏览器是用于查询特定网络上的交易和区块的应用。在 Bitcoin Core v29.0 中,getblock 返回的字段包括 size、strippedsize 和 weight,分别表示完整字节大小、不含 witness 的大小及权重。旁边可能还有 chainwork,它表示链累计的计算工作,而不是数据权重。普通用户应区分容量和价格:Block Weight 限制区块空间,一笔付款的实际手续费则取决于交易大小和所选费率。这些数值都不能单独承诺确认时间。 [6]
要获得更完整的理解,请将本词条与以下词条结合阅读: vByte, Witness Data, SegWit, 区块大小之争, Bitcoin, Full Node. 反向关联还来自: Signet, vByte, Witness Data, Ordinals Inscriptions.