移除区块头,能优化网络吗?| 三分钟入门Neo3

「状态根」系列已正式完结。今天的「三分钟入门Neo3」将开启「区块同步」系列,深入「网络优化」主题,介绍 Neo3 中优化区块同步的实施思路。

区块同步
区块同步是指全节点从区块链网络中请求并接收区块数据的过程。由于全节点只有在完全同步后才能验证并与网络进行交互,因此这种机制往往能够决定全节点运行方对该链的初体验。
与大多数区块链一样,当前 Neo 网络上的节点使用区块头优先的方法同步新区块。即在请求任何区块数据之前,节点可以通过共享区块头信息获取关于所请求区块的同一页信息。区块头存储着有用信息,如版本信息、区块索引、上一个区块的哈希以及共识节点公钥信息等。
区块头优先同步模式
通常,大多数区块链网络都依赖于工作量证明机制(PoW)或者权益证明机制(PoS)。该机制在任何时候都可能发生区块链的多个版本(即分叉)。判断哪一条分叉链是正确的或者真实的,通常取决于区块的高度——最长链胜利原则。
区块头优先同步模式对这些可能分叉的区块链上节点是非常有利的,因为它们可以使用区块头中的信息来确定最长的区块链,由此确定要获取哪些区块数据。如果没有这一步,他们可能会浪费时间在处理分叉上,而这条分叉链可能在网络共识后成为一条孤链。
由于 Neo 不会发生分叉,这一优势也就没有用武之地了。在 Neo 核心开发者张铮文提出的「取消区块头优先同步」提案中,指出了移除该方案的潜在好处:
Neo 所使用的的 dBFT 共识机制,保证了其不会发生分叉。即意味着区块头优先同步模式的优势也将无法显现。如果取消这一方案,用于区块头同步的网络开销将减少许多。
移除区块头
取消「区块头优先同步」提案还建议完全移除区块头。由于共识节点的公钥等重要信息可以从前一个区块状态中计算得出,NGD 开发工程师 张涛指出移除区块头可以显著减少区块链的大小。
目前有 7 个共识节点,因此每个区块会有7个公钥信息,也就是 7*33=231 字节。如果我们把共识节点增加到 100 个,那么每个区块的公钥信息大小就可达 100*33=3300 字节。
尽管有这些好处,但在「移除区块头」的测试中还是产生了不确定的结果。结果指出区块头对于跨链交互以及简单支付验证还是非常有用的,如对公钥进行聚合签名等。
基于这些测试和讨论的结果,决定暂时搁置「移除区块头」提案,但优化区块同步的相关研究仍在继续。
在下一篇「三分钟入门Neo3」文章中,将介绍 Neo3 开发中的另一种优化方案:索引同步。