- A+
费用狙击是一种理论攻击情形,矿工试图从将来的块(挑选手续费较高的交易)重写过去的块,实现“狙击”更高费用的交易,以最大限度地提高盈利能力。
例如,假设存在的最高块是块#100,000。如果不是试图把#100,001号的矿区扩大到区块链,那么一些矿工们会试图重新挖矿#100,000。这些矿工可以选择在候选块#100,000中包括任何有效的交易(尚未开采)。他们不必使用相同的交易来恢复块。事实上,他们有动力选择最有利可图(最高每kBB)的交易来包含在其中。它们可以包括处于“旧”块#100,000中的任何交易,以及来自当前内存池的任何交易。当他们重新创建块#100,000时,他们本质上可以将交易从“现在”提取到重写的“过去”中。
今天,这种袭击并不是非常有利可图,因为回报奖励(因为包括一定数量的比特币奖励)远远高于每个区块的总费用。但在未来的某个时候,交易费将是奖励的大部分(甚至是奖励的整体)。那时候这种情况变得不可避免了。
为了防止“费用狙击”,当Bitcoin Core /钱包 创建交易时,默认情况下,它使用nLocktime将它们限制为“下一个块”。在我们的环境中,Bitcoin Core /钱包将在任何创建的交易上将nLocktime设置为100,001。在正常情况下,这个nLocktime没有任何效果 - 交易只能包含在#100,001块中,这是下一个区块。 但是在区块链分叉攻击的情况下,由于所有这些交易都将被时间锁阻止在#100,001,所以矿工们无法从筹码中提取高额交易。他们只能在当时有效的任何交易中重新挖矿#100,000,这导致实质上不会获得新的费用。 为了实现这一点,Bitcoin Core/钱包将所有新交易的nLocktime设置为<current block #+ 1>,并将所有输入上的nSequence设置为0xFFFFFFFE以启用nLocktime。