EOS开源代码学习笔记(一)eosiod程序

in #cn6 years ago

在写笔记之前,先看一下eosiod工具的说明,以下内容来自官方wiki:

The core EOS daemon that can be configured with plugins to run a node. Example uses are block production, dedicated API endpoints and local development.

翻译为:eosiod工具是eos公链的核心程序,可以配置插件来运行一个节点。该工具用来生产区块,提供区块API以及本地开发。

一、从eosiod的main函数开始分析代码

main函数主要由一个try--catch块组成,接管三种依赖库产生的异常,分别为fc、boost、std。try块内便是该程序的主体。
1.png

主体程序可以分为三部分:选项配置、插件初始化、初始化程序并运行

选项配置代码如下:
2.png

主要功能是调用app()函数实例化一个application类对象,然后设置该对象的版本。app()函数定义如下:返回一个application对象。
3.png

eosio::eosiod::config::version 命名空间下版本定义如下
4.png

以下三行代码,调用来类application方法set_default_data_dir和set_default_config_dir来配置目录
bfs::path root = determine_root_directory();获取程序所在根目录root。
将root / "var/lib/eosio/node_00"目录作为默认data-dir目录。
将root / "etc/eosio/node_00"目录作为默认config-dir配置目录。

二、初始化插件与日志

5.png
首先initialize方法是一个模板函数,功能是初始化三个插件(chain_plugin区块链插件、http_plugin插件,net_plugin插件)通过查看此方法的定义:
6.png
其内部是调用initialize_impl来实例化模板的,通过find_plugin函数来将三个插件添加到该实例化对象的成员变量plugins中。Application类成员变量plugins的定义与find_plugin函数定义如下:
7.png
8.png

其中plugins成员变量是一个map容器,也就是一个键值对链表。包括了插件的名称和插件的对象指针。注意find_plugin函数的重载(有参数和无参数)。
9.png
使用initialize_impl方法来初始化插件,包括了插件的使用参数与配置文件等(此部分代码没有详细阅读)

eosiod程序通过模板的方式初始化并安装需要的插件。eosiod程序类似于一个框架,各个功能模块作为一个插件的方式来初始化到eosiod程序上执行。
10.png

初始化日志,并记录下运行版本信息日志和运行根目录信息。

初始化application对象,并生产区块

 app().startup();
 app().exec();
Sort:  

Amazing!!!

终于看到中文技术贴了,区块链世界,我们技术人沉下心钻研原理才是王道。

EOS 大法好!

当币价跌下来的时候,大家就都安静了哈哈。不过我也是看代码当学习,水平不够。
EOS大法好!

怎么不叫eosd,eosiod好别扭..

有道理,它2.x之前的版本都叫eosd,不知道为什么现在改成eosiod了

进入 dawn 3.0 后,代码库中所有的 eos 都被改成了 eosio ,主要是区别 eosio 软件和 eos 区块链。 blockone 已经声明多次只作软件,规避法律风险。