什么是空块,空块会影响网络安全吗?

 2023-10-03 22:25:08发布 2023-10-03 22:25:34更新

在PoW网络中,矿工通过出块以及在区块链账本中添加有效交易来获利。只要不断有新币产出,矿工的奖励就分为两种:coinbase奖励(区块中产生的新币)以及验证交易的手续费。矿工偶尔也可能挖出空块,即仅包含coinbase奖励,但没有交易的块。

什么是空块

加密货币挖矿其实是一个计算打包的过程,矿工们首先需要进行算力竞争,谁先解出区块难题谁就先获得了记账权,获得记账权的矿工需要把用户广播出来的交易信息打包到这个区块中,随后放到区块链上传递下去。

而如果矿工获得记账权后,并不在区块中打包交易信息,我们就将其称作为空块。空块上不包含交易信息,只是矿工利用它来获得区块奖励。

这种情况下,由于不包含交易,所以也无法获得相应的交易矿工费/Gas费奖励,因此矿工只能获得最基础的爆块奖励。

空块示例

空块示例

为什么会存在空块

矿工挖一个空块投入的工作量与填满区块达到最大容量投入的工作量是一样的,空块的出现其实是协议层的区块传播问题。

比特币网络中,区块的传输需要时间。一个新块N发布了,所有的矿池开始检验新块,没有问题后,才会开始在此基础上构建新块n+1。

验证新块、构建新的账单需要时间(比如1M区块需要6秒传完),这个时间里,矿池巨大的算力是停摆的,而挖矿的竞争十分激烈,大型矿池不是争分夺秒,是争毫秒夺微秒,停摆会带来很大的损失。

合理的做法是利用区块传输的这段时间,继续寻找到下一个块。方法是,只要发现了新的区块发布,矿工可以在没有拿到块N完整数据时,只进行最简单的验证,先拿到区块N的哈希值,直接跟在后面继续HASH。

这样一下子把“验证新块、构建新的账单”的时间给抢了回来,矿池就有1%的概率(6秒/区块间隔600秒),在传输区块N的过程中又挖出了一个块N+1。

这种虽然概率比较小,但是矿工却面临一个问题:在块N还没有传完,不知道别人打包什么交易的情况下,此时虽然有大量交易正在他的队列中等待打包,却无法检查哪些已经在块N中。

如果块N+1打包这些交易,那极有可能打包到N块已打包的交易,就冲突了,N+1块会被抛弃,什么奖励都得不到。所以,矿工只能选择不放任何交易直接打空块。

可见,空块是因为两个块时间差太小导致的,是在上一个区块传输的过程中,恰好计算出了下一个nonce值(概率事件),一般不是恶意产生的。毕竟打包交易收点手续费不耗费额外的成本。

空块是否会威胁网络安全

比特币网络的整个重点在于处理交易。空块行为,经常被认为是刻意制造拥堵和从‘诚实’矿工那里窃取劳动果实,为网络创造的价值非常小。其实并非如此。

从网络拥堵方面而言,打空块本身就是一个小概率事件,即使出现了,这6秒内出的空块,时间极短,影响有限。因此刻意制造拥堵甚至威胁网络安全的言论被夸大了。

从去中心化方面而言,打包当前块N的矿池,已经知道哪些交易被包含在区块N中,因此可以立即开始下一个区块的挖掘工作。而其他矿工首先要下载这个区块,然后才进行新区块挖掘。

两者不是在同一时间竞争,出块N的矿池一直会存在先发优势,强者越强。空块可以很好的改变这种情况,从挖矿时间上可被视为限制了这种中心化的局面出现。

怎么解决空块问题

事实上,解决空块问题是有办法的,空块的核心是挖空块时,不敢打包交易,以防止这些交易在上一个区块中出现过。那就构造一些不可能出现在上一个区块上的交易就可以了。

比如自己找一些零散的UTXO来整合,比如和交易所合作,交易所使用IP到IP提供一些交易,这些交易不被广播,只可能出现在挖空块的矿池里,这样空块就不会“空”了。

推荐阅读