vByte,缩写为 vB,是比特币交易虚拟大小的单位。交易的不同数据部分按不同权重计入大小。钱包用它计算手续费:交易越大,或者选择的费率越高,总手续费就越高。
安娜想发送 Bitcoin,钱包给出的费率是 2 sat/vB。sat 表示聪,是比特币的最小单位;vB 表示交易的虚拟大小。如果完成后的交易大小是 127 vB,按这个费率计算,手续费就是 254 sat。费率,也称 Fee Rate,并不是整笔转账的总费用。这个例子是在解释计算方法,并非建议在当前网络使用这个费率。支付手续费本身也不能保证交易在某个具体时间得到确认。 [3] [5] [7]
钱包并不是把余额当成一个数字直接花掉。它使用的是以前收到、尚未花费的交易输出,称为 UTXO。每使用一个这样的输出,就会增加一个交易输入;通常还会产生一个输出,把找零送回自己的钱包。因此,合并许多小额收款,可能比从一笔收款中支付更大的金额需要更多数据。手续费等于输入金额总和减去输出金额总和。数字签名用于证明有权花费选中的资金。生成签名前,钱包只能估算大小;实际费率由最终手续费和最终大小决定。 [6] [7]
字节是衡量数据大小的常用单位。但计算比特币交易手续费时,不能把所有字节都按相同权重计算。SegWit 将部分证明有权花费资金的数据单独放置,其中包括签名。这部分叫作 witness。计算交易权重时,基础数据的每个字节计为 4 WU,采用含 witness 的格式而增加的每个字节则计为 1 WU。WU 是权重单位。该表示方式中的辅助字段 marker 和 flag 也享有同样的权重折扣。签名仍然需要验证:权重较低不代表可以跳过检查。 [1] [2]
序列化就是把交易写成格式明确的字节序列,使计算机能够传输和读取。用 B 表示不含 witness 的大小,T 表示完整序列化大小。BIP 141 将权重定义为 W = 3 × B + T。基础数据本来已经包含在 T 中,因此这个公式把基础数据计了四次,而新增的 witness 数据只计一次。它衡量的既不是付款金额,也不是处理器运行时间。 [1]
虚拟大小是权重除以 4,再向上取整:vsize = ceil(W / 4)。ceil 的意思就是向上取整。因此,权重为 401 WU 的交易,虚拟大小是 101 vB。取整针对的是整笔交易。如果先对每个输入单独取整再相加,得到的结果不一定相同。 [1]
假设 B = 100,T = 208 字节。代入公式,得到 W = 508 WU,vsize = 127 vB,这正是开头手续费例子中的大小。但完整交易并没有神奇地缩小:传输完整序列化数据时,仍然需要 208 字节。虚拟大小是处理容量和手续费时使用的加权尺度,而不是文件压缩。 [1] [5]
区块浏览器是用于查询特定网络上的交易和区块的应用。交易不含 witness 数据时,B = T,因此 W = 4 × T。此时,基本虚拟大小就等于完整交易的字节数。这也是区块浏览器的两个大小字段有时相同、有时不同的原因。对于 SegWit 交易,不能把所有传输字节直接除以四:不同权重适用于数据中的不同部分。 [1] [2]
节点是验证交易和区块、并与其他网络参与者通信的软件。Bitcoin Core v29.0 的部分运行策略使用调整后的大小 ceil(max(W, sigop_cost × bytes_per_sigop) / 4)。sigop_cost 表示签名操作的加权成本;bytes_per_sigop 是策略参数。max 取两者中的较大值。因此,验证负担异常高时,这些策略所采用的大小可能增加。这不会改变 BIP 141 定义的权重,也不改变区块有效性规则。这是所列版本的实现细节,并不是普通付款时必须多算的一道题。 [1] [4]
一笔付款可能花费另一笔尚未确认交易的输出。评估这种交易包时,可以用相关手续费总和除以相应虚拟大小的总和。直接求各笔费率的算术平均数会忽略大小差异。Bitcoin Core v29.0 还考虑本地优先级调整,并且不会重复计入已经在本节点等待区里的交易。较高的整体费率不能绕过其他所有规则,也不能保证交易包被接受或确认。 [4] [8]
发送前,把费率、总手续费和估算大小放在一起看。交易创建后,decoderawtransaction 可以显示实际的 size、vsize 和 weight 字段,分别对应字节数、虚拟大小和权重。普通付款不需要手算这些公式。还要区分一个相似的名称:CompactSize 是一种可变长度的整数编码。它不是 vByte 的别名,也不是缩小交易的方法。 [5] [6]
要获得更完整的理解,请将本词条与以下词条结合阅读: Block Weight, Compact Blocks, Block Propagation, Initial Block Download, Bitcoin, SegWit. 反向关联还来自: Compact Blocks, Pruned Node, Block Weight, Package Relay.