為了使整個區塊鏈網絡節點保持相同的數據並確保每個參與者的公平性,整個系統中的所有參與者必須有壹個統壹的協議,也就是我們這裏要識別的* * *算法。比特幣的所有節點都遵循統壹的協議規範。協議規範(* * *知識算法)由相關的* *知識規則組成,可分為兩大核心:工作量證明和最長鏈機制。所有規則(* * *知識)的最終體現是比特幣的最長鏈。* * *算法的目的是確保比特幣在最長的鏈上保持運行,從而確保整個記賬系統的壹致性和可靠性。
區塊鏈的用戶在進行交易時不需要考慮彼此的信用、相互信任或信任的中介或中央組織,而只需要根據《區塊鏈協定》實現交易。這種沒有可信第三方中介的順利交易的前提是區塊鏈的* * *知識機制,即在互不了解、互不信任的市場環境中,參與交易的每個節點都沒有為了自身利益而違規作弊的動機或行為,因此每個節點都會自願自覺地遵守預設規則來判斷每筆交易的真實性和可靠性,並將檢查記錄寫入區塊鏈。每個節點的利益是不同的,所以從邏輯上講,他們沒有串通作弊的動機,尤其是當網絡中的某些節點具有公共聲譽時。區塊鏈技術利用基於數學原理的* * *知識算法在節點之間建立“信任”網絡,利用技術手段實現創新的信用網絡。
目前區金融行業主流的算法機制包括工作量證明機制、股權證明機制、份額授權證明機制和池驗證池四大類。
工作負載證明機制是工作負載證明,這是在生成要添加到區塊鏈的新事務信息(即新塊)時必須滿足的要求。在基於工作量證明機制構建的區塊鏈網絡中,節點通過計算隨機哈希的數值解來競爭記賬權並獲得正確的數值解以生成區塊的能力是節點計算能力的具體表現。工作量證明機制具有完全去中心化的優勢。在以工作量證明機制為知識的區塊鏈中,節點可以自由進出。著名的比特幣網絡使用工作量證明機制來生產新貨幣。然而,由於比特幣網絡中工作量證明機制的應用吸引了全球計算機的大部分計算能力,因此其他試圖使用該機制的區塊鏈應用很難獲得同等規模的計算能力來維護自身的安全。同時,基於工作量證明機制的挖掘行為也造成了大量的資源浪費,並且需要很長時間才能到達知識,因此這種機制不適合商業應用。
2012年,化名Sunny King的網民推出了Peercoin,使用工作量證明機制發行新幣,並使用權利證明機制來維護網絡安全。這是權利證明機制在加密電子貨幣中的首次應用。與要求認證機構執行壹定量的計算不同,權益證明要求認證機構提供壹定量加密貨幣的所有權。權益證明機制的運行模式是,礦工在創建新區塊時,需要創建壹個“幣權”交易,該交易將按照預設的比例向礦工本人發送壹些硬幣。根據每個節點的代幣的比例和時間,股權證明機制降低了根據算法按比例挖掘節點的難度,從而加快了隨機數的搜索速度。這種* * *知識機制可以縮短實現* * *知識所需的時間,但本質上仍然需要網絡中的節點來進行挖掘操作。因此,PoS機制並沒有從根本上解決PoW機制難以在商業領域應用的問題。
共享授權證明機制是保證網絡安全的壹種新的知識機制。在試圖解決傳統PoW機制和PoS機制問題的同時,還可以通過實施科技民主來抵消集權帶來的負面影響。
股份授權認證機制類似於董事會的投票,董事會內置了股東實時投票系統,就像該系統正在召開壹次永遠不會結束的股東大會,所有股東都將投票決定公司的決策。基於DPoS機制的區塊鏈分權取決於壹定數量的代表,而不是所有用戶。在這樣的區塊鏈中,所有節點投票選舉壹定數量的節點代表,節點代表將代表所有節點確認區塊並維持系統的有序運行。同時,區塊鏈的所有節點都有權隨時罷免和任命代表。如有必要,所有節點可以投票取消當前節點代表的資格,並重新選舉新代表,以實現實時民主。
共享授權證明機制可以大大減少參與驗證和記賬的節點數量,從而實現秒級驗證。然而,* * *知識機制仍然無法完美解決區塊鏈在商業中的應用問題,因為* * *知識機制無法擺脫對代幣的依賴,並且在許多商業應用中並不需要代幣的存在。
池驗證池基於傳統的分布式壹致性技術建立,輔以數據驗證機制,這是目前區塊鏈廣泛使用的知識機制。
池驗證池可以在不依賴令牌的情況下工作。基於成熟的分布式壹致性算法(Pasox、Raft),可實現秒級認證,更適合多參與者的多中心商業模式。但是,池驗證池也存在壹些缺點,例如* * *知識機制所能達到的分布式程度不如PoW機制。
本文主要闡述了區塊鏈工作量證明機制的壹些算法原理以及比特幣網絡如何證明其工作量。希望大家能對* * *知識算法有壹個基本的了解。
工作量證明系統的主要特點是客戶端必須做壹些困難的工作才能得到結果,驗證者可以通過結果輕松檢查客戶端是否做了相應的工作。該方案的壹個核心特征是不對稱:對於請求者來說工作是適度的,對於驗證者來說很容易驗證。它不同於驗證碼,驗證碼很容易由人類而不是計算機來解決。
下圖顯示了工作量證明過程。
例如,創建“妳好,世界!”對於壹個基本角色。我們給出的工作量要求是,在創建字符後可以添加壹個名為nonce(隨機數)的整數值,並且可以對更改後的字符創建執行SHA-256操作(添加nonce)。如果結果(以十六進制形式表示)以“0000”開頭,則驗證通過。為了實現工作量證明的目標,需要不斷增加nonce值並對獲得的字符創建執行SHA-256哈希操作。根據這個規則,需要42,565,438+0次運算才能找到前面有四個零的散列。
通過這個例子,我們初步了解了工作量證明機制。有些人可能會認為,如果工作量證明只是這樣壹個過程,是不是只需要記住nonce是4521就可以使計算通過驗證?當然不是,這只是個例。
接下來,我們將簡單地將輸入更改為“Hello,World!+整數值”,整數值為1~1000,也就是說輸入改為1~1000的數組:Hello,World!1;妳好,世界!2;...;妳好,世界!1000。然後,上面的工作負載依次證明數組中的每個輸入-找到壹個以四個零開頭的hash hash。
因為哈希值是偽隨機的,所以很容易根據概率論的相關知識進行計算。據估計,要得到壹個前面有四個零的哈希hash需要16乘以2。剛才1000次計算的實際結果顯示,平均計算次數為66958次,非常接近2的16次方(65536)。在這個例子中,數學預期的計算次數實際上是所需的“工作量”,重復多次工作量將被證明是符合統計規律的概率事件。
對輸入字符進行計數並獲得相應目標結果的實際計算時間如下:
對於比特幣網絡中的任何節點,如果您想生成壹個新區塊來加入區塊鏈,則必須在比特幣網絡中解決這個難題。這個問題的關鍵要素是工作量證明函數、塊和難度值。工作量證明函數是這道題的計算方法,塊是這道題的輸入數據,難度值決定了理解這道題所需的計算量。
比特幣網絡中使用的工作量證明函數就是上面提到的SHA-256。數據塊實際上是在工作負載證明鏈路中產生的。曠工通過不斷構造塊數據來測試計算結果是否滿足所需的工作量,從而判斷塊是否滿足網絡難度。塊頭是比特幣工作量證明函數的輸入數據。
難度值是礦工挖礦的重要參考指標,它決定了產生壹個合法區塊需要多少次哈希運算。比特幣網絡每10分鐘生成壹個區塊。如果在不同的網絡計算能力條件下以相同的速度生成新塊,則難度值必須根據網絡計算能力的變化進行調整。壹般原則是保持網絡10分鐘以生成新區塊,而不考慮開采容量。
難度值的調整在每個完整的節點中獨立自動進行。每2016個區塊,所有節點將根據統壹格式自動調整難度值。此公式是通過將新生成的2016個塊的花費時間與預期時間進行比較獲得的(如果每10分鐘生成壹次提款,則預期時間為20160分鐘),並根據實際時間與預期時間的比率進行調整。也就是說,如果方塊生成速度快於10分鐘,難度值將增加;反正難度值降低了。由以下公式表示:
新難度值=舊難度值*(20160分鐘/過去2016個區塊所花費的時間)。
工作量認證需要目標值。比特幣工作量認證目標值的計算公式如下:
目標值=最大目標值/難度值,其中最大目標值是0x 000000000 fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff的常數值。
目標值與難度值成反比,比特幣工作量證明的成就在於礦場中計算的區塊哈希值必須小於目標值。
我們也可以將比特幣工作負載的過程簡單理解為:通過不斷更改塊頭(即嘗試不同的nonce值)並將其用作輸入,進行SHA-256哈希運算以找出具有特定格式哈希值的進程(即需要壹定數量的前導零),並且需要的前導零越多越難。
比特幣解決這壹工作量證明難題的步驟可以大致總結如下:
這個過程可以用下圖來表示:
比特幣的工作量證明了它是我們通常所說的“挖礦”的主要工作。理解工作量證明機制將為我們進壹步理解比特幣區塊鏈的* * *知識機制奠定基礎。