最近在整理比特幣的挖礦技術資料, 對想入門的人應該有點幫助.
SHA-256 (Secure Hash Algorithm-256)是雜湊函數演算法, 詳細的計算流程可以看pdf,網路上可找到javascript版的source code, 也有C++版本的. C++版本輸出的digest就是JavaScript版輸出的HASH.
比特幣挖礦就是用SHA-256來不斷計算參數以便找出符合困難度的HASH. 困難度就是HASH高位的連續0的個數. 挖礦成功的會放入區塊鏈的新區塊中. 區塊鏈的歷史數據可以在網站下載. 區塊表頭放在這裡. 比特幣區塊也包含交易資料, 交易資料很多, 由挖礦程式挑選適合的交易資料來計算merkle tree root. merkle tree可參考Merkle Tree 和 Merkle Root 介紹.
了解了SHA-256, 區塊鏈和merkle tree root, 就可以開始挖礦了. 挖礦就是用SHA-256來計算三種參數如下,請參考這篇.中文可見這篇或其原文.
- 前一區塊的HASH.
- merkle tree root: 由礦工挑選可以挖礦成功的交易資料來計算出HASH.
- DATA: 包含版本, 時間戳, 計算困難度的Target, 和礦工找到的NONCE.
這些參數構成區塊鏈的Block Header,全部80bytes,格式可以參考這篇.
可以自己製造Block Header,再用SHA-256計算出新的HASH, 若滿足困難度的需求, 就可以提交為候選的區塊.