主流币种PoW(工作量证明)指南
摘要: 此时此刻,除了工作量证明机制的其他共识算法也正在不断突破、创新。对于区块链这样协议式、需要大规模社会协作参与的颠覆性技术,值得我们共同期待。
我们都知道,比特币的POW(工作量证明)使用的是SHA256算法,最初个人还能通过CPU参与挖矿,但是当比特大陆、阿瓦隆等芯片厂商研发了ASIC芯片之后,挖矿就不是个人可以干的事情了。后来随着显卡挖矿以及矿池的出现,社区开始担心矿池会导致算力集中,违背中本聪“一CPU一票”的最初设计理念。在那段时间,中心化的焦虑非常严重,比特币社区讨论非常激烈,论坛里比特币一次又一次的“被死亡”,直到现在,针对矿池是否违背去中心化原则的争论仍在继续。
莱特币的SCRYPT算法
有人将原因指向了SHA256算法,认为矿机和矿池出现是算法太容易导致的,于是试图寻找更优的算法。
恰逢其时,基于SCRYPT算法的莱特币(Litecoin)横空出世。据说SCRYPT是由一位著名的黑客开发,由于没有得到诸如SHA系列的严格安全审查和全面论证,一直没被广泛推广使用。与SHA256算法相比,SCRYPT对硬件要求更高,占用更多的内存,耗费更长的计算时间,并行计算异常困难。很显然,SCRYPT算法具有更强的抵御矿机性。此外莱特币还将区块时间改为2.5分钟。在那个山寨币还凤毛麟角的年代,莱特币依靠这两点创新大获成功,长期稳坐山寨币第一宝座位置。
再到后来有人在SCRYPT算法的基础上稍作修改形成Scrypt –N算法,改进思路都一样,都是追求更大的内存消耗和计算时间,以有效阻止ASIC专用矿机。
很快,莱特币的成功催生了各种各样的算法创新。2012至2014年间,算法创新一直都是社区讨论的热门话题,每一个使用创新算法的币种出现,都能刮起一阵波澜。
串联算法与达世币
在人类惯常使用的发明创新的方法中,重新排列组合可以算是最常用的了。在增加内存消耗和增长计算时间的思路之外,有人开始思考:“能不能使用多种哈希算法,而不仅仅使用单一的某一种算法”?
于是2013年7月,夸克币(Quark)发布了,首创使用多轮Hash算法。听起来很高大上,但实际上其实很简单,就是对输入数据连续做9轮哈希运算,前一轮运算结果作为后一轮运算的输入。这9轮哈希运算使用的6种加密算法为BLAKE, BMW, GROESTL, JH, KECCAK和SKEIN,都是公认安全的哈希算法,并且现成的实现代码早已存在。
这种多轮哈希的方式一出现就给人造成直观上很安全很强大的感觉,追捧者无数。
达世币(DASH,前身是暗黑币,Darkcoin,)在此基础上再进行微创新,使用BLAKE, BMW, GROESTL, JH, KECCAK, SKEIN, LUFFA, CUBEHASH, SHAVITE, SIMD, ECHO 这11种加密算法,名曰X11,再后来X13,X15这一系列就有人开发出来了。
这类算法实际是一种串联思路,其弊端是只要其中一种算法被破解,整个算法就被破解了。好比一根链条,环环相扣,只要其中一环断裂,整个链条就一分为二。
并联算法与Heavycoin
有了串联,就自然会想到并联,Heavycoin(HVC)就率先做了尝试。虽然如今的它在国内名不见经传,但是首次实现了链上游戏,可谓名噪一时。
HVC算法细节:
1. 输入数据,进行一次HEFTY1哈希运算,得到结果d1
2.以d1为输入,再依次进行SHA256、KECCAK512、GROESTL512、BLAKE512运算,分别获得输出d2,d3,d4和d5
3. 最后分别提取d2-d5前64位,混淆后形成最终的256位哈希结果,作为区块ID。
为什么要先进行一轮HEFTY1 哈希运算呢?因为HEFTY1 运算起来极其困难,其抵御矿机性能远超于SCRYPT。但与SCRYPT一样,安全性没有得到某个官方机构的论证,于是加入后面四种安全性已得到公认的算法来增强安全性。
PRIMECOIN与素数币
正当一部分人如火如荼的探索算法,另一部分人指责POW浪费能源,那时POS机制已经实现。支持POW的人虽极力维护,但也不得不承认事实,POW确实耗费能源。这一指责打开了另一条探索之路,即如果能找到一种算法,既能维护区块链安全,又能在其他方面产生价值,那简直更完美。
在这条探索之路上最振奋人心的成果素数币(Primecoin)。它是由Sunny King发明的,这位大神之前还开发了点点币Peercoin。素数币算法的核心理念是:在做哈希运算的同时寻找大素数。为什么要寻找素数呢?因为素数在数轴上稀有且分布不规律,在数轴上寻找素数只能盲目地搜索探测,这正是POW的特征。
POW还有另一个要求是要容易验证,这方面人类经过几百年探索已经获得一些成果。素数币使用两种方法测试,首先进行费马测试(Fermat Test),通过则再进行欧拉-拉格朗日-立夫习兹测试(Euler-Lagrange-Lifchitz Test),如果两种测试都通过则可被视为是素数。
需要指出的是,这种方法并不能保证通过测试的数百分百是素数,不过这并不影响系统运行,即便测试结果错误,只要每个节点都认为是素数就行。
素数币是市场上第一个没有采用Hash工作量证明机制的加密货币,挖矿过程本身就有着一定的科学价值。但为什么没有得到大力的推广呢?
根据目前掌握的知识来看,素数在数轴上分布不均匀,且数越大素数越稀有,寻找难度不是线性递增,因此耗时也就不可预估。但是区块链要求出块稳定,素数币算法便没有得到大家的热捧。但这种探索并不是没有意义的,利用POW工作量的探索还在继续。
ETHASH与以太坊
以太坊(Ethereum)最初打算用POS,但由于POS设计存在一些问题,开发团队决定在以太坊1.0阶段使用POW方式。之后在Serenity阶段,再将以太坊从PoW转换到PoS。POW工作量证明意味着将电力转换为热量、以太币和网络稳定性。
以太坊的POW算法称为Ethash(Dagger-Hashimoto算法的改良版本),它与比特币的工作量证明算法稍微有些不同,它使得用普通硬件挖矿成为可能。
最新版本的Ethash设计旨在满足以下目标:
1. IO饱和度:该算法应该消耗几乎整个可用内存访问带宽,这是实现抵御矿机性能(ASIC-resistance)的一种策略,其针对的是可用RAM,特别是GPU中的显存,比计算机的内存更接近理论上的最优值)
2. 对GPU友好:尽可能的让GPU挖矿变得更简单。针对CPU几乎是不可能的,因为潜在的专业化收益太大,并且对CPU友好的算法确实存在易受僵尸网络攻击的弊病。所以综合考虑之后,选择了对GPU友好。
3. 轻客户端可验证性:轻客户端应能够在C语言的桌面上以0.01秒为单位来验证一轮挖矿,而在Python或JavaScript中以0.1秒为单位来验证一轮挖矿,最多占用1 MB内存(但呈指数增长)。
4. 轻客户端减速:使用轻客户端运行算法的过程应该比使用完整客户端的慢得多,以至于在轻客户端(包括通过专用硬件)运行算法并不是经济可行的挖矿方式。
5. 轻客户端快速启动:轻客户端应该能够完全运行,并能够在Javascript中在40秒内验证块。
出于以上考虑,开发团队最后倒腾出来的Ethash挖矿时基本与CPU性能无关,却和内存大小和内存带宽成正相关。以太坊的这种工作量证明算法降低了普遍用于比特币挖矿的特定硬件ASICs的效率。
此时此刻,除了工作量证明机制的其他共识算法也正在不断突破、创新。对于区块链这样协议式、需要大规模社会协作参与的颠覆性技术,值得我们共同期待。
评论(0)
Oh! no
您是否确认要删除该条评论吗?