EOS源码框架解析(一)

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

  1. 编译模块

  2. 主程序模块

  3. 依赖库模块

  4. 插件模块

  5. 智能合约模块

  6. 测试模块

  7. Docker工具模块

  8. 文档说明模块

本篇教程首先介绍前三个模块:

1、编译模块

eos项目的整体编译、依赖库下载、代码编译等功能,依托于一个完整的脚本体系,主要包括以下三部分:

  • eos/eosio_build.sh

  • eos/scripts

  • eos/CMakeModules

1.1 eos/eosio_build.sh
eos/eosio_build.sh是eos项目的主编译脚本,通过运行这个脚本,就可以实现对eos项目的一键编译,脚本运行过程中主要测试了编译所需的硬件与软件环境是否满足要求以及显示编译结果。
 

1.2 eos/scripts
eos/scripts目录中包含了项目编译所需的其他脚本文件,其中:

  • abi_to_rc目录、abigen.sh和abi_is_json.py共同负责将C++语言编写的智能合约编译成.abi文件,再将.abi文件编译成可执行文件;

  • eosio_build_前缀的脚本文件分别是针对不同系统的编译子脚本;

  • eosio-tn_前缀的脚本负责自动化运行,关闭节点。
     

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

2、主程序模块

eos项目的主程序源代码位于eos/program目录下,包含6个基本功能组件:

  • eos/program/nodeos

  • eos/program/cleos

  • eos/program/keosd

  • eos/program/eosio-abigen

  • eos/program/eosio-applesedemo

  • eos/program/eosio-launcher

2.1 nodeos
eos/program/nodeos是eos项目的核心程序源代码,可以配置不同插件来运行不同类型节点。该进程主要负责提供区块生产,封装API接口和本地开发的功能;

2.2 cleos
eos/program/cleos是eos项目中与nodeos之间交互信息的命令行工

具cleos的源代码,编译后与nodeos公开的REST API进行信息交互。

2.3 keosd

eos/program/keosd是eos项目中的内置钱包程序,配合钱包相关插件通过HTTP接口或RPC API与cleos进行通信,完成账户创建,转账等基本钱包功能。

2.4 eosio-abigen

eos/program/eosio-abigen是eos项目的智能合约编译器源代码(用于生成智能合约的.abi文件)

2.5 eosio-applesedemo

eos/program/eosio-applesedemo是eos项目中公私钥生成与数字签名生成组件的源代码,主要为eos项目的提供密码学(采用ECDSA算法中的secp256r1)支持,其中:

  • main.cpp 为该工具的核心主函数;

  • r1_signature_compactor为数字签名功能描述文件

  • sign.sh是生成应用程序包applesedemo.app并对其进行签名的自动化脚本。

2.6 eosio-launcher

eos/program/eosio-launcher是eos项目的P2P网络组成启动器源代码,该部分简化了nodeos节点组网的流程。

3、依赖库模块

eos项目的运行依托于许多依赖库,这些依赖库的基本信息位于eos/libraries目录中,包括:

  • eos/libraries/abi_generator

  • eos/libraries/appbase

  • eos/libraries/builtins

  • eos/libraries/chain

  • eos/libraries/appbase/fc

  • eos/libraries/chainbase

  • eos/libraries/egenesis

  • eos/libraries/utilitiles

3.1 abi_generator

eos/libraries/abi_generator包含了智能合约编译器所需的依赖文件,可以说编译器的主要代码就是位于这个目录中

3.2 appbase

eos/libraries/appbase提供了一个用于从一组插件构建应用程序的基本框架。该模块负责管理插件的生命周期,并确保所有插件按正确的顺序配置,初始化,启动和关闭。

该依赖库包含5个主要特征:

  • 动态指定要加载的插件

  • 自动加载依赖插件

  • 插件可以指定命令行参数和配置文件选项

  • 程序正常退出SIGINT和SIGTERM

  • 最小依赖(Boost 1.60,c ++ 14)

3.3 builtins

eos/libraries/builtins中包含了eos项目编译过程中所需要的compiler-RT编译器(libgcc的替换库)的源代码,包括编译器本身以及相关功能函数的代码描述。

3.4 chain

可以说eos/libraries/chain包含有eos项目的核心内容,包括区块,区块链,merkle树等数据结构以及初始区块,控制器等关键算法,这一部分将在后续的教程中展开介绍。

3.5 chainbase

eos/libraries/appbase/chainbase中定义了保存eos区块链数据的数据库结构,可以说该数据库旨在满足区块链应用程序的苛刻要求,但适用于任何需要强大的事务数据库的应用程序。

3.6 fc

eos/libraries/fc是eos项目的细胞级模块,定义了eos项目中的基本变量数据结构,包括String,Time,Base系列编码等,在后需的具体代码分析中,我们将会遇到很多fc::前缀的引用,届时具体回顾。

在eos/libraries/fc/src目录中我们可以看到具体的代码实现

3.7 softfloat

eos/libraries/softfloat包含了一个Berkeley SoftFloat,即符合IEEE浮点运算标准二进制浮点的软件实现。

3.8 testing

eos/libraries/testing包含了几个测试实例,包括对区块链数据库的链接测试,P2P网络的链接测试等。

3.9 utilities

eos/libraries/utilities主要包含了一些通用的标准函数

3.10 wasn-jit

eos/libraries/wasn-jit中包含了一个WebAssembly的独立VM。 它可以加载标准的二进制格式,也可以加载WebAssembly参考解释器定义的文本格式。 对于文本格式,它可以加载标准堆栈机器语法和参考解释器使用的老式AST语法以及所有测试命令。

猜你喜欢

转载自blog.csdn.net/akai9898/article/details/82453399