先佔個坑,之後寫詳細的回答。

簡單的說比特幣的礦機挖礦,實際上是在節點組裝好交易之後,礦機在不斷重試不同的隨機數,讓包含這個隨機數和交易的默克爾根、前一個區塊哈希和其他一些數據的哈希值前面有若干個零。

考慮到哈希結果基本均勻分佈,所以要一次算出前面好幾個零是很難的,當前的礦機可能得算幾十年。

解決辦法就是多一些礦機,一起算,就能達到十分鐘的平均出塊時間。但是每個礦機都需要一個節點組裝交易的成本就太高了。

因此就可以把多臺礦機連接到一個節點上,分別算不同的隨機數範圍。這樣就只要一個節點,千萬臺礦機。這樣的節點(只有挖礦的纔是節點,參見白皮書定義)就被稱作礦池。

但是,這麼千萬臺礦機怎麼分挖出來的比特幣呢?分配的方式需要公平合理。因此不能相信礦機自己報告的計算數量,而要依據礦機提交的有效結果。因此為了更好的估計出礦機的工作,礦池會把一個很高的難度的工作(比如20個零)轉換為一個較低難度的工作(比如8個零)。可以被全網承認的更高難度的結果是包含在低難度結果中的,但是我們卻可以依照低難度結果來推斷礦機的貢獻,用來在礦池中分配工作收益。

因此,礦機的工作難度,是由礦池分配的,調節到礦機恰好每分鐘可以提交若干次有效的低難度結果。計算能力越強的礦機獲得的難度越高。因為越頻繁的提交越佔用帶寬,越不頻繁的提交帶來的估計工作量的難度越大。


先碼著,空了答,終於看到幣圈最踏實、不急躁的問題了


比特幣主鏈上,每10分鐘出一個塊,隨著挖礦人數的增加,挖礦算力難度也與日俱增。

我們可以從https://btc.com/上看出,截至今日全網算力已達88.22 EH/s。個體用戶已經很難自己完成挖礦。

為了使產生區塊的速度維持在每10分鐘一個,每隔2016個區塊(大約兩周時間),網路會通過調整難度控制生成工作量證明(pow)所需的算力,重新計算打包區塊的難度,也就是重新調整目標閾值target。如果算力提高n倍,難度值也應調高n倍。

主要運用的演算法公式為:

difficulty=[pre_target]*[前2015個區塊生成所用的時間]/1209600


寫死在代碼裏的一個規則,每個節點按規則計算出挖礦難度


理想中,我們估算每十四天一個週期,每個週期難度增長2%-4%


簡單來說,比特幣產幣的速度的期望值是:10分鐘一個塊。

所以搶的人(全網總算力)越多,越難搶到(難度越高)。

這是動態調整的。


還能規定?


在於工廠阿這個。我一直在玩這個。包賺,如果感興趣的話可以私聊我,


假設:比特幣一天可以產出100枚,挖礦人數5人,算力每人14t,總算力70T,100比特幣/70T算力那麼他們每人每天能挖20個比特幣,如果挖礦人數增加到10人,總算力140T,100比特幣/140T算力,現在每人每天只能得到10BTC。

比特幣挖礦難度就是全網總算力,全網總算力增加=挖礦難度增加,挖礦難度增加=挖礦分配的比特幣的少了,你每天挖礦成本是一樣的,電費,場地費,管理費,但是收益減少不就是難度增加嘛。


推薦閱讀:
相關文章