區塊鏈以及區塊鏈技術總結

小白入門2019-08-10 14:17:35  閱讀 0評論 0

區塊鏈是目前一個比較熱門的新概念,蘊含了技術與金融兩層概念。從技術角度來看,這是一個犧牲一致性效率且保證最終一致性的的分布式的數據庫,當然這是比較片面的。從經濟學的角度來看,這種容錯能力很強的點對點網絡,恰恰滿足了共享經濟的一個必須要求——低成本的可信環境。

本次分享一下聊聊區塊鏈技術,以及目前區塊鏈技術架構,并且介紹一下價值互聯網。

由于區塊鏈是一個新興的技術概念,本文所有的觀點僅代表個人觀點,未必全部正確。

#1. 技術人員看待區塊鏈的正確姿勢

區塊鏈雖然是一個新興的概念,但它依賴的技術一點也不新,如非對稱加密技術、P2P網絡協議等。好比樂高積木,積木塊是有限的,但是不同組合卻能產生非常有意思的事物。

我接觸過一些工程師,初次接觸區塊鏈時,不約而同的表達了:都是成熟的技術,不就是分布式存儲嘛。站在工程師的角度,第一反應將這種新概念映射到自己的知識框架中,是非常自然的。但是細究之下發現,這種片面的理解可能將對區塊鏈的理解帶入一個誤區,那就是作為一個技術人員,忽略了區塊鏈的經濟學特性——一個權力分散且完全自治的系統。

區塊鏈本質上是一個基于P2P的價值傳輸協議,我們不能只看到了P2P,而看不到價值傳輸。同樣的,也不能只看到了價值傳輸,而看不到區塊鏈的底層技術。

可以這么說,區塊鏈更像是一門交叉學科,結合了P2P網絡技術、非對稱加密技術、宏觀經濟學、經濟學博弈等等知識,構建的一個新領域——針對價值互聯網的探索。

那什么是價值互聯網?價值互聯網可以是當下如日中天的電子商務所衍生的支付業務。但,真的只是支付領域嗎?很顯然這是不夠的,一級資本市場,實體資產確權與轉移,證券登記交割、證信與反欺詐。我們再仔細想想,我們的各大電商平臺的專業差評師,惡意刷單還少嗎?

如今的金融領域,除了支付比較便利之外,在其他絕大部分的業務中,我們就像是被套著鎖鏈走路一樣,我們反復確認,反復審核,反復監督,我們反復構建一個又一個的大大小小的高可用集群,保證線上服務的可靠性與連續性,我們雇傭一個又一個的安全工程師,交付一個又一個的滲透測試項目。為什么?因為作弊的成本太低了,低到只要改數據庫的一行記錄就可以提取上百萬的資金。

強大的互聯網給了我們成本幾乎為零的高速信息傳輸通道,卻沒有一個成本低廉可靠的高速價值傳輸通道,那么這也就是區塊鏈即將帶來的。

區塊鏈是一個公共的分布式總賬,下面從技術角度簡單介紹一下:

 

想象有一個100臺的分布式數據庫集群,現在的情況是這100個節點實際上的擁有者是一個機構,并且所有節點處在該機構的內網當中,所以這個機構想讓這100個數據庫節點干嘛就干嘛,換句話說這100個節點之間是處于一個可信任的環境,并且受控于一個實體,這個實體具有絕對仲裁分配權

另外的情況是這樣的,想象這100個節點分別歸不同的人所有,且每個人的節點數據都是一樣的,即完全冗余,并且所有的節點是處在廣域網當中,換句話說就是這100個節點之間是不信任的,且不存在一個實體,它擁有絕對仲裁權。

現在考慮第二種情況,采用什么樣的算法(共識模型)能夠提供一個可信任的環境,使:

  1. 每個節點交換數據過程不被篡改;交換歷史記錄不可被篡改;
  2. 每個節點的數據會同步到最新數據,且承認經過共識的最新數據;
  3. 基于少數服從多數的原則,整體節點維護的數據本身客觀反映了交換歷史。

 

區塊鏈本質上就是要解決以上第二種情況的一種技術方案,更確切的說應該叫分布式的冗余的鏈式總帳本方案。有關區塊鏈的一些要素,在我以往的文章里有總結過一些:

  • 包含一個分布式數據庫
  • 分布式數據庫是區塊鏈的物理載體,區塊鏈是交易的邏輯載體,所有核心節點都應包含該條區塊鏈數據的全副本
  • 區塊鏈按時間序列化區塊,且區塊鏈是整個網絡交易數據的唯一主體
  • 區塊鏈只對添加有效,對其他操作無效
  • 基于非對稱加密的公私鑰驗證
  • 記賬節點要求拜占庭將軍問題可解/避免
  • 共識過程(consensus progress)是演化穩定的,即面對一定量的不同節點的矛盾數據不會崩潰。
  • 共識過程能夠解決double-spending問題

 

所以作為一個技術人員,不應當只看到了區塊鏈所依賴的技術,更應該關注區塊鏈以外的點和面,綜合來看,區塊鏈將會有趣得多。

 

#2. 區塊鏈的一般性架構介紹

有關區塊鏈本身的發展史,網絡上資料比較多,本文不再贅述。

而有關區塊鏈技術的介紹,在各個區塊鏈平臺的社區是有詳細資料的,但是針對這些資料的總結,以及抽象出一共通概念的介紹,還是鳳毛麟角,本文嘗試總結一下。

在介紹之前,我想稍微介紹一下公有鏈,聯盟鏈的概念,這些概念是以太坊創始人Vitalik提出的,我在這些概念的基礎上做了一些研究。

其實區分公有鏈、聯盟鏈很簡單,只要看這個區塊鏈的訪問權限就可以了,如果訪問該區塊鏈需要獲得鏈上節點的許可,那么這是一個聯盟鏈,否則是公有鏈。

根據名稱,我們也可以”望文生義“,公有表示一個完全開放的網絡,聯盟表示一個半開放的網絡,成員之間是共享的,非成員身份是沒有自由訪問權限的,所以我們也稱聯盟鏈為許可鏈。

下面我們來看幾個比較主流的區塊鏈平臺(公有鏈,皆開源):

  • 比特幣 Bitcoin
  • 以太坊 Ethereum/經典以太坊 Ethereum Classic
  • 比特股 Bitshares

 

我一般戲稱為”三巨頭“,從生態上來看,比特幣是最為成熟穩定的,以太坊更像是一個沖在前面的勇士,比特股相比前兩位生態要小很多,但是從創新的角度,也不亞于前兩位。

其他的很多項目,是從這三個區塊鏈上衍生出來的,所以以這三個為基礎,基本上可以吃透區塊鏈了。

不得不提的還有Linux基金會項目——HyperLedger項目(主打聯盟鏈,開源),也是旨在打造一個通用的區塊鏈技術,不過我認為目前尚在開發迭代當中,還沒有具體的應用案例,按下不講。

另外還有一些好玩的聯盟鏈項目——R3 CEV項目(聯盟鏈,閉源),以及中國的R3項目——ChinaLedger(聯盟鏈,閉源),當然這些不是開源的,我無法獲得有用的資料進行分析,所以就不展開了。

從技術上來看,針對不同的業務場景,對區塊鏈有不同需求,比如實時結算業務,要求區塊鏈提供秒級的交割,相對應的就是出塊速度的要求,而出塊速度過快往往會導致區塊鏈分叉(fork),形成孤兒鏈,孤兒鏈是無效的,那么交易也就作廢了,影響了區塊鏈的最終一致性。

如果頻繁產生分叉造成相當比例的用戶交易失效,那么可以認為系統是不可靠的。

如果我們將這種實時性要求比較高的業務安插到聯盟鏈中,就可以控制風險,通過調整共識算法,利用快速一致共識模型(Consensus Model)來避免上述問題,雖然不如公有鏈那么健壯,但對某些特殊場景足夠了。

所以架構層面,對公有鏈和聯盟鏈的技術也要差異化對待。

不過客戶端整體的設計還是有一些通用的概念的,如下圖:

(圖1)

一個區塊鏈至少分為三層,

最底層是一些通用的基礎模塊,比如基礎加密算法,網絡通訊庫,流處理,線程封裝,消息封裝與解碼,系統時間等;

中間一層是區塊鏈的核心模塊,一般包含了區塊鏈的主要邏輯,如P2P網絡協議,共識模塊,交易處理模塊,交易池模塊,簡單合約或者智能合約模塊,嵌入式數據庫處理模塊,錢包模塊等等;

最上面一層,往往都是基于Json Standard RPC的交互模塊,基于Json-RPC,我們還可以做出更好的UI界面,也可以是一個web-service。

如果區塊鏈 支持智能合約,可能還要分更多的層,比如增加BaaS層,區塊鏈上的智能合約提供自治的服務,比如下面這張以太坊的架構圖(來自google,僅作參考):

(圖2)
這種分層更加關注的是區塊鏈本身的分層,即業務上的視角,而不完全是技術的。

我們再轉向比特幣的設計:

(圖3)

比特幣幾個模塊之間的耦合度其實比較高,而且有不少歷史包袱,比特幣的發明者——中本聰在開發比特幣的時候,使用VC++開發,而VC++的標準庫中的sstream流處理性能非常感人,不得不放棄,自行實現了了基于vector的流處理容器。而隨著c++11的推出以及標準庫的更新迭代,性能不可同日而語。

從整張圖我們可以看出,比特幣的模塊比較少,也比較簡單。chain-paramters描述了整個區塊鏈的參數設置,wallet是與地址/加密還有存儲相關的,mem-pool是未確認的交易池。得益于比特幣核心開發者的不朽貢獻,相比中本聰時代的比特幣代碼,現在的比特幣代碼質量已經相當不錯了。

以上無論哪種設計,一般都要從P2P網絡協議作為切入,作為一個P2P錢包,既要提供Service也要提供Client,作為Service依賴P2P網絡協議,作為Client依賴Json-RPC。

需要指出的是,目前”三巨頭”所使用的賬戶模型是不同的(所謂賬戶模型是指賬戶記賬方法),比特幣使用UXTO模型,以太坊和比特股使用賬戶余額模型。

UXTO模型(Unspent Transaction Outputs (UTXOs) ):此模型表達了一種轉移的概念,即任何產生的新幣,在以后的生命周期中,只有轉移,沒有消亡,轉移實質上是由加密算法的簽名與驗證控制的:

(圖4)

賬戶余額模型:賬戶余額模型摒棄了這種強驗證的賬戶模型,即賬戶余額回歸到數字加減,這樣做提升了交易的效率。

 

#3. 共算法與分布式

終于來到重點了,本文每節其實都可以展開成為獨立的文章,內容所限,簡單講。

所謂區塊鏈共識過程,在上文有所提及,是指如何將全網交易數據客觀記錄并且不可篡改的過程。目前"三巨頭"分別使用不同的共識算法(Consensus Algorithm), 比特幣使用工作量證明PoW(Proof of Work),以太坊即將轉換為權益證明PoS(Proof of Stake),比特股使用授權權益證明DPoS(Delegated Proof of Stake)。

以上這些算法我稱之為“經濟學”的算法,所謂經濟學的算法,是指讓作弊成本可計算,且讓作弊成本往往遠大于作弊帶來的收益,即作弊無利可圖,通過這種思想構造一個用于節點之間博弈的算法,并使之趨向一個穩定的平衡。

相對應的我們還有計算機領域的分布式一致性算法,例如Paxos、Raft,我也稱之為傳統分布式一致性算法。

他們之間的最大區別是:系統在拜占庭將軍(Byzantine Generals Problem)情景下的可靠性,即拜占庭容錯(PBFT算法支持拜占庭容錯)。然而無論是Paxos還是Raft算法,理論上都可能會進入無法表決通過的死循環(盡管這個概率其實是非常非常低的),但是他們都是滿足safety的,只是放松了liveness的要求, PBFT也是這樣。

下面是一些傳統分布式一致性算法和區塊鏈共識過程的異同點:

相同點:

  • Append only
  • 強調序列化
  • 少數服從多數原則
  • 分離覆蓋的問題:即長鏈覆蓋短鏈區塊,多節點覆蓋少數節點日志

不同點:

  • 傳統分布式一致性算法大多不考慮拜占庭容錯(Byzanetine Paxos除外),即假設所有節點只發生宕機、網絡故障等非人為問題,并不考慮惡意節點篡改數據的問題;
  • 傳統分布式一致性算法是面向日志(數據庫)的,即更通用的情況,而區塊鏈共識模型面向交易的,所以嚴格來說,傳統分布式一致性算法應該處于區塊鏈共識模型的下面一層。

相關推薦

手机赢钱棋牌20可提现