开发挖矿程序需要熟悉CPU指令集、显卡指令集、显卡驱动。使用C++开发,关键地方要用汇编优化。大多数币的开发团队主要都是开发应用,对挖矿算法的开发很少,一般都是使用现有的挖矿算法,简单修改一下参数。挖矿算法开发的好,币不一定能成功;挖矿算法开发的差,币一定会失败。
很多币都是开发团队发布了钱包,刚开始只能钱包挖矿。过了几天,就有第三方做出来了CPU挖矿程序,收一点手续费。再过段时间,就有第三方做出来了显卡挖矿程序,也是收一点手续费。有些开发者以专门优化挖矿程序程序为主业。
我把挖矿算法主要分为两种:需要使用大量硬件资源用于计算是POW算法。不需要使用大量硬件资源用于计算,但需要用币挖矿是POS算法。POW算法出了新币种都说自己是POW。POS算法喜欢标新立异,只要出了新算法,起个新名字,都说自己不是POS。POW各种算法之间的差别很大,POS各种算法之间的差别很小,主要是名字上的差别。
POW算法比POS更安全。无论POW,还是POS,想让网络安全和稳定,全网确认时间最少是90秒。当然,可以把一个块拆分开,出块的时候先出块头,块头出来了,再出块的内容。这样可以减少全网确认时间。
比特币(Bitcoin)是Sha256d算法,中本聪设计的时候提出了人人挖矿的理念。比特币最初是钱包挖矿,后来有了CPU挖矿程序,再后来有了显卡挖矿程序,2012年有了ASIC挖矿。早期很多山寨币都是使用的Sha256d算法,比特币矿机出现后,这些山寨币由于全网算力低,经常被51%攻击,就存活不下去了。
大部分币的开发团队都反对ASIC,使用各种不能用于ASIC挖矿的算法,很少有开发团队希望自己的币能被ASCI挖矿。
莱特币(Litecoin)是Scrypt算法,对内存依赖很高。2013年,比特币和莱特币价格大涨。那时候莱特币还是显卡挖矿,认为做不出来ASCI,大量新出现的山寨币使用Scrypt算法。机枪池大量出现,矿工在矿池挖莱特币,矿池实际让矿工挖的是同算法其它收益更高的币,矿池还是支付给矿工莱特币。矿池在交易平台大量砸盘卖出挖到的这个币,一直跌到挖矿收益很低,这个币基本就完了,矿池再换挖其它币用机枪池挖矿。2014年,莱特币矿机被做出来了,芯片内集成了存储。
合并采矿是在矿池实现的。被合并采矿的币必须支持,才能和主链合并采矿。在几乎不影响主链挖矿收益的同时,更多的挖出被合并采矿的币,是矿池的竞争力。
比特股PTS(Bitshares PTS)是2013年发布的,开发团队提出了人人挖矿的理念,并表示只能CPU挖矿。过了才2个多月,就有公开的显卡挖矿程序了。
质数币(Primecoin)让挖矿计算有意义的数据。以前各种币挖矿都是进行无意义的计算,质数币的计算是用来寻找大质数,这是有意义的。质数币刚开始也是CPU挖矿,很快就有第三方做出来了显卡挖矿程序。
黎曼币(Riecoin)使用了改进的计算质数算法。黎曼币的算法涉及到数论极其极其复杂,需要片上存储和大内存,只能CPU挖矿,做不出来显卡挖矿程序和ASIC。黎曼币挖矿程序算法的作者是卡内基梅隆大学计算机科学终身副教授,他把算法公开在了自己博客上。https://da-data.blogspot.com/2014/03/fast-prime-cluster-search-or-building.html
恒久币(Aeternity)设计出了布谷鸟(Cuckoo)算法,核心散列函数是cuckaroo和cuckatoo。需要片上存储,适合CPU挖矿,CPU的缓存就是片上存储。当然,需要的存储空间不能超过CPU缓存。不适合显卡挖矿,显卡GPU的片上存储有限,板载存储显存需要外排序,效率能有CPU的10%就不错了。恒久币最初希望手机CPU能挖矿,设计了布谷鸟算法,后来恒久币还是放弃了手机CPU挖矿。恒久币实际使用的算法,需要的存储空间远远超过了CPU缓存,就适合显卡挖矿。
古灵币(Grin)算法中需要的存储空间也远远超过了CPU缓存,也是适合显卡挖矿。
门罗币(Monero)是CPU挖矿,用了AES-NI指令,不适合手机CPU挖矿。门罗币开发团队一直反对ASIC,并声称出现ASIC就硬分叉换算法。2018年,门罗币ASIC出现后,门罗币开发团队就对门罗币换了新算法并进行硬分叉。门罗币新链和旧链都获得了交易平台和矿池的支持,ASIC还能继续在旧链挖矿。矿机商又改进ASIC,制造出来了能挖新链的ASIC,门罗币开发团队再次换算法硬分叉。矿机商和开发团队持续升级争斗,门罗币换了很多算法,也出来了很多链。钱包有很多版本,用户在使用时不方便,造成了很多用户和矿工流失。各个版本的门罗币发展的都不好。
真正CPU挖矿的币就只有黎曼币,但黎曼币没有发展起来。由于很多做CPU挖矿的币,要么做出来了显卡挖矿程序,要么做出来了ASIC。以后就很少有开发团队提起人人挖矿的理念,不再想着做CPU挖矿的币了。
达世币(Dash)是X11算法,开创了主节点概念。达世币在开始是显卡挖矿,开发团队不希望ASIC挖矿,后来还是出现了ASIC。达世币主节点需要一直在线才有收益,主节点不参与计算,网络安全由POW保障,POW负责给主节点发币,主节点只领币。不要把主节点的概念和POS弄混了,主节点和POS不能共存。达世币主节点验证算法最初很简单,但没有任何安全可言,就不断改进主节点验证算法,后来变得极其复杂。其它主节点币,都是用的达世币主节点算法,只是用的版本不同。
X13、X16R等算法,都是X11算法的变种,设计之初都希望抵御ASIC,但随着市场越来越大,还是会做出来ASIC。
以太坊(Ethereum)出块时间10多秒,全网需要20多个确认,全网确认时间也5分钟了。以太坊挖矿需要大内存和大内存带宽,适合显卡挖矿。GPU运算,显存存储,GPU和显存之间带宽足够。以太坊虽然出来了ASIC,但制造门槛高,比显卡优势大不了多少,没有把显卡挖矿给淘汰了。
双挖是在本地实现的。在以太坊挖矿访问显卡显存的等待时间,双挖其它的显卡币。
Nicehash和Miningrigrentals是算力交易平台,能买卖很多算法的算力。以前只有机枪矿池才能做到某种算力挖同种算法的小币种,现在能直接通过平台买算力很方便。
信用币(Credits)实现了抵押挖矿和借贷功能,使用显卡挖矿。挖矿的时候,如果不抵押币,难度会很高,抵押了币难度会降低。如果没有币抵押,可以在钱包中向第三方借贷。信用币很少有人知道。https://github.com/credits-currency
比原链(Bytom)开发团队主动迎合ASIC,刚开始就ASIC挖矿,后来发现显卡挖矿效率更高。开发团队主动迎合ASIC是很不好的。
爆裂币(Burstcoin)是硬盘挖矿,虽然叫POC算法,但应该属于POW算法分类下。先向硬盘写入数据,挖矿过程是查询数据,查询完等待。由于有等待时间,挖矿收益与硬盘速度无关,只与硬盘容量有关。最近,已经有显卡和硬盘共用的挖矿程序了,硬盘中写入的是压缩数据,查询的时候由显卡解压缩,显卡已经提高了1倍硬盘利用率。随着挖矿程序的继续优化,硬盘利用率还能进一步提升。显卡的参与,已经违背了这个算法设计的初衷。另外,硬盘挖矿每个区块需要等待计算结果,这就造成了网络不安全,不需要51%算力就能发动攻击,大概只需要20%-30%的算力就能发动攻击。
点点币(PPcoin)是POS算法,使用很少的硬件用于计算,需要用币挖矿。点点币挖矿不需要一直运行钱包,一个月运行一次钱包,挖矿收益也差不多。有些POS算法的币,需要一直运行钱包才有收益。
比特股(Bitshares)是鉴证人,有101个。EOS是超级节点,有21个。比特股和EOS,既不属于POW,也不属于POS。鉴证人和超级节点,也被称为代理节点。需要全网投票选出代理节点,由代理节点挖矿。
51%攻击不能直接修改任意地址的币,可以无效掉正在进行的任意交易,包括无效掉别人的挖矿产出。拥有51%的算力,就可以获得全网100%的挖矿产出。51%攻击继续加大算力,可以回滚交易记录,把已经确认的交易再回滚掉。回滚掉自己的交易,达到双重支付的目的。想回滚的交易越久,需要的算力越大,回滚难度也越大。
我的看法是:Nervos开发团队不要过于迎合ASIC,也不要遇到ASIC就硬分叉,而是在最初设计的时候就使用难以做ASIC的算法。提高ASIC制造门槛,即便做出来了ASIC,也要让ASIC发挥不出来优势。从比特币到莱特币,再到以太坊,它们在当时都是显卡挖矿的大币种,都撑起过整个显卡挖矿市场。以太坊转POS后,必定会释放很多显卡算力,会有下一个大币种撑起整个显卡挖矿市场。Nervos应该选择类似以太坊,需要大内存和大内存带宽的显卡挖矿算法。