區塊鏈系統時鍾同步(NTP時間同步服務器)
區塊鏈系統時鍾同步(NTP時間同步服務器)
本文主要解釋了區塊鏈中的重要功能:工作證明(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項目的遺產 ,它確實用於證明工作。在區塊鏈中,卻主要是關於可驗證的花費時間。當人們發現一個滿足難度的哈希值時,人們發現它需要一定時間。完成這個時間的方法就是“工作”,哈希是有趣的,因為它是時間的證明。
工作證明完全是關於時間而非工作的事實也表明,可能存在其他類似的統計挑戰,這些挑戰既費時又耗力。這也可能意味着比特幣哈希率過高,而且我們上面描述的比特幣時鍾可以在一小部分哈希率上可靠地運行,但哈希率是刺激能源消耗的激勵結構。
如果找到一種方法來減少工作的耗時就會產生萬億美元的問題,請讓我知道!
