自 2009 年 1 月比特幣誕生到 2020 年 11 月,已經有 250 次難度增加,只有 53 次難度降低。

作者:Samantha Ouyang
翻譯 / 編輯:Sherrie

當我第一次瞭解比特幣挖礦的時候,我認爲它很簡單,就像坐在家裏,做着我想做的事情,而我的電腦會投入工作,在我睡覺的時候賺錢。

但不完全是。事實證明,還有很多原因使得上述情況完全不可能發生。

但爲了理解其中的原因,我們首先必須理解挖礦的整個概念,以及它在加密貨幣方面的意義。

挖礦是什麼?

從本質上講,挖礦就是創建新的區塊,用交易記錄填充它們,並將它們添加到區塊鏈中,讓每個人都能看到,並就特定的貨幣是如何使用的這件事達成一致。

然而,爲了添加一個區塊,礦工必須解決一個「加密謎題」,或者用更專業的術語來說,他們必須得到一個有效的塊 Hash

我不會講太多的 Hash 函數相關的知識,但簡單地說,Hash 是拿到區塊的所有信息,然後把它處理,直到它返回一個與此前內容沒有任何關係的隨機的字母和數字 64 位十六進制數。

如果你改變了區塊上的任何數據,隨機數將會有很大的不同,但如果什麼都沒有改變,它將總是返回相同的內容。

但是如何知道 Hash 值是否有效呢?這就是難度目標的由來。目標描述一個閾值,並且要使 Hash 有效,該值必須小於目標

你可能會問,如果不能更改交易信息,如何獲得不同的 Hash 值呢?在創建 Hash 時,區塊中還有另一個因素要考慮進去——你可以修改它,它被稱爲 nonce

一文讀懂比特幣挖礦難度調整資料來源:Khaled Salah

礦工們一直在爲了這個數字努力,直到輸出的 Hash 值小於目標值。因爲 Hash 值是隨機的,所以目標越低,就越難找到一個有效的 Hash 值。就像擲骰子一樣,擲一個小於 3 的數字比擲一個小於 4 的數字更難。

那麼你如何確定目標的價值呢?這個問題的答案就是我們今天要討論的話題:挖礦難度

什麼是挖礦難度?

這是不言自明的,但是挖礦的難度僅僅是指爲區塊找到一個有效的 Hash 值有多麼困難和耗時。一個更好的問題應該是,爲什麼挖礦一開始就需要有難度 ?

區塊鏈的全部意義在於在網絡中的多個個體之間建立共識,也就是說在一個真理上達成一致。它們是如何做到這一點的呢?它們取網絡中最長的有效鏈,這取決於向它投入了多少工作(計算 Hash 值所花費的時間),並接受它作爲構建的主鏈。

有了這個難度 ,就可以確保網絡的安全性,因爲它可以防止欺詐。如果添加區塊很容易,那麼有人可能會發送欺詐性交易,然後向網絡發送垃圾郵件,以創建他們自己的最長鏈。然而,由於挖礦困難,爲了防止垃圾信息,添加塊的過程變慢,平均需要 10 分鐘來挖掘一個塊。

這裏的棘手之處在於,攻擊者可以通過尋找增加計算能力的方法輕鬆繞過這一困難。幸運的是,我們提前想好了,想出了一種方法讓系統控制困難。

挖礦難度如何確定?

定期調整難度,以確保總是平均需要 10 分鐘來挖掘一個區塊。在每添加 2016 個區塊後,系統會查看創建這些 2016 個區塊所花的時間。正常情況下,需要 2 周左右,或 20160 分鐘。如果超過兩週,難度就會降低,如果不到兩週,難度就會增加。難度可以如下確定。

一文讀懂比特幣挖礦難度調整推導出新難度的公式

正如你可以從反比函數中看到的,如果花費的時間超過 2 周,分數將小於 1,新難度將會減少。如果花的時間超過 2 周,分數就會大於 1,新的難度就會增加。

如果難度降低,目標值就會增加,從而更容易找到有效的散列,反之亦然。最大目標值爲 1,由此可見難度也與目標值成反比。

一文讀懂比特幣挖礦難度調整難度與目標的關係

爲了防止突然的變化,難度的增加或減少不能在一次調整中超過 4 倍

但回到我們如何想出目標的問題上,我們需要探索影響挖掘區塊所需時間的不同因素。

有兩件事可能會影響這段時間:計算能力網絡中個體的數量

計算能力

在比特幣的早期,你可能已經能夠成功地進行挖礦,就像我過去認爲的人們所做的那樣——用他們的個人電腦。然而,礦工很快被迫升級。

由於挖礦本質上是一場競賽,人們競相首先找到 Hash 值並獲得獎勵,那些擁有更強大計算機的人將能夠在同一時間內做出更多計算結果,因此獲勝的機會也會更高。

升級一開始只是簡單的從 CPU 到顯卡的轉換,但近年來,升級的幅度要大得多,現在所謂的 ASIC(特定應用集成電路)--一種專門爲挖礦而設計的器件--已經是能夠參與競爭所需的最低限度。

但即便如此,你也不太可能賺到任何東西。目前,你可能需要 40 年纔可以開採一個區塊。如果你想賺錢,你可能必須加入一個礦池——礦工們聯合起來增加他們獲勝的可能性。

考慮到所有這些進步和計算機不斷變得越來越快的事實,爲了跟上它們並保持 10 分鐘的平均速度,挖礦難度必須補償這一點。

網絡的規模

等等,但我們並不是每兩週就有更快的電腦,對吧?雖然計算機的不斷改進是需要調整機制的主要原因,但該系統也對網絡中的個體數量進行了補償。

礦工越多,找到一個有效 Hash 值所花的時間就越少,因爲在相同的時間內會進行更多的計算結果。因此,當有更多礦工在場時,困難增加,當礦工更少時,困難減少。

總結

所以回到我們一開始的地方--在今天這個時代,用你的 PC 挖比特幣幾乎是不可能的,原因是由於設備升級和網絡規模增大所做的補償,導致挖礦難度不斷增加。你的 PC 根本沒有計算能力再跟上其他人的腳步,所以你能夠成功挖出一個區塊的機率非常非常低。

即使系統的設計是爲了降低難度,但很少會這樣做。更快、更強大的設備不斷被開發出來,同時越來越多的人加入了比特幣網絡。事實上,自 2009 年 1 月比特幣誕生到 2020 年 11 月,已經有 250 次難度增加,只有 53 次難度降低