EOS源码框架剖析第二篇 | 源码整体脉络梳理中篇

在上篇教程里我们已经对eos项目中前三个模块进行了简单描述,下面让我们开始EOS源码框架剖析系列第二篇:源码整体脉络梳理中篇。本篇教程将介绍eos项目中一个核心模块:插件模块。

eos项目(v1.0.2)主要可以分为以下八个模块:

编译模块

主程序模块

依赖库模块

插件模块

智能合约模块

测试模块

Docker工具模块

文档说明模块

4、插件模块

可以说eos项目中的节点程序依赖一个完整的插件体系:通过不同的插件组合来提供各种服务功能,如区块链查询,交易验证执行,打包区块,P2P网络通信等服务;应当补充的是,插件的全生命周期包括四个流程:注册、初始化、开启、停止,具体的执行算法将在后续文章展开介绍,本篇教程只介绍不同文件的所有功能。

eos项目的插件代码位于eos/plugins目录下,包括四个层次:

模板层

基类层

派生类层

封装层

4.1 插件模板

eos/plugins/template_plugin定义了eos项目中所有插件的模板:

EOS源码框架剖析第二篇 | 源码整体脉络梳理中篇_第1张图片

4.2 基类插件

经总结,eos项目的插件体系中共有5个基类插件:

eos/plugins/chain_plugin

eos/plugins/http_plugin

eos/plugins/net_plugin

eos/plugins/wallet_plugin

eos/plugins/account_history_plugin

这5个基类插件承载了eos插件体系中的基本功能:

4.2.1 chain_plugin

eos/plugins/chain_plugin目录定义了链处理插件,这个插件承载了nodeos节点程序与区块链交互的基本功能,包括:

读取本地不可逆区块链基本信息;

设置本地链检查点;

设置本地链参数;

设置可逆区块数据库参数;

设置账户黑/白名单;

设置智能合约黑/白名单;

重载区块链初始状态文件;

删除、重写、替换本地区块链数据(包括开始、停止等动作);

EOS源码框架剖析第二篇 | 源码整体脉络梳理中篇_第2张图片

4.2.2 net_plugin

eos/plugins/net_plugin目录定义了P2P网络插件,这个插件承载了eos系统的P2P网络中TCP/IP层相关功能,包括4个基本功能:

建立节点之间握手并互联;

监听/发送/接收新交易请求;

监听/发送/接收新区块请求;

验证接收数据合法性;

EOS源码框架剖析第二篇 | 源码整体脉络梳理中篇_第3张图片

4.2.3 http_plugin

eos/plugins/http_plugin目录定义了网络http插件,这个插件承载了eos系统的P2P网络中http层相关功能,包括3个基本功能:

监听/发送/接收新交易请求;

监听/发送/接收新区块请求;

验证接收数据合法性;

EOS源码框架剖析第二篇 | 源码整体脉络梳理中篇_第4张图片

4.2.4 wallet_plugin

eos/plugins/wallet_plugin目录定义了钱包插件,这个插件承载了nodeos节点程序与钱包交互的相关功能,包括3个基本功能:

创建/读取钱包文件;

设置unlock timeout时间;

密钥导入钱包;

EOS源码框架剖析第二篇 | 源码整体脉络梳理中篇_第5张图片

eos/plugins/wallet_plugin/wallet.cpp: 该文件实现了对钱包文件的基本功能,包括创建新钱包、导入密钥等;

eos/plugins/wallet_plugin/wallet_manager.cpp:该文件实现了对钱包的管理功能,包括设置unlock超时时间、lock指定钱包等;

eos/plugins/wallet_plugin/wallet_plugin.cpp:该文件对上述功能插件化,包括定义插件参数等,实现了nodeos节点程序通过调用插件处理钱包文件的功能;

4.2.5 acount_history_plugin

eos/plugins/acount_history_plugin目录定义了历史记录查询插件,该插件承载了节点程序对本地链发起查询的相关功能,包括3个基本功能:

指定区块查询;

指定账户状态查询;

指定交易查询;

EOS源码框架剖析第二篇 | 源码整体脉络梳理中篇_第6张图片

4.3 派生类插件

经总结,eos项目的插件体系中共有8个派生类插件,这些插件分别继承几个基类插件,实现指定功能。派生类插件包括:

