挖礦算法詳情
開發挖礦程序需要熟悉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 4
恆久幣(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 4
比原鏈(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%攻擊繼續加大算力,可以回滾交易記錄,把已經確認的交易再回滾掉。回滾掉自己的交易,達到雙重支付的目的。想回滾的交易越久,需要的算力越大,回滾難度也越大。