EOS 区块生产过程

1. 交易同步过程


1. 在cleos界面输入 cleos transfer ${from_account} ${to_account} ${quantity}

2. 调用chain_plugin 的push_transaction,发送transaction_async消息 

3. 触发了producer_plugin的on_incoming_transaction_async,调用controller的 push_transaction,并执行trx。

4. controller发送消息accepted_transaction,触发了bnet_plugin和net_plugin(已废弃)的on_accepted_transaction 

5.  bnet_plugin和net_plugin(已废弃)将消息广播发送到其他节点

6. 其他节点收到消息后,进入on处理流程,发送transction消息,producer_plugin收到消息后,调用on_incoming_transaction_async,调用controller的 push_transaction,并执行trx。


2. 区块成产过程

producer 收到广播的交易之后,将交易保存下来放在pending_state中,producer_plugin在startup的时候就启动了区块生产schedule_production_loop,先做区块准备工作,即start_block,主要完成区块BFT的签名,之后进入maybe_produce_block,进入生产过程,即produce_block,这是区块生产的核心部分,包括计算merkle root,提交到DB中等,在最后重新调用schedule_production_loop,这样就形成了循环,具体流程见下图:



1.  检查自己是否是生产者,一个生产者500ms出一次块,共出12次之后切换生产者。

2. 对上次确认的区块到本次的区块做BFT签名,涉及函数set_confirmed和maybe_promote_pending

3. 等待一个出块周期500ms

4. 计算action的merkle root

5. 计算transaction的merkle root

6. 对区块签名

7. 提交区块到DB

8. 递归调用schedule_production_loop


3. 区块同步过程


1.  参考区块生产过程,producer_plugin循环生产区块,先start_block处理BFT签名并确定不可逆的区块数,之后produce_block调用controller

2.  Controller使用finalize_block计算merkle root,使用commit_block提交到fork database中,fork db会依据1中计算的不可逆区块数,将不可逆的区块删除,并发送irreversible消息

3.  Controller收到消息后,调用on_irreversible处理发送irreversible_block消息

4.  bnet_plugin 收到消息后,调用on_irreversible_block处理。

5.  Controller发送accepted_block_header和accepted_block消息

6.  producer_plugin收到消息后, 调用on_block,calc_dpos_last_irreversible计算不可逆块。

7.  bnet_plugin/net_plugin 收到之后广播到其他节点

8.  其他节点的bnet_plugin/net_plugin收到P2P消息后,通过发送block消息/调用accept_block函数发送block_async消息

9.  Producer_plugin收到block/block_async消息后调用controller的push_block函数

10.  Controller调用apply_block判断如果新收到的block比原有的链长,则切换到新链上

11.  Controller调用finalize_block计算merkle root,使用commit_block提交到DB

下面贴张网上找到的log图,说明消息的时序:


©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,665评论 19 139
  • EOS采用DPoS算法和块内分片技术,实现了百万级别TPS的超高性能,可以媲美中心化服务器的处理能力,同时保持去中...
    vdes阅读 2,305评论 0 5
  • 我家养了三只小猫,猫妈妈是从朋友那儿领养过来的叫乐高。没多久便和附近的公猫私定终生,生下了两小只。小猫咪要出生的时...
    cyrensw阅读 654评论 5 3
  • 我们是否有过这样的体验?工作千头万绪,待处理事项一大堆心急火燎,会议中需要表达观点思路却还没理顺;回到家面对满屋狼...
    睦妈是也阅读 724评论 0 2
  • 从温暖、发达的深圳回来,今天急匆匆上班了,一 大堆的事等着我去处理,莫名有点烦躁。 刚到办公室,...
    幸运草_e5c3阅读 314评论 0 0

友情链接更多精彩内容