EOS源代码架构解析(三)

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

  1. 编译模块

  2. 主程序模块

  3. 依赖库模块

  4. 插件模块

  5. 智能合约模块

  6. 测试模块

  7. Docker工具模块

  8. 文档说明模块

5、智能合约模块

EOS项目的基本功能是通过系统合约提供的,用户可以调用已经部署上链的智能合约实现特定的功能,也可以通过C++语言自行编辑.cpp智能合约,并通过系统提供的eosiocpp编译器将.cpp、.hpp文件编译成.wasm和.abi文件部署上链,下面简单介绍一下eos项目中智能合约文件夹下的各个合约文件功能,文件结构如下图。

EOS项目的智能合约代码位于eos/contracts目录下,包括三个层次:

  • 系统合约层;

  • 依赖库层;

  • 测试与示例层。

5.1 系统合约层

总结下来,EOS项目共有5个系统级智能合约:

  • eos/contracts/eosio.bios

  • eos/contracts/eosio.msig

  • eos/contracts/eosio.sudo

  • eos/contracts/eosio.system

  • eos/contracts/eosio.token

5.1.1 eosio.bios

eos/contracts/eosio.bios合约用于启动EOS的P2P网络,该合约可以直接控制其他帐户的资源分配并访问其他特权API调用,具体启动流程如下:

  • 初始启动节点部署该合约,并设置所需的参数;

  • 待连接节点通过初始启动节点的地址与之相连;

  • 初始启动节点调用bios合约,为待连接节点设置权限。

5.1.2 eosio.msig

eos/contracts/eosio.msig目录定义了多签系统合约,实现了一个多签功能,由于EOS要求系统的每一次更新都需要出块节点完成一次多签,当签名数达到2/3+1时,更新才能生效。所以出块节点可以调用这个合约实现多签功能。

5.1.3 eosio.sudo

eos/contracts/eosio.sudo合约实现了创建EOS系统中root账户的功能,用于修改系统代码与更新合约。

5.1.4 eosio.system

eos/contracts/eosio.system目录可以算是EOS系统合约中最重要的部分,实现了EOS项目的所有基本功能:

  • 创建新账户;

  • 部署智能合约;

  • 交易RAM;

  • 抵押获取资源(net、cpu);

  • 投票;

  • 领取节点奖励;

  • ……

5.1.5 eosio.token

eos/contracts/eosio.token目录实现了发行token的功能,可以说EOS本身代币或后续基于EOS的代币都是通过该合约发行的,主体函数包括:

  • 发行新代币;

  • 初始分发;

  • 转账;

  • 查询余额。

5.2 依赖库层

上述5个系统合约的实现离不开一个庞大的依赖库,其中包括数据的定义(account、asset等)、还包括一些常用函数(权限管理、序列化等),我们将在后续的算法分析中结合特定示例详细展开。

5.3 测试与示例层

EOS给出了一些有趣的示例合约和测试文件供用户理解原理与测试功能,主要包括:

  • eos/contracts/dice:掷骰子对赌合约;

  • eos/contracts/bancor:bancor算法调用入口文件;

  • eos/contracts/exchange:去中心化交易所合约;

  • eos/contracts/hello:helloworld合约;

  • eos/contracts/social:类似Steem的社交平台合约(只包含基本功能);

  • eos/contracts/test_前缀:一些测试文件。


 

6-8、其他模块

EOS项目中的测试模块、Docker工具模块和文档说明模块属于辅助模块,所以放在一起总结。

6. 测试模块

EOS提供了一些测试文件,供用户测试节点是否运行正常,其中测试分两大类:

  • 对链功能的测试:包括与区块链之间的数据交互,transaction分发等;

  • 对网络层的测试:包括P2P网络传输功能、cleos与nodeos之间的通信等;

7. Docker工具模块

EOS允许通过Docker运行节点或钱包,eos/Docker文件夹下包含了一些通过Docker启动并运行程序的必要文件:

8. 文档说明模块

最后一章,我们罗列以下EOS给出的一些说明类文档:

  • eos/README.md:节点部署等说明;

  • eos/LICENSE.txt:版本号与许可文件;

  • eos/tutorials:关于主网启动与exchange合约使用教程。

猜你喜欢

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