区块链典型挖矿算法分析

[复制链接]
12001 |0
发表于 2019-8-5 16:00:57 | 显示全部楼层 |阅读模式

自从2009年1月3日中本聪挖出BTC的创始区块以来,区块链
成为一种新的解决去中心化节点的信息同步问题的方案,其创新性
不断被人们所认知。这其中,最关键的是以PoW(ProofofWork,
工作量证明)共识机制为基础的公有链,这些系统普遍采用不同的挖
矿算法来保障整个系统的安全稳定性。
下面小编就给大家具体介绍一下这三种不同的挖矿算法。
BTC挖矿算法
BTC作为最早的区块链系统,其挖矿算法采用的是SHA256
散列函数,该函数属于SHA2系列。BTC的挖矿过程很简单:
(1)矿工收到用户的交易信息后,首先验证,然后构造交易的默
克尔树,得到一个默克尔树根哈希值,打包进区块头中。对于矿工来
说,最优的选择就是先打包手续费高的交易,这样才能保证其利益
最大化。
(2)填充区块头,组成80个字节的BTC区块头。区块头的数据
结构如表1所示。
(3)将80个字节的区块头信息进行双SHA256运算,得到一个32
字节的哈希值。之后判断得到的结果是否小于当前区块的难度值,
如果已达到,则该区块就是合法的区块。矿工把它加入到主链中,之
后开始计算下一个区块。如果不小于当前区块难度值,则继续更换
区块头中的随机数值,重新对区块头进行双哈希运算。

ETH挖矿算法
Ethash工作过程,其实就是要求从一个巨大的数据集中随机选
择若干元素,然后对其做哈希运算的运算过程。具体过程如下:
(1)生成32个字节的种子。ETH规定每30000个区块是一个窗口,在同一个窗口期中,种子是相同的。种子的生成过程是这样的:
第一个窗口期的种子是将32字节的0值做一次Keccak256运算,得到
一个32字节的种子。而以后每个窗口期的种子生成方式就是将前一
个窗口期的种子做一次Keccak256运算。
(2)生成不定长度的缓存。缓存的生成过程是这样的:每个缓存
单元的大小为64字节,即512位。第一个缓存单元是当前窗口的种子
值做Keccak512运算得到的。之后每个缓存单元都是前一个缓存单
元的Keccak512值。而每个窗口期的缓存大小随着窗口期的增加而
线性增大。初始大小为16MB,之后每个窗口期增加不到128KB。之后
将初步得到的缓存做3个轮次的RandMemoHash运算。Rand
MemoHash算法将缓存的各个单元进行混淆。
(3)生成不定长度的数据集合。首先从生成的缓存中随机找出
256个缓存单元,然后合并做哈希运算。这样得到的数据集初始大小
为1GB,而后每个窗口期增加不到8MB。注意,在验证区块的过程中,
也是同样的操作。这样就需要将缓存和数据集保存到内存中,以方
便挖矿或者验证区块的时候频繁的读取数据消耗过多的时间。
(4)矿工之后就通过PoW机制进行挖矿操作。但是因为每个缓
存和数据集生成时间需要消耗大量的时间,则为了防止在下一个
窗口期到来的时候影响出块速度,则鼓励矿工提前计算好缓存值和数据集。

FIL挖矿算法
FIL其实存在于IPFS(InterPlanetaryFileSystem,星际文件系统)的激励层,而IPFS能够提供去中心化的数据存储和访问功能。因此,FIL需要大量的数据读写操作,这就要求矿工的挖
矿过程进行数据读写操作。FIL的挖矿共分为存储挖矿和检索
挖矿两部分,分别进行数据的存储和检索工作。

通过以上三个典型算法的说明,FIL矿机挖矿淘汰后仍然可以被普通用户加以利用,这和ETH一样,均在一定程度上减少了能源浪费。

区块链典型挖矿算法分析.jpg

区块链典型挖矿算法分析.jpg
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表