1. 程式人生 > >二、工作量證明鏈-區塊鏈技術的雛形

二、工作量證明鏈-區塊鏈技術的雛形

        用演算法解決難題——區塊鏈技術的雛形

        構造出一個完美的、可以解決問題的“拜占庭容錯系統”是一個不小的挑戰。而且構造出來以後,其是否真的有效,能否經得起時間的考驗與各方的質疑,這些都關乎著這個系統未來的命運與其創造群體的聲譽。

        2008年冬季,美國MIT(麻省理工學院)的密碼學及密碼學政策戰略的郵件討論組中,一位澳大利亞的企業家James A Donald(詹姆斯·A·唐納德)就對一位聲稱構造出了一個點對點的、不需要第三方權威認證的e-cash(電子現金)支付系統提出了質疑。而他的理由就是:對方設計的P2P系統不能夠解決“拜占庭將軍問題”。

        在郵件中他挑剔地說道: “我們的確真的非常非常需要這個系統,但我所擔憂的並不是信任的問題,而是如何獲取一個全域性共享的圖景,藉由此點而獲取一致性的問題。每個人都知道X,這並不足夠。我們需要讓每個人都知道‘每個人都知道X’。而每個人都知道‘每個人都知道X ’就是‘拜占庭將軍問題’中,分散式的資料處理最難解決的問題。尤其是當X是非常龐大的資料時……”言下之意,他並不清楚或不確信這個去中心化的系統,如何解決拜占庭將軍的難題。

        僅僅在一天之後,他就收到了原作者的回覆,一封簡潔、優雅的郵件解釋了在這個系統中,破解“拜占庭將軍問題”的演算法。

        “工作量證明鏈”( proof-of-work chain)正是我解決“拜占庭將軍問題”的方案。我將在那個語境中對它進行重新表述。

        一群拜占庭將軍,人手一臺電腦想用字串模式匹配的方法,暴力破解國王的WiFi密碼,當然他們已經事先獲取了組成密碼的字串的長度。一旦他們開始模擬網路傳送資料包,他們必須在一個限定的時間內完成破解工作,並清除伺服器和電腦上的記錄,否則他們就會被發現,那就麻煩了。只有當絕大多數將軍在同一時間發起攻擊和破解,這樣才能有足夠的CPU(中央處理器)和計算能力在短時間內完成破解工作。

        他們並不特別在乎什麼時候開始攻擊,只要他們全部同意就好。一開始的時候,大家決定這樣搞:任何人覺得時機到了都可以宣佈一個攻擊時刻。而且,不論是什麼時候,只要是第一個被聽到的攻擊時刻,就將被確定為官方的攻擊時刻。這樣的話問題又來了,因為網路傳達有延遲和干擾,如果有兩個將軍差不多同一時間公佈了兩個不同的攻擊時刻,那麼有的人會最先聽到其中一個將軍釋出的攻擊時刻,而又有些人則會最先聽到另外一個將軍釋出的攻擊時刻。

        他們使用一個“工作量證明鏈”來解決這個問題。當每個將軍接收到任何表達形式的第一個攻擊時刻時,他都會設定他的計算機來求解一個極其困難的“工作量證明”問題,對這個問題的解答是一個雜湊(Hash)雜湊,裡面也將包含著這次的攻擊時刻。由於這個“工作量證明”問題,非常難解,一般而言,就算所有人收到這個問題後同時求解,也至少需要10分鐘才能產生解答。一旦一個將軍解出了“工作量證明”,他將會把這個算出來的“工作量證明”向整個網路進行傳播,每一個接收到的人,將在他們當前正在做的“工作量證明”計算的雜湊中附加上剛剛被求解出來的那個工作量證明。如果任何人正在計算他收到的其他的一個不同的攻擊時刻,他們將會轉向新的更新後的“工作量證明”計算當中,因為他現在的“工作量證明鏈”更長了。

        兩個小時後,將有一個攻擊時刻被雜湊在一個有12個“工作量證明”的鏈中。每個將軍只要通過驗證(這條工作鏈的)計算難度,就能估算出平均每小時有多少CPU算力耗費在這上面,也就會知道:這一定是在分配的時間段內,絕大多數將軍的計算機共同協作才能生成的結果。如果“工作量證明鏈”中展示出來的算力足夠強大,可以破解國王的WiFi密碼,那麼他們就可以在一致同意的時間內安全地展開攻擊。

        同步、分散式資料庫和一個一致的、全域性性的視野的問題如何解決?“工作量證明鏈”就是答案。

        我們可以看到這封郵件解決了下面幾個問題:

        (1)引入一個困難的、需要10分鐘求解的工作量計算,限制了網路中每個時刻中被提出的進攻時刻數目。

        (2)將所有求解出的“工作量證明”都逐一加入,形成一個越來越長的鏈條,一個記錄著所有“參與著攻擊時刻雜湊計算的將軍、計算的‘工作量證明’、關於‘工作量證明’的計算的總體名錄”。

        (3)基於這條長鏈得出安全的進攻時刻的答案。

引自:《區塊鏈-重塑經濟與世界》第8頁。