以太坊聯盟鏈審核
A. 區塊鏈的共識機制
一、區塊鏈共識機制的目標
區塊鏈是什麼?簡單而言,區塊鏈是一種去中心化的資料庫,或可以叫作分布式賬本(distributed ledger)。傳統上所有的資料庫都是中心化的,例如一間銀行的賬本就儲存在銀行的中心伺服器里。中心化資料庫的弊端是數據的安全及正確性全系於資料庫運營方(即銀行),因為任何能夠訪問中心化資料庫的人(如銀行職員或黑客)都可以破壞或修改其中的數據。
而區塊鏈技術則容許資料庫存放在全球成千上萬的電腦上,每個人的賬本通過點對點網路進行同步,網路中任何用戶一旦增加一筆交易,交易信息將通過網路通知其他用戶驗證,記錄到各自的賬本中。區塊鏈之所以得其名是因為它是由一個個包含交易信息的區塊(block)從後向前有序鏈接起來的數據結構。
很多人對區塊鏈的疑問是,如果每一個用戶都擁有一個獨立的賬本,那麼是否意味著可以在自己的賬本上添加任意的交易信息,而成千上萬個賬本又如何保證記賬的一致性? 解決記賬一致性問題正是區塊鏈共識機制的目標 。區塊鏈共識機制旨在保證分布式系統里所有節點中的數據完全相同並且能夠對某個提案(proposal)(例如是一項交易紀錄)達成一致。然而分布式系統由於引入了多個節點,所以系統中會出現各種非常復雜的情況;隨著節點數量的增加,節點失效或故障、節點之間的網路通信受到干擾甚至阻斷等就變成了常見的問題,解決分布式系統中的各種邊界條件和意外情況也增加了解決分布式一致性問題的難度。
區塊鏈又可分為三種:
公有鏈:全世界任何人都可以隨時進入系統中讀取數據、發送可確認交易、競爭記賬的區塊鏈。公有鏈通常被認為是「完全去中心化「的,因為沒有任何人或機構可以控制或篡改其中數據的讀寫。公有鏈一般會通過代幣機制鼓勵參與者競爭記賬,來確保數據的安全性。
聯盟鏈:聯盟鏈是指有若干個機構共同參與管理的區塊鏈。每個機構都運行著一個或多個節點,其中的數據只允許系統內不同的機構進行讀寫和發送交易,並且共同來記錄交易數據。這類區塊鏈被認為是「部分去中心化」。
私有鏈:指其寫入許可權是由某個組織和機構控制的區塊鏈。參與節點的資格會被嚴格的限制,由於參與的節點是有限和可控的,因此私有鏈往往可以有極快的交易速度、更好的隱私保護、更低的交易成本、不容易被惡意攻擊、並且能夠做到身份認證等金融行業必須的要求。相比中心化資料庫,私有鏈能夠防止機構內單節點故意隱瞞或篡改數據。即使發生錯誤,也能夠迅速發現來源,因此許多大型金融機構在目前更加傾向於使用私有鏈技術。
二、區塊鏈共識機制的分類
解決分布式一致性問題的難度催生了數種共識機制,它們各有其優缺點,亦適用於不同的環境及問題。被眾人常識的共識機制有:
l PoW(Proof of Work)工作量證明機制
l PoS(Proof of Stake)股權/權益證明機制
l DPoS(Delegated Proof of Stake)股份授權證明機制
l PBFT(Practical Byzantine Fault Tolerance)實用拜占庭容錯演算法
l DBFT(Delegated Byzantine Fault Tolerance)授權拜占庭容錯演算法
l SCP (Stellar Consensus Protocol ) 恆星共識協議
l RPCA(Ripple Protocol Consensus Algorithm)Ripple共識演算法
l Pool驗證池共識機制
(一)PoW(Proof of Work)工作量證明機制
1. 基本介紹
在該機制中,網路上的每一個節點都在使用SHA256哈希函數(hash function) 運算一個不斷變化的區塊頭的哈希值 (hash sum)。 共識要求算出的值必須等於或小於某個給定的值。 在分布式網路中,所有的參與者都需要使用不同的隨機數來持續計算該哈希值,直至達到目標為止。當一個節點的算出確切的值,其他所有的節點必須相互確認該值的正確性。之後新區塊中的交易將被驗證以防欺詐。
在比特幣中,以上運算哈希值的節點被稱作「礦工」,而PoW的過程被稱為「挖礦」。挖礦是一個耗時的過程,所以也提出了相應的激勵機制(例如向礦工授予一小部分比特幣)。PoW的優點是完全的去中心化,其缺點是消耗大量算力造成了的資源浪費,達成共識的周期也比較長,共識效率低下,因此其不是很適合商業使用。
2. 加密貨幣的應用實例
比特幣(Bitcoin) 及萊特幣(Litecoin)。以太坊(Ethereum) 的前三個階段(Frontier前沿、Homestead家園、Metropolis大都會)皆採用PoW機制,其第四個階段 (Serenity寧靜) 將採用權益證明機制。PoW適用於公有鏈。
PoW機制雖然已經成功證明了其長期穩定和相對公平,但在現有框架下,採用PoW的「挖礦」形式,將消耗大量的能源。其消耗的能源只是不停的去做SHA256的運算來保證工作量公平,並沒有其他的存在意義。而目前BTC所能達到的交易效率為約5TPS(5筆/秒),以太坊目前受到單區塊GAS總額的上限,所能達到的交易頻率大約是25TPS,與平均千次每秒、峰值能達到萬次每秒處理效率的VISA和MASTERCARD相差甚遠。
3. 簡圖理解模式
(ps:其中A、B、C、D計算哈希值的過程即為「挖礦」,為了犒勞時間成本的付出,機制會以一定數量的比特幣作為激勵。)
(Ps:PoS模式下,你的「挖礦」收益正比於你的幣齡(幣的數量*天數),而與電腦的計算性能無關。我們可以認為任何具有概率性事件的累計都是工作量證明,如淘金。假設礦石含金量為p% 質量, 當你得到一定量黃金時,我們可以認為你一定挖掘了1/p 質量的礦石。而且得到的黃金數量越多,這個證明越可靠。)
(二)PoS(Proof of Stake)股權/權益證明機制
1.基本介紹
PoS要求人們證明貨幣數量的所有權,其相信擁有貨幣數量多的人攻擊網路的可能性低。基於賬戶余額的選擇是非常不公平的,因為單一最富有的人勢必在網路中佔主導地位,所以提出了許多解決方案。
在股權證明機制中,每當創建一個區塊時,礦工需要創建一個稱為「幣權」的交易,這個交易會按照一定比例預先將一些幣發給礦工。然後股權證明機制根據每個節點持有代幣的比例和時間(幣齡), 依據演算法等比例地降低節點的挖礦難度,以加快節點尋找隨機數的速度,縮短達成共識所需的時間。
與PoW相比,PoS可以節省更多的能源,更有效率。但是由於挖礦成本接近於0,因此可能會遭受攻擊。且PoS在本質上仍然需要網路中的節點進行挖礦運算,所以它同樣難以應用於商業領域。
2.數字貨幣的應用實例
PoS機制下較為成熟的數字貨幣是點點幣(Peercoin)和未來幣(NXT),相比於PoW,PoS機制節省了能源,引入了" 幣天 "這個概念來參與隨機運算。PoS機制能夠讓更多的持幣人參與到記賬這個工作中去,而不需要額外購買設備(礦機、顯卡等)。每個單位代幣的運算能力與其持有的時間長成正相關,即持有人持有的代幣數量越多、時間越長,其所能簽署、生產下一個區塊的概率越大。一旦其簽署了下一個區塊,持幣人持有的幣天即清零,重新進入新的循環。
PoS適用於公有鏈。
3.區塊簽署人的產生方式
在PoS機制下,因為區塊的簽署人由隨機產生,則一些持幣人會長期、大額持有代幣以獲得更大概率地產生區塊,盡可能多的去清零他的"幣天"。因此整個網路中的流通代幣會減少,從而不利於代幣在鏈上的流通,價格也更容易受到波動。由於可能會存在少量大戶持有整個網路中大多數代幣的情況,整個網路有可能會隨著運行時間的增長而越來越趨向於中心化。相對於PoW而言,PoS機制下作惡的成本很低,因此對於分叉或是雙重支付的攻擊,需要更多的機制來保證共識。穩定情況下,每秒大約能產生12筆交易,但因為網路延遲及共識問題,需要約60秒才能完整廣播共識區塊。長期來看,生成區塊(即清零"幣天")的速度遠低於網路傳播和廣播的速度,因此在PoS機制下需要對生成區塊進行"限速",來保證主網的穩定運行。
4.簡圖理解模式
(PS:擁有越多「股份」權益的人越容易獲取賬權。是指獲得多少貨幣,取決於你挖礦貢獻的工作量,電腦性能越好,分給你的礦就會越多。)
(在純POS體系中,如NXT,沒有挖礦過程,初始的股權分配已經固定,之後只是股權在交易者之中流轉,非常類似於現實世界的股票。)
(三)DPoS(Delegated Proof of Stake)股份授權證明機制
1.基本介紹
由於PoS的種種弊端,由此比特股首創的權益代表證明機制 DPoS(Delegated Proof of Stake)應運而生。DPoS 機制中的核心的要素是選舉,每個系統原生代幣的持有者在區塊鏈裡面都可以參與選舉,所持有的代幣余額即為投票權重。通過投票,股東可以選舉出理事會成員,也可以就關系平台發展方向的議題表明態度,這一切構成了社區自治的基礎。股東除了自己投票參與選舉外,還可以通過將自己的選舉票數授權給自己信任的其它賬戶來代表自己投票。
具體來說, DPoS由比特股(Bitshares)項目組發明。股權擁有著選舉他們的代表來進行區塊的生成和驗證。DPoS類似於現代企業董事會制度,比特股系統將代幣持有者稱為股東,由股東投票選出101名代表, 然後由這些代表負責生成和驗證區塊。 持幣者若想稱為一名代表,需先用自己的公鑰去區塊鏈注冊,獲得一個長度為32位的特有身份標識符,股東可以對這個標識符以交易的形式進行投票,得票數前101位被選為代表。
代表們輪流產生區塊,收益(交易手續費)平分。DPoS的優點在於大幅減少了參與區塊驗證和記賬的節點數量,從而縮短了共識驗證所需要的時間,大幅提高了交易效率。從某種角度來說,DPoS可以理解為多中心系統,兼具去中心化和中心化優勢。優點:大幅縮小參與驗證和記賬節點的數量,可以達到秒級的共識驗證。缺點:投票積極性不高,絕大部分代幣持有者未參與投票;另整個共識機制還是依賴於代幣,很多商業應用是不需要代幣存在的。
DPoS機制要求在產生下一個區塊之前,必須驗證上一個區塊已經被受信任節點所簽署。相比於PoS的" 全民挖礦 ",DPoS則是利用類似" 代表大會 "的制度來直接選取可信任節點,由這些可信任節點(即見證人)來代替其他持幣人行使權力,見證人節點要求長期在線,從而解決了因為PoS簽署區塊人不是經常在線而可能導致的產塊延誤等一系列問題。 DPoS機制通常能達到萬次每秒的交易速度,在網路延遲低的情況下可以達到十萬秒級別,非常適合企業級的應用。 因為公信寶數據交易所對於數據交易頻率要求高,更要求長期穩定性,因此DPoS是非常不錯的選擇。
2. 股份授權證明機制下的機構與系統
理事會是區塊鏈網路的權力機構,理事會的人選由系統股東(即持幣人)選舉產生,理事會成員有權發起議案和對議案進行投票表決。
理事會的重要職責之一是根據需要調整系統的可變參數,這些參數包括:
l 費用相關:各種交易類型的費率。
l 授權相關:對接入網路的第三方平台收費及補貼相關參數。
l 區塊生產相關:區塊生產間隔時間,區塊獎勵。
l 身份審核相關:審核驗證異常機構賬戶的信息情況。
l 同時,關繫到理事會利益的事項將不通過理事會設定。
在Finchain系統中,見證人負責收集網路運行時廣播出來的各種交易並打包到區塊中,其工作類似於比特幣網路中的礦工,在採用 PoW(工作量證明)的比特幣網路中,由一種獲獎概率取決於哈希算力的抽彩票方式來決定哪個礦工節點產生下一個區塊。而在採用 DPoS 機制的金融鏈網路中,通過理事會投票決定見證人的數量,由持幣人投票來決定見證人人選。入選的活躍見證人按順序打包交易並生產區塊,在每一輪區塊生產之後,見證人會在隨機洗牌決定新的順序後進入下一輪的區塊生產。
3. DPoS的應用實例
比特股(bitshares) 採用DPoS。DPoS主要適用於聯盟鏈。
4.簡圖理解模式
(四)PBFT(Practical Byzantine Fault Tolerance)實用拜占庭容錯演算法
1. 基本介紹
PBFT是一種基於嚴格數學證明的演算法,需要經過三個階段的信息交互和局部共識來達成最終的一致輸出。三個階段分別為預備 (pre-prepare)、准備 (prepare)、落實 (commit)。PBFT演算法證明系統中只要有2/3比例以上的正常節點,就能保證最終一定可以輸出一致的共識結果。換言之,在使用PBFT演算法的系統中,至多可以容忍不超過系統全部節點數量1/3的失效節點 (包括有意誤導、故意破壞系統、超時、重復發送消息、偽造簽名等的節點,又稱為」拜占庭」節點)。
2. PBFT的應用實例
著名聯盟鏈Hyperledger Fabric v0.6採用的是PBFT,v1.0又推出PBFT的改進版本SBFT。PBFT主要適用於私有鏈和聯盟鏈。
3. 簡圖理解模式
上圖顯示了一個簡化的PBFT的協議通信模式,其中C為客戶端,0 – 3表示服務節點,其中0為主節點,3為故障節點。整個協議的基本過程如下:
(1) 客戶端發送請求,激活主節點的服務操作;
(2) 當主節點接收請求後,啟動三階段的協議以向各從節點廣播請求;
(a) 序號分配階段,主節點給請求賦值一個序號n,廣播序號分配消息和客戶端的請求消息m,並將構造pre-prepare消息給各從節點;
(b) 交互階段,從節點接收pre-prepare消息,向其他服務節點廣播prepare消息;
(c) 序號確認階段,各節點對視圖內的請求和次序進行驗證後,廣播commit消息,執行收到的客戶端的請求並給客戶端響應。
(3) 客戶端等待來自不同節點的響應,若有m+1個響應相同,則該響應即為運算的結果;
(五)DBFT(Delegated Byzantine Fault Tolerance)授權拜占庭容錯演算法
1. 基本介紹
DBFT建基於PBFT的基礎上,在這個機制當中,存在兩種參與者,一種是專業記賬的「超級節點」,一種是系統當中不參與記賬的普通用戶。普通用戶基於持有權益的比例來投票選出超級節點,當需要通過一項共識(記賬)時,在這些超級節點中隨機推選出一名發言人擬定方案,然後由其他超級節點根據拜占庭容錯演算法(見上文),即少數服從多數的原則進行表態。如果超過2/3的超級節點表示同意發言人方案,則共識達成。這個提案就成為最終發布的區塊,並且該區塊是不可逆的,所有裡面的交易都是百分之百確認的。如果在一定時間內還未達成一致的提案,或者發現有非法交易的話,可以由其他超級節點重新發起提案,重復投票過程,直至達成共識。
2. DBFT的應用實例
國內加密貨幣及區塊鏈平台NEO是 DBFT演算法的研發者及採用者。
3. 簡圖理解模式
假設系統中只有四個由普通用戶投票選出的超級節點,當需要通過一項共識時,系統就會從代表中隨機選出一名發言人擬定方案。發言人會將擬好的方案交給每位代表,每位代表先判斷發言人的計算結果與它們自身紀錄的是否一致,再與其它代表商討驗證計算結果是否正確。如果2/3的代表一致表示發言人方案的計算結果是正確的,那麼方案就此通過。
如果只有不到2/3的代表達成共識,將隨機選出一名新的發言人,再重復上述流程。這個體系旨在保護系統不受無法行使職能的領袖影響。
上圖假設全體節點都是誠實的,達成100%共識,將對方案A(區塊)進行驗證。
鑒於發言人是隨機選出的一名代表,因此他可能會不誠實或出現故障。上圖假設發言人給3名代表中的2名發送了惡意信息(方案B),同時給1名代表發送了正確信息(方案A)。
在這種情況下該惡意信息(方案B)無法通過。中間與右邊的代表自身的計算結果與發言人發送的不一致,因此就不能驗證發言人擬定的方案,導致2人拒絕通過方案。左邊的代表因接收了正確信息,與自身的計算結果相符,因此能確認方案,繼而成功完成1次驗證。但本方案仍無法通過,因為不足2/3的代表達成共識。接著將隨機選出一名新發言人,重新開始共識流程。
上圖假設發言人是誠實的,但其中1名代表出現了異常;右邊的代表向其他代表發送了不正確的信息(B)。
在這種情況下發言人擬定的正確信息(A)依然可以獲得驗證,因為左邊與中間誠實的代表都可以驗證由誠實的發言人擬定的方案,達成2/3的共識。代表也可以判斷到底是發言人向右邊的節點說謊還是右邊的節點不誠實。
(六)SCP (Stellar Consensus Protocol ) 恆星共識協議
1. 基本介紹
SCP 是 Stellar (一種基於互聯網的去中心化全球支付協議) 研發及使用的共識演算法,其建基於聯邦拜占庭協議 (Federated Byzantine Agreement) 。傳統的非聯邦拜占庭協議(如上文的PBFT和DBFT)雖然確保可以通過分布式的方法達成共識,並達到拜占庭容錯 (至多可以容忍不超過系統全部節點數量1/3的失效節點),它是一個中心化的系統 — 網路中節點的數量和身份必須提前知曉且驗證過。而聯邦拜占庭協議的不同之處在於它能夠去中心化的同時,又可以做到拜占庭容錯。
[…]
(七)RPCA(Ripple Protocol Consensus Algorithm)Ripple共識演算法
1. 基本介紹
RPCA是Ripple(一種基於互聯網的開源支付協議,可以實現去中心化的貨幣兌換、支付與清算功能)研發及使用的共識演算法。在 Ripple 的網路中,交易由客戶端(應用)發起,經過追蹤節點(tracking node)或驗證節點(validating node)把交易廣播到整個網路中。追蹤節點的主要功能是分發交易信息以及響應客戶端的賬本請求。驗證節點除包含追蹤節點的所有功能外,還能夠通過共識協議,在賬本中增加新的賬本實例數據。
Ripple 的共識達成發生在驗證節點之間,每個驗證節點都預先配置了一份可信任節點名單,稱為 UNL(Unique Node List)。在名單上的節點可對交易達成進行投票。共識過程如下:
(1) 每個驗證節點會不斷收到從網路發送過來的交易,通過與本地賬本數據驗證後,不合法的交易直接丟棄,合法的交易將匯總成交易候選集(candidate set)。交易候選集裡面還包括之前共識過程無法確認而遺留下來的交易。
(2) 每個驗證節點把自己的交易候選集作為提案發送給其他驗證節點。
(3) 驗證節點在收到其他節點發來的提案後,如果不是來自UNL上的節點,則忽略該提案;如果是來自UNL上的節點,就會對比提案中的交易和本地的交易候選集,如果有相同的交易,該交易就獲得一票。在一定時間內,當交易獲得超過50%的票數時,則該交易進入下一輪。沒有超過50%的交易,將留待下一次共識過程去確認。
(4) 驗證節點把超過50%票數的交易作為提案發給其他節點,同時提高所需票數的閾值到60%,重復步驟(3)、步驟(4),直到閾值達到80%。
(5) 驗證節點把經過80%UNL節點確認的交易正式寫入本地的賬本數據中,稱為最後關閉賬本(last closed ledger),即賬本最後(最新)的狀態。
在Ripple的共識演算法中,參與投票節點的身份是事先知道的,因此,演算法的效率比PoW等匿名共識演算法要高效,交易的確認時間只需幾秒鍾。這點也決定了該共識演算法只適合於聯盟鏈或私有鏈。Ripple共識演算法的拜占庭容錯(BFT)能力為(n-1)/5,即可以容忍整個網路中20%的節點出現拜占庭錯誤而不影響正確的共識。
2. 簡圖理解模式
共識過程節點交互示意圖:
共識演算法流程:
(八)POOL驗證池共識機制
Pool驗證池共識機制是基於傳統的分布式一致性演算法(Paxos和Raft)的基礎上開發的機制。Paxos演算法是1990年提出的一種基於消息傳遞且具有高度容錯特性的一致性演算法。過去, Paxos一直是分布式協議的標准,但是Paxos難於理解,更難以實現。Raft則是在2013年發布的一個比Paxos簡單又能實現Paxos所解決問題的一致性演算法。Paxos和Raft達成共識的過程皆如同選舉一樣,參選者需要說服大多數選民(伺服器)投票給他,一旦選定後就跟隨其操作。Paxos和Raft的區別在於選舉的具體過程不同。而Pool驗證池共識機制即是在這兩種成熟的分布式一致性演算法的基礎上,輔之以數據驗證的機制。
B. 公有鏈、聯盟鏈、私有鏈是什麼意思
公有鏈是指全世界任何人都可讀取、發送交易且交易能獲得有效確認的、也可以參與其中共識過程的區塊鏈。
聯盟鏈,只針對某個特定群體的成員和有限的第三方,其內部指定多個預選節點為記賬人,每個塊的生成由所有的預選節點共同決定。
私有鏈指的是對單獨的個人或實體開放。
希望對你有幫助,望採納。
C. 公有鏈和聯盟鏈有什麼區別
1. 公有鏈
公有鏈上的各個節點可以自由加入和退出網路,並參加鏈上數據的讀寫,讀寫時以扁平的拓撲結構互聯互通,網路中不存在任何中心化的服務端節點。
像大家所熟悉的比特幣和以太坊,都是一種公有鏈。公有鏈的好處是沒有限制,你可以自由參加。
2. 私有鏈(專有鏈)
私有鏈中各個節點的寫入許可權收歸內部控制,而讀取許可權可視需求有選擇性地對外開放。專有鏈仍熱具備區塊鏈多節點運行的通用結構,適用於特定機構的內部數據管理與審計。
其中,R3CEV Corda平台以及超級賬本項目(Hyperledger project)等都是私有鏈項目,對交易效率、隱私保障和監管控制有著更高要求的場景,私有鏈的應用是主要方向。
3. 聯盟鏈
聯盟鏈的各個節點通常有與之對應的實體機構組織,通過授權後才能加入與退出網路。各機構組織組成利益相關的聯盟,共同維護區塊鏈的健康運轉。
D. 搭建geth私有鏈和聯盟鏈網路
操作系統:linux或Mac OS
安裝geth執行以下命令:
linux:sudo apt-get install ethereum
Mac OS:brew install ethereum
直接創建兩個geth的工作目錄,用於之後的組建聯盟鏈的使用:
mkdir eth-private1
mkdir eth-private2
首先 cd eth-private1 進入節點1的工作目錄該目錄下執行下面命令
geth --datadir data --nodiscover console (data是之後geth節點的數據目錄,可自行修改)
使用geth自帶的工具 puppeth 用於生成創世區塊,過程如下:
puppeth
+-----------------------------------------------------------+
| Welcome to puppeth, your Ethereum private network manager |
| |
| This tool lets you create a new Ethereum network down to |
| the genesis block, bootnodes, miners and ethstats servers |
| without the hassle that it would normally entail. |
| |
| Puppeth uses SSH to dial in to remote servers, and builds |
| its network components out of Docker containers using the |
| docker-compose toolset. |
+-----------------------------------------------------------+
Please specify a network name to administer (no spaces, please)
輸入私鏈名稱後,會出現二級菜單,現在2:配置一個新的創世快
What would you like to do? (default = stats)
再次出現二級菜單,讓你選擇共識機制(這里採用poa共識)
Which consensus engine to use? (default = clique)
Ethash - proof-of-work(PoW) :工作量證明,通過算力達成共識 (以太坊就是使用這種方式)
Clique - proof-of-authority(PoA): 權威證明、通過預先設定的權威節點來負責達成共識 (不消耗算力,一般用於私有鏈測試開發)
如果選擇Pow的共識方法,直接輸入1,回車即可。
如果選擇PoA的共識方法,輸入2後會提示讓你選擇處快的間隔時間,一般測試開發使用可以設置相對的將處快時間設置較少5秒即可,然後會讓你選擇哪個賬戶來作為權威生成區塊(至少有一個,輸入剛才創建的賬戶,若只是單節點就輸入那個節點目錄生成的地址,若想組建聯盟鏈就填寫生成的兩個地址)
How many seconds should blocks take? (default = 15)
選擇好共識機制後會讓你指定給那些賬號初始化ether(至少有一個),輸入我們剛才創建的賬戶地址回車即可。
Which accounts should be pre-funded? (advisable at least one)
選擇輸入私有鏈的網路ID,任意數字即可(不能為1,1是公鏈),也可以不輸入會給定一個隨機數作為私有鏈的網路ID
Specify your chain/network ID if you want an explicit one (default = random)
選擇導出創世區塊配置文件
選擇導出創世區塊配置文件的保存路徑,可以保存到當前目錄,直接按回車即可
Which file to save the genesis into? (default = my-private-chain.json)
INFO [02-09|14:56:33] Exported existing genesis block
這樣就完成了創世區塊文件的配置了,直接退出puppeth即可。
輸入命令 geth --datadir data init private.json 其中data自己制定,private.json就是剛才生成的創世區塊
若出現如圖錯誤:
輸入命令:
geth --datadir data --syncmode full --port 2001 --networkid 1234 --rpc --rpcport "8545" --rpccorsdomain "*" --rpcaddr "0.0.0.0" --rpcapi "db,eth,net,web3,personal,admin,clique" --nodiscover console 進入控制台
--datadir data:節點的數據目錄
--syncmode full:塊同步的方式(若只是單節點可不填)
--port 2001: 網卡監聽埠
--networkid 1234:網路標識符
--rpc:開啟rpc服務
--rpcport "8545":rpc服務的埠
--rpccorsdomain "*":允許跨域請求的域名列表(逗號分隔)(瀏覽器強制)
--rpcaddr "0.0.0.0" :HTTP-RPC伺服器介面地址(默認值:「localhost」)
--rpcapi "db,eth,net,web3,personal,admin,clique":基於HTTP-RPC介面提供的API(私有鏈可以任意開發,公有鏈需要謹慎)
--nodiscover:不允許節點自動加入
若想搭建聯盟鏈,必須保證創世區塊一致,進入到剛才創建的eth-private2的目錄
將之前生成的創世區塊拷貝過來,初始化創世區塊,然後使用啟動命令啟動分別啟動兩個節點,進入控制台,使用 admin.nodeInfo 命令獲取節點的信息
總結:
兩個伺服器部署兩個節點是可以聯通的,但是只能使用兩個節點對應的地址進行挖礦,所以只能是兩個節點對應兩個地址進行挖礦,使用poa共識,當一個節點掛掉,挖礦停止,因為poa共識挖礦必須超過50%的節點進行錢增,現在只是兩個節點,掛掉一個節點挖礦就會停止等待另一個節點的確認,停掉的節點可以通過正常運作的節點信息重新連接到網路中。
問題:
同步塊有可能報錯情況:
1:Synchronisation failed "retrieved hash chain is invalid" 解決目前找到的方法是removedb 數據目錄 ,重新init創世區塊
2:內存溢出初步確認為開啟rpc服務造成的,有可能伺服器惡意被黑,暴力破解密碼,佔有內存,解決,將伺服器的ip設置一條防火牆
若存在問題可給本人留言或訪問本人的github: https://github.com/qi-shuo/geth-document 記錄了一些本人搭建使用的命令
E. 以太坊資源誰提供的
以太坊資源是由以太坊聯盟(EEA)提供的。2017年2月28日,一批代表著石油、天然氣行業,金融行業和軟體開發公司的全球性企業正式推出企業以太坊聯盟(EEA),致力於將以太坊開發成企業級區塊鏈。這些企業包括英國石油巨頭BP、摩根大通、軟體開發商微軟、埃森哲、桑坦德銀行、BlockApps、BNY梅隆、芝商所、ConsenSys、英特爾微軟和Nuco等
F. 什麼是公有鏈什麼是私有鏈什麼是聯盟鏈
1.公共區塊鏈(Public
blockchains)
公共區塊鏈是指全世界任何人都可讀取的、任何人都能發送交易且交易能獲得有效確認的、任何人都能參與其中共識過程的區塊鏈——共識過程決定哪個區塊可被添加到區塊鏈中和明確當前狀態。作為中心化或者准中心化信任的替代物,公共區塊鏈的安全由「加密數字經濟」維護——「加密數字經濟」採取工作量證明機制或權益證明機制等方式,將經濟獎勵和加密數字驗證結合了起來,並遵循著一般原則:每個人從中可獲得的經濟獎勵,與對共識過程作出的貢獻成正比。這些區塊鏈通常被認為是「完全去中心化」的。數字貨幣交易平台幣匯8bihui.com/xcyqm
2.聯盟區塊鏈:(Consortium
blockchains)
聯盟區塊鏈是指其共識過程受到預選節點控制的區塊鏈;例如,不妨想像一個有15個金融機構組成的共同體,每個機構都運行著一個節點,而且為了使每個區塊生效需要獲得其中10個機構的確認(2/3確認)。區塊鏈或許允許每個人都可讀取,或者只受限於參與者,或走混合型路線,例如區塊的根哈希及其API(應用程序介面)對外公開,API可允許外界用來作有限次數的查詢和獲取區塊鏈狀態的信息。這些區塊鏈可視為「部分去中心化」。
3.完全私有區塊鏈(Fully
private
blockchains)
完全私有的區塊鏈是指其寫入許可權僅在一個組織手裡的區塊鏈。讀取許可權或者對外開放,或者被任意程度地進行了限制。相關的應用囊括資料庫管理、審計、甚至一個公司,盡管在有些情況下希望它能有公共的可審計性,但在很多的情形下,公共的可讀性並非是必須的。
G. 什麼是聯盟鏈
隨著區塊鏈技術的發展,越來越的個人及企業也開始關注區塊鏈,而和區塊鏈聯系最為緊密的,恐怕就是金融行業了。
然而雖然比特幣區塊鏈大受熱捧,但畢竟比特幣區塊鏈是屬於公有區塊鏈,公有區塊鏈有著其不可編輯,不可篡改的特點,這就使得公有鏈並不適合企業使用了,畢竟如果某金融企業開發出一個區塊鏈,無法受其主觀控制,那對於他的意義就不大了。
因此私有鏈就應運而生了,但私有鏈雖然能夠解決以上的問題,如果僅僅只是各個企業自己單獨建立,那麼還將是一個個孤島。
如果能夠聯合起來開發私有區塊鏈,最好不過了。
這就是今天要講的主題:聯盟鏈。
聯盟鏈本質上仍然屬於一種私有鏈
聯盟鏈本質上仍然是一種私有鏈,只不過它比單個小組織開發的私有鏈更大,卻又沒有公有鏈這么大的規模,可以理解為它是介於私有鏈和公有鏈之間的一種區塊鏈。
聯盟區塊鏈是指其共識過程受到預選節點控制的區塊鏈;例如,不妨想像一個有15個金融機構組成的共同體,每個機構都運行著一個節點,而且為了使每個區塊生效需要獲得其中10個機構的確認(2/3確認)。區塊鏈或許允許每個人都可讀取,或者只受限於參與者,或走混合型路線,例如區塊的根哈希及其API(應用程序介面)對外公開,API可允許外界用來作有限次數的查詢和獲取區塊鏈狀態的信息。這些區塊鏈可視為「部分去中心化」。
聯盟鏈的特點
1.部分去中心化
與公有鏈不一樣,聯盟鏈在某種程度上只屬於聯盟內部的成員所有,且很容易達成共識,因為畢竟聯盟鏈的節點數是非常有限的。
2.可控性較強
公有鏈是一旦區塊鏈形成,將不可篡改,這主要源於公有鏈的節點一般是海量的,比如比特幣節點太多,想要篡改區塊數據,幾乎不可能,而聯盟鏈,只要所有機構中的大部分達成共識,即可將區塊數據進行更改;
3.數據不會默認公開
不同於公有鏈,聯盟鏈的數據只限於聯盟里的機構及其用戶才有許可權進行訪問。
4.交易速度很快
跟私有鏈一樣,聯盟鏈本質上還是私有鏈,因此由於其節點不多的原因,達成共識容易,交易速度自然也就快很多。
聯盟鏈的應用
目前已經有了很多的聯盟鏈,比較知名的有:
1.R3區塊鏈聯盟
R3區塊鏈聯盟於2015年9月份成立,目前已經有大約40多家國際銀行組織加入,成員幾乎遍布全球。其主要致力於為銀行提供探索區塊鏈技術的渠道以及建立區塊鏈概念性產品。該聯盟成立之後,召開了一系列的研討會。R3表示,其允許銀行加入的「初始窗口」已經關閉,2016年,該聯盟將尋求與非銀行金融機構和團體合作。R3使用以太坊和微軟Azure技術,將11家銀行連接至分布式賬本。R3公司對於自己正在做的事情非常肯定,它說,區塊鏈技術受到了世界各地銀行的歡迎,已經有一些銀行不僅在跟R3合作探索區塊鏈技術,還自己開展區塊鏈技術的調查研究。2016年4月,R3CEV與微軟正式建立合作關系,研究實驗區塊鏈應用。
R3CEV是一個知名的聯盟鏈
2.超級賬本(Hyperledger)
超級賬本(Hyperledger)是Linux基金會於2015年發起的推進區塊鏈數字技術和交易驗證的開源項目,加入成員包括:荷蘭銀行(ABN AMRO)、埃森哲(Accenture)等十幾個不同利益體,目標是讓成員共同合作,共建開放平台,滿足來自多個不同行業各種用戶案例,並簡化業務流程。由於點對點網路的特性,分布式賬本技術是完全共享、透明和去中心化的,故非常適合於在金融行業的應用,以及其他的例如製造、銀行、保險、物聯網等無數個其他行業。通過創建分布式賬本的公開標准,實現虛擬和數字形式的價值交換,例如資產合約、能源交易、結婚證書、能夠安全和高效低成本的進行追蹤和交易。據相關資料顯示,目前已經有北京AiYi數字金融技術公司、Belink(數貝荷包)、BitSE和Onchain共4家中國公司加入。
3.俄羅斯區塊鏈聯盟(俄羅斯版R3)
這個私鏈聯盟正式成立於2016年7月1日,其成員包括支付公司QIWI、B&N銀行、漢特-曼西斯克銀行(Khanty-Mansiysk Otkritie Bank)、盛寶銀行(Tinkoff Bank)、莫斯科商業世界銀行(MDM Bank)以及埃森哲咨詢公司(Accenture)。這個被稱為「俄羅斯版R3」的區塊鏈聯盟於第25屆俄羅斯國際金融會議上正式宣告成立,該次會議的主辦方為俄羅斯央行。這個區塊鏈聯盟的主要目標是發展區塊鏈概念驗證;進行合作研究和政策宣傳;創建區塊鏈技術的共同標准。同時,他們公開宣布將積極建立與國內監管部門和政府的合作。
H. Trust Union信用聯盟鏈與以太坊在技術上有什麼區別
很多區塊鏈項目都是在以太坊的開源技術基礎上進行開發。以太坊是通用型的公鏈技術,在以太坊上部署應用對於開發者來說要求高。開發者需要考慮很多技術細節和業務處理邏輯,還需要考慮智能合約溢出等安全漏洞。
Trust Union信用聯盟鏈定位於金融公鏈,面向信用和資產領域的高頻金融應用場景,沒有採用ETH、EOS、NEO等通用型的公鏈,採用的是恆星網路的帳本結構,採用的輕量級智能合約層,整個技術架構按照「高聚合 低耦合」進行模塊化設計,這使得Trust Union信用聯盟鏈能夠適應互聯網金融產品快速開發、快速實現、及時響應的要求。
I. 區塊鏈技術開發路徑分析 哪一條才是商用坦途
區塊鏈技術亮蘆態開發被各大媒體貶褒至今,已有些許沉澱。而2018年是區塊鏈的一個應用風口,各大企業、初創者紛紛爆出自己的區塊鏈項目消息,一時間群雄並起引來無數關注。就目前全球的區塊鏈路徑而言只有兩種。
一、公有鏈
公有鏈是一種去中心化的區塊鏈技術開發路徑,應用在to C居多,例如BTC和以太坊,通常被認為是“完全去中心化”的區塊鏈。
優點是:1.保護用戶免受開發者影響,絕對公平、公證。
2. 訪問門檻低,任何擁有足夠技術能力的都可以訪問。
3. 所有數據默認公開(參與者身份隱藏),通過他們的公共性識別排異來產
生自己的安全性。
缺點是:1.公有鏈過於“中心化”不適合現階段的商業級應用,應用拓展受限。
2.公有鏈交易算力低(BTC7筆/s、ETH40筆/s),不敬源匹配現商業交易量的速度。
二、聯盟鏈
聯盟鏈主要是機構之間的合作,機構和機構之間的節點參與幾張嘩扮,普通用戶不參與幾張,開發的應用也主要是to B端用戶,也可以擴展至B to C,符合商業級區塊鏈技術開發應用,目前在“區塊鏈+供應鏈經融”、“區塊鏈溯源”“電子存證”方面應用較多,優點明顯。
優點:1.非絕對去中心化,以聯盟合作形式更符合現階段商業級應用的區塊鏈技術。
2. 參與節點可信度高,參與者都是比較可靠的機構寫入區塊鏈節點,應用穩定。
3. 交易處理高效,利用共識演算法均值20000筆/s,峰值10萬筆/s,符合商業交
易的市場現狀要求。
通過以上的對比,我們不難看出區塊鏈技術開發的兩種主流途徑差異。雖然公有鏈滿足絕對公平公正、低門檻訪問,但部分隱私扔需要針對產業重新設計整合,匹配性欠缺且工程量巨大,現階段並不適合在商業應用上有實際的落地作為。而聯盟鏈的一系列優勢正是符合商用級區塊鏈的要求!
在聯盟鏈怎樣合理開發問題上,武漢先達區塊鏈技術總經理就談過關於“FBA聯邦拜占庭”的區塊鏈技術開發模式,通過多節點的的聯盟鏈共識存證,去辯證信息真偽,共識演算法的算力也能高效處理大量商業交易,可以解決商業亂價、存證溯源、交易環節復雜的問題,對造假防偽也很好的效果!是未來應用商業級區塊鏈技術開發的重要路徑。
J. 區塊鏈之聯盟鏈(三) 認識Fabric
Fabric 是超級賬本聯盟推出的核心區塊鏈框架,它適合在復雜的企業內和企業間搭建聯盟鏈。根據超級賬本聯盟的目標, Fabric 被建設為一個模塊化的、支持可插拔組件的基礎聯盟鏈框架。;
與以太坊系的Quorum不同,Fabric從一開始就只考慮企業間的應用。其獨有的channel概念,將企業根據業務目的不同以不同的子網連接起來, 每一個子網對應一個channel,而每個channel有自己獨立的區塊鏈。而Quorum很顯然是只有一個公網(所有企業節點都加入進去),企業與企業間的私有業務是通過Private Manager 完成的。
理解channel的最簡單方法就是,將它類比為一個消息服務提供的Topic,實際上Fabic最早就是基於Kafka 的分布式消息服務來實現。
在Fabric網路中,一個企業可以有一個或多個節點加入整個聯盟鏈;一個企業可以加入1個或者多個Channel(子網); 一個節點可以加入1個或者多個channel。每個channel構成一個子網,所以Fabric 是 一種由子網組成的網路。
那麼Fabric是怎麼實現智能合約的執行和完成業務上鏈(將事務結果記錄在區塊鏈里)的呢?
與其它框架不同, Fabric 將整個過程分成了三個階段:
業務背書階段 : 客戶的請求發送的背書節點,通過智能合約完成業務的計算(但不更新狀態),並完成背書;將背書結果返回個客戶端。
業務的排序階段 : 客戶端將背書結果通過Channel被發送到排序節點(orderer),在排序節點完成事務的排序,並打包到block里,最後下發給所有連接到channel的節點。
業務驗證並寫入賬本階段 : 通過Gossip 網路,所有Channel的節點都會接收到新的block,節點會驗證block中的每一個事務,確定是否有效:有效地將會跟新world state,無效的將會標志為「無效」,不會更新World state,但整個block會被完整的加入到帳本中(包括無效的事務)。
根據以上的描述,Fabric 節點實際可以分為 ,普通節點和Order節點:
Peer, 普通節點, 完成背書(包括只能合約的執行)和驗證.
orderer, 排序節點,完成排序。
加入orderer節點的Fabric網路可以被描述如下:
每一個Channel,都定義了所有屬於channel的節點,但是並不需要所有節點都連接到Orderer 節點(節點間可以通過gossip 協議通訊來傳播私有數據或事務).
在區塊鏈中,共識是區塊鏈的基礎。與公有鏈不同,聯盟鏈的共識要求所有加入賬本的事務是確定的、最終的,也就是不可以有分叉,區塊與區塊間的順序是一定的,只存在唯一條鏈。在Fabric 中,這個客觀需求正是由排序實現的,所有的事務將被提交給orderer節點獲得確定的順序,並最終打包成block進入帳本。 Fabric 從1.4.1開始支持基於Raft實現排序服務, 可以認為基於Raft實現共識。
基於RAFT的排序服務相對於早期的Kafka 具有更好的分布性,配置更加簡單,是聯盟鏈里常用的一個常用的達成共識的演算法,Quorum就 默認使用RAFT作為共識層。簡單的說,RAFT是一個leader和follower的模式, 所有加入RAFT網路的節點,任意時候都有一個leader, 只有這個leader有權決定事務的順序,並打包成Block,其它節點只能作為follower提交事務和同步block。
基於FAFT網路,每個企業可以有一個或多個節點參與到Orderer中去。在Frabric中企業間的網路連接可以變化成如下形式:
區塊鏈的使用用戶在乙太網中被稱作EOA(External of Account), EOA的載體是錢包。我們沿用這個概念,來看看Fabric是如何實現用戶和發起事務的。Fabric中EOA是一個CA中心發布的certificate(x.509),一個Certificate代表一個Identity(這與以太坊還是有很大區別的, 以太坊中一個EOA其實是一個hash地址),EOA能夠參與的channel以及被授權的操作是有channel的MSP( Membership Service Provider)決定的(如下圖)。
註:certificate 是一種密碼學上驗證身份的通用做法; certificate包含了個人的信息,公鑰以及發布這個certificate的CA的簽名。驗證方只需要擁有這個CA的證書(包含CA的公鑰),就可以驗證這個簽名是否正確,certificate的內容是否有篡改。簡單的說,通過CA和Certificate,我們可以獲得一個可驗證的的身份和信任鏈。
如上圖,fabric中通要使用Wallet作為EOA的載體,一個Wallet中可以包含多個Identity(x.509 certificate)。 Identity 通過 CA提供的信任鏈來驗證正確性。
驗證了身份之後, Fabric 通過MSP在區塊鏈網路中解決該身份是否代表組織的成員和在組織內具有什麼角色。例如,channel首先會驗證當前用戶Identity是否是有效地身份,然後通過MSP查看其所處的企業和具有的角色,最終確定該用戶是否有權執行操作。
可以說,Fabric的訪問控制是通過MSP來完成的。在每一個需要訪問控制的地方都需要定義一個MSP。 例如,每個channel都定義一個MSP,這個MSP規定了在channel范圍內資源的訪問許可權。 MSP 是Fabric里一個晦澀難懂的概念,也是其賦予企業間安全訪問的基礎。
前文提到, Fabric 將業務處理和上網分成了三個部分, 背書,排序,驗證後加入賬本。
其中背書是Fabric執行智能合約的階段。以太坊中,智能合約是在EVM中執行的,有多種語言支持。 在Fabric,智能合約被稱為chaincode: 一個chaincode 可以理解為是智能合約的容器,可以包含一個或多個智能合約, 不用於EVM, chaincode是在 JVM 或NodeJS中執行。
客戶應用程序通過智能合約來訪問賬本,每一個可訪問的智能合約都被安裝在客戶端可以訪問的節點上,並被定義在channel里。(有隻能合約的節點被稱為背書節點,沒有隻能合約的節點被稱未提交節點,提交節點只維護賬本)
客戶應用提交一個交易請求, 請求到達背書節點, 背書節點首先會驗證客戶的簽名,確保客戶的身份有權執行本次交易,接著執行交易提及的智能合約(chaincode),並生成一個背書響應(或者叫做交易提案,tran-proposal)。這個背書響應中通常包含World state 的讀集合,寫集合, 以及節點對本次交易的簽名。這里與以太坊系聯盟鏈最主要的不同是: 背書階段只模擬交易,並不真正更新交易結果。 而真正更新交易在第三階段完成。背書節點最後將生成的背書響應fanhui給客戶端, 智能合約部分的執行就結束了。
通常一個交易的執行需要多方的簽名,所以客戶端需要將一個交易發送給多個背書節點,這些背書節點的選擇需要滿足背書策略的要求。
下圖是一個包含有客戶、背書節點,提交節點的網路示意圖。
根據Fabric官方的參考文檔,客戶交易的正果過程可使用下圖描述。
如上圖,從1到3,為背書階段,4為排序階段,4.1,4,2, 5為驗證提交階段。 參考 Frabic的節點 概念,可以了解更多在交易細節的概念。
總的來看, Fabric 更專注於企業間,通過上文,可以讓大家對Fabric的基本構成與概念有一個總的了解。 Fabric本身並不神秘,都是使用的現有的企業間的技術。要更好的了解,建議參考閱讀分布式消息系統和企業的安全基礎設施(CA相關)的支持。與以太坊系聯盟鏈實現比較, Fabric 的子網更概念對於復雜企業間應用適應更強,但是其復雜的安全考量,使得運營成本很高,另外,Fabric 使用Certificate做為用戶身份,有很大的局限性,在新的2.0里,Fabric對於此處將有所改變。
下一篇,我們將來看看Sawtooth , 由Inter 提供的區塊鏈框架。
區塊鏈之聯盟鏈(一) 認識以太坊
區塊鏈之聯盟鏈(二) 認識Quotum
區塊鏈之聯盟鏈(三) 認識Fabric
區塊鏈之聯盟鏈(四) 認識Sawtooth