元界的共识算法与挖矿
1 介绍
元界是一个公有区块链,在第一阶段用工作量证明机制(POW)达成网络共识。POW机制会选取最大工作量的链作为有效链。元界网络去中心化共识由所有节点进行以下独立的几个运算相互作用产生:
- 每个独立全节点依据规则对每个交易验证。
- 挖矿节点把这些交易独立打包进新块,通过POW工作量算法计算锻造出新块。
- 每个节点对新区块进行校验,并依据最大工作量选择新区块组装链。
2 挖矿算法
元界采用了Ethash作为POW算法。Ethash是一种改良版本Dagger-Hashimoto算法。在元界区块中存有难度值,Ethash算法会通过穷举法找到一个随机数,使得结果小于难度阈值。这个随机值作为工作量计算结果保存在区块中。在Ethash中由于输出结果是平均分布的,所以穷举法是最好的方法的,寻找这样的随机数的平均时间完全取决于难度阈值的调整。Ethash算法是一个对I/O位宽要求高,内存需求大的算法,这样可以抵御矿机ASIC化。
2.1 Ethash介绍
Ethash算法流程如下:
- 根据区块高度计算出一个seed,每30000个块调整一次seed。
- 从seed生成出一个16MB的伪随机数据缓存,一般给非全节点钱包使用。
- 从伪随机数据缓存,生成一个DAG数据集,这个文件随着块高线性增长,每30000个块调整一次。一般全节点或者旷工节点使用DAG数据集。
- 挖矿计算就是从DAG数据集中抓取数据并且做哈希运算。但是仅根据16MB的伪随机数据缓存就可以验证挖矿结果。
数据集生成与挖矿计算示例Python代码参考https://github.com/ethereum/wiki/wiki/Ethash
2.2 难度调整
难度是限制合格解的空间,达到控制平均出块需要计算的次数,从而达到控制出块时间。ETP难度以单个区块进行调整,可以非常迅速的适应算力的变化。每次调整都是在上一个区块难度基础上进行调整,使得区块难度不会出现跳变,从而出现算力“暴击”的问题。计算一个区块难度时需要以下几个参数:上一块难度 _parent.bits, 上一块时间戳 _parent.timestamp,当前块时间戳_bi.timestamp。如果出块间隔大于设定时间,当前块难度difficulty= _parent.bits - (_parent.bits/1024);反之则difficulty= _parent.bits + (_parent.bits/1024)。
3 挖矿奖励
在元界网络早期,节点数目总量不足,网络系统的安全存在隐患。元界网络采用类经济奖励方式给挖矿节点分配ETP。矿工锻造出来一个区块奖励如下:
Coinbase奖励,Coinbase奖励从初始开始是3 ETP,块高每增长50万块,Coinbase奖励的ETP数目会减少5%。
区块包含的交易手续费和资产发行手续费。
未来随着元界项目平稳运作,块高到达一定数值,POW的挖矿奖励会逐渐减少,元界将切换到改良的DPOS共识算法上面。
4 挖矿JSON-RPC-API
外部挖矿程序与元界主节点钱包通过rpc请求进行通信。元界钱包提供了setmininginfo,getwork和submitwork等rpc api.详细使用方法可以参考API文档。