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

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

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;

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,922评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,591评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,546评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,467评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,553评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,580评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,588评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,334评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,780评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,092评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,270评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,925评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,573评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,194评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,437评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,154评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352

推荐阅读更多精彩内容

  • eos项目(v1.0.9)主要可以分为以下八个模块:1.编译模块2.主程序模块3.依赖库模块4.插件模块5.智能合...
    vdes阅读 2,776评论 0 1
  • EOS,企业操作系统,是为企业级分布式应用设计的一款区块链操作系统。相比于目前区块链平台性能低、开发难度大以及手续...
    币来网阅读 670评论 0 0
  • EOS(Enterprise Operation System),企业操作系统,是为企业级分布式应用设计的一款区块...
    vdes阅读 1,285评论 0 1
  • 上一篇已经分析了EOS节点程序eosd通过插件化的架构组织各种服务功能,本篇将介绍EOS所使用的石墨烯区块链引擎,...
    ansenyu阅读 4,203评论 0 6
  • 今天是什么日子:农历六月十一 星期一 多云转雨 6~20℃ 人生目标关键词 事业/健康/美丽/提升/理财/人际...
    瑜悦芝伽阅读 87评论 0 0