CyberMiles的愿景是在区块链基础上打造全新的电商平台。CMT是CyberMiles的项目发行的代币。CyberMiles项目目前测试网络上线,筹备近期主网上线。CyberMiles在Github上公开了区块链项目代码,代号Travis:https://github.com/CyberMiles/travis。
本文从源代码的角度详细介绍CyberMiles的区块链项目的实现以及CMT代币经济模型。
1)整体框架
CyberMiles源代码的整体框架如下图所示:
简单的说,CyberMiles基于Tendermint的共识机制框架,结合了Ethermint以及Cosmos-SDK项目,实现了投票/监管机制以及CMT的代币经济模型。
Base ABCI APP是逻辑入口。stake module实现了投票相关逻辑,governance module实现了监管相关逻辑。和交易状态相关的信息是通过go-ethereum的stateDB存在levelDB中。和投票/监管相关信息存储在sqlite3数据库中。
2)源代码结构
api - RPC接口相关逻辑
app - ABCI APP的相关逻辑,主要是三个APP:base, ethereum和store。
bin - 启动脚本
client - 客户端逻辑(attach到RPC)
cmd - 服务端命令行逻辑
commons - 常用模块(现在是账户管理)
console - js客户端逻辑
errors - 错误定义
genesis - 创世纪块解析逻辑
modules - stake/govenance/nonce/auth模块实现
server - ABCI APP的接口实现
test - 测试代码
types - 类型定义
utils - 工具类逻辑实现
version - 版本相关
vm - 虚拟机状态管理
3)Travis初始化和启动逻辑
初始化和启动代码在cmd/travis目录。初始化命令为:travis node init。
节点初始化,主要是初始化两个功能模块:initTendermint以及initEthermint。
启动命令为:travis node start,启动逻辑调用关系如下:
启动逻辑先启动了go-ethereum的node服务(Ethermint),接着启动tendermint的模块。
4)转账交易流程
通过travis attach命令可以连接到travis提供的RPC服务,用户可以在js的console环境下,提交交易。
第1步:用户通过console接口,连接到go-ethereum的RPC服务,提交交易。
第2/3步:通过Tendermint的MemPool的RPC服务广播相应的交易。
第4步:在Tendermint和其他节点形成共识,生成区块时,通过ABCI接口,通知Base App。
第5步:和交易本身相关的交易,转交给Ethermint处理。
第6/7步:go-ethereum处理交易,并记录状态在levelDB中。
5)投票和验证人相关逻辑
投票以及验证人参选等客户端逻辑在cmd/travis/client.go代码中。服务端的逻辑实现在module/stake目录中。投票人投票以及验证人参选的过程,先封装成一个特殊交易(智能合约创建交易),经过Tendermint达成共识后,由Base App区分开,调用stake模块。相关的流程如下图:
stake module使用Cosmos-SDK,也就是说stack module处理的sdk.Tx结构。Travis将投票以及验证人参选相关的“交易”和代币转账的交易做了统一(投票相关的交易包装成了一个特殊的代币交易):
封装逻辑在commands/txs/s/helpers.go文件中的wrapAndSign函数。
投票以及验证人参选的具体逻辑十分简单,操作sqlite3数据库而已,具体逻辑参看module/stake/db.go。
6)区块奖励逻辑
投票以及验证人的区块奖励逻辑在module/stack/award_calculator.go文件。有关区块奖励,CyberMiles的DPOS的说明中也有详细介绍,可参看另外一篇文章
区块链 - CMT的DPOS共识机制
。值得注意的是,官方的介绍中,验证人的奖励的计算公式有误。
简单的说,CMT每年通胀率为8%。投票人按比例进行分配。投票人奖励的一部分(按补偿比例)分给验证人。
总结:CyberMiles旨在打造基于区块链的电商生态。CMT是CyberMiles的代币名称。Travis是CyberMiles的项目代号。Travis基于Ethermint以及Cosmos-SDK设计公链,增强了投票以及验证人机制。CMT的每年的通胀率为8%。
领取专属 10元无门槛券
私享最新 技术干货