比特幣CPU挖礦、GPU挖礦、礦池及礦機挖礦技術原理
# 比特幣CPU挖礦、GPU挖礦、礦池及礦機挖礦技術原理
### 比特幣挖礦原理
比特幣的區塊頭,共含6個欄位,如下:
* int32_t nVersion,4位元組,版本號,一般固定不變,僅在升級時改變。
* uint256 hashPrevBlock,32位元組,前一個區塊的區塊頭雜湊,由前一個區塊決定。
* uint256 hashMerkleRoot,32位元組,包含進區塊的所有交易構造的Merkle根,調整區塊中的交易次序、增刪交易、或修改Coinbase交易時改變。
* uint32_t nTime,4位元組,時間戳,後一個區塊時間略早於前一個區塊是被允許的,但必須在合理的時間區間,一般會直接使用機器當前時間戳。
* uint32_t nBits,4位元組,挖礦難度,由全網決定,每2016個區塊按演算法重新調整。
* uint32_t nNonce,4位元組,隨機數,提供2^32種取值。即4,294,967,296。
其中nVersion、hashPrevBlock、nBits是固定的,其他hashMerkleRoot、nTime、nNonce為可變的。
比特幣挖礦原理即,不斷變更區塊頭中的可變值,使得對區塊頭做雙重SHA256雜湊,結果小於挖礦難度目標值。即:
SHA256D(BlockHeader) < F(nBits)
其中SHA256D(BlockHeader)即對區塊頭做雙重SHA256雜湊,F(nBits)即按nBits計算的難度目標值。
### 算力的表示
1 H/S = 每秒一次運算
1 KH/S = 1000 H/S,即每秒1千次運算
1 MH/S = 1000 KH/S,即每秒100萬次運算
1 GH/S = 1000 MH/S,即每秒10億次運算
1 TH/S = 1000 GH/S,即每秒1萬億次運算
1 PH/S = 1000 TH/S,即每秒1000萬億次運算
1 EH/S = 1000 PH/S,即每秒100萬萬億次運算
### CPU挖礦原理
CPU挖礦,即利用RPC介面setgenerate控制挖礦。
控制檯輸入setgenerate true 2,即開始挖礦,後邊的數字表示代表的挖礦執行緒數,當然前提先完成同步資料。
由於單CPU運算SHA256D算力約為2 MH/S,因此nNonce提供的4位元組搜尋空間完全夠用,即支援4G種取值。
### GPU挖礦原理
GPU運算SHA256D算力約為200M-1G,nNonce提供4G搜尋空間,如果僅調整nNonce取值,可以支援4秒左右。
因此可以調整nTime,每調整一次nTime,可以繼續挖礦4秒。
GPU挖礦使用GETWORK協議,即挖礦程式和節點分離,也即挖礦部件與區塊鏈資料分離。
GPU挖礦時代,使用GETWORK協議,使得挖礦程式與節點互動。
核心思路為:節點構造區塊,將區塊頭資料交給挖礦程式,挖礦程式遍歷nNonce進行挖礦。
驗證合格交付給節點,節點提取nNonce和nTime驗證區塊,如果符合要求即向全網廣播。
遍歷結束將呼叫GETWORK,節點構造新區塊,然後重複上述過程。
GPU經典挖礦驅動為cgminer,原始碼為https://github.com/ckolivas/cgminer。
GPU挖礦缺陷:GETWORK協議給挖礦程式提供的搜尋空間為4G,結束後需再次呼叫GETWORK RPC介面。
礦機出現後,礦機算力已達10 TH/S,繼續使用GETWORK協議將頻繁呼叫RPC介面,顯然不太合適。
因此需轉向更高效的getblocktemplate協議。
### 礦池挖礦原理
礦工通過getblocktemplate協議與節點互動,或礦池採用stratum協議與礦工互動,即為礦池的兩種典型搭建模式。
與getwork相比,getblocktemplate協議讓礦工自行構造區塊,因此使得節點與挖礦完全分離。
礦工拿到一系列資料後,開始挖礦:
1、構建coinbase交易。
2、coinbase交易放在交易列表之前,構建hashMerkleRoot。因coinbase、以及交易次序均可調整,因此hashMerkleRoot空間可以認為無限大。
因此getblocktemplate協議也使礦工獲得了巨大的搜尋空間。
3、構建區塊頭。
4、挖礦,即礦工可以在nNonce、nTime、hashMerkleRoot提供的搜尋空間中涉及任意的挖礦策略。
5、上交資料,如果挖礦成功即提交給節點,由節點驗證並廣播。
getblocktemplate協議的問題:
1、礦工通過HTTP方式呼叫RPC介面向節點申請挖礦資料,因此網路中最新區塊變動無法告知礦工,造成算力浪費。
2、每次呼叫getblocktemplate,節點都會返回1.5M左右資料,因頻繁互動將因此增加大量成本。
Stratum協議將解決上述問題。
### Stratum協議
Stratum協議,採用主動分配任務的方式,也即礦池任何時候都可以給礦工分派任務。
對於礦工,如收到新任務,將無條件轉向新任務。另外礦工也可以向礦池申請新任務。
最核心問題為,如何使得礦工獲得更大的搜尋空間。
如果僅礦工僅可改變nNonce和nTime,互動資料少但搜尋空間不足。
如果允許礦工構造coinbase,搜尋空間大但代價是需要將所有交易交給礦工,因此對礦池頻寬要求較高。
Stratum協議巧妙解決了這個問題。即:
基於Merkler樹的原理,無需將全部交易發給礦工,只需將構造hashMerkleroot所需的少數幾個節點交給礦工即可。
同時將構造coinbase所需資訊交給礦工,礦工可基於少數資訊構造hashMerkleroot。
照此方式,如果包含N筆交易,僅需將log2(N)個hash值交給礦工。因此可大大降低互動的資料量。
礦池的核心即給礦工分派任務,統計工作量並分發收益。
礦池可以將區塊難度分成更小的任務發給礦工,礦工完成任務提交礦池。
如果全網區塊難度要求前70位為0,那麼礦池可以給礦工分派難度為前30位0的任務,礦池再判斷是否碰巧前70位都為0。
幾個開源礦池:
PHP-MPOS:https://github.com/MPOS/php-mpos
node-open-mining-portal:https://github.com/zone117x/node-open-mining-portal
Powerpool:https://github.com/sigwo/powerpool
### 混合挖礦
混合挖礦,即某種幣的挖礦掛靠在另一種幣的鏈條上。輔鏈需要做針對性設計(如域名幣和狗狗幣)。
混合挖礦,使用AuxPOW協議實現。AuxPOW的實現得益於比特幣Coinbase的輸入欄位。
經典的PoW區塊,規定符合要求才算合格的區塊。AuxPOW協議附加兩個要求:
1、輔鏈區塊的hash值必須內建於父鏈區塊的Coinbase裡。
2、父鏈區塊的難度比較符合輔鏈的難度要求。
一般來說,父鏈的算力比較輔鏈大,滿足父鏈難度要求的區塊一定滿足輔鏈的難度要求。
因此過去很多達不到父鏈難度要求的區塊,可以達到輔鏈難度,可以在輔鏈獲得收益。
### ASIC礦機
FPGA,Field-Programmable Gate Array,譯為現場可程式設計門陣列。是在PAL、GAL、CPLD等可程式設計器件的基礎上進一步發展的產物。
是作為專用積體電路(ASIC)領域中的一種半定製電路而出現的,既解決了定製電路的不足,又克服了原有可程式設計器件閘電路數有限的缺點。
能用FPGA實現各種AISC、DSP和微控制器。
FPGA作為挖礦硬體,對於ASIC來說屬於必然的過度技術。
ASIC,Application Specific Integrated Circuits,即專用積體電路。
是指應特定使用者要求和特定電子系統的需要而設計、製造的積體電路。
網址:http://www.qukuailianxueyuan.io/
欲領取造幣技術與全套虛擬機器資料
區塊鏈技術交流QQ群:756146052 備註:CSDN
尹成學院微信:備註:CSDN
相關文章
- IPFS挖礦開發解決方案及IPFS礦機挖礦原理及最優規劃
- (現貨合約量化機器人)什麼是比特幣挖礦_比特幣挖礦機是什麼原理?機器人比特幣
- 比特幣挖礦難度再次難度下調—16.05%!比特幣挖礦正當時比特幣
- 區塊鏈鼻祖比特幣之9:挖礦、礦池與比特幣的產生區塊鏈比特幣
- IPP挖礦技術開發/Defi挖礦/IPPswap理財挖礦系統開發元件解析元件
- 比特幣挖礦與原始碼解析比特幣原始碼
- 挖礦病毒
- Stratum挖礦協議&XMR挖礦流量分析協議
- 嚴打“挖礦”,對“挖礦”活動零容忍
- EPK怎麼挖礦?EPK挖礦教程詳情
- 以太坊原始碼分析(42)miner挖礦部分原始碼分析CPU挖礦原始碼
- go-ethereum原始碼解析-miner挖礦部分原始碼分析CPU挖礦Go原始碼
- IPPswap丨DAPP質押挖礦/算力挖礦/LP挖礦系統開發詳情APP
- IPP算力挖礦系統開發技術|IPP挖礦模式開發模式
- 支援雙系統挖礦,警惕新型挖礦病毒入侵
- CPU挖礦病毒解決方法
- ULAB質押挖礦系統技術開發丨Defi質押挖礦dapp丨質押挖礦分紅詳情APP
- 挖礦難度
- SolaRoad礦池質押LP挖礦系統開發
- SolaRoad礦池挖礦系統開發方案步驟
- 那個用你CPU挖礦的COINHIVE線上挖礦平臺要倒閉了Hive
- IPP/SWAP/質押挖礦/系統技術開發/DAPP/應用/IPP挖礦/DefiAPP
- 挖礦系統開發技術詳解丨挖礦APP開發原始碼案例APP原始碼
- Avive World算力挖礦LP質押挖礦/系統開發技術/DAPP/DefiAPP
- 警惕國產挖礦木馬CPLMiner利用WMI駐留挖礦
- 整治“挖礦”, 綠盟科技挖礦專項治理方案來助力
- CPU被挖礦,Redis竟是內鬼!Redis
- 市商挖礦/系統開發/LP算力挖礦技術開發/Solidity技術編寫Solid
- 門羅挖礦JSJS
- linux挖礦處置Linux
- IPFS/Filecoin挖礦流程
- Filecoin礦機挖礦系統開發(案例詳細)
- 波卡Phala Network挖礦教程 PHA礦機配置方案
- IPP質押挖礦SWAP孵化器挖礦系統開發技術程式設計程式設計
- IFC質押挖礦系統技術開發詳情/DAPP/Defi/IFC挖礦/應用APP
- IPP挖礦系統開發技術/IPP原始碼/IPPSWAP質押挖礦分紅模式原始碼模式
- 巴西監管機構將禁止比特幣挖礦投資比特幣
- SolaRoad礦池算力挖礦系統開發(詳情方案)