eos项目(v1.0.9)主要可以分为以下八个模块:
编译模块
主程序模块
依赖库模块
插件模块
智能合约模块
测试模块
Docker工具模块
文档说明模块
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合约使用教程。