當前位置:編程學習大全網 - 行動軟體 - 比特幣挖礦究竟在計算壹個什麽問題?手動驗證區塊鏈給出答案

比特幣挖礦究竟在計算壹個什麽問題?手動驗證區塊鏈給出答案

簡單回顧下挖礦的流程。

首先先要對所有的交易做驗證,剔除有問題的,然後通過壹套自定義的標準來選擇哪些交易希望打包進區塊,比如說提供的交易費與交易占用的字節大小的比值超過某個門檻,這樣的交易才被認為有利可圖。當然,節點也可以特意選擇要加入某條交易,或者故意忽略某些交易。如果是通過礦池挖礦的話,礦池的服務器會去篩選交易,然後分配給每個參與的礦機壹個獨立的任務。

壹旦篩選好交易數據,層層約減,通過這些交易就可以計算出壹棵Merkle樹,可以確定壹個唯壹的摘要,這就是Merkl樹的根。

然後我們再依次獲取挖礦需要的其他信息,這些信息組成壹個區塊的頭。

區塊頭的字節分配

區塊頭只有80個字節,挖礦只需要對區塊頭進行運算即可。交易數據都通過merkle樹固定了下來,不需要再包含進來。

這些信息中大部分已經是固定下來的,或者是可計算的。

我們以區塊277316為例,其信息來自網站 http://blockchain.info

Bitcoin Block #277316blockchain.info

選擇這個區塊的原因是在《Mastering Bitcoin》壹書中,中文社區譯本和英文原版在介紹這部分內容時有出入,而且作者Antonopoulos並沒有提到壹個關鍵點,就是字節順序的問題,相信很多人可能會踩這個坑。這裏還原的細節可以幫助讀者與書籍做相互參考。

請大家註意下面的每個步驟,註意每壹個變化,這是比特幣最核心的算法。

轉換時間,記住,壹定要轉為utc的時間戳,此處遇到過坑,小心。

這壹步的發現異常艱辛,耗費了大量的查詢,大坑,大坑,謹記。發明人中本聰可能為了讓機器計算更快,而變為了更接近機器的編碼方式little-endian.

最終得到的結果就是

16進制下前面15個0,然後是1; 而難度目標對應的數字是

16進制下前面15個0,然後是3. 計算結果小於難度目標,符合要求。這個結果與網站上公布的數字壹致。

在挖礦時,nonce隨機數是未知的,要從0試到2^32,但是這個數字其實不大,只有4294967296,以現在的礦機動輒14T每秒的算力,全部算完到上限也不需要壹秒。剛才提到在這種情況下,需要使用創幣交易中的附帶信息,額外的字符串成為extra nonce。

另外,創世區塊也可以通過上面的方法來驗證,有好奇的朋友可以嘗試下。

提示:

  • 上一篇:初學51單片機有什麽好的視頻教程,大神推薦壹下
  • 下一篇:搞笑遊戲寵物名字大全霸氣 搞笑遊戲寵物名字推薦
  • copyright 2024編程學習大全網