比特币作为最早的区块链系统,其挖矿算法采用的是SHA256 散列函数,该函数属于SHA2系列。比特币的挖矿算法过程很简单:
(1)矿工收到用户的交易信息后,首先验证,然后构造交易的默 克尔树,得到一个默克尔树根哈希值,打包进区块头中。对于矿工来
说,最优的选择就是先打包手续费高的交易,这样才能保证其利益 最大化。
(2)填充区块头,组成80个字节的比特币区块头。
(3)将80个字节的区块头信息进行双SHA256运算,得到一个32 字节的哈希值。之后判断得到的结果是否小于当前区块的难度值,
如果已达到,则该区块就是合法的区块。矿工把它加入到主链中,之后开始计算下一个区块。如果不小于当前区块难度值,则继续更换
区块头中的随机数值,重新对区块头进行双哈希运算。
比特币采用POW算法进行挖矿,POW算法全称Proof of
Work,工作证明。这就是说你的收益取决于你对区块链做出的贡献,也就是我们在挖矿时的有效工作,换句话来说,你的工作效率和效力越高,你的收益就越高。应用于挖矿的区块链技术来说,挖矿时的工作效率越高,所获得的数字货币就越多,不少的主流数字货币都是采用这种模式的。
如果你百度/谷歌搜索 比特币挖矿的原理的话,都会给你说是计算一个复杂的数学问题而已,但是这么说的话太笼统而且也太简单。
采矿引擎讲解工作这是一个重要的知识点,所以我们需要了解一些密码学知识和哈希算法相关的知识,才能知道挖矿的基本原理。
单向加密人类能够理解的输入,例如 Hello World
,并将其扔到某个加密函数(即所谓的复杂的数学问题),加密函数的算法越复杂,逆向工程就越困难。
例如一个 SHA – 256
的例子,网站(http://tool.oschina.net/encrypt?type=2)可以很快的计算散列值,让我们来散列 “Hello World”
看看会得到什么结果:
不管你试验几次都会得到一样的散列值,在编程中这种被称之为幂等性。
加密算法的一个基本特性就是,它们很难通过逆向工程来得到明文结果,但是十分容易验证他们的加密结果,例如这里的 “Hello World”
很难通过逆向工程得到他的原明文结果,比特币采用的是 Double SHA-256 也就是将明文通过 SHA-256 计算过一次之后,再拿 SHA-256
针对散列值再次进行计算,在这里我们只使用 SHA-256 来进行加密。
比特币通过让参与者散列随机的字母与数字的组合,直到计算出来的散列包含前导 0。
例如我们计算 886 的散列值可以得到如下结果:
000f21ac06aceb9cdd0575e82d0d85fc39bed0a7a1d71970ba1641666a44f530
它返回了 3 个 0 作为前缀的散列值,但是我们怎么知道 886 计算出来的散列结果产生了 3 个 0 呢?
答案是我并不需要知道。。。我需要知道矿工给我的散列值前导有几个零就好了,并不需要复杂的算法来验证整个散列值的有效性。
比特币则稍微复杂一点,它每隔 10 分钟生成一个新的区块,新区块的散列值的难度它可以动态调整,就类似于 CLR 的 GC
一样,它可以根据目前挖矿的人数来进行难度动态调整,如果挖矿的人多的话,则调高难度,少则调低。
免责声明: 文章源于会员发布,不作为任何投资建议
如有侵权请联系我们删除,本文链接:https://www.sws100.com/qukuai/289118.html