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

FLy_鵬程萬里發表於2018-07-09

區塊鏈是目前一個比較熱門的新概念,蘊含了技術與金融兩層概念。從技術角度來看,這是一個犧牲一致性效率且保證最終一致性的分散式的資料庫,當然這是比較片面的。從經濟學的角度來看,這種容錯能力很強的點對點網路,恰恰滿足了共享經濟的一個必須要求——低成本的可信環境。
本次分享一下聊聊區塊鏈技術,以及目前區塊鏈技術架構,並且介紹一下價值網際網路。
由於區塊鏈是一個新興的技術概念,本文所有的觀點僅代表個人觀點,未必全部正確。

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

區塊鏈雖然是一個新興的概念,但它依賴的技術一點也不新,如非對稱加密技術、P2P網路協議等。好比樂高積木,積木塊是有限的,但是不同組合卻能產生非常有意思的事物。
我接觸過一些工程師,初次接觸區塊鏈時,不約而同的表達了:都是成熟的技術,不就是分散式儲存嘛。站在工程師的角度,第一反應將這種新概念對映到自己的知識框架中,是非常自然的。但是細究之下發現,這種片面的理解可能將對區塊鏈的理解帶入一個誤區,那就是作為一個技術人員,忽略了區塊鏈的經濟學特性——一個權力分散且完全自治的系統。
區塊鏈本質上是一個基於P2P的價值傳輸協議,我們不能只看到了P2P,而看不到價值傳輸。同樣的,也不能只看到了價值傳輸,而看不到區塊鏈的底層技術。
可以這麼說,區塊鏈更像是一門交叉學科,結合了P2P網路技術、非對稱加密技術、巨集觀經濟學、經濟學博弈等等知識,構建的一個新領域——針對價值網際網路的探索。
那什麼是價值網際網路?價值網際網路可以是當下如日中天的電子商務所衍生的支付業務。但,真的只是支付領域嗎?很顯然這是不夠的,一級資本市場,實體資產確權與轉移,證券登記交割、證信與反欺詐。我們再仔細想想,我們的各大電商平臺的專業差評師,惡意刷單還少嗎?
如今的金融領域,除了支付比較便利之外,在其他絕大部分的業務中,我們就像是被套著鎖鏈走路一樣,我們反覆確認,反覆稽核,反覆監督,我們反覆構建一個又一個的大大小小的高可用叢集,保證線上服務的可靠性與連續性,我們僱傭一個又一個的安全工程師,交付一個又一個的滲透測試專案。為什麼?因為作弊的成本太低了,低到只要改資料庫的一行記錄就可以提取上百萬的資金。
強大的網際網路給了我們成本幾乎為零的高速資訊傳輸通道,卻沒有一個成本低廉可靠的高速價值傳輸通道,那麼這也就是區塊鏈即將帶來的。
區塊鏈是一個公共的分散式總賬,下面從技術角度簡單介紹一下:

想象有一個100臺的分散式資料庫叢集,現在的情況是這100個節點實際上的擁有者是一個機構,並且所有節點處在該機構的內網當中,所以這個機構想讓這100個資料庫節點幹嘛就幹嘛,換句話說這100個節點之間是處於一個可信任的環境,並且受控於一個實體,這個實體具有絕對仲裁分配權。
另外的情況是這樣的,想象這100個節點分別歸不同的人所有,且每個人的節點資料都是一樣的,即完全冗餘,並且所有的節點是處在廣域網當中,換句話說就是這100個節點之間是不信任的,且不存在一個實體,它擁有絕對仲裁權。
現在考慮第二種情況,採用什麼樣的演算法(共識模型)能夠提供一個可信任的環境,使:

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

區塊鏈本質上就是要解決以上第二種情況的一種技術方案,更確切的說應該叫分散式的冗餘的鏈式總帳本方案。有關區塊鏈的一些要素,在我以往的文章裡有總結過一些:
包含一個分散式資料庫
分散式資料庫是區塊鏈的物理載體,區塊鏈是交易的邏輯載體,所有核心節點都應包含該條區塊鏈資料的全副本
區塊鏈按時間序列化區塊,且區塊鏈是整個網路交易資料的唯一主體
區塊鏈只對新增有效,對其他操作無效
基於非對稱加密的公私鑰驗證
記賬節點要求拜占庭將軍問題可解/避免
共識過程(consensus progress)是演化穩定的,即面對一定量的不同節點的矛盾資料不會崩潰。
共識過程能夠解決double-spending問題

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

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

