LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资讯 > EOS底层代码

EOS底层代码

2020-04-24 JSu2zBcE 来源:区块链网络

本文来源于力场作者:Harvey

大家好,我是陪伴大家已久的Harvey。我一直以来秉承着“授人以鱼不如授人以渔”的初衷,为大家带来“硬核”技术文章。我在这里会一直分享我的所知所见,如果你喜欢我,奥不,如果你喜欢我的文章,欢迎订阅!

我们要对EOS 项目的底层代码有更深层的认识,就需要对EOS 的整个框架进行了解,知道对应代码的作用。只有熟悉各个模块的作用,才可以把自己的应用灵活部署在EOS 项目上,进而实现自己想要的效果。

脚本层

脚本层可为支持层和插件层提供基础能力,实现区块链的底层关键技术,例如交易处理、生产区块、加密功能、文件IO 操作、网络通信等能力。EOS 项目的整体编译、依赖库下载、代码编译等功能都依托于一个完整的脚本体系。脚本层主要包括eos/eosio build.sh 、eos/scripts 、eos/CMakeModules 三部分。

1.eos/eosio_build.sh

当我们要把EOS 项目完整下载到本地时,首先需要执行eosio build.sh 脚本文件。eosio build.sh 是EOS 项目的主编译脚本通过运行这个脚本,就可以实现对EOS 项目的一键编译,脚本运行过程中主要测试了编译所需的硬件与软件环境是否满足要求以及显示编译结果。

2.eos/scripts

看到scripts 这个目录的名字就会知道里面包含了项目编译所需的其他脚本文件,它们的作用分别是: abi_to_rc 、abigen. sh 和abiisjson . py 共同负责将C ++语言编写的智能合约编译成.abi 文件,再将.abi 文件编译成可执行文件; eosiobuild 前缀的脚本分别针对不同系统的编译子脚本; eosi o-t n 前缀的脚本负责自动化运行,关闭节点。

3.eos/CMakeModules

由于EOS 项目是基于CMake 等工具编译的,所以eos/CMakeModules 中主要包含CMake 编译需要使用的一些配置信息。

插件层

EOS 项目中的节点程序依赖一个完整的插件体系,通过不同的插件组合来提供各种服务功能,如区块链查询、交易验证执行、打包区块、P2P 网络通信等服务。插件完整的生命周期包括注册、初始化、开启、停止四个流程。EOS 项目的插件代码位于Eos /plugins 目录下,包括模板层、基类层、派生类层、封装层四个层次.

1. 插件模板

eos/plugins/ template plugin 定义了EOS 项目中所有插件的模板。其中template_plugin.cpp 为插件模板源码, CMakeLists. txt为编译代码。

2 . 基类插件

EOS 项目的插件体系中共有5 个基类插件.

eos/plugins/chain plugin 目录:定义了链处理插件,这个插件承载了nodeos 节点程序与区块链交互的基本功能,包括读取本地不可逆区块链基本信息、设置本地链检查点、设置本地链参数、设置可逆区块数据库参数、设置账户黑/白名单、设置智能合约黑/白名单、重载区块链初始状态文件,以及删除、重写、替换本地区块链数据(包括开始、停止等动作) 。

eos/plugins/net_plugin 目录:定义了P2P 网络插件,这个插件承载了EOS 系统的P2P 网络中TCP/IP 层相关功能,包括建立节点之间握手并互联; 监昕、发送、接收新交易请求; 监听、发送、接收新区块请求; 验证接收数据合法性。

eos/plugins/http plugin 目录: 定义了网络HTTP 插件,这个插件承载了EOS系统的P2P 网络中HTTP 层相关功能,包括监昕、发送、接收新交易请求; 监昕、发送、接收新区块请求;验证、接收数据合法性。

eos/lugins/wall et_plugin 目录 :定义了钱包插件, 这个插件承载了nodeos 节点程序与钱包交互的相关功能,包括创建、读取钱包文件; 设置unlock timeout 时间; 将密钥导人钱包。其中包含的wallet.cpp 文件实现了对钱包文件的基本功能,包括创建新钱包、导人密钥等; wallet_m anager.cpp 文件实现了对钱包的管理功能,包括设置unlock 超时时间、lock 指定钱包等;

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

eos/lugins / acount _history plugin 目录:定义了历史记录查询插件,该插件承载了节点程序对本地链发起查询的相关功能,包括指定区块查询、指定账户状态、查询、指定交易查询。

3. 派生类插件

EOS 项目的插件体系中共有8 个派生类插件,这些插件分别继承几个基类插件,实现指定功能.

eos/plugins/bnet_plugin 目录:定义了EOS 的P2P 网络中不同节点之间同步各自本地链数据的算法,简单来讲,包括如下特征: 查找本地链上的最后一个区块ID ;如果本地产生新区块,则将该区块发送给其他节点;如果本地不产生新区块,则将接收的未确认交易发送给其他节点。

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

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

4. 封装类插件

该部分插件主要用于为外界与EOS 链交互提供支持, 并对上述几个特定插件进行封装,只暴露API。

eos/plugins/account_ history_ api_plugin : 实现账户历史记录的接口插件,是与账户历史相关的供外部调用的接口服务。

eos/plugins/chain_api_plugin :依赖于chain_plugin ,提供与外部调用链相关操作的接口服务。

eos/plugins/db_size_api_plugin :提供与外部调用及数据有关的接口服务。

eos/lugins/history_api_plugin :依赖于history_plugin , 提供外部调用查询指定账户中指定公钥的所有历史交易记录的接口服务。

eos/plugins/net api_plugin :依赖于net_plugin , 提供与外部调用及网络相关的操作的接口。

注:部分技术指标引用于李博士的《深入理解EOS》。

感谢阅读到这里,文章就到此结束了,如果你觉得Harvey的文章还不错,请留下你的脚印。有志同道合的小伙伴欢迎一起交流学习帮助你提高!(VX:1453561279 备注:学习)

本文已加入由力场新媒体部发起的「 好文流动计划 」。该计划旨在增强力场好文流动性,进而提升力场内容价值。

—-

编译者/作者:JSu2zBcE

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...