1. 技術(shù)人員看待區(qū)塊鏈的正確姿勢(shì)
區(qū)塊鏈雖然是一個(gè)新興的概念,但它依賴的技術(shù)一點(diǎn)也不新,如非對(duì)稱加密技術(shù)、P2P網(wǎng)絡(luò)協(xié)議等。好比樂高積木,積木塊是有限的,但是不同組合卻能產(chǎn)生非常有意思的事物。
我接觸過一些工程師,初次接觸區(qū)塊鏈時(shí),不約而同的表達(dá)了:都是成熟的技術(shù),不就是分布式存儲(chǔ)嘛。站在工程師的角度,第一反應(yīng)將這種新概念映射到自己的知識(shí)框架中,是非常自然的。但是細(xì)究之下發(fā)現(xiàn),這種片面的理解可能將對(duì)區(qū)塊鏈的理解帶入一個(gè)誤區(qū),那就是作為一個(gè)技術(shù)人員,忽略了區(qū)塊鏈的經(jīng)濟(jì)學(xué)特性——一個(gè)權(quán)力分散且完全自治的系統(tǒng)。
區(qū)塊鏈本質(zhì)上是一個(gè)基于P2P的價(jià)值傳輸協(xié)議,我們不能只看到了P2P,而看不到價(jià)值傳輸。同樣的,也不能只看到了價(jià)值傳輸,而看不到區(qū)塊鏈的底層技術(shù)。
可以這么說(shuō),區(qū)塊鏈更像是一門交叉學(xué)科,結(jié)合了P2P網(wǎng)絡(luò)技術(shù)、非對(duì)稱加密技術(shù)、宏觀經(jīng)濟(jì)學(xué)、經(jīng)濟(jì)學(xué)博弈等等知識(shí),構(gòu)建的一個(gè)新領(lǐng)域——針對(duì)價(jià)值互聯(lián)網(wǎng)的探索。
那什么是價(jià)值互聯(lián)網(wǎng) ?
價(jià)值互聯(lián)網(wǎng)可以是當(dāng)下如日中天的電子商務(wù)所衍生的支付業(yè)務(wù)。但,真的只是支付領(lǐng)域嗎?很顯然這是不夠的,一級(jí)資本市場(chǎng),實(shí)體資產(chǎn)確權(quán)與轉(zhuǎn)移,證券登記交割、征信與反欺詐。我們?cè)僮屑?xì)想想,我們的各大電商平臺(tái)的專業(yè)差評(píng)師,惡意刷單還少嗎?
如今的金融領(lǐng)域,除了支付比較便利之外,在其他絕大部分的業(yè)務(wù)中,我們就像是被套著鎖鏈走路一樣,我們反復(fù)確認(rèn),反復(fù)審核,反復(fù)監(jiān)督,我們反復(fù)構(gòu)建一個(gè)又一個(gè)的大大小小的高可用集群,保證線上服務(wù)的可靠性與連續(xù)性,我們雇傭一個(gè)又一個(gè)的安全工程師,交付一個(gè)又一個(gè)的滲透測(cè)試項(xiàng)目。為什么?因?yàn)樽鞅椎某杀咎土耍偷街灰臄?shù)據(jù)庫(kù)的一行記錄就可以提取上百萬(wàn)的資金。
強(qiáng)大的互聯(lián)網(wǎng)給了我們成本幾乎為零的高速信息傳輸通道,卻沒有一個(gè)成本低廉可靠的高速價(jià)值傳輸通道,那么這也就是區(qū)塊鏈即將帶來(lái)的。
區(qū)塊鏈?zhǔn)且粋€(gè)公共的分布式總賬,下面從技術(shù)角度簡(jiǎn)單介紹一下:
想象有一個(gè)100臺(tái)的分布式數(shù)據(jù)庫(kù)集群,現(xiàn)在的情況是這100個(gè)節(jié)點(diǎn)實(shí)際上的擁有者是一個(gè)機(jī)構(gòu),并且所有節(jié)點(diǎn)處在該機(jī)構(gòu)的內(nèi)網(wǎng)當(dāng)中,所以這個(gè)機(jī)構(gòu)想讓這100個(gè)數(shù)據(jù)庫(kù)節(jié)點(diǎn)干嘛就干嘛,換句話說(shuō)這100個(gè)節(jié)點(diǎn)之間是處于一個(gè)可信任的環(huán)境,并且受控于一個(gè)實(shí)體,這個(gè)實(shí)體具有絕對(duì)仲裁分配權(quán)。
另外的情況是這樣的,想象這100個(gè)節(jié)點(diǎn)分別歸不同的人所有,且每個(gè)人的節(jié)點(diǎn)數(shù)據(jù)都是一樣的,即完全冗余,并且所有的節(jié)點(diǎn)是處在廣域網(wǎng)當(dāng)中,換句話說(shuō)就是這100個(gè)節(jié)點(diǎn)之間是不信任的,且不存在一個(gè)實(shí)體,它擁有絕對(duì)仲裁權(quán)。
現(xiàn)在考慮第二種情況,采用什么樣的算法(共識(shí)模型)能夠提供一個(gè)可信任的環(huán)境,使:
每個(gè)節(jié)點(diǎn)交換數(shù)據(jù)過程不被篡改;交換歷史記錄不可被篡改;
每個(gè)節(jié)點(diǎn)的數(shù)據(jù)會(huì)同步到最新數(shù)據(jù),且承認(rèn)經(jīng)過共識(shí)的最新數(shù)據(jù);
基于少數(shù)服從多數(shù)的原則,整體節(jié)點(diǎn)維護(hù)的數(shù)據(jù)本身客觀反映了交換歷史。
區(qū)塊鏈本質(zhì)上就是要解決以上第二種情況的一種技術(shù)方案,更確切的說(shuō)應(yīng)該叫分布式的冗余的鏈?zhǔn)娇値け痉桨浮S嘘P(guān)區(qū)塊鏈的一些要素,在我以往的文章里有總結(jié)過一些:
包含一個(gè)分布式數(shù)據(jù)庫(kù)
分布式數(shù)據(jù)庫(kù)是區(qū)塊鏈的物理載體,區(qū)塊鏈?zhǔn)墙灰椎倪壿嬢d體,所有核心節(jié)點(diǎn)都應(yīng)包含該條區(qū)塊鏈數(shù)據(jù)的全副本
區(qū)塊鏈按時(shí)間序列化區(qū)塊,且區(qū)塊鏈?zhǔn)钦麄€(gè)網(wǎng)絡(luò)交易數(shù)據(jù)的唯一主體
區(qū)塊鏈只對(duì)添加有效,對(duì)其他操作無(wú)效
基于非對(duì)稱加密的公私鑰驗(yàn)證
記賬節(jié)點(diǎn)要求拜占庭將軍問題可解/避免
共識(shí)過程(consensus progress)是演化穩(wěn)定的,即面對(duì)一定量的不同節(jié)點(diǎn)的矛盾數(shù)據(jù)不會(huì)崩潰。
共識(shí)過程能夠解決double-spending問題
所以作為一個(gè)技術(shù)人員,不應(yīng)當(dāng)只看到了區(qū)塊鏈所依賴的技術(shù),更應(yīng)該關(guān)注區(qū)塊鏈以外的點(diǎn)和面,綜合來(lái)看,區(qū)塊鏈將會(huì)有趣得多。
2. 區(qū)塊鏈的一般性架構(gòu)介紹
有關(guān)區(qū)塊鏈本身的發(fā)展史,網(wǎng)絡(luò)上資料比較多,本文不再贅述。
而有關(guān)區(qū)塊鏈技術(shù)的介紹,在各個(gè)區(qū)塊鏈平臺(tái)的社區(qū)是有詳細(xì)資料的,但是針對(duì)這些資料的總結(jié),以及抽象出一共通概念的介紹,還是鳳毛麟角,本文嘗試總結(jié)一下。
在介紹之前,我想稍微介紹一下公有鏈,聯(lián)盟鏈的概念,這些概念是以太坊創(chuàng)始人Vitalik提出的,我在這些概念的基礎(chǔ)上做了一些研究。
其實(shí)區(qū)分公有鏈、聯(lián)盟鏈很簡(jiǎn)單,只要看這個(gè)區(qū)塊鏈的訪問權(quán)限就可以了,如果訪問該區(qū)塊鏈需要獲得鏈上節(jié)點(diǎn)的許可,那么這是一個(gè)聯(lián)盟鏈,否則是公有鏈。
根據(jù)名稱,我們也可以”望文生義“,公有表示一個(gè)完全開放的網(wǎng)絡(luò),聯(lián)盟表示一個(gè)半開放的網(wǎng)絡(luò),成員之間是共享的,非成員身份是沒有自由訪問權(quán)限的,所以我們也稱聯(lián)盟鏈為許可鏈。
下面我們來(lái)看幾個(gè)比較主流的區(qū)塊鏈平臺(tái)(公有鏈,皆開源):
比特幣 Bitcoin
以太坊 Ethereum/經(jīng)典以太坊 Ethereum Classic
比特股 Bitshares
我一般戲稱為”三巨頭“,從生態(tài)上來(lái)看,比特幣是最為成熟穩(wěn)定的,以太坊更像是一個(gè)沖在前面的勇士,比特股相比前兩位生態(tài)要小很多,但是從創(chuàng)新的角度,也不亞于前兩位。
其他的很多項(xiàng)目,是從這三個(gè)區(qū)塊鏈上衍生出來(lái)的,所以以這三個(gè)為基礎(chǔ),基本上可以吃透區(qū)塊鏈了。
不得不提的還有Linux基金會(huì)項(xiàng)目——HyperLedger項(xiàng)目(主打聯(lián)盟鏈,開源),也是旨在打造一個(gè)通用的區(qū)塊鏈技術(shù),不過我認(rèn)為目前尚在開發(fā)迭代當(dāng)中,還沒有具體的應(yīng)用案例,按下不講。
另外還有一些銀行寡頭間的聯(lián)盟鏈項(xiàng)目——R3 CEV項(xiàng)目(聯(lián)盟鏈,閉源),以及中國(guó)的R3項(xiàng)目——ChinaLedger(聯(lián)盟鏈,閉源),當(dāng)然這些不是開源的,我無(wú)法獲得有用的資料進(jìn)行分析,所以就不展開了。
從技術(shù)上來(lái)看,針對(duì)不同的業(yè)務(wù)場(chǎng)景,對(duì)區(qū)塊鏈有不同需求,比如實(shí)時(shí)結(jié)算業(yè)務(wù),要求區(qū)塊鏈提供秒級(jí)的交割,相對(duì)應(yīng)的就是出塊速度的要求,而出塊速度過快往往會(huì)導(dǎo)致區(qū)塊鏈分叉(fork),形成孤兒鏈,孤兒鏈?zhǔn)菬o(wú)效的,那么交易也就作廢了,影響了區(qū)塊鏈的最終一致性。
如果頻繁產(chǎn)生分叉造成相當(dāng)比例的用戶交易失效,那么可以認(rèn)為系統(tǒng)是不可靠的。
如果我們將這種實(shí)時(shí)性要求比較高的業(yè)務(wù)安插到聯(lián)盟鏈中,就可以控制風(fēng)險(xiǎn),通過調(diào)整共識(shí)算法,利用快速一致共識(shí)模型(Consensus Model)來(lái)避免上述問題,雖然不如公有鏈那么健壯,但對(duì)某些特殊場(chǎng)景足夠了。
所以架構(gòu)層面,對(duì)公有鏈和聯(lián)盟鏈的技術(shù)也要差異化對(duì)待。
不過客戶端整體的設(shè)計(jì)還是有一些通用的概念的,如下圖:
一個(gè)區(qū)塊鏈至少分為三層,最底層是一些通用的基礎(chǔ)模塊,比如基礎(chǔ)加密算法,網(wǎng)絡(luò)通訊庫(kù),流處理,線程封裝,消息封裝與解碼,系統(tǒng)時(shí)間等;
中間一層是區(qū)塊鏈的核心模塊,一般包含了區(qū)塊鏈的主要邏輯,如P2P網(wǎng)絡(luò)協(xié)議,共識(shí)模塊,交易處理模塊,交易池模塊,簡(jiǎn)單合約或者智能合約模塊,嵌入式數(shù)據(jù)庫(kù)處理模塊,錢包模塊等等;
最上面一層,往往都是基于Json Standard RPC的交互模塊,基于Json-RPC,我們還可以做出更好的UI界面,也可以是一個(gè)web-service。
如果區(qū)塊鏈 支持智能合約,可能還要分更多的層,比如增加BaaS層,區(qū)塊鏈上的智能合約提供自治的服務(wù),比如下面這張以太坊的架構(gòu)圖(來(lái)自Google,僅作參考):
這種分層更加關(guān)注的是區(qū)塊鏈本身的分層,即業(yè)務(wù)上的視角,而不完全是技術(shù)的。
我們?cè)俎D(zhuǎn)向比特幣的設(shè)計(jì):
比特幣幾個(gè)模塊之間的耦合度其實(shí)比較高,而且有不少歷史包袱,比特幣的發(fā)明者——中本聰在開發(fā)比特幣的時(shí)候,使用VC++開發(fā),而VC++的標(biāo)準(zhǔn)庫(kù)中的sstream流處理性能非常感人,不得不放棄,自行實(shí)現(xiàn)了了基于vector 的流處理容器。而隨著c++11的推出以及標(biāo)準(zhǔn)庫(kù)的更新迭代,性能不可同日而語(yǔ)。
從整張圖我們可以看出,比特幣的模塊比較少,也比較簡(jiǎn)單。chain-paramters描述了整個(gè)區(qū)塊鏈的參數(shù)設(shè)置,wallet是與地址/加密還有存儲(chǔ)相關(guān)的,mem-pool是未確認(rèn)的交易池。得益于比特幣核心開發(fā)者的不朽貢獻(xiàn),相比中本聰時(shí)代的比特幣代碼,現(xiàn)在的比特幣代碼質(zhì)量已經(jīng)相當(dāng)不錯(cuò)了。
以上無(wú)論哪種設(shè)計(jì),一般都要從P2P網(wǎng)絡(luò)協(xié)議作為切入,作為一個(gè)P2P錢包,既要提供Service也要提供Client,作為Service依賴P2P網(wǎng)絡(luò)協(xié)議,作為Client依賴Json-RPC。
需要指出的是,目前”三巨頭”所使用的賬戶模型是不同的(所謂賬戶模型是指賬戶記賬方法),比特幣使用UXTO模型,以太坊和比特股使用賬戶余額模型。
UXTO模型(Unspent Transaction Outputs (UTXOs) ):此模型表達(dá)了一種轉(zhuǎn)移的概念,即任何產(chǎn)生的新幣,在以后的生命周期中,只有轉(zhuǎn)移,沒有消亡,轉(zhuǎn)移實(shí)質(zhì)上是由加密算法的簽名與驗(yàn)證控制的:
賬戶余額模型:賬戶余額模型摒棄了這種強(qiáng)驗(yàn)證的賬戶模型,即賬戶余額回歸到數(shù)字加減,這樣做提升了交易的效率。
3. 共識(shí)算法與分布式
終于來(lái)到重點(diǎn)了,本文每節(jié)其實(shí)都可以展開成為獨(dú)立的文章,內(nèi)容所限,簡(jiǎn)單講。
所謂區(qū)塊鏈共識(shí)過程,在上文有所提及,是指如何將全網(wǎng)交易數(shù)據(jù)客觀記錄并且不可篡改的過程。目前"三巨頭"分別使用不同的共識(shí)算法(Consensus Algorithm), 比特幣使用工作量證明PoW(Proof of Work),以太坊即將轉(zhuǎn)換為權(quán)益證明PoS(Proof of Stake),比特股使用授權(quán)權(quán)益證明DPoS(Delegated Proof of Stake)。
以上這些算法我稱之為“經(jīng)濟(jì)學(xué)”的算法,所謂經(jīng)濟(jì)學(xué)的算法,是指讓作弊成本可計(jì)算,且讓作弊成本往往遠(yuǎn)大于作弊帶來(lái)的收益,即作弊無(wú)利可圖,通過這種思想構(gòu)造一個(gè)用于節(jié)點(diǎn)之間博弈的算法,并使之趨向一個(gè)穩(wěn)定的平衡。
相對(duì)應(yīng)的我們還有計(jì)算機(jī)領(lǐng)域的分布式一致性算法,例如Paxos、Raft,我也稱之為傳統(tǒng)分布式一致性算法。
他們之間的最大區(qū)別是:系統(tǒng)在拜占庭將軍(Byzantine Generals Problem)情景下的可靠性,即拜占庭容錯(cuò)(PBFT算法支持拜占庭容錯(cuò))。然而無(wú)論是Paxos還是Raft算法,理論上都可能會(huì)進(jìn)入無(wú)法表決通過的死循環(huán)(盡管這個(gè)概率其實(shí)是非常非常低的),但是他們都是滿足safety的,只是放松了liveness的要求, PBFT也是這樣。
下面是一些傳統(tǒng)分布式一致性算法和區(qū)塊鏈共識(shí)過程的異同點(diǎn)。先來(lái)看相同點(diǎn):
Append only
強(qiáng)調(diào)序列化
少數(shù)服從多數(shù)原則
分離覆蓋的問題:即長(zhǎng)鏈覆蓋短鏈區(qū)塊,多節(jié)點(diǎn)覆蓋少數(shù)節(jié)點(diǎn)日志
這是不同點(diǎn):
傳統(tǒng)分布式一致性算法大多不考慮拜占庭容錯(cuò)(Byzanetine Paxos除外),即假設(shè)所有節(jié)點(diǎn)只發(fā)生宕機(jī)、網(wǎng)絡(luò)故障等非人為問題,并不考慮惡意節(jié)點(diǎn)篡改數(shù)據(jù)的問題;
傳統(tǒng)分布式一致性算法是面向日志(數(shù)據(jù)庫(kù))的,即更通用的情況,而區(qū)塊鏈共識(shí)模型面向交易的,所以嚴(yán)格來(lái)說(shuō),傳統(tǒng)分布式一致性算法應(yīng)該處于區(qū)塊鏈共識(shí)模型的下面一層。
考慮上面的不同點(diǎn),結(jié)合公有鏈和聯(lián)盟鏈的特征,我們有:
聯(lián)盟鏈:半封閉生態(tài)的價(jià)值網(wǎng)絡(luò),存在對(duì)等的不信任節(jié)點(diǎn),如某某協(xié)會(huì)成員之間。
公有鏈:開放生態(tài)的價(jià)值網(wǎng)絡(luò),這層主要是為行業(yè)鏈和私有鏈提供全球交易網(wǎng)絡(luò)。
由于聯(lián)盟行業(yè)鏈其半封閉半開放特性,使用Delegated Proof of XXX 是可行的,可以考慮以傳統(tǒng)一致性算法作為基礎(chǔ)加入拜占庭容錯(cuò)/安全防護(hù)機(jī)制進(jìn)行改進(jìn)也是可以的。
而針對(duì)公有鏈,PoW/Pos/DPos等“經(jīng)濟(jì)學(xué)”的算法可能是最優(yōu)算法。
技術(shù)上,以上不同的共識(shí)算法,我們很多新開發(fā)區(qū)塊鏈都相應(yīng)的支持一個(gè)特性:共識(shí)模塊可插拔,以應(yīng)對(duì)不同場(chǎng)景下的要求。
下圖是一張未來(lái)區(qū)塊鏈生態(tài)示意圖:
公有鏈提供可信可靠的價(jià)值傳輸網(wǎng)絡(luò),上面可以繼續(xù)組建去中心化應(yīng)用(DAPP)或者部署聯(lián)盟鏈,甚至傳統(tǒng)數(shù)據(jù)庫(kù)都行,在上層搭建C端應(yīng)用。
4. 數(shù)字資產(chǎn)與價(jià)值流通網(wǎng)絡(luò)
這里有張未來(lái)區(qū)塊鏈發(fā)展的示意圖:
Metaverse元界白皮書-CN(概要)
“三巨頭”中,比特幣在“數(shù)字貨幣”處,比特股在“去中心化交易所”附近,以太坊在“去中心化組織”處。而實(shí)際上,區(qū)塊鏈和現(xiàn)實(shí)的接觸點(diǎn),還在圖示位置。
所以區(qū)塊鏈仍是一個(gè)正在成長(zhǎng)的事物,結(jié)合圖5,我們希望構(gòu)建一個(gè)基礎(chǔ)設(shè)施完善的價(jià)值傳輸網(wǎng)絡(luò),上層應(yīng)用豐富的區(qū)塊鏈生態(tài),仍然需要付出巨大的努力。
下一步目標(biāo),是將資產(chǎn)數(shù)字化(類比資產(chǎn)證券化),例如我們可以將珍稀物品(藝術(shù)品/古董)數(shù)字化、知識(shí)產(chǎn)權(quán)數(shù)字化、票據(jù)基金等收益權(quán)數(shù)字化,將極大的提升市場(chǎng)運(yùn)作效率,配備智能合約,甚至人工智能,可編程社會(huì)不再是夢(mèng)想。