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 已经声明多次只作软件,规避法律风险。

Coin Marketplace

STEEM 0.29
TRX 0.11
JST 0.033
BTC 63945.57
ETH 3135.76
USDT 1.00
SBD 4.00