[EOS源码分析]10.EOS区块同步及生产

本文详细解析EOS区块同步过程,包括节点信息获取、不同genesis文件节点互联和同步时机。同时,探讨了区块生产的条件,如:_production_enabled状态、enable-stale-production参数和生产者注册流程。通过源码分析,阐述了节点何时开始生产区块的判断逻辑。
摘要由CSDN通过智能技术生成

本文所有实践都是基于EOS v1.0.1,请切到该分支然后对比源码

切换命令:git checkout v1.0.1

提到区块生产和同步,我们肯定有几个疑问?

  • 节点同步

             1)节点从哪里同步数据
                    节点如何知道哪些节点有最新的区块数据以同步数据
             2)genesis文件不同的节点互联会怎么样?
             3)节点什么时候同步数据

  • 区块生产

       节点什么时候生产?节点是一启动就开始生产?还是等同步好了才生产?任何节点都可以生产?
    接下来我们就一一解答

 

区块同步数据

节点信息获取

    节点要同步数据,必须得知道从哪里节点获取他们的区块信息。这个靠显式声明的种子节点解决,种子节点然后会发回更多节点信息。在config.ini文件里添加如下内容即可添加种子节点,这些种子节点信息一般是EOS链的创建者和运营者管理的,比如jungleTestNet测试网,我们要想加入这个测试网络就需要配置如下信息。

    

p2p-peer-address = jungle.cryptolions.io:19876

p2p-peer-address = jungle.cryptolions.io:29876

p2p-peer-address = dev.cryptolions.io:39876

 

不同genesis文件的节点互联

    首先来说下genesis是什么东西

    genesis文件是一个用来描述创世块信息的文件

    最重要的是initial_timestamp和initial_key

  •   initial_timestamp跟区块生产相关,后面区块生产分析时会用到这个值
  •   initial_key是创建这个genesis的公钥,系统将会以这个公钥创建eosio这个系统账号,而系统的智能合约的核心操作都需要系统账号授权,也就是说initial key控制着eosio.system等智能合约。eosio.system智能合约控制整个系统的。比如生产者注册就必须使用eosio.system智能合约。        

   void initialize_database() {

      authority system_auth(conf.genesis.initial_key);

      create_native_account( config::system_account_name, system_auth, system_auth, true );

    }

 

    不同genesis文件,就代表是不同的链,这样的节点其实是不能互联的。但是由于节点服务器信息(ip, 端口)是公开的,不排除有误加的情况。所以必须有机制拒绝这样的连接,这个是连接握手节点通过检测chain_id来实现的

    

void net_plugin_impl::

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值