所谓区块链空数据区块, 其实就是指在链上存在的一种并不包含任何交易载荷的区块, 这种区块内部仅仅保留着区块头、难度目标、高度以及少量元信息这一些内容, 许多开发者在进行链路排查工作过程里, 一旦发现连续出现空块现象就会立刻认定是节点出现了故障或者是共识机制产生了分叉情况, 然而事实上这种情况根本不属于异常状态, 而是协议层级提前就已经设计完毕并且属于完全正常的出块运行行为。
区块链空数据区块怎么来的
当节点在出块窗口之内, 没有收到任何有待打包的交易的时候, 内存池是空的。在这种情况下, 矿工或者是验证者, 就只能够生成一个空数据区块。比特币和以太坊在二零一八年前后的低活跃时期, 一天当中能生产出几十个或者上百个空块。这样的情况属于常规现象, 是不需要当作异常来处理的。
还有一种导致这种情况产生的原因, 是网络出现了分叉现象情况。当区块模板构建完毕之后, 由于存在传播延迟问题, 那些原本候选的交易, 已经被其他区块打包好了, 并且上传到了链上。
在本节点执行重新出块操作时候, 交易内存池已经清空了没有了可用数据, 最终产出的也是一个空块。在进行回滚操作之后, 系统会继续处于等待状态, 以便接住下一批到来的交易。
区块链空数据区块有啥用
空块的最主要意义, 就是让共识形成的节奏,和实际发生的交易量, 这两者之间保持一种互相不挂钩的状态, 也就是所谓的解耦行为。出块的间隔这个规定, 是被协议固定写死在里面的, 这种情况完全不会因为有没有新的交易发生而改变, 哪怕一点交易都没有, 那个计时器也照样继续走自己的程序去。

要是真允许大家跳过空块那类操作, 整个区块链网络用来标记时间的那个基准点, 还有专门调整计算复杂度的那些时间节点, 都会全部失去准确性, 接下来在多个区块中选择最终版本的那些环节, 也会跟着陷入一片混乱之中。
在工程这个方面, 如果那些数据区块里面根本就没有任何数据的话, 那么这种空数据区块的体积也就仅仅只有几十字节那么大而已, 所以当轻节点进行全量同步操作的时候, 带宽占用情况几乎是零, 我这边所维护的一个测试网曾经不间断地出现过四百多个这样的空块, 从而导致节点的日志文件的大小反而比存在交易高峰期那个时候还要小上一半, 进而使得磁盘的压力一下子降低了。
所以当您看到有空块的时候, 请不要急忙地拉响报警。因为整个链路上的时钟并没有停止转动, 仅仅是由于在那一个格子里面没有人投递包裹而已。
转载请注明出处:imtoken,如有疑问,请联系()。
本文地址:https://zmdyd.cn/zbimqbxz/10598.html
