比特幣挖礦技術:分布式數據存儲、點對點傳輸、共識機制、加密算法...
1. 說明
區塊鏈具有數據運行公開、不可篡改、可溯源、跨國際、去中心化的特點。因此越來越多地被應用在各個領域。區塊鏈主要技術包括:分布式數據存儲、點對點傳輸、共識機制、加密算法,將在下面一一介紹。
2. 點對點傳輸
點對點技術(peer-to-peer, 簡稱P2P)又稱對等互聯網絡技術,它依賴網絡中參與者的計算能力和帶寬,而不是把依賴都聚集在較少的幾臺服務器上。最典型的應用就是電驢。在這里它提供了***層的去中心化支持。
3. 分布式數據存儲
先看看對區塊鏈最直觀的感覺:當***次運行比特幣錢包時,會下載很多數據,2017年10月有150G左右,且還在不斷增加。數據存儲在data/blocks目錄下,blk*.dat這就是區塊block。
***個問題是:為什么建礦池需要下載這么多數據?區塊鏈本質上是一個去中心化的數據庫,我們下載的是比特幣所有數據所組成的數據庫,因此很大。去中心化的數據庫,數據并不是保存在某一個服務器上,而且在P2P的每個節點上都需要保存一份。對于中心化的數據庫,數據庫可能被宿主或者黑客篡改,因而可靠性變差。而去中心化數據庫就像一個公共帳本,所有人都能查看,但沒人能私自修改以往數據,因為它不可能修改分散在其他人機器上的數據庫。在某個數據與其它數據庫不一致時,則以大多數一致的為準,這就是所謂的“共識機制”。
隨著交易增加,錢包還會不斷變大。太大之后,會用到硬分叉技術。也就是啟用一個全新的網絡并讓所有的用戶大規模遷移。
4. 區塊鏈(blockchain)
區塊鏈是一串使用密碼學方法相關聯產生的數據塊,每一個數據塊(block)中包含了一次比特幣網絡交易的信息,用于驗證其信息的有效性和生成下一個區塊(根據一個生成下一生,構成鏈chain)。
所謂挖礦就是計算出一個滿足規則的隨機數,從而獲得本次記帳權,發出本輪需要記錄的數據,然后向全網廣播,每個節點都會將收到交易信息,并記錄到一個區塊中,然后鏈接到現有的區塊鏈上。
5. 算法
哈希算法是一個字符串到一個(有限位數的)數的映射。
Block的算法是根據上一個block的hash值,尋找滿足某些hash結果的字符串,簡單的說就是不停地拼湊字符串,計算SHA256哈希值(碰撞哈希值),直到找到產生合適的哈希的字符串,這個字符串就是解。具體公式如下:
- SHA256(SHA256(version + prev_hash + merkle_root + ntime + nbits + x )) < TARGET
挖礦就是求解上述方程中的x。
其中,version是block的版本,prev_hash是上一個block的hash值,merkle_root是需要寫入的交易記錄的merkle樹的值(merkle樹被應用在了交易的存儲上,其基本原理就是將葉子節點(每筆交易的hash)兩兩配對做哈希運算生成父節點,不斷迭代這一過程最終生成唯一的根節點merkle root),ntime是更新時間,nbits是當前難度,TARGET根據當前難度求出。x的范圍是0~2^32,這就是個求解x的問題,一旦你找到了x,你就可以廣播一個新的block。
TARGET越小,解出x的難度就越大,每產生2016個block(約14天),網絡會根據這段時間產生新block的平均間隔調整之后的TARGET,以保證每10分鐘產生一次的速度。因此,隨著網上算力的不斷增加,計算難度會越來越大,礦也越來越難挖了。
如果兩人同時挖到,block chain會出現分叉,客戶端在眾多分支中找到符合當前難度且最長的。
6. 安全機制
1) 私鑰
私鑰是形式如下的一段字符串:
5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss。只要是正確支持比特幣協議的應用都可以把這段字符串識別為私鑰,轉換成公鑰,再轉換為地址,如果對應的地址上面有比特幣,就可以使用這個私鑰花費上面的比特幣。一般被盜指的都是私鑰被盜。
2) 公私
公鑰是由私鑰生成的,一個私鑰經過橢圓曲線變換之后會生成一個65個byte的數組,一般我們會看到這樣形式的一個公鑰:04a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd5b8dec5235a0fa8722476c7709c02559e3aa73aa03918ba2d492eea75abea235
操作是用私鑰簽名的,只有對應的公鑰才能解開,地址也是從公鑰生成的,這樣就可以驗證操作是不是屬于這個地址的。
3) 地址
地址是由公鑰產生的,生成的過程是,先對公鑰做一次SHA256,對得到的結果做一次RIPEMD160,再從結果中取20個byte的數組,這個得到的數組就是得到的hash160,形如:9a1c78a507689f6f54b847ad1cef1e614ee23f1e
4) 流程
從你這里發出的數據都是由私鑰加密的(包括挖到礦的廣播,轉帳等等),傳數據的時候也會傳一個公鑰,通過這個公鑰解密。如果公/私鑰能對上,就可以證明你的身份。公鑰是大家可見的,而私鑰被盜,那么別人就可以用你的身份交易了。具體加解密和密鑰導入導出方法請見后續“錢包”篇。
7. 挖礦與深度學習
1) 組織算力
挖礦和深度學習都需要組織算力。在運算量大時都需要構建集群,拆分計算,集成結果等等。
2) 硬件基礎
挖礦和深度學習都是數學模型計算,它們對于大規模學習的解決方案都是:顯卡,FPGA,ASIC。當然功能并不完全相同,深度學習需要矩陣乘法,卷積等基本運算,而挖礦主要是hash碰撞。都需要并行性、多線程和高內存帶寬等特性,雖然功能相近,但硬件還是有不少的差別。硬件說明詳見后續“控制器與礦機”篇。