有關區塊鏈本身的發展史,網路上資料比較多,本文不再贅述。
而有關區塊鏈技術的介紹,在各個區塊鏈平臺的社群是有詳細資料的,但是針對這些資料的總結,以及抽象出一共通概念的介紹,還是鳳毛麟角,本文嘗試總結一下。
在介紹之前,我想稍微介紹一下公有鏈,聯盟鏈的概念,這些概念是以太坊創始人Vitalik提出的,我在這些概念的基礎上做了一些研究。
其實區分公有鏈、聯盟鏈很簡單,只要看這個區塊鏈的訪問許可權就可以了,如果訪問該區塊鏈需要獲得鏈上節點的許可,那麼這是一個聯盟鏈,否則是公有鏈。
根據名稱,我們也可以”望文生義“,公有表示一個完全開放的網路,聯盟表示一個半開放的網路,成員之間是共享的,非成員身份是沒有自由訪問許可權的,所以我們也稱聯盟鏈為許可鏈。
下面我們來看幾個比較主流的區塊鏈平臺(公有鏈,皆開源):
比特幣 Bitcoin
以太坊 Ethereum/經典以太坊 Ethereum Classic
位元股 Bitshares

我一般戲稱為”三巨頭“,從生態上來看,比特幣是最為成熟穩定的,以太坊更像是一個衝在前面的勇士,位元股相比前兩位生態要小很多,但是從創新的角度,也不亞於前兩位。
其他的很多專案,是從這三個區塊鏈上衍生出來的,所以以這三個為基礎,基本上可以吃透區塊鏈了。
不得不提的還有Linux基金會專案——HyperLedger專案(主打聯盟鏈,開源),也是旨在打造一個通用的區塊鏈技術,不過我認為目前尚在開發迭代當中,還沒有具體的應用案例,按下不講。
另外還有一些好玩的聯盟鏈專案——R3 CEV專案(聯盟鏈,閉源),以及中國的R3專案——ChinaLedger(聯盟鏈,閉源),當然這些不是開源的,我無法獲得有用的資料進行分析,所以就不展開了。
從技術上來看,針對不同的業務場景,對區塊鏈有不同需求,比如實時結算業務,要求區塊鏈提供秒級的交割,相對應的就是出塊速度的要求,而出塊速度過快往往會導致區塊鏈分叉(fork),形成孤兒鏈,孤兒鏈是無效的,那麼交易也就作廢了,影響了區塊鏈的最終一致性。
如果頻繁產生分叉造成相當比例的使用者交易失效,那麼可以認為系統是不可靠的。
如果我們將這種實時性要求比較高的業務安插到聯盟鏈中,就可以控制風險,通過調整共識演算法,利用快速一致共識模型(Consensus Model)來避免上述問題,雖然不如公有鏈那麼健壯,但對某些特殊場景足夠了。
所以架構層面,對公有鏈和聯盟鏈的技術也要差異化對待。
不過客戶端整體的設計還是有一些通用的概念的,如下圖:

一個區塊鏈至少分為三層,
最底層是一些通用的基礎模組,比如基礎加密演算法,網路通訊庫,流處理,執行緒封裝,訊息封裝與解碼,系統時間等;
中間一層是區塊鏈的核心模組,一般包含了區塊鏈的主要邏輯,如P2P網路協議,共識模組,交易處理模組,交易池模組,簡單合約或者智慧合約模組,嵌入式資料庫處理模組,錢包模組等等;
最上面一層,往往都是基於Json Standard RPC的互動模組,基於Json-RPC,我們還可以做出更好的UI介面,也可以是一個web-service。
如果區塊鏈 支援智慧合約,可能還要分更多的層,比如增加BaaS層,區塊鏈上的智慧合約提供自治的服務,比如下面這張以太坊的架構圖(來自google,僅作參考):

