《区块链开发指南》一一2.3 挖矿算法解析-阿里云开发者社区

开发者社区> 华章出版社> 正文
登录阅读全文

《区块链开发指南》一一2.3 挖矿算法解析

简介:

本节书摘来自华章计算机《区块链开发指南》一书中的第2章,第2.3节,作者:申屠青春 主编 宋 波 张 鹏 汪晓明 季宙栋 左川民 编著更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.3 挖矿算法解析

2.3.1 PoW挖矿算法及分析
PoW(Proof of Work),即工作证明。也就是说,你获得多少货币,取决于你挖矿贡献的有效工作,比如,你的电脑性能越好,分给你的矿就会越多,即根据你的工作证明来执行货币的分配。大部分的虚拟货币,比如比特币、莱特币等,都是基于PoW模式的虚拟货币(算力越高、挖矿时间越长,你获得的货币就会越多)。
第1章已经说过挖矿算法其实就是通过一个Hash函数找到一个满足当前难度的Nonce(包含在区块头里面)的值,Hash函数输入数据的长度是任意的,将产生一个固定且绝不雷同的值,可将其视为输出的数字指纹。对于特定输入,Hash的结果每次都不一样,任何实现相同Hash函数的人都可以计算和验证。加密Hash函数的主要特征就是不同的输入几乎不可能出现相同的数字指纹。因此,相对于随机的选择输入,有意地选择输入去找一个特定的Hash值,这几乎是不可能的,否则就破解了所使用的Hash算法,如SHA-256等。
矿工用一些交易来构建候选区块,他会计算这个区块头Hash的值,看其是否小于当前目标值,如果这个值小于目标值,矿工就会修改这个Nonce的值,然后再试一次。通常来说一个矿工会做成千上万次Hash运算,从而得到一个合适的Nonce的值,使得区块头Hash满足当前难度。这也是PoW(工作量证明)算法的由来。
PoW要求出示一定的证明表明工作量,证明可以是直接记录也可以通过概率表示,其中对于由小概率事件累计而成的工作,出示结果等同于证明了工作量(因为不太可能直接得到小概率结果)。在比特币和其他类比特币的系统中,PoW系统是以合乎要求的Hash作为工作结果的。由于矿工需要一定量的计算才能取得合法的计算结果,因此得到合法的计算结果就可以证明完成了一定量的计算。
2.3.2 PoS股权证明算法及分析
PoS(Proof of Stake),即股权证明。它又是什么意思呢?简单来说,它是根据你持有货币的量和时间,给你发利息的一个制度。在股权证明模式下,有一个名词叫币龄,每个币每天产生1币龄,例如你持有100个币,总共持有了30天,那么,此时你的币龄就为3000,这个时候,如果你发现了一个PoS区块,你的币龄就会被清空为0。你每被清空365币龄,你将会从区块中获得0.05个币的利息(可以理解为年利率5%),那么在这个案例中,利息= 3000×5%/365 = 0.41个币。
以现有的比特币运行发展情况来看,比特币每年的挖矿产量都在不断减半,我们可以预计,随着比特币产量的不断降低,矿工人数也会越来越少,这样就会导致整个比特币网络的稳定性出现问题。PoS的解决方案是鼓励大家都去打开钱包客户端程序,因为只有这样才可以发现PoS区块,才会获得利息,这也增加了网络的健壮性。
其次还有一个担忧,就是当矿工人数降低时,比特币很可能会被一些高算力的人或团队进行51%攻击,如果采用PoS体系,你即便拥有了全网51%的算力,也未必能够进行51%攻击,因为这还要求攻击者持有全球51%的货币量,而这是很难达到的。
现在,我们知道比特币是一个永远不会膨胀的体系了,因为它的货币总量看起来貌似是固定的,但实际上比特币是一个货币紧缩的体系,因为总存在钱包永久丢失的可能,PoS采用类似年利率的方式在一定程度上是可以缓解这个问题的。
不过,到目前为止,PoS算法还没有被比特币采用的迹象。
2.3.3 DPoS股份授权证明算法及分析
股份授权证明机制(DPoS)是一种新的保障加密货币网络安全的算法,由比特股bitshares提出。它在尝试解决比特币采用的传统工作量证明机制(PoW)及点点币和NXT所采用的股份证明机制(PoS)的问题的同时,还能通过实施科技式的民主,来抵消中心化所带来的负面影响。
以比特股为例来说,DPoS机制是让每一个持有BTS(比特股发行的一种加密货币)的人对为整个系统资源当代表的人进行投票,而获得票数最多的101个代表将进行交易打包计算。对此,可以理解为有101个矿池,这101个矿池彼此的权利是完全对等的。那些握着BTS选票的人可以随时通过投票更换这些代表(矿池),但如果他们提供的算力不稳定,计算机宕机或试图利用手中的权力作恶,那将会立刻被愤怒的选民们踢出整个系统,而后备代表可以随时顶上去。从某种角度来看,DPoS有点像美国的议会制度,只不过不是四年一次选举,而是时刻都在选举中。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: