想知道更多區塊鏈技術知識,請百度【鏈客區塊鏈技術問答社區】 鏈客,有問必答!!
區塊鏈是目前一個比較熱門的新概念,蘊含了技術與金融兩層概念。從技術角度來看,這是一個犧牲一致性效率且保證最終一致性的的分佈式的數據庫,固然這是比較片面的。從經濟學的角度來看,這種容錯能力很強的點對點網絡,偏偏知足了共享經濟的一個必需要求——低成本的可信環境。算法
區塊鏈雖然是一個新興的概念,但它依賴的技術一點也不新,如非對稱加密技術、P2P網絡協議等。比如樂高積木,積木塊是有限的,可是不一樣組合卻能產生很是有意思的事物。
區塊鏈本質上是一個基於P2P的價值傳輸協議,咱們不能只看到了P2P,而看不到價值傳輸。一樣的,也不能只看到了價值傳輸,而看不到區塊鏈的底層技術。
能夠這麼說,區塊鏈更像是一門交叉學科,結合了P2P網絡技術、非對稱加密技術、宏觀經濟學、經濟學博弈等等知識,構建的一個新領域——針對價值互聯網的探索。
現在的金融領域,除了支付比較便利以外,在其餘絕大部分的業務中,咱們就像是被套着鎖鏈走路同樣,咱們反覆確認,反覆審覈,反覆監督,咱們反覆構建一個又一個的大大小小的高可用集羣,保證線上服務的可靠性與連續性,咱們僱傭一個又一個的安全工程師,交付一個又一個的滲透測試項目。爲何?由於做弊的成本過低了,低到只要改數據庫的一行記錄就能夠提取上百萬的資金。
強大的互聯網給了咱們成本幾乎爲零的高速信息傳輸通道,卻沒有一個成本低廉可靠的高速價值傳輸通道,那麼這也就是區塊鏈即將帶來的。
區塊鏈是一個公共的分佈式總帳,下面從技術角度簡單介紹一下:
想象有一個100臺的分佈式數據庫集羣,如今的狀況是這100個節點實際上的擁有者是一個機構,而且全部節點處在該機構的內網當中,因此這個機構想讓這100個數據庫節點幹嗎就幹嗎,換句話說這100個節點之間是處於一個可信任的環境,而且受控於一個實體,這個實體具備絕對仲裁分配權。
另外的狀況是這樣的,想象這100個節點分別歸不一樣的人全部,且每一個人的節點數據都是同樣的,即徹底冗餘,而且全部的節點是處在廣域網當中,換句話說就是這100個節點之間是不信任的,且不存在一個實體,它擁有絕對仲裁權。
如今考慮第二種狀況,採用什麼樣的算法(共識模型)可以提供一個可信任的環境,使:
每一個節點交換數據過程不被篡改;交換歷史記錄不可被篡改;
每一個節點的數據會同步到最新數據,且認可通過共識的最新數據;
基於少數服從多數的原則,總體節點維護的數據自己客觀反映了交換歷史。數據庫
區塊鏈本質上就是要解決以上第二種狀況的一種技術方案,更確切的說應該叫分佈式的冗餘的鏈式總賬本方案。有關區塊鏈的一些要素,在我以往的文章裏有總結過一些:
包含一個分佈式數據庫
分佈式數據庫是區塊鏈的物理載體,區塊鏈是交易的邏輯載體,全部核心節點都應包含該條區塊鏈數據的全副本
區塊鏈按時間序列化區塊,且區塊鏈是整個網絡交易數據的惟一主體
區塊鏈只對添加有效,對其餘操做無效
基於非對稱加密的公私鑰驗證
記帳節點要求拜占庭將軍問題可解/避免
共識過程(consensus progress)是演化穩定的,即面對必定量的不一樣節點的矛盾數據不會崩潰。
共識過程可以解決double-spending問題安全
因此做爲一個技術人員,不該當只看到了區塊鏈所依賴的技術,更應該關注區塊鏈之外的點和麪,綜合來看,區塊鏈將會有趣得多。網絡
有關區塊鏈自己的發展史,網絡上資料比較多,本文再也不贅述。
而有關區塊鏈技術的介紹,在各個區塊鏈平臺的社區是有詳細資料的,可是針對這些資料的總結,以及抽象出一共通概念的介紹,仍是百裏挑一,本文嘗試總結一下。
在介紹以前,我想稍微介紹一下公有鏈,聯盟鏈的概念,這些概念是以太坊創始人Vitalik提出的,我在這些概念的基礎上作了一些研究。
其實區分公有鏈、聯盟鏈很簡單,只要看這個區塊鏈的訪問權限就能夠了,若是訪問該區塊鏈須要得到鏈上節點的許可,那麼這是一個聯盟鏈,不然是公有鏈。
根據名稱,咱們也能夠」望文生義「,公有表示一個徹底開放的網絡,聯盟表示一個半開放的網絡,成員之間是共享的,非成員身份是沒有自由訪問權限的,因此咱們也稱聯盟鏈爲許可鏈。
其餘的不少項目,是從這三個區塊鏈上衍生出來的,因此以這三個爲基礎,基本上能夠吃透區塊鏈了。
不得不提的還有Linux基金會項目——HyperLedger項目(主打聯盟鏈,開源),也是旨在打造一個通用的區塊鏈技術,不過我認爲目前尚在開發迭代當中,尚未具體的應用案例,按下不講。
另外還有一些銀行寡頭間的聯盟鏈項目——R3 CEV項目(聯盟鏈,閉源),以及中國的R3項目——ChinaLedger(聯盟鏈,閉源),固然這些不是開源的,我沒法得到有用的資料進行分析,因此就不展開了。
從技術上來看,針對不一樣的業務場景,對區塊鏈有不一樣需求,好比實時結算業務,要求區塊鏈提供秒級的交割,相對應的就是出塊速度的要求,而出塊速度過快每每會致使區塊鏈分叉(fork),造成孤兒鏈,孤兒鏈是無效的,那麼交易也就做廢了,影響了區塊鏈的最終一致性。
若是頻繁產生分叉形成至關比例的用戶交易失效,那麼能夠認爲系統是不可靠的。
若是咱們將這種實時性要求比較高的業務安插到聯盟鏈中,就能夠控制風險,經過調整共識算法,利用快速一致共識模型(Consensus Model)來避免上述問題,雖然不如公有鏈那麼健壯,但對某些特殊場景足夠了。
因此架構層面,對公有鏈和聯盟鏈的技術也要差別化對待。架構