這種分層更加關注的是區塊鏈本身的分層,即業務上的視角,而不完全是技術的。
我們再轉向比特幣的設計:

比特幣幾個模組之間的耦合度其實比較高,而且有不少歷史包袱,比特幣的發明者——中本聰在開發比特幣的時候,使用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) ):此模型表達了一種轉移的概念,即任何產生的新幣,在以後的生命週期中,只有轉移,沒有消亡,轉移實質上是由加密演算法的簽名與驗證控制的:

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

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除外),即假設所有節點只發生當機、網路故障等非人為問題,並不考慮惡意節點篡改資料的問題;
傳統分散式一致性演算法是面向日誌(資料庫)的,即更通用的情況,而區塊鏈共識模型面向交易的,所以嚴格來說,傳統分散式一致性演算法應該處於區塊鏈共識模型的下面一層。
考慮上面的不同點,結合公有鏈和聯盟鏈的特徵,我們有:
聯盟鏈:半封閉生態的交易網路,存在對等的不信任節點,如房地產行業A、B、C、D公司。
公有鏈:開放生態的交易網路,這層主要是為行業鏈和私有鏈提供全球交易網路。
由於聯盟行業鏈其半封閉半開放特性,使用Delegated Proof of XXX 是可行的,可以考慮以傳統一致性演算法作為基礎加入拜占庭容錯/安全防護機制進行改進也是可以的。
而針對公有鏈,PoW/Pos/DPos等“經濟學”的演算法可能是最優演算法。
技術上,以上不同的共識演算法,我們很多新開發區塊鏈都相應的支援一個特性:共識模組可插拔,以應對不同場景下的要求。
下圖是一張未來區塊鏈生態示意圖:

公有鏈提供可信可靠的價值傳輸網路,上面可以繼續組建去中心化應用(DAPP)或者部署聯盟鏈,甚至傳統資料庫都行,在上層搭建C端應用。
ref1:淺談區塊鏈共識機制與分散式一致性演算法--blockchaindev.org
ref2:從Paxos到拜占庭容錯,兼談區塊鏈的共識協議(轉)--blockchaindev.org

4. 數字資產與價值流通網路

這裡有張圖:

ref: Metaverse元界白皮書-CN(概要)http://ico.viewfin.com/white-paper.html
“三巨頭”中,比特幣在“數字貨幣”處,位元股在“去中心化交易所”附近,以太坊在“去中心化組織”處。而實際上,區塊鏈和現實的接觸點,還在圖示位置。
所以區塊鏈仍是一個正在成長的少年,結合圖5,我們希望構建一個基礎設施完善的價值傳輸網路,上層應用豐富的區塊鏈生態,仍然需要付出巨大的努力。
下一步目標,是將資產數字化(類比資產證券化),例如我們可以將珍稀物品(藝術品/古董)數字化、智慧財產權數字化、票據基金等收益權數字化,將極大的提升市場運作效率,配備智慧合約,甚至人工智慧,可程式設計社會不再是夢想。


Q:還是感覺太抽象,至今都還不能具象化的理解這個區塊鏈,也沒找到具象化的解釋,費解???
A:正如區塊鏈這個名詞一樣,它是被創造出來的,並沒有以往的概念可以對映到上面,所以容易費解。我們不談這個概念,我們只需要想想我們的網際網路還需要什麼。正如比特幣白皮書提到的,一個點對點的現金系統,他使用的前提要求是很低的,不需要註冊,不需要手機號,一個點對點的網路,只要你用裝置接入,那麼你就可以使用。區塊鏈這個概念也一樣,目的是構建一個點對點的生態,解構權力帶來的不對稱。它本身只是一個共享的總賬本,不同於網路中多節點自己記賬,再對賬,這就瓦解了中心權力。

