比特幣礦機挖礦的難度是如何規定的?
先佔個坑,之後寫詳細的回答。
簡單的說比特幣的礦機挖礦,實際上是在節點組裝好交易之後,礦機在不斷重試不同的隨機數,讓包含這個隨機數和交易的默克爾根、前一個區塊哈希和其他一些數據的哈希值前面有若干個零。
考慮到哈希結果基本均勻分布,所以要一次算出前面好幾個零是很難的,當前的礦機可能得算幾十年。
解決辦法就是多一些礦機,一起算,就能達到十分鐘的平均出塊時間。但是每個礦機都需要一個節點組裝交易的成本就太高了。
因此就可以把多台礦機連接到一個節點上,分別算不同的隨機數範圍。這樣就只要一個節點,千萬台礦機。這樣的節點(只有挖礦的才是節點,參見白皮書定義)就被稱作礦池。
但是,這麼千萬台礦機怎麼分挖出來的比特幣呢?分配的方式需要公平合理。因此不能相信礦機自己報告的計算數量,而要依據礦機提交的有效結果。因此為了更好的估計出礦機的工作,礦池會把一個很高的難度的工作(比如20個零)轉換為一個較低難度的工作(比如8個零)。可以被全網承認的更高難度的結果是包含在低難度結果中的,但是我們卻可以依照低難度結果來推斷礦機的貢獻,用來在礦池中分配工作收益。
因此,礦機的工作難度,是由礦池分配的,調節到礦機恰好每分鐘可以提交若干次有效的低難度結果。計算能力越強的礦機獲得的難度越高。因為越頻繁的提交越佔用帶寬,越不頻繁的提交帶來的估計工作量的難度越大。
先碼著,空了答,終於看到幣圈最踏實、不急躁的問題了
比特幣主鏈上,每10分鐘出一個塊,隨著挖礦人數的增加,挖礦算力難度也與日俱增。
我們可以從https://btc.com/上看出,截至今日全網算力已達88.22 EH/s。個體用戶已經很難自己完成挖礦。
為了使產生區塊的速度維持在每10分鐘一個,每隔2016個區塊(大約兩周時間),網路會通過調整難度控制生成工作量證明(pow)所需的算力,重新計算打包區塊的難度,也就是重新調整目標閾值target。如果算力提高n倍,難度值也應調高n倍。
主要運用的演算法公式為:
difficulty=[pre_target]*[前2015個區塊生成所用的時間]/1209600
寫死在代碼里的一個規則,每個節點按規則計算出挖礦難度