前麵我們談到礦工所要做的計算是十分困難的。我們現在談一下為什麽計算如此困難,以及看一看礦工用來進行這些計算所用到的硬件設備。


    礦工計算難度的核心在於,對sha-256哈希函數的運算。我們在第1章抽象地討論過哈希函數。sha-256是一個通用的密碼學哈希函數,它是在2001年被標準化的密碼學哈希函數大家族裏的一員。sha是安全哈希算法(secure hash algorithm)的簡稱。sha-256是一個不錯的選擇,因為它是比特幣被發明時可用的密碼學哈希函數中保密性最強的。雖然它的安全性有可能隨著時間推移而慢慢降低,但至少現在它還是很安全的。sha-256的設計來自美國國家安全局(nsa),這也導致了一些陰謀論的誕生,但是並不影響它是一個很強的哈希函數的事實。


    近距離了解sha-256


    圖5.5展示了sha-256運算的具體細節,雖然我們不需要知道比特幣工作原理的所有細節,但是對礦工計算任務的大概了解是很有幫助的。


    sha家族


    sha-256名稱中的“256”代表它有256位的狀態和輸出,技術上來說,sha-256是sha-2函數家族中幾個密切相關的函數成員之一,包括sha-512(它有更大的狀態位,所以也更加安全)。還有一個是sha-1, 這是一個有160位輸出的早期函數,雖然目前認為安全性不高,但是同樣應該在比特幣腳本裏。


    整個sha-2家族,包括sha-256在密碼學上的安全性是得到公認的,而下一代產品sha-3家族已經從一個公開的競賽(由美國國家標準與技術研究所舉辦)中誕生了。sha-3目前正在進行最後階段的標準化測試,但在比特幣出現的時候,它還沒有出世。


    sha-256是一個256位的狀態機。這256個狀態被分割成8個32位的字段,這樣它可以最優化地運行在32位的硬件上。每一輪運算選擇一定數量的字段——有些會進行一些小的逐位調整——最終進行32位模加法運算(modr addition),然後運算結果被移到狀態最左的第一個字段,這樣使得整個狀態進行向右位移。這種設計的思路來自簡單位的線性反饋移位寄存器(linear feedback shift registers,簡稱lfsr)。


    圖5.5展示了一輪sha-256的壓縮函數運算,一個完整的sha-256運算要做64次這樣的迭代運算,在每一輪運算中,會使用稍微不同的常數,所以所有的迭代運算都是不一樣的。


    礦工的任務就是盡可能快地進行這種函數運算。礦工們互相比拚運算速度,算得越快收益越高。為了實現盡可能快的速度,礦工需要進行32位字段操控,32位模加法運算,同時做按位邏輯運算。


    圖5.5 sha-256的結構


    注:這是一輪壓縮運算。maj是按位運算的。ch也是按位運算的,根據第一個輸入值的不同而決定是選擇第二個還是第三個。∑0和∑1通過按位循環和⊕運算來操縱32位的字符輸入。


    我們很快就會看到,在比特幣機製下,為了得到供其他節點使用的哈希函數,實際上要求兩輪sha-256運算。這是比特幣的奇怪之處,進行兩次運算的原因並不清楚,但這就是比特幣的個性,作為比特幣礦工隻能服從。


    cpu挖礦


    第一代挖礦工作都是在普通電腦上完成的,也就是用通用中央處理器(cpu)來進行運算。事實上,cpu挖礦的工作就像圖5.6中代碼所示的邏輯那樣簡單,也就是說,礦工簡單地按照線性的方式嚐試所有的臨時隨機數,在軟件中進行sha-256的運算,並檢查結果確認是否找到一個有效區塊。請注意,正如我們之前提到過的,這段代碼要進行兩次sha-256運算。


    圖5.6 cpu挖礦的偽代碼


    普通電腦運行這段代碼到底有多快?一台高端的個人桌麵電腦,每秒可以計算大約2千萬次哈希函數(20mh/s),按照這個速度,根據2015年早期的難度水平(267),大概需要幾十萬年來找到一個有效區塊。毫不誇張地說,挖礦真的非常困難!


    如今使用一個普通電腦用cpu挖比特幣,在目前的難度下已經無利可圖了。在過去的幾年裏,用cpu挖礦的曠工可能會非常失望地發現,他們永遠不可能通過挖礦賺到錢,因為他們不了解比特幣是如何運行的。


    gpu挖礦


    第二代礦工意識到用cpu挖礦是在做無用功,他們開始用顯卡或者圖形處理器(gpu)來挖。


    幾乎每一個現代個人電腦都有內置的gpu以支持高性能圖像處理,這些gpu都有高吞吐量和高並行處理功能,這兩點對比特幣挖礦都非常有利,比特幣挖礦存在大量的並行處理,因為你需要同時用不同的臨時隨機數計算多個哈希值。2010年,有一門計算機語言開放運算語言(openputingnguage,簡稱opencl)誕生了,這是一個可以使gpu進行非圖像處理類工作的通用語言。opencl是一門高級語言,人們可以用它在顯卡上做很多種類型的運算,而且速度比在cpu上的要快。這給通過gpu來進行比特幣挖礦鋪平了道路。


    當時,通過顯卡來挖礦有好幾個吸引人的地方。首先,買顯卡很容易,而且哪怕是業餘愛好者也能輕鬆配置顯卡。你可以在網上或大多數專營電子產品的商場裏買到它。對大眾來說,顯卡是最容易獲得的高端硬件設備。其次,顯卡還有一些格外適合比特幣挖礦的特性:顯卡的並行性設計使其具備很多算術邏輯單元(arithmetic logic units,簡稱alu),可以同時進行sha-256運算。有一些gpu還特別集成了針對位移操作的指令,這對sha-256的運算非常有用。


    大多數顯卡都可以超頻,這意味著如果你願意承擔顯卡過熱或者出現故障的風險的話,你可以讓顯卡以高於設計頻率的頻率更快地運行。超頻是遊戲玩家們渴望了多年的特性。對於比特幣挖礦來說,超頻會增加收益,即使超頻可能引起一些運算錯誤。


    舉例來說,將顯卡超頻50%,也就是說運算速度加快50%,同時可能會造成sha-256運算出錯概率增加30%。如果顯卡錯誤地接受了一個不正確的運算結果——雖然不太可能發生——你還可以通過cpu來進行二次確認。然而,你可能永遠都不會知道一個正確的運算結果被錯過了。但是通過超頻產生的運算速度的增加,完全可以抵消由於顯卡運行錯誤產生的正確輸出減少,這樣超頻還是合算的(從經濟效益上來說)。在上述的例子中,超頻使得吞吐量增加到原來的1.5倍,而運算成功率降低到了0.7,那麽乘積就是1.05,也就是意味著超頻使得你的獲利增加了5%。為了最大化收益,人們花了很多時間去優化最佳的超頻比例。


    最後,你可以通過一個cpu和一個主板加載許多個gpu。然後你便可以在安裝了多個gpu的電腦上運行比特幣節點,監聽網絡收集交易,組裝區塊,同時用多個gpu進行sha-256的運算,以更快地找到正確的臨時隨機數及其對應的有效區塊。很多人創造性地發明了很多有趣的“自製型”硬件設置,如圖5.7所示,用一個cpu來驅動很多個gpu。這種情況僅發生在比特幣的早期,當時大多數礦工都是比特幣的愛好者,他們並不具備服務器搭建及運營經驗。但是他們還是做了很多巧妙的設計,使得大量的gpu可以在一個較小的空間裏同時運行,同時還解決了散熱的問題。


    gpu挖礦的缺點


    gpu挖礦也有缺點。gpu有大量的內置硬件來進行圖形處理,這些特定硬件對比特幣挖礦沒有任何用處,比如它們大量的浮點運算單元(floating point units),在sha-256的運算中完全用不到。


    礦工和遊戲玩家的對比


    根據民間傳說,2011年,由於比特幣礦工采購了太多的顯卡以至於影響到了正常的市場需求,這造成了比特幣社區和遊戲社區之間的摩擦,因為遊戲玩家們發現采購某個熱門顯卡變得越來越難。有趣的是,盡管如此,很多失望的遊戲玩家因此而對比特幣產生了興趣,甚至有些遊戲玩家因此而變成了比特幣礦工!


    圖5.7 一個用於比特幣挖礦的家庭組裝式gpu機架


    資料來源:istván finta, bitcointalk.org


    同時gpu也沒有很好的冷卻處理設置,尤其是當你把大量的gpu堆放在一起的時候,這個問題就尤為突出。設計顯卡的時候並沒有考慮如圖5.7所示的這種堆放的情形,原始的設計場景就是在一台電腦、一個機箱、一塊顯卡運行做圖形處理而已。


    gpu也非常耗電,所以一台普通的電腦也會消耗很多電。由此引發的另一個缺點就是,你要麽自己構建特定的主板,要麽花大價錢購買可以搭載大量顯卡的特定的主板。


    一個非常高端的顯卡經過超頻之後可能使得運行速度達到200mh/s,也就是說,每秒可以進行2億次哈希運算,這是用cpu不可能達到的一個數量級。但是即便如此,即使你將100塊這樣的顯卡集成在一起進行運算,根據2015年早期的比特幣挖礦難度,仍舊需要運算幾百年才有可能找到一個有效區塊。因此,用gpu來挖礦基本上已經成為曆史,但是在其他一些另類幣的早期階段還是很有效率的。


    現場可編程門陣列挖礦


    2011年左右,用於現場可編程門陣列(field-programmable gate array,簡稱fpga)的硬件設計語言verilog,第一次用於比特幣挖礦。一些礦工開始用fpga來代替gpu進行挖礦。


    圖5.8 家庭組裝式fpga機架


    資料來源:xiangfu liu,.openmobilefree


    fpga的工作原理是在追求定製硬件的最佳性能的同時,用戶可以現場調試或者修改硬件參數。相比之下,常用的硬件是在出廠之前就設計好的,以後是無法更改定製而隻能永遠做同樣的工作。


    fpga比gpu的性能好,特別是在數位操作(bit fiddling)方麵fpga很輕易就可以做到。fpga也很容易冷卻,不像gpu,fpga理論上可以使用硬件板卡上的每一個晶體管進行挖礦運算。跟gpu一樣,可以將很多fpga堆疊在一起,通過一個中央處理單元來驅動所有的fpga,如圖5.8所示。總體來說,相比顯卡堆疊,我們可以構建一個更加幹淨整潔的大型fpga陣列。


    精心使用fpga可以使得運算速度上升到1gh/s,也就是每秒10億次哈希運算。這顯然比cpu或者gpu在性能上都有很大的提高,不過即使你有100塊每秒運算1gh/s的fpga板,在2015年早期的比特幣難度之下,平均仍舊需要100年的時間才能找到一個有效區塊。


    雖然性能提高了,但由於以下幾個原因,用fpga挖礦的時代也非常短暫:首先,使用fpga來挖礦其實更加困難——幾乎需要一直超頻使用——這遠超fpga供普通消費者而設定的頻率。因為這個原因,很多人在用fpga挖礦的時候經常看到各種報錯和故障。其次,優化fpga的32位加法處理上十分困難,而這在sha-256的運算中非常關鍵。最後,fpga在多數商店都買不到,而且相比gpu來說,隻有少數人才知道怎麽搭建fpga並進行相應的編程。


    最重要的是,即使在性能功耗比方麵,fpga相比gpu的提升也不是很高,這就使得用fpga挖礦隻是一個短期現象。盡管gpu挖礦的時代持續了大約一年,而fpga存在的時間更加有限——僅僅存在了幾個月,之後定製化的專用集成電路技術(application specific integrated circuits,簡稱asic)就誕生了。


    專用集成電路技術挖礦


    當今的挖礦市場主要被asic所主導。這些ic芯片(集成電路芯片)被設計、製造、優化,就是為了比特幣挖礦這個唯一目的。有幾個大型的供應商出售這些芯片,消費者可以買到不同種類的asic礦機——較大型但略微昂貴點的款式,或者更加小巧的,當然還有一些可以節省能源的環保型等。


    設計asic芯片需要非常專業的知識,它們所需要的研發周期也比較長。盡管如此,比特幣asic芯片的設計製造過程(從發現問題到製作出解決問題的芯片)出乎意料地迅速,甚至打破了芯片行業的業界紀錄。但弊端是前幾代的早期芯片的設計有許多缺陷,而且大多數芯片沒有達到它們所承諾的性能指標。但現在的比特幣礦機芯片技術,已經相當成熟可靠了。


    到2014年年底,asic芯片的壽命十分短暫,原因是整個網絡的運算能力不斷地快速上升。絕大部分早期的asic芯片在6個月後就被淘汰了。在這段時間裏,大部分的利潤都是在早期實現的(後期幾乎沒有什麽利潤了)。礦工往往在asic芯片“保鮮期”的前6個星期可以實現整個利潤的一半,這就使得芯片的出貨速度顯得至關重要。基於這個行業的不成熟,許多礦工經常遇到延遲出貨的情況,有些芯片送到客戶手上的時候已經快要被淘汰了。由於比特幣的全網運算能力已經穩定下來,現在的比特幣挖礦設備有比較長的壽命,但在早期,失望的客戶對供應商的欺詐控訴的事件時有發生。


    在比特幣曆史的大部分時間裏,挖礦的經濟效益對小礦工來說一直不是很好,這些小礦工們需要通過在線預定礦機,等待礦機生產送貨,然後再開始挖礦賺錢。實際上,大多數情況下,由於不斷增加的挖掘難度,很多人是一開始就注定要虧錢的。好在到2013年的時候,比特幣價格大漲,徹底扭轉了比特幣礦工虧錢的狀況。實際上,挖掘比特幣一直是一個很昂貴的投資,因為要賭注比特幣的價格會上升,即使是在挖掘比特幣中賺錢的那些礦工,如果能夠把投資於挖掘設備的錢直接用於購買比特幣,並在盈利時賣掉,這樣他們的狀況會更好些。


    如今你仍然可以購買礦機,我們也不會勸阻你通過這種方式去了解比特幣和加密數字貨幣,但是我們再次強調,這不是一個明智的生財之道。考慮到礦機運行所需要耗費的電力成本以及冷卻成本,大多數asic礦機都無法靠挖礦來賺回成本。


    如今:專業挖礦的天下


    在今天,挖礦已經從個人領域轉到了大型專業挖礦中心。為了保持競爭優勢,運作這些挖礦中心的公司不願意公布其運營細節。據猜測,這些運營者大量采購打過折的更新的功效更高的asic礦機而不是采購那些能夠直接出售給個人的asic礦機來維持利潤。


    圖5.9就是一個在格魯吉亞運作的挖礦中心的圖片。


    圖5.9 bitfury的挖礦中心


    注:在格魯吉亞運作的專業挖礦中心。


    要建立一個挖礦中心,需要具備三個重要因素:氣候、電費、網絡接入速度。尤其是要找一個氣溫偏寒的地方,這樣可以節省冷卻費用(大型計算中心會產生大量的熱量,如不馬上降溫,會損害礦機)。冷卻是比特幣挖礦最大的挑戰,其挖礦本身的耗電量,用單位麵積來算要超過傳統的數據中心,所以也會產生差不多當量的熱量需要冷卻。當然那裏的電費要便宜。另外,接入網速要快,使得與比特幣網絡中的其他節點更快速地鏈接,這樣當新的區塊被廣播出來的時候,你可以很快監聽到。基於這些考量,所以格魯吉亞和冰島成為比特幣挖礦中心的首選之地。


    與挖金礦的相似之處


    盡管比特幣挖礦這個名詞起得很有意思,如果回顧比特幣挖礦的發展曆程,我們就不難發現其與曆史上的挖金礦有著有趣的相似之處。它們都開始於類似的淘金者熱潮,很多年輕人和業餘愛好者積極地參與其中。


    比特幣挖礦經曆了一個逐漸演化的過程:從cpu到gpu,再到fpga,最終達到現在的asic。而曆史上的挖金礦則是從個人拿著盤子在沙裏淘金,到一小群人用流沙槽來淘金,再到一群人用水衝刷金山來淘金,直到現代機械化露天挖礦(如圖5.10)。比特幣與黃金都從個人操作為主逐步演變為大公司專業運作。另外一個相似點就是,大多數的利潤都被設備製造商拿走了,不管是黃金采掘設備還是比特幣asic礦機生產商,而埋單的都是那些希望一夜致富的人。


    圖5.10 比特幣和黃金的挖礦進程


    注:我們可以看到,比特幣挖礦和黃金采掘進程有一個清晰的類似進程,兩種活動在最初都對個人用戶很友好,但是隨著時間的推移,被大型公司采取集中式大批量運作控製。


    未來


    現在,用asic挖礦是唯一一種可以賺錢的比特幣挖礦手段,但對個體礦工來說,是十分不友好的。人們不禁要問,未來會如何發展?小規模礦工是否永遠不可能再參與到比特幣挖礦中?是否有辦法把小規模礦工重新納入挖礦體係中去?更重要的是,現在使用的asic和專業挖礦中心是否已經違反了比特幣當初設計的初衷:一個完全去中心化的係統,在這個係統上裏每個人都能用自己的電腦去挖礦。


    此外,如果這已經違背了中本聰對比特幣的最初設計,換成係統隻允許cpu來挖礦是不是更好?我們將在第8章探討這些問題,以及一些對asic不友好的替代方案。


    自我循環周期


    事實上,有一些規模較小的另類幣已經使用了和sha-256不同的解謎算法,但是它們的挖礦發展軌跡和比特幣沒有什麽不同。我們將在第8章到第10章更深入地討論這些另類幣,但是請記住,asic的研發和生產有著比較長的時間周期,所以如果一個使用新的解謎算法的另類幣(即使隻是在sha-256的基礎上做一點修改),在有針對性的asic麵世之前還是會有一段時間。通常跟比特幣一樣,其他另類幣的挖礦發展也會經曆從cpu到gpu,再到fpga,或者直接到asic的過程(前提是這個另類幣非常成功,比如萊特幣)。


    因此,小規模礦工的策略也許應該是嚐試一些新的另類幣,在它們的價值還沒有足夠大到吸引大型挖礦集團投資的時候,成為這些另類幣的挖礦先行者,就跟黃金采掘的過程一樣,小規模礦工可以去嚐試那些還沒有被證明儲量的區域。當然,這也意味著先行者們將會麵臨一個重大的風險,也就是這些另類幣有可能永遠不會成功。

章節目錄

閱讀記錄

區塊鏈:技術驅動金融所有內容均來自互聯網,鉛筆小說網隻為原作者阿爾文德·納拉亞南 / 約什·貝努 等的小說進行宣傳。歡迎各位書友支持阿爾文德·納拉亞南 / 約什·貝努 等並收藏區塊鏈:技術驅動金融最新章節