第一篇:區塊鏈中五種常見共識算法 你知道幾個?
區塊鏈中五種常見共識算法 你知道幾個?
區塊鏈是一種去中心化的分布式賬本系統,可以用于登記和發行數字化資產、產權憑證、積分等,并以點對點的方式進行轉賬、支付和交易。區塊鏈系統與傳統中心化系統相比,具有公開透明、不可篡改、防止多重支付等優點,并且不依賴于任何的可信第三方。
由于點對點網絡下存在較高的網絡延遲,各個節點所觀察到的事務先后順序不可能完全一致。因此,區塊鏈系統需要設計一種機制對在差不多時間內發生的事務的先后順序進行共識。這種對一個時間窗口內的事務的先后順序達成共識的算法被稱為“共識機制”。
在區塊鏈這樣的分布式賬本系統中,保障整個系統的安全性和適應性十分重要,這也是共識算法出現的根本原因。那么,區塊鏈中常見的共識算法都有哪些呢?
1、POW:Proof of Work,工作量證明
POW是比特幣在Block的生成過程中使用的一種共識算法,也可以說是最原始的區塊鏈共識算法了。POW工作量證明,簡單地理解就是,通過一份證明來確認做過一定量的工作。
在比特幣系統中,得到合理的Block Hash需要經過大量嘗試計算。當某個節點提供出一個合理的Block Hash值,說明該節點確實經過了大量的嘗試計算。
這種工作量證明的形式,在我們日常生活中也十分常見。比如駕照,能拿到駕照,說明你已經進行過為期幾個月甚至幾年的練車和考試;再比如現在很火的吃雞和王者榮耀游戲中的K/D(Kill/Death)和勝率,分值越高證明你越厲害,同時也說明你進行了大量的游戲練習和技巧學習。
2、POS:Proof of Stake,權益證明
由于POW機制存在消耗算力巨大、交易確認時間較長,挖礦活動集中容易形成中心化等缺點,便演進出了POS權益證明。POS簡單來說,就是一個根據持有數字貨幣數量和時間來分配相應利息的制度,類似平時我們在銀行中存款。
基于權益證明共識的區塊鏈系統中,參與者的角色是驗證者Validator,只需要投資系統的數字貨幣并在特定時間內驗證自己是否為下一區塊創造者,即可完成下一區塊的創建。下一區塊創造者是以某種確定的方式來選擇,驗證者被選中為下一區塊創造者的概率與其所擁有的系統中數字貨幣的數量成正比例,即擁有300個幣的驗證者被選中的概率是擁有100個幣驗證者的3倍。
在POS模式下,有一個名詞叫幣齡,每個幣每天產生1幣齡。比如你持有100個幣,總共持有了30天,那么,此時你的幣齡就為3000。這個時候,如果你驗證了一個POS區塊,你的幣齡就會被清空為0,同時從區塊中獲得相對應的數字貨幣利息。這下就很有意思了,持幣有利息。并且由于POS是在一個有限的空間里完成,不是像POW那樣在無限空間里尋找,因此無需大量能源消耗。
3、DPOS:Delegated Proof of Stake,授權權益證明
DPOS最早出現在比特股中,又稱受托人機制,它的原理是讓每一個持有比特股的人進行投票,由此產生101位代表。我們可以將其理解為101個超級節點或者礦池,而這101個超級節點彼此的權利完全相等。
從某種角度來看,DPOS有點像是議會制度或人民代表大會制度。如果代表不能履行他們的職責(當輪到他們時,沒能生成區塊),他們會被除名,網絡會選出新的超級節點來取代他們。DPOS的出現最主要還是因為礦機的產生,大量的算力在不了解也不關心數字貨幣的人身上,類似演唱會的黃牛,大量囤票而絲毫不關心演唱會的內容。DPOS通過其選擇區塊生產者和驗證節點質量的算法確保了安全性,同時消除了交易需要等待一定數量區塊被非信任節點驗證的時間消耗。通過減少確認的要求,DPOS算法大大提高了交易的速度。通過信任少量的誠信節點,可以去除區塊簽名過程中不必要的步驟。
4、PBFT:Practical Byzantine FaultTolerance,實用拜占庭容錯 PBFT意為實用拜占庭容錯算法,該算法由Miguel Castro(卡斯特羅)和Barbara Liskov(利斯科夫)在1999年提出來,解決了原始拜占庭容錯算法效率不高的問題,將算法復雜度由指數級降低到多項式級,使得拜占庭容錯算法在實際系統應用中變得可行。
PBFT是一種狀態機副本復制算法,即服務作為狀態機進行建模,狀態機在分布式系統的不同節點進行副本復制。每個狀態機的副本都保存了服務的狀態,同時也實現了服務的操作。
將所有的副本組成的集合使用大寫字母R表示,使用0到|R|-1的整數表示每一個副本。為了描述方便,假設|R|=3f+1,這里f是有可能失效的副本的最大個數。盡管可以存在多于3f+1個副本,但是額外的副本除了降低性能之外不能提高可靠性。
5、RAFT,一致性共識算法
RAFT算法包含三種角色,分別是:跟隨者(follower),候選人(candidate)和領導者(leader)。集群中的一個節點在某一時刻只能是這三種狀態的其中一種,這三種角色可以隨著時間和條件的變化而互相轉換。RAFT算法主要有兩個過程:一個過程是領導者選舉,另一個過程是日志復制,其中日志復制過程會分記錄日志和提交數據兩個階段。RAFT算法支持最大的容錯故障節點是(N-1)/2,其中N為集群中總的節點數量。
國外有一個動畫介紹RAFT算法介紹的很透徹,有興趣的朋友可以結合動畫更好的理解下RAFT算法,這里不再做過多介紹。動畫鏈接地址:thesecretlivesofdata.com
http://
/raft/上述是目前主要的區塊鏈共識算法,當然還有其他算法,比如POET:Proof of Elapsed Time流逝時間量證明,Ripple Consensus瑞波共識機制等。
每種算法,各有千秋,在特定環境下和時間段上被采用都有各自的考慮和意義。對不同的區塊鏈應用場景而言,適合的算法即為最好的算法。
第二篇:兄弟連區塊鏈培訓教程Go語言區塊鏈共識算法分布式一致性算法Raft
兄弟連Go語言區塊鏈培訓教程區塊鏈共識算法(1)分布式一致性算法Raft
很多人喜歡Go語言,其實是因為Go語言有其獨特的語言屬性在支撐著其在編程語言界的發展,今天兄弟連Go語言+區塊鏈培訓老師給大家介紹一下關于Go語言區塊鏈共識算法(1)分布式一致性算法Raft,下面我們一起來看一下吧。
# 分布式一致性算法Raft
Paxos自1990年提出以后,相當長時間內幾乎已成為分布式一致性算法的代名詞。
但因其難以理解和實現,目前知名實現僅有Chubby、Zookeeper、libpaxos幾種,其中Zookeeper使用的ZAB對Paxos做了大量改進。
為此,2013年斯坦福的Diego Ongaro、John Ousterhout,提出了新的更易理解和實現的一致性算法,即Raft。
Raft和Paxos均只要保證n/2+1節點正常,即可服務。相比Paxos,其優勢即為易于理解和實現。
Raf將算法分解為:選擇領導者、日志復制、安全性等幾個子問題。
它的流程即為:開始時在集群中選舉出Leader負責日志復制的管理,Leader接收來自客戶端的事務請求(日志),并將它們復制給集群中的其他節點,然后通知集群中的其他節點提交日志,Leader負責保證其他節點與它的日志同步。
當Leader宕機時,集群其他節點重新發起選舉,選出的新的Leader。
### 角色
Raft涉及三種角色:
* Leader:即領導者,負責處理來自客戶端的請求,管理日志復制、以及與Follower保持心跳以維持其領導者地位。
* Follower:即追隨者,負責響應來自Leader的日志復制請求,響應來自Candidate的選舉請求。初始時所有節點均為Follower。
* Candidate:即候選者,負責發起選舉投票,Raft啟動后或Leader宕機后,一個節點從Follower轉為Candidate,并發起選舉,選舉成功后,由Candidate轉為Leader。
如下為Raft角色狀態轉換圖:
(1 Raft)
### Term(任期)
在Raft中使用了Term(任期)的概念,一輪選舉即為一個Term(任期),一個Term中僅能產生一個Leader。
Term使用連續遞增的編號表示,初始時所有Follower的Term均為1。
其中某個Follower定時器到期觸發選舉,其狀態轉換為Candidate,此時Term加1變為2,然后開始選舉,有如下幾種可能:
/ 3
*
1、如果當前Term為2的任期內沒有選舉出Leader或出現異常,Term遞增為3,并開始新一輪選舉。
*
2、此輪Term為2的任期內選舉出Leader后,如果Leader宕機,此時其他Follower轉為Candidate,Term遞增,并發起新的選舉。
*
3、如果Leader或Candidate發現自己的Term比其他Follower小時,Leader或Candidate轉為Follower,Term遞增。
*
4、如果Follower發現自己的Term比其他Follower小時,更新Term與其他Follower保持一致。
每次Term遞增都將發生新一輪選舉,在Raft正常運行過程中,所有節點Term均一致。
如果節點不發生故障,一個Term(任期)會一直保持下去,當某節點收到的請求中Term比當前Term小時拒絕請求。
### 選舉
初始時所有節點均為Follower,且定時器時間不同。
某個節點定時器觸發選舉后,Term遞增,該節點由Follower轉換為Candidate,向其他節點發起投票請求(RequestVote RPC)。
有如下幾種可能:
*
1、收到過半數節點(n/2+1)投票,由Candidate轉換為Leader,向其他節點發送心跳以維持領導者地位。
*
2、如果收到其他節點發送的AppendEntries RPC請求,且該節點Term大于當前節點Term,即發現了新的有效領導者,轉換為Follower,否則保持Candidate拒絕該請求。
*
3、選舉超時,Term遞增,重新發起選舉。
每輪Term期間,每個節點均只能投票1次,如果多個Candidate均沒有接收到過半數投票,則每個Candidate Term遞增,重啟定時器并重新發起選舉。
因定時器時間隨機,因此不會多次出現多個Candidate同時發起投票的問題。
### 日志復制
保證節點的一致性,就要保證所有節點都按順序執行相同的操作序列,日志復制目的即為此。
*
1、Leader接收到客戶端事務請求(即日志),先將日志追加到本地Log中,并通過AppendEntries RPC復制給其他Follower。
*
2、Follower接收到日志后,追加到本地Log中,并向Leader發送ACK消息。
*
3、Leader收到過半數Follower的ACK消息后,將日志置為已提交并正式提交日志,通知客戶端,并發送AppendEntries RPC請求通知Follower提交日志。
### 安全性
/ 3
*
1、每個Term期間只能選舉一個Leader。
*
2、Leader不會刪除或覆蓋已有日志條目,只會追加。
*
3、如果相同索引位置的日志條目Term任期號相同,那么認為從頭到這個索引位置均相同。
*
4、如果某個日志條目在某任期內提交,那么這個日志條目必然出現在更大的Term任期號的所有領導中。
*
5、如果Leader在某索引位置的日志條目已提交,那么其他節點相同索引位置不會提交不同的日志條目。
### RequestVote RPC和AppendEntries RPC
Raft中節點通信使用兩種RPC,即RequestVote RPC和AppendEntries RPC:
RequestVote RPC:即請求投票,由Candidate在選舉期間發起。
AppendEntries RPC:即附加條目RPC,由Leader發起,用于日志復制和心跳機制。
### 后記
本文總結的Raft,及之前文章中的Paxos、2PC、3PC均為基于非拜占庭容錯的分布式一致性算法,即除考慮消息的丟失、超時、亂序,但不考慮消息被篡改。
從下個文章起,將總結基于拜占庭容錯的分布式一致性算法,該算法在比特幣、以太坊、及其他區塊鏈產品中廣泛使用。
/ 3
第三篇:區塊鏈共識機制優缺點對比
區塊鏈就是運行在P2P網絡上的去中心化賬本。我們怎么去在這樣的系統中獲得信任呢,并且在私有區塊鏈中也是一樣的情況。這就是共識機制的來源。
共識保證了區塊鏈上的參與者可以互相信任,并且對下個區塊進行驗證。共識也確保了網絡中的規則被遵守,同時承認在區塊鏈環境下只有一個真理。
根據你使用的區塊鏈種類不同,你需要不同的共識算法來確保區塊鏈上最后的區塊能夠在任何時候都反應出全網的狀態。在本文中,我們會大致說明不同的共識算法。
工作量證明(POW)我們先從比特幣和以太坊說起。工作量證明算法需要礦工解決復雜的密碼數學難題。所以這是個依賴于算力的游戲。簡單說,你將區塊中的數據都打包并加密,直到你獲得有效的哈希值。
優勢:尋找有效的哈希值很困難,但是很容易控制哈希是正確的,所以無法欺騙整個系統。系統可以承受大量節點。
缺點:需要消耗非常多的能源,而且不是很環保。如果有人能控制51%的算力,就會有被攻擊的風險。
權益證明(POS)
以太坊正在朝著PoS共識機制改變。下個區塊的礦工會基于隨機參數,例如他們擁有的代幣數量,他們擁有這個代幣的時間等等來確定。同時也有其他機制,例如存款證明或者是燃燒證明等等。其實這個很簡單,如果節點X有1個代幣,節點Y有2個,那么節點Y就會有2倍幾率去驗證一個區塊。
優點:比起工作量證明,更加節約能源。
缺點:更多的安全問題?如果同時在不同的鏈上工作,也不會有懲罰。這樣做,就很難去保證轉賬的真實性。消逝時間證明(PoET)
消逝時間證明是超級賬本鋸齒湖項目中使用的共識。每個參與者都需要有個等待時間,來確保安全的程序集。獲得最短等待時間的參與者會被選為挖出區塊,經過等待時間,挖出區塊。
優勢:挖出區塊的人會一直變化,同樣的人每次都不會選擇下個區塊。劣勢:安全程序集是復雜的技術,相對工作量證明來說,更容易進行欺詐。也有中心化的趨勢,因為我們必須使用第三方信任機構來確保這個程序集是真的安全。
簡化的拜占庭容錯算法(SBFT)
在這個算法中,區塊驗證者是一個知名的機構。例如在整個商業網絡中可以是一個監管者。這個區塊驗證者創造并提出新的區塊轉賬。在SBFT共識中,一定數量的節點一定要接受這個區塊,當然這取決于錯誤節點的數量。在這樣的系統中,最少要有2f+1的節點必須要接受商業網絡中的新區塊,f就是錯誤節點的數量。
舉例來說,我們假設現在系統中有30個參與者,其中包含了5個錯誤節點。作為需要驗證的新區塊,11(2×5+1)個節點。
這個錯誤可以是惡意的,也可能是無效的節點。優點:比工作量證明更快,有更好的擴容性。缺點:有中心化趨勢。一個驗證者提出下個區塊。
權威證明(PoA)適合私有鏈網絡,并且不需要分布式信任體系。原理相對簡單:網絡中的一些人在滿足某些條件之后被認證為驗證者,例如身份認證。這些驗證者負責維持區塊鏈數據。
優點:非常適合私有鏈,速度非???。缺點:犧牲了信任。
結論 我們對區塊鏈世界的共識機制做出了概覽,這篇文章只是列舉了一部分可能性,當然還有其他可能的共識機制。總體來說,我們可以將這些共識分為3類:
-標準的工作量共識
-基于共識的許可性投票(PoA,SBFT)-基于共識的許可性投注(PoET)
到底選擇哪個共識來進行區塊鏈的實施取決于哪類網絡和數據。
投注類型的可能更加適合月大型網絡。投票類型的可能更適合小型網絡,同時將延時降到最小化。
第四篇:詳解區塊鏈中的幾個密碼學概念范文
安全可信賴的區塊鏈資產交易平臺火幣網www.tmdps.cn 沒聽過這幾個密碼學概念,就別說你懂區塊鏈!
密碼學在信息技術領域的重要地位無需多言,如果沒有現代密碼學的研究成果,人類社會根本無法進入信息時代。本文將介紹密碼學跟區塊鏈相關的基礎知識。
一、hash 算法 1.定義
hash(哈?;蛏⒘校┧惴ㄊ切畔⒓夹g領域非?;A也非常重要的技術。它能任意長度的二進制值(明文)映射為較短的固定長度的二進制值(hash 值),并且不同的明文很難映射為相同的 hash 值。
例如計算一段話“hello blockchain world, this is yeasy@github”的 md5 hash 為 89242549883a2ef85dc81b90fb606046。
$ echo “hello blockchain world, this is yeasy@github” | md5
89242549883a2ef85dc81b90fb606046
這意味著我們只要對某文件進行 md5 hash 計算,得到結果為 89242549883a2ef85dc81b90fb606046,這就說明文件內容極大概率上就是“hello 安全可信賴的區塊鏈資產交易平臺火幣網www.tmdps.cn blockchain world, this is yeasy@github”??梢姡琱ash 的核心思想十分類似于基于內容的編址或命名。
注:md5 是一個經典的 hash 算法,其和 SHA-1 算法都已被 證明 安全性不足應用于商業場景。
一個優秀的 hash 算法,將能實現:
? 正向快速:給定明文和 hash 算法,在有限時間和有限資源內能計算出 hash 值。? 逆向困難:給定(若干)hash 值,在有限時間內很難(基本不可能)逆推出明文。? 輸入敏感:原始輸入信息修改一點信息,產生的 hash 值看起來應該都有很大不同。? 沖突避免:很難找到兩段內容不同的明文,使得它們的 hash 值一致(發生沖突)。
沖突避免有時候又被稱為“抗碰撞性”。如果給定一個明文前提下,無法找到碰撞的另一個明文,稱為“抗弱碰撞性”;如果無法找到任意兩個明文,發生碰撞,則稱算法具有“抗強碰撞性”。
二、加密算法
1.公鑰私鑰體系
現代加密算法的典型組件包括:加解密算法、公鑰、私鑰。安全可信賴的區塊鏈資產交易平臺火幣網www.tmdps.cn 加密過程中,通過加密算法和公鑰,對明文進行加密,獲得密文。
解密過程中,通過解密算法和私鑰,對密文進行解密,獲得明文。
根據公鑰和私鑰是否相同,算法可以分為對稱加密和非對稱加密。兩種模式適用于不同的需求,恰好形成互補,很多時候也可以組合使用,形成組合機制。
2.對稱加密
顧名思義,公鑰和私鑰是相同的。
優點是加解密速度快,空間占用小,保密強度高。
缺點是參與多方都需要持有密鑰,一旦有人泄露則安全性被破壞;另外如何其它分發密鑰也是個問題。
適用于大量數據的加解密,不能用于簽名場景。
3.非對稱加密
顧名思義,公鑰和私鑰是不同的。安全可信賴的區塊鏈資產交易平臺火幣網www.tmdps.cn 公鑰一般是公開的,人人可獲取的,私鑰一般是個人自己持有,不能被他人獲取。
優點是公私鑰分開,容易管理,并且容易完成密鑰分發。缺點是加解密速度慢。
一般適用于簽名場景或密鑰協商,不適于大量數據的加解密。
4.組合機制
即先用計算復雜度高的非對稱加密協商一個臨時的對稱加密密鑰(會話密鑰),然后雙方再通過對稱加密對傳遞的大量數據進行加解密處理。
三、數字簽名
類似在紙質合同上簽名確認合同內容,數字簽名用于證實某數字內容的完整性和來源。
A 發給 B 一個文件。A 先對文件進行摘要,然后用自己的私鑰進行加密,將文件和加密串都發給 B。B 收到后文件和加密串,用 A 的公鑰來解密加密串,得到原始的數字摘要,跟對文件進行摘要后的結果進行比對。如果一致,說明該文件確實是 A 發過來的,并且文件內容沒有被修改過。
數字簽名包括:多重簽名、群簽名、環簽名等。安全可信賴的區塊鏈資產交易平臺火幣網www.tmdps.cn
四、數字證書
數字證書用來證明某個公鑰是誰的。
對于數字簽名應用來說,很重要的一點就是公鑰的分發。一旦公鑰被人替換,則整個安全體系將被破壞掉。
怎么確保一個公鑰確實是某個人的原始公鑰?這就需要數字證書機制。
顧名思義,數字證書就是像一個證書一樣,證明信息和合法性。由證書認證機構(Certification Authority,CA)來簽發。
數字證書內容可能包括版本、序列號、簽名算法類型、簽發者信息、有效期、被簽發人、簽發的公開密鑰、CA 數字簽名、其它信息等等。
其中,最重要的包括 簽發的公開密鑰、CA 數字簽名 兩個信息。因此,只要通過這個證書就能證明某個公鑰是合法的,因為帶有 CA 的數字簽名。
更進一步地,怎么證明 CA 的簽名合法不合法呢? 安全可信賴的區塊鏈資產交易平臺火幣網www.tmdps.cn 類似的,CA 的數字簽名合法不合法也是通過 CA 的證書來證明的。主流操作系統和瀏覽器里面會提前預置一些 CA 的證書(承認這些是合法的證書),然后所有基于他們認證的簽名都會自然被認為合法。
五、Merkle樹
默克爾樹(又叫哈希樹)是一種二叉樹,由一個根節點、一組中間節點和一組葉節點組成。最下面的葉節點包含存儲數據或其哈希值,每個中間節點是它的兩個子節點內容的哈希值,根節點也是由它的兩個子節點內容的哈希值組成。
進一步的,默克爾樹可以推廣到多叉樹的情形。
默克爾樹的特點是,底層數據的任何變動,都會傳遞到其父親節點,一直到樹根。
默克爾樹的典型應用場景包括: 安全可信賴的區塊鏈資產交易平臺火幣網www.tmdps.cn
? 快速比較大量數據:當兩個默克爾樹根相同時,則意味著所代表的數據必然相同。? 快速定位修改:例如上例中,如果 D1 中數據被修改,會影響到 N1,N4 和 Root。因此,沿著 Root--> N4--> N1,可以快速定位到發生改變的 D1;
? 零知識證明:例如如何證明某個數據(D0……D3)中包括給定內容 D0,很簡單,構造一個默克爾樹,公布 N0,N1,N4,Root,D0 擁有者可以很容易檢測 D0 存在,但不知道其它內容。
來源:火幣區塊鏈公眾號
第五篇:商務英語中五種常見的邀請信的寫法
商務英語中五種常見的邀請信的寫法
(1)
Dear sir/madam:
I’m delighted you have accepted our invitation to speak at the Conference in [city] on [date].As we agreed, you’ll be speaking on the topic "" from [time] to [time].There will be an additional minutes for questions.Would you please tell me what kind of audio-visual equipment you’ll need.If you could let me know your specific requirements by [date], I’ll have plenty of time to make sure that the hotel provides you with what you need.Thank you again for agreeing to speak.I look forward to hearing from you.Sincerely yours,[name]
[title]
(2)
Dear sir/madam:
Thank you for your letter of [date].I’m glad that you are also going to [place] next month.It would be a great pleasure to meet you at the [exhibition/trade fair].Our company is having a reception at [hotel] on the evening of [date] and I would be very pleased if you could attend.I look forward to hearing from you soon.Yours sincerely,[name]
[title]
(3)
Dear sir/madam:
[organization] would very much like to have someone from your company speak at our conference on [topic].As you may be aware, the mission of our association is to promote.Many of our members are interested in the achievements your company has made in.Enclosed is our preliminary schedule for the conference which will be reviewed in weeks.I’ll call you [date] to see who from your company would be willing to speak
to us.I can assure you that we’ll make everything convenient to the speaker.Sincerely yours,[name]
[title]
(4)
Dear sir/madam:
We would like to invite you to an exclusive presentation of our new [product].The presentation will take place at [location], at [time] on [date].There will also be a reception at [time].We hope you and your colleagues will be able to attend.[company] is a leading producer of high-quality.As you well know, recent technological advances have made increasingly affordable to the public.Our new models offer superb quality and sophistication with economy, and their new
features give them distinct advantages over similar products from other manufacturers.We look forward to seeing you on [date].Just call our office at [phone number] and we will be glad to secure a place for you.Sincerely yours,[name]
[title]
(5)
Dear sir/madam:
On [date], we will host an evening of celebration in honor of the retirement of [name], President of [company].You are cordially invited to attend the celebration at
[hotel], [location], on [date] from to p.m.[name] has been the President of [company] since [year].During this period, [company] expanded its business from to.Now it’s our opportunity to thank him for his years of exemplary leadership and wish him well for a happy retirement.Please join us to say Good-bye to [name].See you on [date].Yours sincerely
[name]
[title]
[/td][/tr]>-1){ elements2.onfocus = log;} } //--> >