就在一年多以前,Braiins OS(slush pool)啟動(dòng)了第一個(gè)用于比特幣挖礦的開源軟件項(xiàng)目:Braiins OS miner。隨著2017年隱蔽運(yùn)行的AsicBoost慘
就在一年多以前,Braiins OS(slush pool)啟動(dòng)了第一個(gè)用于比特幣挖礦的開源軟件項(xiàng)目:Braiins OS miner。隨著2017年隱蔽運(yùn)行的AsicBoost慘敗,針對(duì)ASIC礦機(jī)的開源操作系統(tǒng)的必要性變得顯而易見了,但無(wú)論發(fā)生什么事件,這一點(diǎn)都將很重要。由于只有極少數(shù)競(jìng)爭(zhēng)性硬件制造商為比特幣構(gòu)建ASIC專用礦機(jī),因此提供透明的替代工廠固件的方法可能會(huì)分散整個(gè)挖礦行業(yè)中最集中的部分。
但是,Braiins OS只是整個(gè)比特幣挖礦堆棧的一個(gè)組件。當(dāng)我們開始這個(gè)項(xiàng)目時(shí),我們的更大抱負(fù)是使整個(gè)堆棧開源,標(biāo)準(zhǔn)化,高效和安全。這意味著要處理堆棧的其他組件:CGminer和分層協(xié)議。我們將在以后的文章中分享有關(guān)后者的最新信息,但現(xiàn)在,我們將專注于我們開發(fā)的替代CGminer的替代品,我們將其稱為bOSminer。
CGminer的背景
CGminer最初是任何人都可以運(yùn)行的開源CPU礦工程序。隨著2010年底GPU挖礦的引入,我們開始看到礦機(jī)的某些開源部分正在消失。每個(gè)GPU變體都有正在開發(fā)的GPU內(nèi)核的特殊部分,并且只有其中一部分是立即開源的。整個(gè)社區(qū)都無(wú)法使用任何可用的東西。
FPGA是數(shù)字貨幣挖礦硬件的下一個(gè)發(fā)展時(shí)期,但就此CGminer組件而言,變化不大。有些人將他們的代碼開源,而其他人則沒有。
然后,在2012年末,ASIC進(jìn)入市場(chǎng),并迅速開始主導(dǎo)SHA-256算法。ASIC是嵌入式設(shè)備,這意味著它們包含一個(gè)特殊的(而不是通用的)目的計(jì)算系統(tǒng)。典型的ASIC體系結(jié)構(gòu)包括以下內(nèi)容:
通常,您有一個(gè)控制板,上面帶有一個(gè)FPGA和一個(gè)運(yùn)行某種形式的Linux的CPU,然后還有一些帶有挖礦芯片的哈希算力版,這些芯片可以執(zhí)行實(shí)際的比特幣挖礦工作??刂瓢逶诖梭w系結(jié)構(gòu)中的作用是連續(xù)向芯片提供適量的新挖礦工作。最初,CGminer用于此目的。但是,隨著時(shí)間的流逝,制造商將邏輯從CGminer轉(zhuǎn)移到控制板上的FPGA。
最有名的例子就是我們上面提到的:Antminer S9發(fā)生的AsicBoost事件,其中FPGA位于CPU和哈希算力板之間,暗中啟用了AsicBoost功能。制造商實(shí)質(zhì)上禁止使用AsicBoost,因?yàn)榭刂破髦械拇a是有意的錯(cuò)誤,并且沒有記錄在案??梢允褂靡恍〤Gminer源代碼,但是它只會(huì)產(chǎn)生不好的解決方案,幾乎沒有用。
目前,我們需要一個(gè)FPGA和一個(gè)微控制器來(lái)驅(qū)動(dòng)哈希算力板。CGminer實(shí)質(zhì)上已成為FPGA的雜亂無(wú)章且嚴(yán)格受限的前端。實(shí)際上,它甚至達(dá)到了創(chuàng)建它的工程師Con Kolivas都必須停止支持它的地步。
同時(shí),由于ASIC架構(gòu)如此之大,CGminer本身還不足以運(yùn)行整個(gè)系統(tǒng),因?yàn)樗\(yùn)行的是某些Linux。因此,您需要驅(qū)動(dòng)程序,引導(dǎo)加載程序等才能實(shí)際運(yùn)行它-它們通常也是封閉源代碼。即使制造商說他們遵守通用公共許可證(GPL),還是要由個(gè)人來(lái)嘗試收集所有軟件,然后以某種方式將它們修補(bǔ)在一起以運(yùn)行完整的系統(tǒng)映像。簡(jiǎn)而言之,那就是一團(tuán)糟。
如今的挖礦行業(yè)缺乏通用開源的礦機(jī)操作系統(tǒng)
如今,整個(gè)比特幣生態(tài)系統(tǒng)中開發(fā)了許多令人興奮的開源項(xiàng)目,但不幸的是挖礦行業(yè)的核心部分一直落后??紤]到類似Antbleed礦機(jī)后門和隱蔽啟動(dòng)AsicBoost之類的事件,我們認(rèn)為現(xiàn)在是該采取行動(dòng)的時(shí)候了。顯然,這很復(fù)雜,因?yàn)榇嬖诟鞣N類型的挖掘設(shè)備,而且不同的制造商通常不會(huì)發(fā)布對(duì)CGminer代碼庫(kù)的修改(違反GPL)。
因此,我們開始為挖礦設(shè)備開發(fā)Braiins固件。與此相關(guān)的更有趣的事情之一是,我們決定用Rust編程語(yǔ)言編寫軟件,這實(shí)際上是一個(gè)具有挑戰(zhàn)性但非常有益于比特幣挖礦行業(yè)的決定。
為什么我們選擇Rust
即便擁有豐富的嵌入式開發(fā)經(jīng)驗(yàn),我們知道無(wú)論選擇哪種語(yǔ)言,這都是一個(gè)嚴(yán)峻的挑戰(zhàn)。話雖如此,Rust是一種現(xiàn)代編程語(yǔ)言,具有一些特性,使其非常適合此類應(yīng)用程序:
1)記憶安全
編譯時(shí),Rust會(huì)執(zhí)行大部分安全檢查和內(nèi)存管理決策。因此,在訪問內(nèi)存時(shí),相對(duì)于非內(nèi)存安全語(yǔ)言,可以更好地保護(hù)它免受軟件錯(cuò)誤和其他安全漏洞的侵害。
2)適用于嵌入式設(shè)備
沒有其他著名的編程語(yǔ)言可以編譯和強(qiáng)類型化,也沒有運(yùn)行時(shí)。Rust沒有運(yùn)行時(shí),沒有虛擬機(jī)來(lái)處理內(nèi)存管理-所有內(nèi)容都是靜態(tài)編譯的。而且比C ++輕巧得多。所有這些使它非常適合于ASIC等嵌入式設(shè)備。
3)代碼可重用性
與大多數(shù)其他語(yǔ)言不同,使用Rust,我們知道,如果為設(shè)備編譯了某些內(nèi)容,則很有可能在服務(wù)器端重用相同的代碼組件。太好了,因?yàn)樗试S使用一次為主機(jī)和嵌入式設(shè)備共享代碼庫(kù),從而簡(jiǎn)化了測(cè)試和生產(chǎn)。
4)包裝系統(tǒng)
Rust非常獨(dú)特,因?yàn)樗试S您同時(shí)使用同一代碼包的不同版本。換句話說,我們可以在編譯映像中運(yùn)行同一庫(kù)的兩個(gè)版本,例如,如果我們使用C或C ++,這實(shí)際上是不可能的。
5)內(nèi)置測(cè)試線束
一般來(lái)說,開發(fā)人員不喜歡編寫測(cè)試。您會(huì)在CGminer上看到這一點(diǎn),那里沒有制造商提供測(cè)試用例。Rust附帶了一個(gè)不錯(cuò)的測(cè)試工具,因此您可以簡(jiǎn)單地運(yùn)行“測(cè)試”并檢查代碼中是否沒有回歸。
6)美好的未來(lái)
對(duì)于Microsoft,Amazon和其他許多公司正在大力投資Rust的進(jìn)一步發(fā)展的事實(shí),可以說一句話。選擇具有光明前景的技術(shù)是有意義的。另外,這意味著應(yīng)該有更多可重用的代碼,這可以為我們節(jié)省大量的未來(lái)開發(fā)時(shí)間。
從CGminer遷移到bOSminer和Stratum V2的時(shí)間表
我們一直在并行開發(fā)比特幣挖礦堆棧中的兩個(gè)重要部分,即bOSminer和Stratum V2。這樣做的一個(gè)很好的附帶影響是,我們已經(jīng)能夠在發(fā)布給開發(fā)人員測(cè)試的bOSminer原型中包含Stratum V2模擬器。接下來(lái)的議程是添加一個(gè)V2代理(用Rust編寫),以便我們可以模擬各種可能的部署方案。
同時(shí),我們將在接下來(lái)的幾個(gè)月中收集開發(fā)人員的反饋意見,并對(duì)bOSminer進(jìn)行改進(jìn),以便于12月發(fā)布Alpha版本,最終在2020年3月左右正式發(fā)布。您可以在下面的時(shí)間表中查看更多詳細(xì)信息。
正式發(fā)布的bOSminer一旦發(fā)布,將使我們將來(lái)增加對(duì)不同ASIC機(jī)器(例如最新的Whatsminer M20S和Antminer S17)的支持變得更加容易??紤]到這一點(diǎn),我們目前正在盡最大的努力和資源來(lái)使bOSminer在上述時(shí)間范圍內(nèi)成為現(xiàn)實(shí)。
如果您想了解比特挖礦堆棧中的最新動(dòng)態(tài),請(qǐng)務(wù)必在Medium上關(guān)注我們。我們還通過@slush_pool和@braiins_systems在Twitter上活躍。(rui)