费用抢夺是一种理论上的攻击场景,其中矿工试图重写过去的区块,从未来的区块“抢夺”高费用的交易,以最大化他们的盈利能力。
例如,假设现存最高的区块是第100,000号区块。如果一些矿工不是尝试挖掘第100,001号区块以延长链条,而是试图重新挖掘第100,000号区块。这些矿工可以选择在他们的候选区块#100,000中包括任何尚未被挖掘的有效交易。他们不必重新挖掘包含相同交易的区块。事实上,他们有动机选择在他们的区块中包含最赚钱的(每千字节最高费用)交易。他们可以包括任何在“旧”区块#100,000中的交易,以及当前内存池中的任何交易。实际上,他们在重新创建区块#100,000时可以将交易从“现在”拉到“过去”。
今天,这种攻击并不是非常有利可图,因为区块补贴远高于每个区块的总费用。但在将来的某个时候,交易费用将成为奖励的主要部分(甚至全部)。到那时,这种情况将不可避免地发生。
一些钱包通过创建具有锁定时间的交易来阻止费用抢夺,限制这些交易只能被包含在下一个区块或任何之后的区块中。在我们的情景中,我们的钱包会在它创建的任何交易上将锁定时间设置为100,001。在正常情况下,这个锁定时间没有任何效果——交易无论如何只能被包含在第100,001号区块中;它是下一个区块。
但在重新组织攻击下,矿工将无法从内存池中拉取高费用的交易,因为所有这些交易都将被时间锁定到第100,001号区块。他们只能重新挖掘第100,000号区块,使用当时有效的任何交易,实际上没有获得新的费用。
这并不能完全阻止费用抢夺,但它确实在某些情况下降低了其盈利能力,并有助于在区块补贴减少时保持比特币网络的稳定性。我们建议所有钱包在不影响锁定时间字段的其他用途时,实施反费用抢夺功能。
随着比特币不断成熟,以及补贴持续下降,费用对比特币用户变得越来越重要,无论是在他们的日常使用中快速确认交易,还是为矿工提供继续用新的工作量证明保护比特币交易的激励。