Q: 區塊鏈技術在網際網路身份認證方面如何應用?
A:這個問題很好。我目前所做的區塊鏈專案是涵蓋了這個概念的,也就是你所說的網際網路身份認證。我們認為它是使區塊連結入現實業務的必要一環。
在我們的設想中,首先什麼是身份?身份不單單是一個ID號,一個密碼,而是一個使用者所有的操作記錄集,這個記錄集的代號才是身份。正如賬戶丟失,然後申訴一樣,申訴的內容才是真正定位到你這個人。區塊鏈也一樣,它需要一樣ID,同樣它也需要自動驗證你歷史記錄的合法性。目前網際網路的身份認證是依賴公安系統的,最簡單的方案就是把公安系統中的身份系統對映到區塊鏈中。另外一個方案也是使用者自定義記錄集,根據交易歷史核對身份。當然再更遠的未來,結合人工智慧,區塊鏈可能有更好的表現。
Q:實時交割資料如果放到聯盟鏈中,聯盟鏈的資料是否要最終同步到公有鏈?按分享所說,聯盟鏈的資料對公有鏈來說是不可信任的,聯盟鏈和公有鏈中資料是什麼關係?此處沒有理解,謝謝老師分享!
A:我認為不可能所有機構都願意把資產放到公有鏈上的,一定會出現並存的現象。理想的情況當然完全使用公有鏈搭建去中心化應用。聯盟鏈和公有鏈直接的資料是單純的引用關係,我認為開放的關鍵資料集,如使用者身份應該沉澱到公有鏈,讓使用者自己管理,而機構比較私有的關鍵資料,應該使用訪問許可權將它與公有鏈隔離,所以聯盟鏈的資料和公有鏈的資料我認為是互補的。也就是說,聯盟鏈的資料是否要同步到公有鏈,這個要是視機構本身的需求而定。另外,公有鏈的外部資料引用,我們稱之為data-feed,這個東西就要把人的因素引入了,比方說法務,律師,政府機構等等,作為一個仲裁者幫助引用資料,好壞可以讓市場評價信用,正如對一個機構評級一樣,如果這樣就很透明開放了。

Q: 有一些很有趣的實體專案比如智慧門鎖,無人租車,這些都是線下專案,怎麼做到互聯互通呢?
A:首先區塊鏈的專案都是跨平臺的,也就是說嵌入式裝置可以依託區塊鏈的低信用成本的優勢,自動記賬,可以是聯盟鏈的,也可以是直接基於某個公有鏈的DAPP,這些賬本是共享的,這些資料在發生引用關係的時候,可以進入公有鏈通道,打通兩者關係。
其次,任何具體的區塊鏈專案,都是需要依託一個公有鏈進行的,正如現在很多落地專案都是基於“三巨頭”,然而其實目前並沒有一個讓大家都特別滿意的標準,讓大家都服,所以我我們還要拭目以待。
Q: 多謝分享,能談談最後一張圖中區塊鏈發展的各個階段可能對傳統金融行業尤其是銀行業的影響嗎
A: 對銀行業的影響,我認為現階段影響不大,尤其是國內。這個要視區塊鏈發展的程度而定。我所瞭解的,央行已經開始著手自己的數字貨幣了,這對銀行來說,頂多就是再來一次IT架構升級的事兒而已,可以幫助銀行業降低IT成本,也可以方便加強監管。但如果在更遠的未來,銀行可能不會特別封閉,變成一些區塊鏈的代理節點,也會被所有人所監督,而不是幾個特殊機構。
Q:如果公有鏈能夠記錄所有歷史,有沒有技術能破壞或封禁,有沒有生命終結的那天?
A:有一點技術風險,通用量子計算商用的時候,目前的加密技術很多都失效了,基於密碼學的區塊鏈受影響最大(當然現在的中心化架構也會受到影響)。這取決於理論研究的成果,如果出現了新的密碼學理論可以抵抗量子計算就沒問題。如果從P2P網路的角度,是沒有任何機構或個人能封禁的,只要有兩個節點還能做交易也能記賬,這個區塊鏈就是alive的。
從經濟學的角度,區塊鏈的生死也不主要在於加密技術是否被攻破,而主要在於鏈上聚集了多少財富和利益,鏈上的資料有多少價值,如果沒有價值了,鏈自然就死了,反之如果被攻破了,不過是分叉、或者等待新的加密演算法出來之後進行資料遷移,這一點跟中心化資料庫恢復備份沒有什麼太大區別。


相關文章