比特元项目的blockchain模块主要实现比特元主网的消息接受处理功能,数据区块识别同步的功能,数据区块存储验证的功能。且分别由对应的三个功能子模块来实现,分别是:消息接收模块,区块同步模块和区块存储模块。
消息处理模块
消息处理模块主要是接受其他模块发起的请求区块信息查询的消息以及其他模块广播过来的区块以及交易信息。
区块同步模块
区块同步模块主要是在节点起动之后,比较网络中peer最新高度和自己的高度,如果自己的高度比peer的最新高度低就主动发起block的同步请求追赶主链。
区块存储模块
区块存储模块主要就是将区块以及交易信息按照不同分类存储到数据库,方便其他模块的查询。
实现主网区块的同步存储中,Blockchain模块同时能够实现同步过程中的最优链检测,分叉区块检测回滚,故障节点的检测恢复。
最优链的检测:定时获取网络中和自己在同一条主链上的peer节点。同步区块数据时只从最优链的节点同步数据,从而保证同步过来的区块能关联起来。
分叉区块的检测和回滚:定时检测自己最新高度的blockhash和peer中最长链中对应高度的hash是否一致。不一致就会从peer节点向后请求指定block数量的header信息寻找分叉点,然后从分叉点重新请求blocks数据。
故障节点的检测和恢复:从某个节点广播或者请求的区块在本节点执行不过时,需要将对端peer节点标记成故障节点,不再从该节点同步数据,也不再处理从该节点广播过来的区块。直到故障节点回滚区块恢复之后将该节点从故障节点中移除。
领取专属 10元无门槛券
私享最新 技术干货