1. 區塊鏈技術框架有哪些
當前主流的區塊鏈架構包含六個層級:網路層、數據層、共識層、激勵層、合約層和應用層。圖中將數據層和網路層的位置進行了對調,主要用途將在下一節中詳述。
網路層:區塊鏈網路本質是一個P2P(Peer-to-peer點對點)的網路,網路中的資源和服務分散在所有節點上,信息的傳輸和服務的實現都直接在節點之間進行,可以無需中間環節和伺服器的介入。每一個節點既接收信息,也產生信息,節點之間通過維護一個共同的區塊鏈來同步信息,當一個節點創造出新的區塊後便以廣播的形式通知其他節點,其他節點收到信息後對該區塊進行驗證,並在該區塊的基礎上去創建新的區塊,從而達到全網共同維護一個底層賬本的作用。所以網路層會涉及到P2P網路,傳播機制,驗證機制等的設計,顯而易見,這些設計都能影響到區塊信息的確認速度,網路層可以作為區塊鏈技術可擴展方案中的一個研究方向;
數據層:區塊鏈的底層數據是一個區塊+鏈表的數據結構,它包括數據區塊、鏈式結構、時間戳、哈希函數、Merkle樹、非對稱加密等設計。其中數據區塊、鏈式結構都可作為區塊鏈技術可擴展方案對數據層研究時的改進方向。
共識層:它是讓高度分散的節點對區塊數據的有效性達到快速共識的基礎,主要的共識機制有POW(Proof Of Work工作量證明機制),POS(Proof of Stake權益證明機制),DPOS(Delegated Proof of Stake委託權益證明機制)和PBFT(Practical Byzantine Fault Tolerance實用拜占庭容錯)等,它們一直是區塊鏈技術可擴展方案中的重頭戲。
激勵層:它是大家常說的挖礦機制,用來設計一定的經濟激勵模型,鼓勵節點來參與區塊鏈的安全驗證工作,包括發行機制,分配機制的設計等。這個層級的改進貌似與區塊鏈可擴展並無直接聯系。
合約層:主要是指各種腳本代碼、演算法機制以及智能合約等。第一代區塊鏈嚴格講這一層是缺失的,所以它們只能進行交易,而無法用於其他的領域或是進行其他的邏輯處理,合約層的出現,使得在其他領域使用區塊鏈成為了現實,以太坊中這部分包括了EVM(以太坊虛擬機)和智能合約兩部分。這個層級的改進貌似給區塊鏈可擴展提供了潛在的新方向,但結構上來看貌似並無直接聯系
應用層:它是區塊鏈的展示層,包括各種應用場景和案例。如以太坊使用的是truffle和web3-js.區塊鏈的應用層可以是移動端,web端,或是是融合進現有的伺服器,把當前的業務伺服器當成應用層。這個層級的改進貌似也給區塊鏈可擴展提供了潛在的新方向,但結構上來看貌似並無直接聯系。
鏈喬教育在線旗下學碩創新區塊鏈技術工作站是中國教育部學校規劃建設發展中心開展的「智慧學習工場2020-學碩創新工作站 」唯一獲準的「區塊鏈技術專業」試點工作站。專業站立足為學生提供多樣化成長路徑,推進專業學位研究生產學研結合培養模式改革,構建應用型、復合型人才培養體系。
2. 區塊鏈共識演算法——(二)PoS共識(Proof of Stake)
2011 年 7 月, 一 位 名 為 Quantum Mechanic 的 數 字 貨 幣 愛 好 者 在 比 特 幣 論 壇 首次提出了權益證明 PoS 共識演算法. 隨後, Sunny King 在 2012 年 8 月發布的點點幣 (Peercoin, PPC) 中首次實現. PoS 由 系統中具有最高權益而非最高算力的節點獲得記賬 權, 其中權益體現為節點對特定數量貨幣的所有權, 稱為幣齡或幣天數 (Coin days)
PoS是考慮到PoW的最大缺陷:浪費資源而提出的,簡單來說就是 誰的權益大,誰說了算 。
PoS共識機制(Proof of Stake 權益證明)通過權益記賬的方式,解決效率低下、資源浪費、節點一致性等問題。
各個節點需要滿足一定的條件(如抵押一定的代幣)才能成為驗證節點(權益提高),系統通過演算法在其中選擇一部分作為出塊節點(礦工),每隔一段時間重新選擇,演算法會保證完全隨機,不可被操控。只有出塊節點才能進行數據處理,爭奪記賬權。
權益主要由權益因子決定,可以是持幣數量,也可以是幣齡及兩者的結合。
以太坊在之後很有可能會改用PoS進行共識,其更加符合以太坊高效率的特點。
3. POA(Proof of Activity)區塊鏈共識演算法
POA(Proof of Activity)演算法是一個區塊鏈的共識演算法,基本原理是結合POW(Proof of work)和POS(Proof of stake)演算法的特點進行工作,POW演算法和POS演算法的具體內容可以參考:
POW演算法 : https://www.jianshu.com/p/b23cbafbbad2
POS演算法 : https://blog.csdn.net/wgwgnihao/article/details/80635162
POA演算法相比於其他演算法可以改進網路拓撲,維持在線節點比例,需求更少的交易費同時減少共識演算法過程中的能量損耗。
POA演算法需求的網路中同樣包含兩類節點,礦工和普通參與者,其中普通參與者不一定一直保持在線。POA演算法首先由礦工構造區塊頭,由塊頭選出N個幣,這N個幣的所有者參與後續的校驗和生成塊的過程。
從這里可以看到POA演算法不僅與算力有關,後續的N個參與者的選舉則完全由參與者在網路中所擁有的幣的總數量決定。擁有越多幣的參與者越有機會被選為N個後續的參與者。而後續N個參與者參與的必要條件是這N個參與者必須在線,這也是POA命名的由來,POA演算法的維護取決於網路中的活躍節點(Active)。
POA演算法的一個理想的基本流程是,類似於POW協議,礦工構造出一個符合難度要求的塊頭,通過礦工得到的塊頭計算衍生出N個幣的編號,從區塊鏈中追溯可以得到這幾個幣目前所述的參與者。礦工將這個塊頭發送給這N個參與者,其中前N-1個參與者對這個塊進行校驗和簽名,最後第N個參與者校驗並將交易加入到該塊中,將這個區塊發布出去,即完成一個區塊的出塊。
一個理想過程如下圖所示:
在實際運行中,無法保證網路上所有參與者都在線,而不在線的參與者則無法進行校驗和簽名,這個無法被校驗和簽名的塊頭則會被廢棄。
即在實際運行中,應該是一個礦工構造出塊頭後廣播給各個參與者簽名,同時繼續重新構造新的塊頭,以免上一個塊頭衍生的N個參與者存在有某一個沒有在線,而導致塊頭被廢棄。
因此,在這種情況下,一個塊是否被確認不僅與礦工的計算能力有關同時也與網路上的在線比例有關。
與純POW相比,在與比特幣(POW)同樣10分鍾出一個塊的情況下,POA由於會有參與者不在線而產生的損耗,因此,10分鍾內礦工可以構造的塊的數量會更多,即塊頭的難度限制會降低,那麼礦工在挖礦過程中會造成的能量損耗也會降低。
與純POS相比,可以看到POA的出塊流程並不會將構造區塊過程中的相關信息上鏈,可以明顯減少區塊鏈上用於維護協議產生的冗餘信息的量。
本節對上訴協議中一些參數設置進行分析
在礦工構造出塊頭後對塊頭進行校驗和區塊構造的N個參與者的數量選定比較類似於比特幣中每一個塊的出塊時間的選取。比特幣中選擇了10分鍾作為每一個塊的期望出塊時間並通過動態調節難度來適應。
這里N的取值同樣可以選擇選定值或者動態調節。動態調節需要更加復雜的協議內容,同時可能會帶來區塊鏈的數據膨脹,而復雜的協議也增加了攻擊者攻擊的可能性。另外暫時沒有辦法證明動態調節可以帶來什麼好處。靜態調節在後續的分析(4 安全分析)中可以得到N=3的取值是比較合適的。
從上面的描述可以看到,構造新的區塊的除了礦工還有從塊頭中衍生出來的N個幣所有者。在構造出一個新的區塊後,這些參與者同樣應該收到一定的激勵,以維持參與者保持在線狀態。
礦工與參與者之間的非配比例與參與者的在線狀態相關。給予參與者的激勵與參與者保持在線狀態的熱情密切相關,越多參與者保持在線狀態,能更好地維持網路的穩定。因此,可以在網路上在線參與者不夠多的時候,提高參與者得到的激勵分成比例,從而激發更多的參與者上線。
如何確定當前參與者的在線情況呢?可以最後第N個參與者構造區塊時,將構造出來但是被廢棄的塊頭加入到區塊中,如果被丟棄的塊頭數量過多,說明在線人數過低,應當調節分成比例。
同時最後第N個參與者與其他參與者的分成同樣需要考慮,第N個參與者需要將交易加入區塊中,即需要維護UTXO池,同時第N個參與者還需要將被丟棄的塊頭加入新構建的區塊中。
為了激勵其將廢棄區塊頭加入新構建的區塊中,可以按照加入的區塊頭,適當增加一點小的激勵。雖然加入更多的區塊頭,可以在下一輪的時候增加分成的比例,應當足夠激勵參與者往區塊中加入未使用的塊頭了(這里參與者不可能為了增加分成而更多地加入區塊頭,每一個區塊頭都意味著一位礦工的工作量)。
一個參與者如果沒有維護UTXO池則無法構造區塊,但是可以參與前N-1個的簽名,因此為了激勵參與者維護UTXO池,作為最後一個構造區塊的參與者,必須給予更多的激勵,比如是其他參與者的兩倍。
從3.2的描述中可以知道一個用戶必須在線且維護UTXO池才可能盡可能地獲得利益。這種機制勢必會導致一些用戶將自己的賬戶託管給一個中心化的機構。這個機構一直保持在線,並為用戶維護其賬戶,在被選為構造區塊的參與者時參與區塊的構建並獲取利益。最後該機構將收益按照某種形式進行分成。
上面說到參與者必須用自己的密鑰進行簽名,而託管給某個機構後,這個機構在可以用這個密鑰簽名構造區塊的同時,也有可能使用這個密鑰消費用戶的財產。這里可以採用一種有限花銷的密鑰,這個密鑰有兩個功能,一個是將賬戶中的部分財產消費出去,另一個是將所有財產轉移到一個指定賬戶。在託管的時候可以使用這個密鑰,在被通知部分財產被花費後可以立即將所有財產轉移到自己的另一個賬戶下,以保證財產的安全。
從上面的分析可以看到,POA的安全性與攻擊者所擁有的算力和攻擊者所擁有的股權有關。假設攻擊者擁有的在線股權佔比為 ,則攻擊者的算力需要達到其他所有算力的 倍才能達成分叉。假設攻擊者股權總佔比為 ,網路中誠實用戶的在線比例為 ,則攻擊者的算力需要達到其他所有算力的 倍才能達成攻擊。
攻擊的分析表格如下:
從上文的分析可以看到,POA演算法相比於其他演算法可以改進網路拓撲,維持在線節點比例,需求更少的交易費同時減少共識演算法過程中的能量損耗。同時,PoA協議的攻擊成本要高於比特幣的純PoW協議。
參考文獻:Proof of Activity: Extending Bitcoin』s Proof of Work via Proof of Stake
4. 號稱「區塊鏈的靈魂」的共識機制是什麼
我們知道區塊鏈是去中心化分布式記賬技術,在區塊鏈系統當中,沒有一個像銀行一樣的中心化記賬機構,如何保證每一筆交易在所有記賬節點上的一致性呢?共識機制解決的就是這個問題,因此也可以說共識機制是區塊鏈的靈魂。
目前比較常見的共識機制有:工作量證明 PoW(Proof of Work)、權益證明(Proof of Stake)以及委託權益證明(Delegated Proof of Stake):
01
PoW(Proof-of-Work)
工作量證明機制
POW的全稱為Proof of Work,翻譯過來即「工作證明」或者「工作量證明」。挖礦獲得多少貨幣獎勵,取決於挖礦貢獻的有效工作,也就是說礦機的性能越好、挖礦的時間越長,所獲得的貨幣獎勵就越多。
BTC就是POW機制下最成功的加密貨幣。POW機制雖然已經成功證明了其長期穩定和相對公平,但在現有框架下,採用POW的「挖礦」形式,將消耗大量的能源。其消耗的能源只是不停的去做SHA256的運算來保證工作量公平,並沒有其他的存在意義。而目前BTC所能達到的交易效率為約5TPS(5筆/秒),以太坊目前受到單區塊GAS總額的上限,所能達到的交易頻率大約是25TPS,與平均千次每秒、峰值能達到萬次每秒處理效率的VISA和MASTERCARD相差甚遠。
02
PoS(Proof-of-Stake)
權益證明機制
POS 即權益證明或者股權證明,全稱為 Proof of Stake。權益證明模式就是根據所持有貨幣的量和時間,來發利息的的一個模式。
POS機制,相比於POW,POS機制節省了能源,引入了「幣齡」這個概念來參與隨機運算。POS機制能夠讓更多的持幣人參與到記賬這個工作中去,而不需要額外購買設備(礦機、顯卡等)。每個單位代幣的運算能力與其持有的時間長成正相關,即持有人持有的代幣數量越多、時間越長,其所能簽署、生產下一個區塊的概率越大。一旦其簽署了下一個區塊,持幣人持有的「幣齡」即清零,重新進入新的循環。
在POS機制下,因為區塊的簽署人由隨機產生,則一些持幣人會長期、大額持有代幣以獲得更大概率地產生區塊,盡可能多的去清零他的「幣天」。因此整個網路中的流通代幣會減少,從而不利於代幣在鏈上的流通,價格也更易受到波動。由於可能會存在少量大戶持有整個網路中大多數代幣的情況,整個網路有可能會隨著運行時間的增長而越來越趨向於中心化。相對於PoW而言,PoS機制下作惡的成本很低,因此對於分叉或是雙重支付的攻擊,需要更多的機制來保證共識。穩定情況下,每秒大約能產生12筆交易,但因為網路延遲及共識問題,需要約60秒才能完整廣播共識區塊。長期來看,生成區塊(即清零「幣齡」)的速度遠低於網路傳播和廣播的速度,因此在PoS機制下需要對生成區塊進行「限速」,來保證主網的穩定運行。
03
DPoS
委託權益證明機制
DPOS即授權股權證明(delegated proof of stake)。
DPoS機制要求在產生下一個區塊之前,必須驗證上一個區塊已經被受信任節點所簽署。相比於PoS的「全民挖礦」,DPoS則是利用類似「代表大會」的制度來直接選取可信任節點,由這些可信任節點(即見證人)來代替其他持幣人行使權力,見證人節點要求長期在線,從而解決了因為PoS簽署區塊人不是經常在線而可能導致的產塊延誤等一系列問題。DPoS機制通常能達到萬次每秒的交易速度,在網路延遲低的情況下可以達到十萬秒級別,非常適合企業級的應用。
04 其他共識機制
區塊鏈系統中還有其它共識機制比如聯盟鏈常用的PBFT,新經幣(NEM)用的POI等。這些共識機制是為了解決現有共識機制的一些缺點而被提出的。但目前使用的系統不如POW,POS和DPOS多。
共識機制是區塊鏈系統的核心,它決定了一個區塊鏈系統的去中心化程度,性能和安全性。因此公鏈的開發中,共識機制的設計是核心和關鍵。
5. 區塊鏈使用安全如何來保證呢
區塊鏈本身解決的就是陌生人之間大規模協作問題,即陌生人在不需要彼此信任的情況下就可以相互協作。那麼如何保證陌生人之間的信任來實現彼此的共識機制呢?中心化的系統利用的是可信的第三方背書,比如銀行,銀行在老百姓看來是可靠的值得信任的機構,老百姓可以信賴銀行,由銀行解決現實中的糾紛問題。但是,去中心化的區塊鏈是如何保證信任的呢?
實際上,區塊鏈是利用現代密碼學的基礎原理來確保其安全機制的。密碼學和安全領域所涉及的知識體系十分繁雜,我這里只介紹與區塊鏈相關的密碼學基礎知識,包括Hash演算法、加密演算法、信息摘要和數字簽名、零知識證明、量子密碼學等。您可以通過這節課來了解運用密碼學技術下的區塊鏈如何保證其機密性、完整性、認證性和不可抵賴性。
基礎課程第七課 區塊鏈安全基礎知識
一、哈希演算法(Hash演算法)
哈希函數(Hash),又稱為散列函數。哈希函數:Hash(原始信息) = 摘要信息,哈希函數能將任意長度的二進制明文串映射為較短的(一般是固定長度的)二進制串(Hash值)。
一個好的哈希演算法具備以下4個特點:
1、 一一對應:同樣的明文輸入和哈希演算法,總能得到相同的摘要信息輸出。
2、 輸入敏感:明文輸入哪怕發生任何最微小的變化,新產生的摘要信息都會發生較大變化,與原來的輸出差異巨大。
3、 易於驗證:明文輸入和哈希演算法都是公開的,任何人都可以自行計算,輸出的哈希值是否正確。
4、 不可逆:如果只有輸出的哈希值,由哈希演算法是絕對無法反推出明文的。
5、 沖突避免:很難找到兩段內容不同的明文,而它們的Hash值一致(發生碰撞)。
舉例說明:
Hash(張三借給李四10萬,借期6個月) = 123456789012
賬本上記錄了123456789012這樣一條記錄。
可以看出哈希函數有4個作用:
簡化信息
很好理解,哈希後的信息變短了。
標識信息
可以使用123456789012來標識原始信息,摘要信息也稱為原始信息的id。
隱匿信息
賬本是123456789012這樣一條記錄,原始信息被隱匿。
驗證信息
假如李四在還款時欺騙說,張三隻借給李四5萬,雙方可以用哈希取值後與之前記錄的哈希值123456789012來驗證原始信息
Hash(張三借給李四5萬,借期6個月)=987654321098
987654321098與123456789012完全不同,則證明李四說謊了,則成功的保證了信息的不可篡改性。
常見的Hash演算法包括MD4、MD5、SHA系列演算法,現在主流領域使用的基本都是SHA系列演算法。SHA(Secure Hash Algorithm)並非一個演算法,而是一組hash演算法。最初是SHA-1系列,現在主流應用的是SHA-224、SHA-256、SHA-384、SHA-512演算法(通稱SHA-2),最近也提出了SHA-3相關演算法,如以太坊所使用的KECCAK-256就是屬於這種演算法。
MD5是一個非常經典的Hash演算法,不過可惜的是它和SHA-1演算法都已經被破解,被業內認為其安全性不足以應用於商業場景,一般推薦至少是SHA2-256或者更安全的演算法。
哈希演算法在區塊鏈中得到廣泛使用,例如區塊中,後一個區塊均會包含前一個區塊的哈希值,並且以後一個區塊的內容+前一個區塊的哈希值共同計算後一個區塊的哈希值,保證了鏈的連續性和不可篡改性。
二、加解密演算法
加解密演算法是密碼學的核心技術,從設計理念上可以分為兩大基礎類型:對稱加密演算法與非對稱加密演算法。根據加解密過程中所使用的密鑰是否相同來加以區分,兩種模式適用於不同的需求,恰好形成互補關系,有時也可以組合使用,形成混合加密機制。
對稱加密演算法(symmetric cryptography,又稱公共密鑰加密,common-key cryptography),加解密的密鑰都是相同的,其優勢是計算效率高,加密強度高;其缺點是需要提前共享密鑰,容易泄露丟失密鑰。常見的演算法有DES、3DES、AES等。
非對稱加密演算法(asymmetric cryptography,又稱公鑰加密,public-key cryptography),與加解密的密鑰是不同的,其優勢是無需提前共享密鑰;其缺點在於計算效率低,只能加密篇幅較短的內容。常見的演算法有RSA、SM2、ElGamal和橢圓曲線系列演算法等。 對稱加密演算法,適用於大量數據的加解密過程;不能用於簽名場景:並且往往需要提前分發好密鑰。非對稱加密演算法一般適用於簽名場景或密鑰協商,但是不適於大量數據的加解密。
三、信息摘要和數字簽名
顧名思義,信息摘要是對信息內容進行Hash運算,獲取唯一的摘要值來替代原始完整的信息內容。信息摘要是Hash演算法最重要的一個用途。利用Hash函數的抗碰撞性特點,信息摘要可以解決內容未被篡改過的問題。
數字簽名與在紙質合同上簽名確認合同內容和證明身份類似,數字簽名基於非對稱加密,既可以用於證明某數字內容的完整性,同時又可以確認來源(或不可抵賴)。
我們對數字簽名有兩個特性要求,使其與我們對手寫簽名的預期一致。第一,只有你自己可以製作本人的簽名,但是任何看到它的人都可以驗證其有效性;第二,我們希望簽名只與某一特定文件有關,而不支持其他文件。這些都可以通過我們上面的非對稱加密演算法來實現數字簽名。
在實踐中,我們一般都是對信息的哈希值進行簽名,而不是對信息本身進行簽名,這是由非對稱加密演算法的效率所決定的。相對應於區塊鏈中,則是對哈希指針進行簽名,如果用這種方式,前面的是整個結構,而非僅僅哈希指針本身。
四 、零知識證明(Zero Knowledge proof)
零知識證明是指證明者在不向驗證者提供任何額外信息的前提下,使驗證者相信某個論斷是正確的。
零知識證明一般滿足三個條件:
1、 完整性(Complteness):真實的證明可以讓驗證者成功驗證;
2、 可靠性(Soundness):虛假的證明無法讓驗證者通過驗證;
3、 零知識(Zero-Knowledge):如果得到證明,無法從證明過程中獲知證明信息之外的任何信息。
五、量子密碼學(Quantum cryptography)
隨著量子計算和量子通信的研究受到越來越多的關注,未來量子密碼學將對密碼學信息安全產生巨大沖擊。
量子計算的核心原理就是利用量子比特可以同時處於多個相干疊加態,理論上可以通過少量量子比特來表達大量信息,同時進行處理,大大提高計算速度。
這樣的話,目前的大量加密演算法,從理論上來說都是不可靠的,是可被破解的,那麼使得加密演算法不得不升級換代,否則就會被量子計算所攻破。
眾所周知,量子計算現在還僅停留在理論階段,距離大規模商用還有較遠的距離。不過新一代的加密演算法,都要考慮到這種情況存在的可能性。
6. 區塊鏈共識演算法——(四)PoA共識(Proof of Activity)
PoA共識(Proof of Activity)也稱為活動證明,其結合了PoW工作量證明與PoS權益證明的特點並進行了相應擴展,PoA共識具有更為復雜的記賬節點選取,同時有更為公平的獎勵機制。
PoA活動證明,主要的優勢是利用公平的激勵措施保證節點保持在線狀態,調動節點積極性,線上礦工即使不挖礦也有一定的概率獲取收益。大大提高了全網維護質量。
step1:每個礦工先利用自身算力通過工作量證明機制後得出nonce並生成一個空區塊頭,這個區塊頭除了沒有交易信息數據外其他數據與正常區塊一致。
step2:最先生成空區塊的節點廣播全網節點,全網節點接收到消息後,將此區塊的hash值與上一區塊的hash值進行拼接,然後加上n個固定後綴值進行再hash,最後得出n個值作為輸入,進入follow-the-satoshi程序,然後可輸出n個隨機權益持有者。
step3:前n-1個隨機權益持有者對空區塊進行簽名,第n個隨機權益持有者即為獲取到記賬權的節點,他將在空區塊的基礎上添加交易數據與簽名。
step4:第n個隨機權益持有者將打包好的區塊廣播全網,全網節點接收到區塊後進行驗證,驗證成功後上鏈。
step5:產生空區塊的礦工與第n個隨機權益持有者以及前n-1個已簽名的隨機權益持有者共享交易費獎勵。
7. 區塊鏈pow是什麼意思
區塊鏈PoW就是區塊鏈上的一種共識機制,目前區塊鏈上的共識機制的種類是有很多的,PoW只是其中的一種,它的意思是工作量證明機制,其它的共識機制還有POS(權益證明機制)、DPOS(股份授權證明機制)、DAG(有向無環圖)、PBFT(實用拜占庭容錯)等很多種。
POW的全稱為ProofofWork,翻譯過來就是「工作證明」或者「工作量證明」。
比特幣、狗狗幣和萊特幣等都是基於POW模式的數字貨幣。就是說挖礦獲得多少貨幣獎勵,取決於挖礦貢獻的有效工作,也就是說,礦機的性能越好、挖礦時間越長,所獲得的貨幣獎勵就越多。
工作量證明的重要意義在於:它迫使貨幣的產生,需要付出一定的工作量和成本,這就賦予了貨幣一定的商品屬性,使得自由市場這只無形的手能夠通過「價格機制」自發地調節貨幣供應,保證了貨幣具有穩定的價值,從而使得貨幣能夠獲得人們的信任。
8. 區塊鏈筆記——PBFT
PBFT是實用拜占庭容錯的簡稱,是解決拜占庭將軍問題的一種方案。比起最開始的BFT演算法,PBFT額外要求網路封閉,即節點數目確定並提前互通,但將復雜度從指數級降低到多項式級,使得BFT系列演算法真正具有可行性。
與POW、POS等大家耳熟能詳的共識不同,BFT系列的共識不需要「Proof」,亦即不需要節點投入算力或其他資源來確權,因此不需要代幣激勵便可完成共識。缺點是原始的BFT效率太低,只能存在於理論而無法應用。而改進的PBFT雖然效率大大提高,卻對節點數量和狀態提出了要求,導致合格的記帳節點太少,並且也只能維持在少數,過多的節點會拖慢網路速度。因此PBFT更多是用在聯盟鏈和私鏈上。公鏈也有應用,例如NEO,便是採用了PBFT演算法。
拜占庭將軍問題的實質是在惡劣的通訊環境中,如何使各參與方達成一致意見。POW和POS等共識要求參與方投入成本,爭奪唯一的發言權。在某一段時間內只有唯一的發言人,自然只會有一個意見,從而達成共識。PBFT採取不同的思路,要求各參與方相互發送及驗證彼此的信息,最終採用多數原則達成共識。
PBFT能夠以一種低成本的方式實現節點間共識,其理念其實相當貼近我們的生活習慣。例如在老師布置作業後,同學們總要互相問問確認一下,才放心地把今天的作業記到本子上。當然實現上還有很多細節,保證各節點的平等關系。在節點數目不多的時候,節點之間實現相互通信的成本並不高,節點之間可以快速發送確認。但節點數目增長卻會帶來整體性能的下降。PBFT可以容忍的壞節點數量不多於總數的三分之一,如果節點損壞率比較固定,提高總節點數量雖然能使系統獲得更好的冗餘,卻會大大增加通訊量,造成效率下降。加上PBFT沒有激勵機制,其適合聯盟鏈和私鏈場景。作為公鏈不可避免地節點數量太少,分布過分集中,例如NEO只有七個節點。
PBFT要求壞節點數量f<=(n-1)/3,這里n是總節點數。只要f滿足這個條件,共識總是可以達成。為什麼f要滿足這個條件?簡單來說,假設網路中存在惡意節點聯盟,其控制了數量為f的節點,這些節點可以故意發布錯誤的信息。此時網路中正常節點數量為n-f個。將這n-f個節點分為兩部分,各自包含一部分節點。對於任一部分正常節點來說,只要惡意節點數f大於自身節點數,同時大於剩餘的正常節點數,這部分正常節點便會與惡意節點聯盟達成共識。此時只要惡意節點聯盟先後向兩部分正常節點發送不同的共識信息,便可造成網路分叉。因此要保證網路運行,對於每一部分正常節點來說,網路中惡意節點數量不能同時大於自身節點數和網路剩餘正常節點數。代入計算便得到f<=(n-1)/3。
9. 區塊鏈共識機制有哪些
1.pow( Proof of Work)工作量證明
一句話介紹:乾的越多,收的越多。
2.POS Proof of Stake,權益證明
一句話介紹:持有越多,獲得越多。
3.PBFT :Practical Byzantine Fault Tolerance,實用拜占庭容錯
介紹:在保證活性和安全性(liveness & safety)的前提下提供了(n-1)/3的容錯性。
4.dBFT: delegated BFT 授權拜占庭容錯演算法
介紹:小蟻採用的dBFT機制,是由權益來選出記賬人,然後記賬人之間通過拜占庭容錯演算法來達成共識。
5.POOL驗證池
基於傳統的分布式一致性技術,加上數據驗證機制。
智鏈ChainNova是一家做區塊鏈的公司,感覺挺不錯的,雖然不懂什麼哈希演算法,但還是知道一點點。