區塊鏈的工作證明其實是一個分散式時鐘
本文主要解釋了區塊鏈中的重要功能:工作證明(Proof-of-Work)。主要說明工作證明對於區塊鏈是一個重要特徵,而且是必須的;區塊鏈中其他經常被提及特徵(如安全性)反而是次要的,雖有用但非必須。
本文的解釋主要是基於區塊鏈工作證明的一些有趣特性,這些特性其實不能顯而易見,有時甚至與直覺相反,例如區塊鏈的參與者可以在不需要溝通的情況下共同解決問題。
在瞭解了這些特性之後,人們應該容易得出結論:工作證明主要是完成分散式或分散式的時間機制(如時鐘)。
請注意,這篇文章不是關於工作證明本身解釋,它只是說明了區塊鏈是如何利用它的。如果您對工作證明不瞭解,那麼這個連結可能是一個好的開始。
分散賬本的時間排序問題
在進一步描述解釋之前,讓我們先把重點放在這個問題上,也就是時間排序問題。關於工作證明的許多文獻都很混亂,因為它們總是試圖解釋問題的結果而不是首先確定問題本身。
任何分類賬都絕對需要順序。一個人不能花沒有收到的錢,也不能花已經花了的錢。區塊鏈交易(或稱區塊鏈事務)必須明確順序,並且不需要可信任的第三方來協調順序。
即使區塊鏈不是分類賬,而只是某種如順序日誌的資料,但對於每個節點都有相同的區塊鏈複製副本,順序也是必需的。區塊鏈的順序不同就意味著不同的區塊鏈。
但是,如果交易是由世界各地的匿名參與者產生的,並且沒有中心化組織負責交易之間的順序排列,但事實需要一個排序,那麼該怎麼辦呢?雖然一個交易(或塊)可能包括時間戳,但這些時間戳怎麼可信?
時間只是人的概念,時間的衡器比如一個原子鐘對於人來說是一個“可信賴的第三方”。但是,由於網路延遲以及時間相對性的影響,依靠時間戳來確定事件順序在分散系統中是不可能的。
我們感興趣的“時間”不是我們習慣的像年、月、日等時間概念。我們需要的是一種機制,通過這種機制我們可以驗證一個事件發生在另一個事件之前或者可能同時發生。(banq注:事件的順序性)
首先,對於什麼是之前和什麼是之後的等概念,需要建立一個時間點。建立一個時間點起初在理論上似乎是不可能的,因為沒有足夠精確的技術來測量 普朗克時間。但正如你所看到的,比特幣通過建立自己的時間概念來解決這個問題,在這個時間點上,確定精確的時間點實際上是有可能的。
Leslie Lamport在 1978年的論文 “分散式系統中的時間,時鐘和事件順序”中很好地描述了這個問題 , 除了“正確同步的物理時鐘”之外,該文實際上並沒有提供全面的解決方案。在1982年,Lamport還描述了“拜占庭將軍問題”,而Satoshi在他的第一封電子郵件中解釋了工作證明是如何解決這個問題的,因為比特幣檔案指出“要在對等網路上實現分散式時間戳伺服器,我們將需要使用工作證明系統“,這表明工作證明主要就是解決時間戳問題的。
時間是根本問題
必須強調的是, 在分散式系統中不可能將事件與時間點關聯起來,這是一個未解決的問題,直到中本聰發明了區塊鏈的工作證明這個解決方案之後,分散的分類帳才可能得以實現。區塊鏈還有許多其他技術細節,但時間選擇是基礎性和重要的。沒有時間就沒有區塊鏈。
工作證明檔案
簡而言之,區塊鏈的工作證明是一個符合某個要求的SHA-2雜湊值,這個值是非常難以找到的。困難之處在於雜湊小於一個特定數字,數字越小,輸入值越稀少並且發現它的難度就越高。
它被稱為“工作證明”,因為已知具有這種雜湊的值非常罕見,這意味著找到這樣的值需要大量的試錯,即“工作”。反過來,這意味著 "時間"。
通過改變需求,我們可以改變難度,從而改變發現這種雜湊的可能性。比特幣難度動態調整,以便每十分鐘平均能找到一個正確的雜湊值。
在塊之間什麼也不會發生
區塊鏈的狀態由其塊體現,每個新塊都會產生一個新狀態。區塊鏈狀態一次向前移動一個區塊的距離,而一個區塊需要花費平均10分鐘,這個時間是區塊鏈時間的最小量度。
SHA是無記憶Memoryless,無進展的Progress-Free
安全雜湊演算法是統計和概率中的無記憶Memoryless。這是一個對我們人類來說特別違反直覺的概念。
無記憶的最好例子是擲硬幣。如果一枚硬幣連續出現10次同一面,這是否意味著下一次投擲更可能是反面?我們的直覺說是的,但實際上每次投擲都是50/50的機會,無論前面發生了多少次巧合現象。
無記憶對於無進展的Progress-Free是需要的。無過程意味著,隨著礦工們試圖解決對隨機數進行迭代以找到下一個塊的雜湊值(解決方案),每次嘗試都是一個獨立的事件,無論過去做了多少工作,每次嘗試都找到解決方案的概率是不變的。換句話說,在每一次嘗試中,參與者都沒有更接近解決方案或沒有取得任何進展。一位一直在尋找雜湊值一年的礦工在下一次嘗試時不會比一個剛剛開礦的礦工更有可能找到雜湊值。
因此,在給定的時間段內找到給定解決方案(雜湊值)的可能性僅由所有參與者在雜湊中迭代的速度決定。不是以前的歷史,不是資料,只是雜湊率。
雜湊率又是參與者數量和用於計算雜湊的裝置速度的函式。
SHA輸入是不相關的
在比特幣區塊鏈中,輸入是區塊頭部。但是如果我們只給它隨機值,那麼找到一致性雜湊的概率仍然是一樣的。無論輸入是有效的塊頭還是來自/ dev / random的位元組,平均需要10分鐘才能找到下一塊的雜湊值。
當然,如果你發現一個符合要求的雜湊,但你的輸入不是一個有效的塊,這樣的解決方案不能被新增到區塊鏈,但它仍然是工作量驗證(儘管無用)。
難度是銀河系
奇怪的是,困難是普遍的,這意味著它橫跨整個宇宙。 我們可以讓在火星上的礦工幫忙尋找,他們不需要與地球礦工溝通,關鍵還是每10分鐘才會找到答案。(好吧,他們需要以某種方式告訴地球人他們是否解決了這個問題,否則我們永遠都不會知道)。
值得注意的是,遠方的參與者之間沒有真正的交流溝通,因為他們共同解決相同的統計問題,但他們甚至不知道彼此的存在。
這種“普遍性”雖然起初看起來很神奇,但實際上很容易解釋。我使用了“通用universal”一詞,因為它用一個詞來形容它,但它確實意味著“每個參與者都知道”。
SHA-256的輸入可以被認為是0到2的 256平方之間的一個整數(因為輸出是32位元組,也就是說0和2的 256平方之間,任何更大的值都可以保證碰到,比如變為冗餘)。即使它非常大( 比可感知宇宙中的原子數目大得多),它是一組數字,每個參與者都知道,參與者只能從這組資料中挑選出來。
如果輸入集是眾所周知的,函式(SHA-256)是眾所周知的,並且難度要求是眾所周知的,那麼找到解決方案的可能性也確實是“普遍的”。
嘗試SHA會使您成為參與者
如果確定的問題是要找到符合的雜湊值,那麼您只需要嘗試一次,而且Bingo,您也已經影響了全域性雜湊率,並且對於那個嘗試您是參與者幫助其他人解決問題的人。你不需要告訴別人你做了這件事(除非你真的找到了解決方案),其他人不需要知道它,但是你的嘗試確實影響了結果。對於整個宇宙來說,no less。
如果上述情況仍然令人懷疑,一個很好的比喻可能是尋找大質數的問題。找到最大的質數是很難的,一旦找到,它就變成“被發現”或“已知”。有無數的質數,但宇宙中每個數字只有一個例項。 因此,試圖找到最大素數的人正在研究同一個問題。你不需要告訴任何人你決定尋找最大素數,你只需要在你找到一個時釋出它。如果沒有人找到最大的素數,那麼它永遠不會被發現。因此,只要最終被發現(如果被發現的話)被公佈,參與(即試圖找到一個)者,即使它是完全保密的,仍然影響結果。
想想這個令人難以置信的統計現象,即任何參與者即使在完全保密的情況也會影響結果,即使並沒有成功也會,這正是讓中本聰的發明顯得如此輝煌原因。
值得注意的是,由於尋找SHA是沒有進展的概念問題,每次嘗試都可以被認為是一個參與者努力加入並立即離開。因此,礦工每秒鐘加入和離開五十次。
參與是一種統計顯示
在許多網站上列出的全球雜湊率並不是因為每個礦工都在某些“礦工註冊辦公室”註冊,他們定期報告雜湊率。但是沒有這樣的東西存在。
雜湊率是已知的,因為對於在10分鐘內找到特定難度的解決方案,平均而言,這種許多嘗試(在撰寫本文時〜10的21)必須由某處某人實現。
我們不知道這些參與者是誰,他們從未宣佈他們正在工作,沒有找到解決方案的人(實際上他們都是)並沒有告訴任何人他們正在工作,他們的位置可能在宇宙中的任何地方,但我們絕對確定地知道它們存在。因為問題需要繼續得到解決(雜湊值需要被找到)。
工作是一個時鐘
問題的關鍵在於:找到一致性雜湊的難度就像一個時鐘。如果你願意的話,一個通用的時鐘,因為宇宙中只有一個這樣的時鐘,所以沒有什麼可以同步,任何人都可以“看”它。
這個時鐘不準確並不重要。重要的是,這對每個人來說都是同一個時鐘,並且區塊鏈的狀態可以毫不含糊地與時鐘的滴答聲掛鉤。
這個時鐘是由遍佈全球的未知數量的集體參與者的多重效率操作的,彼此完全獨立。
謎題的最後一部分
解決方案必須是區塊的雜湊(準確說是區塊頭部)。正如我們所提到的那樣,輸入並不重要,但如果它是實際的塊,那麼無論何時找到解決方案,它都發生在我們的工作時間校驗時鐘的滴答處。不是在此之前,也不是在其之後,而是正好在滴答此刻。我們毫不含糊地知道這一點,因為該塊是該機制的一部分。
換句話說,如果塊不是輸入到SHA256函式,我們仍然會有一個分散式時鐘,但是我們不能將這個塊與這個時鐘的滴答連線起來。使用塊作為輸入解決了這個問題。
值得注意的是,我們的工作證明時鐘僅為我們提供了滴答計時。沒有辦法從滴答判斷順序,這就是Merkle樹的用途。
分散式共識如何?
共識意味著協議。所有參與者只能一致認可時鐘的滴答別無選擇能達成共識。此外,每個人都知道滴答和附加的資料。事實上,正如中本聰在前面引用的電子郵件中解釋的那樣,這確實解決了拜占庭將軍問題。
在一個罕見但常見的情況下,有兩個連續的滴答與一個塊有關聯,發生衝突。這個衝突是通過什麼塊與下一個滴答相關聯來解決的,使得有爭議的塊之一成為“孤兒”。區塊鏈如何繼續是一個偶然的事情,所以這也可能間接地歸因於工作時間時鐘。
就是這樣
這是工作證明為區塊鏈所做的工作。這不是一個“礦工”,礦工是獲得解決問題的權利,也不是將真正的能量轉化為有價值的概念,而是所有的紅鯡魚。
例如,礦工中獎的獎勵是鼓勵礦工參與的原因,但這並不是使區塊鏈成為可能的原因。區塊是一個Merkle樹,但它又與工作證明無關,它加密地加強了區塊排序的記錄。Merkle樹也使得以前的滴答“更確定”,“更不可否認”或更簡單。
工作量證明也是塊體實際上不可變的機制,這是一種很好的副作用,可以使隔離見證成為可能,但它也可以通過保留簽名(證人)來完成,所以這也是次要的。
結論
比特幣區塊鏈工作證明只是一個分散式的、分散式的時鐘。
如果你理解了這個解釋,那麼你應該更好地把握證明工作證明與權益證明Proof-of-Stake的比較,並且很明顯這兩者不具有可比性:權益證明是關於(隨機的分散式)許可權,而工作證明是一個時鐘。
在區塊鏈的背景下,工作證明可能是一種誤用。這個術語是Hashcash專案的遺產 ,它確實用於證明工作。在區塊鏈中,卻主要是關於可驗證的花費時間。當人們發現一個滿足難度的雜湊值時,人們發現它需要一定時間。完成這個時間的方法就是“工作”,雜湊是有趣的,因為它是時間的證明。
工作證明完全是關於時間而非工作的事實也表明,可能存在其他類似的統計挑戰,這些挑戰既費時又耗力。這也可能意味著比特幣雜湊率過高,而且我們上面描述的比特幣時鐘可以在一小部分雜湊率上可靠地執行,但雜湊率是刺激能源消耗的激勵結構。
如果找到一種方法來減少工作的耗時就會產生萬億美元的問題,請讓我知道!
Blockchain Proof-of-Work is a Decentralized Clock
[該貼被banq於2018-04-20 14:28修改過]
相關文章
- LaravelZero 從零實現區塊鏈(二)工作量證明Laravel區塊鏈
- 區塊鏈中的分散式模式區塊鏈分散式模式
- 比特幣區塊鏈是一種分散式的事件流日誌比特幣區塊鏈分散式事件
- 區塊鏈101:區塊鏈技術是如何工作的?區塊鏈
- 區塊鏈技術是如何工作的區塊鏈
- 一文讀懂區塊鏈以及一個區塊鏈的實現區塊鏈
- 區塊鏈小白入門019——工作量證明機制(POW)是什麼?區塊鏈
- 五分鐘讀懂區塊鏈到底是個什麼鏈?區塊鏈
- 區塊鏈分散式金融DeFi和Yield Farming工作原理 -HFT區塊鏈分散式
- 基於Java語言構建區塊鏈(二)—— 工作量證明Java區塊鏈
- 分散式賬本-區塊鏈核心技術之一分散式區塊鏈
- 區塊鏈搭建開發公司談分散式記賬與區塊鏈區塊鏈分散式
- 區塊鏈每日一問 | 什麼是區塊鏈的“分叉”?區塊鏈
- 為什麼IBM的Hyperledger不是真正的區塊鏈?它其實是一個Kafka的排序服務IBM區塊鏈Kafka排序
- 區塊鏈共識機制技術一--POW(工作量證明)共識機制區塊鏈
- 使用Go構建區塊鏈 第2部分:工作量證明Go區塊鏈
- Filecoin分散式儲存,能否實現區塊鏈3.0時代?分散式區塊鏈
- 【譯】區塊鏈是如何工作的——用JavaScript演示區塊鏈JavaScript
- 區塊鏈與分散式資料庫的比較區塊鏈分散式資料庫
- 區塊鏈會是下一個風口麼?區塊鏈
- 區塊鏈的基石:工作量證明機制,如何驅動數字貨幣革命?區塊鏈
- 一個簡單的區塊鏈區塊鏈
- 騰訊十年老兵:區塊鏈本質上是一個異地多活的分散式資料庫區塊鏈分散式資料庫
- 用java實現一個簡單的區塊鏈Java區塊鏈
- 一個簡單的區塊鏈程式碼實現區塊鏈
- 區塊鏈是什麼?區塊鏈技術改變我們生活和工作的創新區塊鏈
- 打造一個最小區塊鏈區塊鏈
- 乾貨 | 分分鐘教你用Python建立一個區塊鏈Python區塊鏈
- 區塊鏈交易隱私如何保證?華為零知識證明技術實戰解析區塊鏈
- 區塊鏈是中國市場的下一個爆發點?區塊鏈
- 區塊鏈是合法的嗎?區塊鏈
- 區塊鏈應用|CryptoKitties效應:一個與區塊鏈有關的事故區塊鏈
- 用 JavaScript 寫一個區塊鏈JavaScript區塊鏈
- 分散式系統2:分散式系統中的時鐘分散式
- 什麼是區塊鏈,簡單瞭解區塊鏈區塊鏈
- [區塊鏈]區塊鏈和通證的應用與技術路徑區塊鏈
- 區塊鏈的幾個小故事.小白學區塊鏈01區塊鏈
- 區塊鏈新演算法:人類證明(Proof of Human:PoH) - santisiri區塊鏈演算法