simPolk本着简单易懂的原则,其自身也遵循这个原则,通过简单易懂的方式来构建。只使用2个类文件来实现基础的区块链功能,简单的路由方式,将扩展功能轻松的组织起来。 通过模拟的方式,实现了区块链的基础功能,包括,交易、链上存储、智能合约。
-
交易的实现 simPolk不对账号进行单独密码管理,创建后即可使用,使用配置里的统一密码,模拟验证成功和失败。 交易部分采用栈(使用redis的list进行模拟)的方式进行管理,每笔转账,hash都会压入到用户独立的栈里,每笔交易的原始数据,会以hash为键值(使用redis的hash进行模拟)进行存储,使用后进行删除。
-
链上存储的实现 simPolk对链上存储采用kv方式进行(使用redis的hash进行模拟),使用json格式,字符串化后进行保存。
-
智能合约的实现
simPolk的智能合约,采用javascript实现,字符串化后保存在模拟链上。浏览器获取到智能合约之后,通过eval进行解析,传入对应的参数,生成标准数据格式,返回给服务器端的contact下的exec方法进行数据处理(包括转账和链上数据两部分),完整的模拟智能合约的运行。
- 单一入口设计
API部分以entry.php为唯一入口,方便进行管理和输出。
- 单一配置文件
simPolk的配置集中到config.php文件,位于API的根目录下,方便调整和使用。
通过调用URI参数里的mod和act进行路由,mod对应的是sim目录下对应的类,每个类下都有一个task方法,通过参数act进行内部路由。 如图所示:
-
core.class.php 数据操作类,Redis的各种操作、Merkle树的生成等功能,集成在这里。后继将实现用文件来实现redis的功能,进一步的降低部署的难度,也更方便对数据结构进行观察。
-
simulator.class.php
模拟器实现类,跳块补全、区块生成、模拟挖矿、输入输出、自动加载等功能,集成在这里。
- account.class.php
- 账户创建
- 账户列表
- 账户可用输出列表
- chain.class.php
- 区块查看
- 转账交易
- 模拟链状态
- 模拟链重置
- 模拟链重建
- node.class.php
- 网络节点列表
- storage.class.php
- 设置链上数据
- 读取链上数据
- contact.class.php
- 添加智能合约
- 执行智能合约
- sapmle.class.php 该类用来模拟substrate下独立开发的pallet,可以通过统一的路由方式来进行访问。