EOS源代码架构解析(二)
eos项目(v1.0.2)主要可以分为以下八个模块:编译模块主程序模块依赖库模块插件模块智能合约模块测试模块Docker工具模块文档说明模块 ...
eos项目(v1.0.2)主要可以分为以下八个模块:
-
编译模块
-
主程序模块
-
依赖库模块
-
插件模块
-
智能合约模块
-
测试模块
-
Docker工具模块
-
文档说明模块
4、插件模块
可以说eos项目中的节点程序依赖一个完整的插件体系:通过不同的插件组合来提供各种服务功能,如区块链查询,交易验证执行,打包区块,P2P网络通信等服务;应当补充的是,插件的全生命周期包括四个流程:注册、初始化、开启、停止,具体的执行算法将在后续文章展开介绍,本篇教程只介绍不同文件的所有功能。
eos项目的插件代码位于eos/plugins目录下,包括四个层次:
-
模板层
-
基类层
-
派生类层
-
封装层
4.1 插件模板
eos/plugins/template_plugin定义了eos项目中所有插件的模板:
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节点程序与区块链交互的基本功能,包括:
-
读取本地不可逆区块链基本信息;
-
设置本地链检查点;
-
设置本地链参数;
-
设置可逆区块数据库参数;
-
设置账户黑/白名单;
-
设置智能合约黑/白名单;
-
重载区块链初始状态文件;
-
删除、重写、替换本地区块链数据(包括开始、停止等动作);
4.2.2 net_plugin
eos/plugins/net_plugin目录定义了P2P网络插件,这个插件承载了eos系统的P2P网络中TCP/IP层相关功能,包括4个基本功能:
-
建立节点之间握手并互联;
-
监听/发送/接收新交易请求;
-
监听/发送/接收新区块请求;
-
验证接收数据合法性;
4.2.3 http_plugin
eos/plugins/http_plugin目录定义了网络http插件,这个插件承载了eos系统的P2P网络中http层相关功能,包括3个基本功能:
-
监听/发送/接收新交易请求;
-
监听/发送/接收新区块请求;
-
验证接收数据合法性;
4.2.4 wallet_plugin
eos/plugins/wallet_plugin目录定义了钱包插件,这个插件承载了nodeos节点程序与钱包交互的相关功能,包括3个基本功能:
-
创建/读取钱包文件;
-
设置unlock timeout时间;
-
密钥导入钱包;
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个基本功能:
-
指定区块查询;
-
指定账户状态查询;
-
指定交易查询;
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;
-
如果本地产生新区块,则将该区块发送给其他节点;
-
如果本地不产生新区块,则将接受到的未确认交易发送给其他节点;
4.3.2 faucet_testnet_plugin
eos/plugins/faucet_testnet_plugin目录定义了在测试网上快速建立测试帐号的插件,该插件为测试提供便利。
4.3.3 history_plugin
eos/plugins/history_plugin目录定义了查询指定账户中指定公钥的所有历史交易记录。
4.3.4 http_client_plugin
eos/plugins/http_client_plugin目录定义了eos网络http层响应请求,并做相应的安全验证的客户端插件。
4.3.5 mongo_db_plugin
eos/plugins/mongo_db_plugin目录定义了保存并管理本地不可逆转区块链数据的MongoDB数据库基本配置插件。
4.3.6 producer_plugin
eos/plugins/producer_plugin目录定义了区块生产节点的功能插件,其中功能包括:
-
生产/打包新区块数据;
-
对新区块签名;
-
对接收的区块进行验证,包括区块头合法性、签名合法性和交易合法性;
4.3.7 sql_db_plugin
eos/plugins/sql_db_plugin目录定义了eos中保存了区块链所有数据的数据库管理插件,这部分数据包括所有区块数据、所有账户信息、所有交易数据等。
其中:
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)测试。
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;
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)