eos/plugins/bnet_plugin

eos/plugins/faucet_testnet_plugin

eos/plugins/history_plugin

eos/plugins/http_client_plugin

eos/plugins/mongo_db_plugin

eos/plugins/producer_plugin

eos/plugins/sql_db_plugin

eos/plugins/template_plugin

eos/plugins/txn_test_gen_plugin

4.3.1 bnet_plugin

eos/plugins/bnet_plugin目录定义了eos的P2P网络中不同节点之间同步各自本地链数据的算法,简单来讲,包括如下特征:

查找本地链上的最后一个区块ID;

如果本地产生新区块,则将该区块发送给其他节点;

如果本地不产生新区块,则将接受到的未确认交易发送给其他节点;

EOS源码框架剖析第二篇 | 源码整体脉络梳理中篇_第7张图片

4.3.2 faucet_testnet_plugin

eos/plugins/faucet_testnet_plugin目录定义了在测试网上快速建立测试帐号的插件,该插件为测试提供便利。

EOS源码框架剖析第二篇 | 源码整体脉络梳理中篇_第8张图片

4.3.3 history_plugin

eos/plugins/history_plugin目录定义了查询指定账户中指定公钥的所有历史交易记录。

EOS源码框架剖析第二篇 | 源码整体脉络梳理中篇_第9张图片

4.3.4 http_client_plugin

eos/plugins/http_client_plugin目录定义了eos网络http层响应请求,并做相应的安全验证的客户端插件。

EOS源码框架剖析第二篇 | 源码整体脉络梳理中篇_第10张图片

4.3.5 mongo_db_plugin

eos/plugins/mongo_db_plugin目录定义了保存并管理本地不可逆转区块链数据的MongoDB数据库基本配置插件。

EOS源码框架剖析第二篇 | 源码整体脉络梳理中篇_第11张图片

4.3.6 producer_plugin

eos/plugins/producer_plugin目录定义了区块生产节点的功能插件,其中功能包括:

生产/打包新区块数据;

对新区块签名;

对接收的区块进行验证,包括区块头合法性、签名合法性和交易合法性;

EOS源码框架剖析第二篇 | 源码整体脉络梳理中篇_第12张图片

4.3.7 sql_db_plugin

eos/plugins/sql_db_plugin目录定义了eos中保存了区块链所有数据的数据库管理插件,这部分数据包括所有区块数据、所有账户信息、所有交易数据等。

EOS源码框架剖析第二篇 | 源码整体脉络梳理中篇_第13张图片

其中:

eos/plugins/block_storage定义了保存了所有区块数据(可逆或不可逆的)的数据库管理插件;

eos/plugins/consumer定义了保存了所有用户的所有数据的数据库管理插件;

eos/plugins/irreversible_block_storage定义了保存了所有不可逆转区块数据的数据库管理插件;

eos/plugins/sql_db_plugin是插件的主要定义文件;

4.3.8 txn_test_gen_plugin

eos/plugins/txn_test_gen_plugin定义了一个每秒自动产生指定数量的交易信息的插件,该插件主要用作对eos网络的吞吐量(TPS)测试。

EOS源码框架剖析第二篇 | 源码整体脉络梳理中篇_第14张图片

4.4 封装类插件

该部分插件主要用于对上述几个特定插件进行封装,只暴露API,主要包括(不做详细介绍):

eos/plugins/account_history_api_plugin;

eos/plugins/chain_api_plugin;

eos/plugins/db_size_api_plugin;

eos/plugins/history_api_plugin;

eos/plugins/net_api_plugin;

eos/plugins/producer_api_plugin;

eos/plugins/wallet_api_plugin;

EOS源码框架剖析第二篇 | 源码整体脉络梳理中篇_第15张图片

https://mp.weixin.qq.com/s?__biz=MzU1NDc2MzA2OA==&mid=2247483761&idx=1&sn=0cfd55dbc416c4df33f5c28c34ed7849&chksm=fbdfd722cca85e34d8f9fd93ff81ef531a15bb40895b5a895ef2ae2a3358c0fb0efd5a41dd42&scene=21#wechat_redirect

你可能感兴趣的:(EOS源码框架剖析第二篇 | 源码整体脉络梳理中篇)