天天看點

區塊鍊系統時鐘同步(NTP時間同步伺服器)

區塊鍊系統時鐘同步(NTP時間同步伺服器)

安徽京準電子科技官微——ahjzsz

安徽京準電子科技官微——ahjzsz 

本文主要解釋了區塊鍊中的重要功能:工作證明(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分鐘才會找到答案。(好吧,他們需要以某種方式告訴地球人他們是否解決了這個問題,否則我們永遠都不會知道)。

值得注意的是,遠方的參與者之間沒有真正的交流溝通,因為他們共同解決相同的統計問題,但他們甚至不知道彼此的存在。

區塊鍊系統時鐘同步(NTP時間同步伺服器)

這種“普遍性”雖然起初看起來很神奇,但實際上很容易解釋。我使用了“通用universal”一詞,因為它用一個詞來形容它,但它确實意味着“每個參與者都知道”。

SHA-256的輸入可以被認為是0到2的 256平方之間的一個整數(因為輸出是32位元組,也就是說0和2的 256平方之間,任何更大的值都可以保證碰到,比如變為備援)。即使它非常大( 比可感覺宇宙中的原子數目大得多),它是一組數字,每個參與者都知道,參與者隻能從這組資料中挑選出來。

如果輸入集是衆所周知的,函數(SHA-256)是衆所周知的,并且難度要求是衆所周知的,那麼找到解決方案的可能性也确實是“普遍的”。

嘗試SHA會使您成為參與者

如果确定的問題是要找到符合的哈希值,那麼您隻需要嘗試一次,而且Bingo,您也已經影響了全局哈希率,并且對于那個嘗試您是參與者幫助其他人解決問題的人。你不需要告訴别人你做了這件事(除非你真的找到了解決方案),其他人不需要知道它,但是你的嘗試确實影響了結果。對于整個宇宙來說,no less。

如果上述情況仍然令人懷疑,一個很好的比喻可能是尋找大質數的問題。找到最大的質數是很難的,一旦找到,它就變成“被發現”或“已知”。有無數的質數,但宇宙中每個數字隻有一個執行個體。 是以,試圖找到最大素數的人正在研究同一個問題。你不需要告訴任何人你決定尋找最大素數,你隻需要在你找到一個時釋出它。如果沒有人找到最大的素數,那麼它永遠不會被發現。是以,隻要最終被發現(如果被發現的話)被公布,參與(即試圖找到一個)者,即使它是完全保密的,仍然影響結果。

想想這個令人難以置信的統計現象,即任何參與者即使在完全保密的情況也會影響結果,即使并沒有成功也會,這正是讓中本聰的發明顯得如此輝煌原因。

值得注意的是,由于尋找SHA是沒有進展的概念問題,每次嘗試都可以被認為是一個參與者努力加入并立即離開。是以,礦工每秒鐘加入和離開五十次。

參與是一種統計顯示

在許多網站上列出的全球哈希率并不是因為每個礦工都在某些“礦工注冊辦公室”​​注冊,他們定期報告哈希率。但是沒有這樣的東西存在。

哈希率是已知的,因為對于在10分鐘内找到特定難度的解決方案,平均而言,這種許多嘗試(在撰寫本文時〜10的21)必須由某處某人實作。

我們不知道這些參與者是誰,他們從未宣布他們正在工作,沒有找到解決方案的人(實際上他們都是)并沒有告訴任何人他們正在工作,他們的位置可能在宇宙中的任何地方,但我們絕對确定地知道它們存在。因為問題需要繼續得到解決(哈希值需要被找到)。

工作是一個時鐘

問題的關鍵在于:找到一緻性哈希的難度就像一個時鐘。如果你願意的話,一個通用的時鐘,因為宇宙中隻有一個這樣的時鐘,是以沒有什麼可以同步,任何人都可以“看”它。

這個時鐘不準确并不重要。重要的是,這對每個人來說都是同一個時鐘,并且區塊鍊的狀态可以毫不含糊地與時鐘的滴答聲挂鈎。

這個時鐘是由遍布全球的未知數量的集體參與者的多重效率操作的,彼此完全獨立。

區塊鍊系統時鐘同步(NTP時間同步伺服器)

謎題的最後一部分

解決方案必須是區塊的哈希(準确說是區塊頭部)。正如我們所提到的那樣,輸入并不重要,但如果它是實際的塊,那麼無論何時找到解決方案,它都發生在我們的工作時間校驗時鐘的滴答處。不是在此之前,也不是在其之後,而是正好在滴答此刻。我們毫不含糊地知道這一點,因為該塊是該機制的一部分。

換句話說,如果塊不是輸入到SHA256函數,我們仍然會有一個分布式時鐘,但是我們不能将這個塊與這個時鐘的滴答連接配接起來。使用塊作為輸入解決了這個問題。

值得注意的是,我們的工作證明時鐘僅為我們提供了滴答計時。沒有辦法從滴答判斷順序,這就是Merkle樹的用途。

分布式共識如何?

共識意味着協定。所有參與者隻能一緻認可時鐘的滴答别無選擇能達成共識。此外,每個人都知道滴答和附加的資料。事實上,正如中本聰在前面引用的電子郵件中解釋的那樣,這确實解決了拜占庭将軍問題。

在一個罕見但常見的情況下,有兩個連續的滴答與一個塊有關聯,發生沖突。這個沖突是通過什麼塊與下一個滴答相關聯來解決的,使得有争議的塊之一成為“孤兒”。區塊鍊如何繼續是一個偶然的事情,是以這也可能間接地歸因于工作時間時鐘。

就是這樣

這是工作證明為區塊鍊所做的工作。這不是一個“礦工”,礦工是獲得解決問題的權利,也不是将真正的能量轉化為有價值的概念,而是所有的紅鲱魚。

例如,礦工中獎的獎勵是鼓勵礦工參與的原因,但這并不是使區塊鍊成為可能的原因。區塊是一個Merkle樹,但它又與工作證明無關,它加密地加強了區塊排序的記錄。Merkle樹也使得以前的滴答“更确定”,“更不可否認”或更簡單。

工作量證明也是塊體實際上不可變的機制,這是一種很好的副作用,可以使隔離見證成為可能,但它也可以通過保留簽名(證人)來完成,是以這也是次要的。

結論

比特币區塊鍊工作證明隻是一個分布式的、分散式的時鐘。

如果你了解了這個解釋,那麼你應該更好地把握證明工作證明與權益證明Proof-of-Stake的比較,并且很明顯這兩者不具有可比性:權益證明是關于(随機的分布式)權限,而工作證明是一個時鐘。

在區塊鍊的背景下,工作證明可能是一種誤用。這個術語是Hashcash項目的遺産 ,它确實用于證明工作。在區塊鍊中,卻主要是關于可驗證的花費時間。當人們發現一個滿足難度的哈希值時,人們發現它需要一定時間。完成這個時間的方法就是“工作”,哈希是有趣的,因為它是時間的證明。