http://www.7klian.com

措施员视角看Neo共鸣机制

neo/Implementations/BlockChains/LevelDB/LevelDBBlockChain.cs/Persist

议员参加共鸣
CheckSignatures要领里首先是对当前签名数的正当性判定。也就是以获取的正当签名数量需要不小于M。M这个值的获取在ConsensusContext类中:

源码位置:

可以看到这里是直接从leveldb的数据库中读取的议员数据。即在读取数据之前,需要先建设/打开数据库,这部门的操纵可以参考neo-cli项目,这个项目就在MainService类的OnStart要领中传入了数据库地点。虽然这只是从数据库中获取议员信息,向数据库中存入议员信息的事情主要由LevelDBBlockChain.cs文件中的Persist(Block block) 要领认真,,这个要领吸收一个区块范例作为参数,主要事情是将同步到的区块信息理会生存。涉及到议员信息的要害代码如下:
neo/Consensus/ConsensusService.cs/AddTransaction

源码位置:

源码位置:

这个值的获取涉及到Neo共鸣算法的容错本领,公式是

源码位置:
neo/Consensus/ConsensusContex.cs

neo/Consenus/ConsensusContext.cs

议上举办共鸣的函数是OnTimeout,由按时器按时执行。下面是议长提倡共鸣的焦点代码:
neo/Core/BlockChain.cs
源码位置:
源码位置:
共鸣节点通过挪用ConsensusService类中的Start要领开始参加共鸣。在Start要领中,先注册动静吸收、数据生存等事件通知,然后挪用InitializeConsensus开启共鸣,吸收一个名为「视图编号」的整形参数。当传入的视图编号为0时,即一轮新共鸣需要重置共鸣状态。重置共鸣状态的代码如下:
议员在收到PrepareRequest广播之后会触发OnPrepareReceived要领:
议员在收到议长共鸣请求后,首先利用议长的公钥验证收到的共鸣信息,验证通事后将议长的签名添加到签名列表中。然后从内存中缓存,将议长Header生意业务哈希列表中的生意业务添加到context里。 

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。