比特币--交易块龄和优先级

比特币矿工节点会为内存交易池中所有未被确认的交易生成一个优先级,在选择打包进候选区块时会根据优先级选择交易。

如果区块中有足够的空间,高优先级的交易行为将不需要矿工费。一个区块大概能包含400多笔交易。

UTXO的“块龄”

块龄即包含该UTXO的交易所在的区块上链时,到现在最新块的距离,即深度。

区块高度是从创始区块开始到某区块的距离。

交易的优先级计算方式

优先级 = (UTXO的比特币钱数量 * UTXO的块龄) / 交易的总长度

1
2
3
4
Priority = Sum (Value of input * Input Age) / Transaction Size

//在这个等式中,交易输入的值是由比特币单位“聪”(1亿分之1个比特币)来表示的。
//交易记录的大小由字节来表示。

“较高优先级”交易需满足的条件

优先值大于57,600,000,相当于一个比特币(即1亿聪),年龄为一天(144个区块),交易的大小为250个字节:

1
High Priority > 100,000,000 satoshis * 144 blocks / 250 bytes = 57,600,000

选择交易顺序

  1. 区块中用来存储交易的前50K字节是保留给较高优先级交易的。矿工节点在填充这50K字节的时候,会优先考虑这些最高优先级的交易,不管它们是否包含了矿工费。这种机制使得高优先级交易即便是零矿工费,也可以优先被处理。

  2. 然后,矿工节点会选出那些包含有矿工费的交易,并按照“每千字节矿工费”(即矿工费除以交易字节大小)进行排序,优先选择矿工费高的交易来填充剩下的区块,区块大小上限为MAX_BLOCK_SIZE。

  3. 如区块中仍有剩余空间,矿工节点可以选择那些不含矿工费的交易。有些矿工会竭尽全力将那些不含矿工费的交易整合到区块中,而有些矿工也许会选择忽略这些交易。

  4. 在区块被填满后,内存池中的剩余交易会成为下一个区块的候选交易。因为这些交易还留在内存池中,所以随着新的区块被加到链上,这些交易输入时所引用UTXO的深度(即交易“块龄”)也会随着变大。由于交易的优先值取决于它交易输入的“块龄”,所以这个交易的优先值也就随之增长了。最后,一个零矿工费交易的优先值就有可能会满足高优先级的门槛,被免费地打包进区块。