1、區塊鏈html
1.1區塊鏈是什麼git
關於區塊鏈有着不一樣的定義,有的是從技術的應用層面,有的是從技術層面,這裏我根據不一樣的解釋,彙總出了一個技術層面上的定義github
區塊鏈的本質是一個分佈式數據庫,每個節點的數據由若若干個數據區塊組成,每個數據經過前一個區塊哈希值做爲關聯,首尾連接。算法
做爲一個分佈式數據庫,它具備多副本,去中心化,數據不可篡改,可信任的特性數據庫
在咱們詳細瞭解區塊鏈以前,先來了解一下中心化系統與分佈式系統,經過這些知識 會更容易理解區塊鏈的工做過程安全
1.2 中心化分佈式系統的相關知識微信
中心化系統網絡
中心化系統是指由一個主機集中式的進行數據的處理架構
優勢是結構比較簡單,分佈式
缺點是單個點發生故障的時候,會涉及到整個系統或者網絡,擴展性差
分佈式系統
分佈式系統由一組主機功能對外提供服務,這些主機沒有主從之分,彼此能夠互相交換信息
優勢是系統可靠,擴展性強
缺點就是須要處理數據一致性問題,
爲何要處理數據一致性問題?
分佈式系統中,因爲不一樣的數據節點之間因爲網絡延時等緣由很容易產生數據不一致的狀況。所以須要保證不一樣節點的數據完整與正確
數據的一致性分爲3種級別
強一致性
能夠理解爲在任意時刻,全部節點中的數據是同樣的。同一時間點,你在節點A中獲取到key1的值與在節點B中獲取到key1的值應該都是同樣的。
弱一致性
系統在返回寫入數據成功,不承諾當即能夠讀到最新寫入的值,也不會具體的承諾多久以後能夠讀到。但會盡量保證在某個時間級別(好比秒級別)以後,可讓數據達到一致性狀態。
最終一致性
弱一致性的特定形式。保證在沒有新數據更新的條件下,最終全部的訪問都是最後更新的值。
而從廣義上講,任何將數據侷限在某一個範圍內的東西均可以認爲中心化系統,如微信,支付寶,xx機構等
在中心化系統中,咱們必須無條件的信任其可以正確的處理咱們的請求,中心化系統一旦奔潰將帶來嚴重的損失
1.3 區塊鏈的概念
區塊鏈的發展歷史
區塊鏈1.0是以比特幣爲表明的數字貨幣應用,其場景包括支付、流通等貨幣職能;
區塊鏈2.0是數字貨幣與智能合約相結合,對金融領域更普遍的場景和流程進行優化的應用;
區塊鏈3.0則超出金融領域,爲各類行業提供去中心化解決方案。
區塊鏈的分類
公共區塊鏈,
任何用戶均可以讀取,寫入,參與達成共識的區塊鏈,如比特幣,以太坊等
聯盟鏈
通過容許的用戶才能參與,或者其餘用戶只能進行信息的查詢或寫入
私有區塊鏈
只容許特色的用戶參與
通常來講,在私有鏈和聯盟鏈狀況下,對一致性、正確性有很強的要求。通常來講要採用強一致性的共識算法。而在公有鏈狀況下,對一致性和正確性一般無法作到百分之百,一般採用最終一致性的共識算法。
2、區塊鏈的工做流程
2.1新數據的寫入流程:
一、發送節點將新的數據記錄向全網進行廣播
二、接收節點對記錄到的數據記錄進行校驗,好比記錄信息是否合法,經過校驗後數據記錄將被歸入一個區塊中
三、全網全部接收節點對區塊執行共識算法(工做量證實,權益證實等),用以達成數據的一致性
四、區塊經過共識算法過程後將被正式歸入區塊鏈中儲存,全網節點均表示接收改節點值,將該區塊的哈希值視爲最新的區塊散列值,新區塊將以該區塊鏈爲基礎繼續延長
當前主流的共識機制包括工做量證實,權益證實,工做量與權益混合證實,瑞博共識協議等
下面以比特幣的一次交易爲例:向你們講解一下區塊鏈的工做流程
消費者A,B
礦工C,D
當前每成功建立一個區塊,建立的礦工能夠得到1比特幣的獎勵
一、A向B支付了1個比特幣,標明將從何處得到的1個比特幣交給B,並將該數據向全網進行廣播,同時爲了使得該交易可以優先被處理,A願意額外支付0.01個比特幣做爲手續費
二、礦工C和D收到這筆交易後,校驗這筆交易的合法性,即A向B支付的這筆比特幣是存在的,而且沒有被消費掉,這個時候,礦工可能同時收到其餘人發來的交易,礦工會選擇那些優先級高的交易構建區塊,選擇完將那些交易放入區塊中後,礦工會計算這些交易的總共付出的手續費 + 當前建立一個區塊的獎勵1比特幣,做爲區塊的首筆交易,做爲給本身的獎勵,記錄在區塊中,而後是其他的交易。手續費低的交易可能不會被當即確認,須要等待下一個區塊的構建纔有可能獲得確認
三、各個節點爲了確保你們確認交易的交易一致,不會出現各自將各自的選的交易記入本身的區塊中,須要一種算法達成共識,
比特幣採用的是POW工做量證實方式來達成共識
在POW工做量證實機制下:礦工C和礦工D分別用一個幸運數字+區塊中的全部交易計算哈希值,經過更換不一樣的幸運數字使得計算哈希值小於目標值,當礦工C成功計算出了一個知足條件的哈希值的時候,他會將該區塊廣播給其餘節點中
四、礦工D在構建本區塊的時候,發現了D的廣播,計算其結果是正確的,將其記錄在本身的當前節點後,放棄當前區塊的構建,開始下一個區塊的構建
2.2 比特幣區塊的結構
區塊結構以下
區塊頭結構以下
新難度值 = 舊難度值 * ( 過去2016個區塊花費時長 / 20160 分鐘 )
工做量證實須要有一個目標值。比特幣工做量證實的目標值(Target)的計算公式以下:
目標值 = 最大目標值 / 難度值
其中最大目標值爲一個恆定值:
0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
3、常見的共識算法
3.1 工做量證實POW
經過不斷的嘗試計算知足目標的哈希值來達成共識,算力越強得到記帳權的概率便越大
優勢:
1.徹底去中心化,節點自由進出,避免了創建和維護中心化信用機構的成本。
2.只要網絡破壞者的算力不超過網絡總算力的50%,網絡的交易狀態便不會攻破。
缺點:
1.目前比特幣挖礦形成大量的資源浪費;「嘗試避免解決該問題的方案:素數幣」
2.挖礦的激勵機制也形成礦池算力的高度集中,背離了當初去中心化設計的初衷。
3.PoW機制的共識達成的週期較長,太短容易受到網絡因數影響,商業應用存在影響。
3.2 權益證實POS
根據持有的幣和持有的時間來進行共識,消耗的幣齡越大得到記帳權的概率更大
優勢
一、縮短了達成共識的時間,減小了資源的浪費
缺點:
1.破壞者對網絡攻擊的成本低,網絡的安全性有待驗證。
2.擁有代幣數量大的節點得到記帳權的概率更大,會使得網絡的共識受少數富裕帳戶支配,從而失去公正性。
3.3 股份受權證實DPoS
DPoS(股份受權證實)機制,相似於董事會投票。
持股者投票選出必定數量的見證人,每一個見證人按序的權限時間生成區塊,若見證人在給定的時間片不能生成區塊,區塊生成權限交給下一個時間片對應的見證人。
持股人能夠隨時經過投票更換這些見證人。DPoS的這種設計使得區塊的生成更爲快速,也更加節能。
優勢:
一、大幅縮小參與驗證和記帳節點的數量,能夠達到秒級的共識驗證。
缺點:
1.選舉固定數量的見證人做爲記帳候選人有可能不適合於徹底去中心化的場景。
2.在網絡節點數少的場景,選舉的見證人的表明性也不強。
3.4 dBFT:小蟻區塊鏈(delegated BFT,受權拜占庭容錯機制)
用權益來選出記帳人,而後記帳人之間經過拜占庭容錯算法 達成共識。
優勢:
一、專業化的記帳人
二、能夠容忍任何類型的錯誤
三、記帳由多人協同完成,每個區塊都有最終性,不會分叉
三、算法的可靠性有 嚴格的數學證實
缺點:
一、當三分之一或以上記帳人中止工做後,系統將沒法提供服務
二、當三分之一或以上記帳人聯合做惡,且其餘全部的記帳人剛好分割爲兩個網絡孤島時,惡意記帳人可使系統出現分叉,可是會留下密碼學證據
3.5 PBFT:Fabric使用的經典算法(拜占庭容錯),央行推薦
一種基於消息傳遞的一致性算法,算法通過三個階段達成一致性,這些階段可能由於失敗而重複進行。
優勢:
一、共識效率高,可實現高頻交易。
缺點:
二、當系統只剩下33%的節點運行時,系統會中止運行。
3.6 其餘分佈式一致性算法
分佈式一致性算法是基於傳統的分佈式一致性技術。其中又分爲解決拜占庭將軍問題的拜占庭容錯算法,如PBFT等
另外解決非拜占庭問題的分佈式一致性算法(Pasox、Raft),該類算法目前是聯盟鏈和私有鏈鏈場景中經常使用的共識機制。
優勢:
一、實現秒級的快速共識機制,保證一致性。
缺點:
二、去中心化程度不如公有鏈上的共識機制;更適合多方參與的多中心商業模式。
4、智能合約
智能合約由一組代碼(合約的函數)和裏面數據(合約的狀態)組成
區塊鏈自己不能運行這些代碼,而是由節點本地的環境來進行運行
部署合約代碼時,會將代碼部署到區塊鏈中一個區塊,進而被全部節點中所獲知記錄
調用合約時每一個節點都會根據輸入運行相應的代碼,而後達成共識,確保結果的正確性與一致性
5、區塊鏈的應用
一、分佈式記帳,將T+n縮短至T+0甚至更短
在各自爲中心的機構中,每一箇中心都有着本身獨立的數據系統來進行覈算
每一箇中心須要確保本身數據無誤,也要保證和其餘中心的數據交互也沒有問題,爲此須要進行大量的內部對帳與外部對帳,沒法當即確認數據的正確與否。
而經過區塊鏈技術 不一樣的中心成爲了區塊鏈中的一個節點,任何一筆交易,只有全部節點達成共識就能夠獲得確認,減小了等待時間
成爲經過環形簽名技術(零知識證實)能夠有效的解決數據隱私性的問題
二、數據存證與知識產權保護
常規的數據存在和知識產權保護每每由相應的中心所控制,用戶必須無條件的進行信任,而且因爲中心化系統的緣由,過多的數據意味着更多的管理成本和工做量,記錄的速度也會受到影響
而借住於區塊鏈的可信任與數據不可篡改的特性,咱們能夠將數據的記錄時間與數據的電子形式存放區塊鏈中
區塊鏈的開放性使得用戶的參與變得更加容易,進行相應的數據存證或是知識產權的保護
區塊鏈的信息一經寫入,對應時間戳下的數據變沒法篡改,然後續對改數據的修改也都能查到
6、區塊鏈的一些工程
以太坊的ethereum和mist
一個全新開放的區塊鏈平臺,容許任何人在公共和內部的平臺中創建和使用經過區塊鏈技術運行的去中心化應用
安裝與文檔 https://ethereum.github.io/go-ethereum/
相比與Hyberledger-Fabric,經過ethereum更容易理解區塊鏈的一些工做原理
命令行界面ethereum
圖形化界面mist
ibm的Hyberledger-Fabric
ibm推出的分佈式帳本解決方案的平臺,支持模塊化架構,提供高度的機密性,彈性,靈活性和可擴展性
安裝與介紹文檔 https://hyperledger-fabric.readthedocs.io/en/release/prereqs.html
官方例子
7、其餘關鍵詞
一、51%攻擊 33%攻擊二、零知識證實(環簽名)三、非對稱加密四、佈雷頓森林體系五、金本位