聽中本聰講工作量證明
以下內容均出自 《比特幣:一個點對點電子貨幣系統》
一. 背景知識
中本聰,比特幣創始人,區塊鏈理論奠基人。
他那篇著名的《比特幣:一個點對點電子貨幣系統》開啟了今天的區塊鏈時代。
論文中,中本聰試圖解決一個問題:如何建立一個體系,讓買賣雙方在沒有第三方信任機構(如銀行)的情況下,直接進行交易?
要注意在這個體系里,我們必須保證買賣雙方的權益。
對於買家而言,假如賣家收到錢之後沒有履行相應的義務,那麼買家就可以出示交易記錄利用常規的契約體系(如申請仲裁)保護自己。
對於賣家而言,他不僅需要知道這筆交易是由哪個買家發起的、交易的費用是否來自這個買家、金額是否正確,他還需要確保自己收到的這筆錢沒有被記錄在其他交易中。
如果一筆錢被記錄在兩個不同的交易記錄中,那麼買家就用一份錢做了兩份交易。這就是俗稱的「雙花問題」,會嚴重影響整個交易體系。
建立一個中本聰理想的交易體系,需要保證兩個事情。
第一,交易記錄無法被篡改。第二,貨幣不能被「雙花」。
中本聰說,我們可以用一個大賬本來記錄所有人交易的歷史。
為了方便管理,大賬本再分割為一個一個相互連接的塊。
每個塊中,記錄著彼此關聯的交易信息。
每個交易信息主要包含買家賬戶編號、賣家賬戶編號、金額和交易時間,以及關聯交易的簽名(類似交易編號,可以作為交易的唯一標識)。
記錄信息時採用特殊的加密演算法(ECDSA)與簽名演算法,讓賣方能夠確認這筆交易中的金額是否歸自己所有。
這樣交易信息所在的塊被稱為「區塊」,這個大賬本就被稱為「區塊鏈」。
現實生活中,每筆交易可以簡單地按照時間順序記錄,我們可以去銀行查詢一筆資金的去向來避免雙花問題。
比特幣網路中,也要用類似的方法記錄交易塊,讓每個用戶可以查詢「區塊鏈」這個大賬本,來驗證一筆錢是否被用了兩次。
當然前提是,整個系統中的用戶都以一條公認的賬本記錄為準。
中本聰就是為了解決「確保所有人以一條賬本為準」這個問題而引入了工作量證明機制。
二. 工作量證明機制
工作量證明機制由網路中每個「礦工」節點執行。
首先,「礦工」節點根據接收到的多個交易信息,組合出一個區塊。
然後通過一些運算步驟(哈希運算),根據區塊信息,產生一個數字 a(a 可以作為該區塊在區塊鏈上的唯一標識)。
最後這個節點需要找到一個隨機數字 b,能夠和 a 一起,作為函數 c(a, b) 的參數,產生一個符合條件 d 的結果。
找到滿足條件的隨機數字後,該節點會將這個區塊添加到區塊鏈上,並將區塊信息和隨機數字通知給網路上其他節點。
其他節點在接收到這個發現隨機數字的消息後,會執行驗證操作。驗證成功後也會將這個區塊添加到自己的區塊鏈上,並在這個區塊的基礎上繼續尋找下一個滿足要求的隨機數。
舉個簡單的例子:
假設根據區塊信息我們得到的一個數字 a 為 8,
函數為 c(a, b) = 4 * (a + b),
我們需要滿足的條件是,找到數字 b ,使得 c(a, b) 函數的結果末尾有兩個 0。
我們很容易找到一個 b 為數字 17,因為 4 * (8 + 17) = 100 滿足末尾有兩個 0。這樣我們就完成了一個簡單的工作量證明。
但完成一次比特幣工作量證明的難度,和在地球上找到一個沙子的難度相當。一個節點必須循環嘗試千百萬次才有可能找到一個這樣的隨機數。
因此當某個節點找到一個這樣的數字後,系統會獎勵它一些比特幣。
一個節點,尋找這個隨機數,完成工作量證明的過程被稱為「挖礦」。
三. 工作量證明機制的作用
工作量證明機制能夠保證賬本交易記錄不被篡改。
首先,要改變一個區塊的交易記錄就需要再次完成這個區塊的工作量證明。
其次,這個區塊後邊還有許多新添加的區塊,要改變它的交易記錄還需要將全部新添加區塊的工作量證明都完成一遍。想達到這個目的需要花費大量的財力,最終收益也不大。
企圖篡改記錄的節點被稱為「不可靠節點」或「攻擊者節點」,不企圖篡改記錄的節點被稱為「可靠節點」。
工作量證明機制能確保網路中的可靠節點,會將網路中最長的區塊鏈作為可靠鏈,即公認的賬本。只要可靠節點控制著大多數算力,那麼可靠鏈就會增長得最快,從而超過其他競爭鏈。而且不可靠節點控制的鏈追上這個可靠鏈的可能性,會隨著區塊的增多而大幅降低。
中本聰還考慮到了挖礦算力和挖礦回報的變化。隨著算力的提升,每個節點找到滿足要求的隨機數字的難度也會增加,得到的比特幣激勵會減少,能夠保證穩定地產生新區塊。
TAG:大話區塊鏈 |