共識
以太坊網路中的共識是指多個節點或代理在給定的時間點就區塊鏈狀態達成一致的能力。這與傳統的定義爲個人或羣體之間的一般協議的共識密切相關但不同。在這裏,社區必須解決在技術上(在網路內)和社交上達成共識的挑戰(以確保協議不會分叉或破裂)。本章將概述建立共識的一些技術方法。
當涉及區塊鏈上分散記錄保存和驗證的核心功能時,單獨依靠信任來確保添加到帳本的資訊是正確的可能會成爲問題。這種挑戰在去中心化網路中更爲明顯,因爲沒有中央實體來決定什麼應該和不應該被視爲是真實的。缺乏一箇中央決策實體是區塊鏈受歡迎程度的主要吸引力之一,因爲系統能夠抵抗審查制度,並且無需對許可或資訊獲取權限的依賴。然而,這些好處可能帶來成本,因爲如果沒有可信的仲裁員,任何分歧,欺騙或差異都需要使用數學,經濟或社會技術進行協調。因此,分散的系統更有抵禦攻擊的能力,但在應對變化時卻不那麼果斷。
獲得共識和信任資訊的能力將對區塊鏈技術作爲資產類別和技術的未來採用和實用具有重要意義。爲了應對這一挑戰並保持權力下放的重要性,社區不斷嘗試不同共識模式,我們將在本章中探討。
共識度量
共識度量是可測量的數據,區塊鏈網路的節點必須在該數據上達成一致,以便爲每個塊中包含的數據建立並保持一致。在區塊鏈技術中,每次將新塊添加到鏈中時,每個網路節點都會測量並批准一致性度量。作爲共識度量的結果,區塊鏈充當了從一個確定可驗證的事實延伸到下一個事實的真理鏈。由於共識度量,區塊鏈協議的節點變爲 迷你公證人 mini-notaries,能夠從真實的節點中立即分辨出區塊鏈的錯誤副本,並將該事實報告給整個網路。這些措施是必需的,以便阻止通過提交包含虛假資訊的區塊來欺騙網路不良行爲者。由於一致性度量,區塊鏈不僅建立了的完整性,而且長期保持不變。共識度量有多種形式,但對於此討論而言,最重要的兩種是基於風險的度量和基於工作量的度量。
基於Hash的度量
通常稱爲工作量證明(PoW)度量,這些度量建立了共識,因爲使用它們的協議將計算機設置爲查找難題的答案。找到適合網路參數的雜湊的難題要求節點提交處理能力並使用電力與其他節點競爭以提出有效的雜湊。爲了便於說明,可以考慮超級計算機,它的唯一工作就是在整數空間中搜索質數。現在考慮由普通計算機組成的整個網路。這些計算機放在一起時,可以說具有超級計算機的組合計算能力。這個計算機網路的唯一工作類似於搜索另一種稱爲SHA-256雜湊的數字的可能數字。這些數字具有獨特的屬性,就像質數一樣,儘管在生成符合網路設定標準的雜湊方面存在很大困難,但在發現時可以輕鬆驗證它們。想象計算雜湊和驗證雜湊的一種方法是使用拼圖遊戲類比。這個難題非常困難且耗時,但是一眼就能看出它是否已經完成。
當準確計算SHA-256雜湊值時,它們可用作證明已使用一定量的計算能力來查找數字的證明。最新的質數是asciimath:[2^(77,232,917)- 1]。它是由計算機發現的,就像計算機發現的SHA-256雜湊一樣。SHA-256雜湊比新質數更容易找到,但是找到雜湊的固有難點在於基於雜湊的度量得出它們的能力。
每個SHA-256雜湊都有64個十六進制字符。例如,這裏是單詞“yank”的SHA-256雜湊。
“yank”(SHA-256)= 45F1B9FC8FD5F760A2134289579DF920AA55830F2A23DCF50D34E16C1292D7E0
將其與三個字母“yan”的SHA-256雜湊:
“yan”(SHA-256)= 281ACA1A80B52620BD717E8B14A0386B8ADA92AE859AC2C8A2AC222EFA02EDBB
兩個字母“ya”的SHA-256雜湊:
“ya”(SHA-256)= 6663103A3E47EFC879EA31FA38458BE23BE0CE0895F3D8B27B7EA19A1120B3D4
單個字母“y”的SHA-256雜湊:
“y”(SHA-256)= A1FCE4363854FF888CFF4B8E7875D600C2682390412A8CF79B37D0B11148B0FA
基於雜湊的度量驗證
如果你對足夠多的隨機短語進行了雜湊,有點像打字機上的猴子,最終你會發現一個匹配特定模式的雜湊。在雜湊爲“ya”的情況下,請注意它以模式“666”開頭。這類似於比特幣,但比特幣要求找到與以“000”開頭的模式匹配的雜湊值。可以通過將前一個區塊中的資訊插入到SHA-256雜湊演算法中來創建的任何雜湊,並用於創建下一個塊,只要它在數字中具有正確數量的前導零,網路就會認可,並且區塊獎勵將是你的。
由於想要挖掘比特幣的人數不斷增加,因此每秒尋找SHA-256雜湊值的算力總是越來越多。比特幣軟體通過自動調整共識度量的難度來處理這種意外事件,增加前導零的數量以形成共識。這可以保證新塊的創建時間與前面的塊大致相同。對於比特幣網路,爲十分鐘,但可以輕鬆更改。在以太坊中,平均區塊生成時間約爲10秒。
基於風險的度量
通常稱爲Proof-of-Stake(PoS)度量,這些度量基於以下事實建立共識:選擇創建無效區塊的每個人都會失去比通過創建有效區塊獲得的更多的東西。該度量是通過關於鏈內數據的共識創造的,而不是關於鏈外數據的共識。基於雜湊的共識度量主要關注SHA-256雜湊的質量和精確性。基於風險的度量主要關注任何特定節點在添加新塊時所承擔的風險。
所有節點在這裏達成一致的度量是哪些節點創建了正確的塊,哪些節點沒有。在某種程度上,這已經內建在比特幣協議中。比特幣協議假定正確的塊是大多數節點正在挖掘的塊。它假設礦工不會選擇不正確的區塊,因爲這不利於挖掘壞區塊。
另一方面,基於風險的鏈依賴於對未能創建網路中其他節點認可的塊的創建者的快速,即時和不可逆轉的影響。通過強制執行資源丟失的風險,基於雜湊的度量(也依賴於不想浪費資源的人員)過程可以以更簡單的方式進行縮短和實施。目前正在研究在以太坊中實現這種共識度量模型。
工作量證明是一種共識協議,它將網路中的有效區塊鏈視爲創建計算成本最高的鏈。這裏提到的計算工作是將所有塊添加到當前區塊鏈所必須完成的工作。這項工作由網路節點完成,並且必須在計算上很困難,以便使工作變得非常重要,但也必須是可行的,以便在經過合理的努力之後可以實現。最終,網路將依賴於提供此PoW的節點以維持區塊鏈,因此,網路的最佳利益是需要合理的PoW。
在以太坊網路以及許多其他區塊鏈網路中,獲取PoW需要找到要添加到區塊鏈的塊的雜湊。這個雜湊是通過雜湊由塊的數據和隨機數組成的字串獲得的(創建此字串的方法可能會有所不同,但整個過程是相同的)。該雜湊必須小於某個閾值(由網路的難度確定),並且一旦節點發現產生該雜湊的隨機數,則接受相應的塊並將其添加到區塊鏈中。
找到這個有效雜湊的方法是修改nonce,通常將其初始化爲零並在每次迭代時遞增,直到產生低於網路閾值的雜湊。此過程稱爲挖掘。由於挖掘中使用的雜湊函數的性質,找到有效隨機數的唯一方法是通過暴力搜索,即檢查隨機數的每個可能值,直到找到滿足網路要求的雜湊。因此,提供有效的隨機數被認爲是PoW。
PoS
權益證明(PoS,Proof-of-Stake)是公共區塊鏈的一類共識演算法,它依賴於驗證者在網路中的經濟利益。在基於工作量證明(PoW)的公共區塊鏈(例如比特幣和以太坊的當前實現)中,該演算法獎勵解密加密謎題的參與者,以便驗證交易並創建新的塊(即挖掘)。在基於PoS的公共區塊鏈中(例如以太坊即將發佈的Casper實現),一組驗證者輪流對下一個塊進行建議和投票,每個驗證者的投票權重取決於其存款的大小(即賭注)。PoS的顯着優勢包括安全性,降低集中風險和能源效率。
通常,權益證明演算法如下。區塊鏈跟蹤一組驗證者,任何持有區塊鏈基本密碼貨幣的人(在以太坊的情況下是ether)都可以通過發送一種特殊類型的交易來將其以太幣鎖定到存款中,從而成爲驗證者。然後,通過所有當前驗證者都可以參與的一致性演算法來完成創建和同意新塊的過程。
有許多種共識演算法,以及許多方法可以爲參與共識演算法的驗證人分配獎勵,因此有許多“口味”的權益證明。從演算法的角度來看,有兩種主要類型:基於鏈的權益證明和BFT風格的權益證明。
-
在基於鏈的證明中,演算法在每個時隙中僞隨機地選擇一個驗證者(例如,每個10秒的週期可能是一個時隙),併爲該驗證者分配創建單個塊的權限,這個塊必須指向一些前一個塊(通常是前一個最長鏈末端的塊),因此隨着時間的推移,大多數塊會聚成一個不斷增長的鏈。
-
在BFT風格的股權證明中,驗證者被隨機分配提出區塊的權利,但是通過多輪過程來確定哪個區塊是規範的,其中每個驗證者在每輪中發送對某個特定區塊的“投票”,在流程結束時,所有(誠實和在線)驗證者永久同意任何給定的塊是否屬於鏈條的一部分。請注意,塊可能仍然鏈接在一起; 關鍵的區別在於塊上的共識可以在一個塊內,並且不依賴於它之後的鏈的長度或大小。
PoA
授權證明(PoA)是PoS一致性演算法的子集,主要由測試網和私有或聯盟網路使用。在基於PoA的區塊鏈中,交易有效性最終由一組經批准的鏈上帳戶確定,稱爲“授權節點”。確定授權節點的標準是通過網路治理結構中編寫的方法確定性地決定的。
PoA被廣泛認爲是達成共識的最快途徑,但依賴於驗證節點尚未受到損害的假設。非驗證參與者可以像公共以太網那樣訪問和使用網路(通過利用p2p交易,合約,帳戶等)
PoA共識依賴於驗證者的聲譽和過去的表現。這個想法是驗證者節點將其身份/聲譽放到我的身上。私人聯盟網路的一個重要方面是鏈上地址與已知的現實世界身份之間的聯繫。因此,我們可以說驗證節點正在盯着他們的“身份”或“聲譽”(而不是他們的經濟持有)。這爲驗證者創建了一定程度的問責制,最適合企業,私有或測試網路。
PoA目前由測試網路Kovan(PoA網路)使用,並且可以在Parity中輕鬆配置用於私人聯盟網路。
DPoS
代理權益證明(DPoS)是一種經過修改的權益證明形式,網路參與者投票選舉一系列代表(也稱爲證人)來驗證和保護區塊鏈。這些代表有點類似於PoA中的權威節點,除非他們的權限可能被選民撤銷。
在DPoS共識中,與PoS一樣,投票權重與用戶注入的投注金額成正比。這就產生了一個場景,即較多token持有者比較少token的持有者擁有更多的投票權。從遊戲理論的角度來看,這是有道理的,因爲那些具有更多經濟的“遊戲中的皮膚”的人自然會有更大的動力來選出最有效的代表證人。
此外,代表證人會收到驗證每個區塊的獎勵,因此被激勵保持誠實和有效 - 以免被替換。然而,有一些方法可以使“賄賂”變得相當合理; 例如,交易所可以提供存款利率(或者更加含糊地,使用交易所自己的資金建立一個很好的界面和功能),交易所運營商可以使用大量存款進行DPoS共識投票。。
以太坊的共識
Ethash簡介
Ethash是以太坊工作量證明(PoW)演算法,它依賴於數據集的初始紀元的生成,該數據集的大小約爲1GB,稱爲有向無環圖(DAG)。DAG使用* Dagger-Hashimoto演算法的版本,它是*Vitalik Buterin的Dagger演算法和Thaddeus Dryja的Hashimoto演算法的組合。* Dagger-Hashimoto演算法是以太坊1.0使用的挖掘演算法。隨着時間的推移,*DAG線性增長,每紀元(30,000塊,125小時)更新一次。
種子,緩存,數據生成
PoW演算法涉及:
- 通過掃描DAG的先前塊頭來計算每個塊的Seed。+
- Cache 是一個16MB的僞隨機緩存,根據種子計算,用於輕量級客戶端中的儲存。
- 來自cache的DAG Data Generation 在完整客戶端和礦工上用於儲存 (數據集中的每一項只依賴cache中的一小部分項目)+
- 礦工通過隨機抽取數據集的片段並將它們混合在一起進行挖掘。可以使用儲存的緩存和低記憶體進行驗證,以重新生成所需的數據集的特定部分。
-
Ethash-DAG: https://github.com/ethereum/wiki/wiki/Ethash-DAG
-
Ethash Specification: https://github.com/ethereum/wiki/wiki/Ethash
-
Mining Ethash DAG: https://github.com/ethereum/wiki/wiki/Mining#ethash-dag
-
Dagger-Hashimoto Algorithm: https://github.com/ethereum/wiki/blob/master/Dagger-Hashimoto.md
-
DAG Explanation and Images: https://ethereum.stackexchange.com/questions/1993/what-actually-is-a-dag
-
Ethash in Ethereum Yellowpaper: https://ethereum.github.io/yellowpaper/paper.pdf#appendix.J
-
Ethash C API Example Usage: https://github.com/ethereum/wiki/wiki/Ethash-C-API
Polkadot簡介
Polkadot是一種鏈間區塊鏈協議,包括與權益證明(PoS)鏈的整合,允許Parachain在沒有內部共識的情況下獲得共識。
-
Relay-Chains 連接到所有Parachains並協調區塊鏈之間的共識和交易傳遞,並使用驗證函數通過驗證PoV候選塊的正確性來促進Parachain交易的最終確定。
-
Parachains(跨網路的並行鏈),它們是區塊鏈,用於收集和並行處理交易以實現可伸縮性。
-
無需信任,交易直接在區塊鏈之間轉移,而不是通過中間人或分散交易所。
-
彙總安全,根據共識協議規則(Rules)檢查Parachain交易有效性。通過結合由動態治理系統確定的每個集團成員的一定比例的權益token資本來實現安全性。羣組成員資格需要綁定來自Validators和Nominators的賭注token的輸入,如果出現不良行爲,可以在試驗中使用不當行爲證明進行扣除。
-
Bridges 通過解耦具有不同共識架構機制的區塊鏈網路之間的鏈接來提供可擴展性。
-
Collators 負責監管和維護特定的Parachain,方法是將其可用交易整理爲有效性證明(PoV)候選塊,向Validators報告以證明交易有效並在塊中正確執行。如果它有winning ticket(由最接近Golden Ticket的Polkadot地址的Collator簽名)並且變得規範和最終確定,則通過支付他們從創建PoV候選區塊所收集的任何交易費來激勵他們。Collators被給予Polkadot地址。膠合劑不與鉚接標記粘合。
-
Golden Ticket是包含獎勵的每個Parachain的每個區塊中的特定Polkadot地址。Collators被賦予一個Polkadot地址,並向Validator提供由Collator簽名的PoV候選塊。獎勵的獲獎者在PoV候選區塊中有一個Collator Polkadot地址,該區域最接近Golden Ticket Polkadot地址
-
Fisherman 監控Polkadot網路交易,以發現Polkadot社區的不良行爲。將驗證者帶到法庭並證明他們表現得很糟糕的Fisherman會被確認者的債券激勵,因爲債券被用作懲罰不良行爲的懲罰。
-
驗證者 是Parachain社區中的維護者,他們被部署到不同的Parachains來監管系統。驗證者同意Merkle Trees的根源。驗證者必須使交易可用。漁民可以將驗證員帶到法庭,因爲沒有進行交易,相關的Collators可能會質疑該交易是否可以作爲整理證明。
-
提名者(類似於PoW挖掘)被動監督並投票給他們認爲可以通過賭注代幣資助他們認可的確認者。
Polkadot的Relay-Chains使用Proof of Stake(PoS系統,其中結構化狀態機(SM)並行執行多個拜占庭容錯(BFT)共識,以便SM過程收斂于越多個Parachain維度的包含有效候選者的解決方案跨的塊。每個Parachain中的有效候選塊是根據交易的可用性和有效性確定的,因爲根據共識機制,目標驗證者(下一個塊)只有在具有足夠的交易資訊時才能從源驗證者(前一個塊)執行傳入消息。可用和有效。驗證人投票選擇Collators使用規則達成共識的有效候選區塊。
-
Polkadot link: https://polkadot.network
-
Polkadot presentation at Berlin Parity Ethereum link: https://www.youtube.com/watch?v=gbXEcNTgNco