以下为正文*
尽管研究者们一直以来都在广泛地研究新的共识机制,但只要真实世界体系依然是重心所在,这些机制的真正实现就会受到局限,伪代码通常是实现这些机制的主要参考,因此开发者们仍任重道远。
根据同样的推理,人们可以为多智能体系拟定多个复杂的智能谈判协议,另一方面,在现实方面,行驶中的交通工具(大量使用物联网设备)也未能实现与交通信号灯及传感器的智能交互,而且学术文献中的研究成果与数字/智能城市中的协议创建也存在脱节。
这篇简短的文章将重点介绍Neo核心库引人瞩目的进展,同时将把握更好的时机带你深入了解简单拜占庭容错机制的实现细节。
走进NeodBFT共识协议
尽管其他开发者可能会看好其他复杂的以及声称更有效的共识机制,NeoResearch团队一直都坚持在当前dBFT的基础上进行微调。Neo当前使用的dBFT机制受著名文献所提到的实用拜占庭容错算法(pBFT)启发,pBFT是由Cstro&Liskov在1999年左右提出的简单协议,而dBFT基于区块链的现实应用对pBFT做出了改进。
在这里我尤其要强调两个巨大的改变:一个与Neo在共识稳定性方面取得的显著成就有关,另一个与现在正在解决的罕见情况有关。
1使用Akka框架的效用性—Neo2.9.0
每个案例的抽象化都是由概念化的想像完成的。早期,在编写C/C++优化代码时,处理指针和标识时很难解决内存泄露的问题。另外,工具的巨大进步如Valgrind让测试和验证测试更加简单。
根据同样的推理,并行计算技术也在不断进化。使用这一技术并设想各个技术与框架应该应用于什么地方的能力就是魔法。因此我们要感谢张铮文为这个项目作出的卓越贡献并对NEO进行了精确的完善。
改进共识响应次数
尽管部分专家能较为容易地理解共识过程的每一阶段,但完全理解每个步骤的所做事情并不简单。
因此Igor才专注于开发一个简单的工具来获取共识消息(状态):https://github.com/NeoResearch/n ... ster/consensus-draw。
图1——使用Akka框架前的交流
图1展示了区块生成的每个步骤(dBFT各阶段)中节点与节点间的交流都需要花时间,即使是在本地的环境中。
图2——完善并使用Akka框架后的交流
8月13日观察并分析(如图2中的)图表后,我们甚至需要将CNLogger变更为毫秒,因为精度从100x提升到了1000x!
为什么会做出这样的改进呢?
原因包括以下这些重要的方面:
使用智能排序和筛选可以更好地控制节点间的交流。
我们所说的智能排序是指根据优先顺序将消息排序,与其他协议不同的是,达成共识需要多种类型的交流而且需要在各智能体之间进行“智能对话”。我们可以将这个协议家族视为一个由多个自私的自动化智能体组成的环境。
这样,我们就可以想象每个智能体都会优先考虑自己的目的,而且,每个智能体都能在网络中处理特定的任务。
值得注意的是当前的改进可以在全网络更好地组织这些广播消息,因此每个参与者就更具备完成全局目标的能力,也就是说,能以受信任的方式生成区块。
**那么它是一个最优的解决方案吗?**不,我们并不这么认为,因为现实中存在着无数个可能的优化方案,以及更好的交流调试方案。从这个层面上说,我们仍然在被不断驱使着理解并学习新的策略来将这个“简单”的共识应用到最先进的案例中,让多个智能体在高效的高度去中心化的P2P网络生态——NEO区块链中交流。
2“分叉”测试
dBFT的首次实现案例并没有考虑到区块生成所涉及的验证器提交环节的简化性。
Shargon、Belane和铮文已经在基于dBFT的推理开发新增环节:https://github.com/neo-project/neo/pull/320,现阶段正在迁移从而与Neo2.9.0客户端当前的变更保持一致。
一种极端罕见的情况是,当节点间的交流发生延迟与遗漏时,一个节点可能会跟随“分叉的”区块,主要受到以下影响:
1、每个primary会生成不同的随机数;
2、及/或某个节点失联后可能发生的新的交易(恰好当必要的金额签名完成并且该节点假设所有其他节点都跟着同样的区块时)。
安全团队与NeoResearch重现了这个场景(这是一个困难的任务,主要因为得通过Akka重构来进行交流的微调)。出于此目的,我们在https://github.com/NeoResearch/n ... aster/forking-tests中创建了脚本。
8月21日晚,NeoResearch团队简要地重现了这一场景(仅对诸如网络延迟之类的外部状况进行了干涉),得以推进当前方案(如自动测试)的验证环节。
3共识时间微调
我们觉得社区里的每个成员都期望区块都能在15秒内被分割(可以确信2.9.0之后主网在此方面会有很大提升,但仍有可能在绝大多数时间确保精确地区块生成时间)。因此现在我们正在进行精确的微调,详见https://github.com/neo-project/neo/pull/268。
我们认为在进行精确的调整和并使用卡尔曼滤波器后,我们就能根据区块生成时间考虑TPS了。
成为第一个吐槽的人