一秒鐘回顧區(qū)塊鏈特征
經(jīng)過這幾年的快速發(fā)展贸人,區(qū)塊鏈已經(jīng)是家喻戶曉的技術(shù)和應(yīng)用了,結(jié)合分布式網(wǎng)絡(luò)佃声、共識機制和密碼學(xué)三大核心技術(shù)艺智,區(qū)塊鏈通過鏈?zhǔn)接涃~的方式(此處不考慮DAG結(jié)構(gòu)的區(qū)塊鏈架構(gòu)),構(gòu)建了一個不可篡改的分布式賬本圾亏。
區(qū)塊鏈所謂不可篡改十拣,本質(zhì)上是因為基于哈希連接的區(qū)塊鏈賬本,分布在網(wǎng)絡(luò)中各個節(jié)點志鹃,想要單方面篡改某個歷史狀態(tài)夭问,需要獲得足夠多節(jié)點的認可,而這需要很大成本曹铃,例如要超過50%的算力缰趋,或者要聯(lián)合大多數(shù)節(jié)點協(xié)助作惡。
平民使用區(qū)塊鏈的斷舍離
眾所周知陕见,區(qū)塊鏈有公有鏈和聯(lián)盟鏈之分秘血,公有鏈的應(yīng)用依托數(shù)字貨幣,最大的場景還是資產(chǎn)轉(zhuǎn)移和交換评甜,聯(lián)盟鏈則在金融灰粮、政務(wù)、溯源等眾多場景有廣泛應(yīng)用忍坷。那么粘舟,從C端用戶的角度,尤其是作為一個平民百姓佩研,是如何使用區(qū)塊鏈的呢柑肴?
在公有鏈領(lǐng)域,用戶接觸最多的是交易所和錢包韧骗,通過這兩個東西進行資產(chǎn)的保管和交易嘉抒。在聯(lián)盟鏈領(lǐng)域,用戶一般是通過B端提供的客戶端來訪問區(qū)塊鏈服務(wù)袍暴,例如APP或者小程序等些侍。
不管是公有鏈還是聯(lián)盟鏈,目前這種用戶體驗設(shè)計政模,都是有原因的岗宣。這里面涉及一個很重要的設(shè)計哲學(xué)——「安全」與「便捷」的博弈權(quán)衡。
從安全角度來講淋样,需要擁有全量的區(qū)塊鏈賬本耗式,即所謂的全節(jié)點(Full Node)才能進行完整的安全確認。但是全節(jié)點需要占用大量資源,包括計算刊咳、網(wǎng)絡(luò)以及存儲開銷彪见,特別是存儲開銷,全量賬本的大小是幾百GB娱挨、TB級別的余指,而且還在持續(xù)增長。對于普通平民用戶跷坝,他們的終端設(shè)備無法承載如此巨大的開銷酵镜,他們的技術(shù)能力不足以維護全節(jié)點,甚至不足以管理私鑰柴钻,他們需要足夠便捷的用戶體驗淮韭。
為了得到足夠便捷的體驗,自然而然發(fā)展出“托管”服務(wù)贴届,把一切復(fù)雜的任務(wù)托管給第三方靠粪。托管服務(wù)以犧牲安全保障來換取體驗的便捷,它斬斷了用戶對賬本的全量存儲粱腻,舍棄了用戶對私鑰的絕對管控庇配,背離了用戶對交易的安全確認斩跌。
于是绍些,用戶把資產(chǎn)托管給交易所,把私鑰托管給錢包耀鸦,把信任托管給APP…
然后柬批,我們不斷看到,某某交易所被盜袖订,某某錢包被黑氮帐,用戶數(shù)以億計資產(chǎn)慘遭損失…
魚和熊掌是否可以兼得
追求安全,就需要付出資源消耗的巨大代價洛姑,追求便捷上沐,就需要犧牲用戶的核心利益,難道安全與便捷是魚和熊掌不可兼得楞艾?
答案與否参咙,我們尚未可知。但是業(yè)界從來沒有放棄過追求魚和熊掌兼得硫眯,我們來看看有哪方面的嘗試蕴侧。
(1)輕節(jié)點
首先要從「創(chuàng)始塊」——中本聰?shù)恼撐恼f起,他在文中提到SPV(Simplified Payment Verification)两入,SPV借助Merkle Proof機制净宵,只需要保存最長區(qū)塊鏈的所有塊頭的情況下,就能夠驗證對一筆支付交易是否在存在。相比較于全節(jié)點择葡,實現(xiàn)SPV的客戶端稱為輕節(jié)點(Light Node)紧武。
輕節(jié)點可以實現(xiàn)安全的交易確認,而且還大大減小了存儲開銷敏储,看起來是實現(xiàn)了魚和熊掌兼得的效果脏里。然而事實并非如此,區(qū)塊頭的存儲也是不小的負擔(dān)虹曙,例如以太坊歷史塊頭已經(jīng)超過4GB(塊高9638224)迫横,而且還在持續(xù)增長,不適合讓普通平民設(shè)備承載如此負重酝碳。
在安全與便捷的天平兩端矾踱,輕節(jié)點側(cè)重于安全。
(2)超輕節(jié)點
輕節(jié)點需要保存歷史所有區(qū)塊頭疏哗,存儲開銷和塊高成線性關(guān)系呛讲,隨著區(qū)塊不斷增加,存儲壓力線性增加返奉。熟悉算法復(fù)雜度的同學(xué)應(yīng)該很清楚贝搁,線性復(fù)雜度大于對數(shù)復(fù)雜度,對數(shù)復(fù)雜度大于常量復(fù)雜度芽偏。
輕節(jié)點是O(N)復(fù)雜度雷逆,安全但是不夠便捷,「托管」模式大部分是O(1)復(fù)雜度污尉,便捷但不夠安全膀哲。尋求安全與便捷的最佳平衡,從工程角度被碗,很容易想到要往O(logN)算法方向優(yōu)化某宪,而從「線性」往「對數(shù)」優(yōu)化的常規(guī)路徑就是從「列表」的數(shù)據(jù)結(jié)構(gòu)往「樹」的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)移,這就是所謂的「套路」锐朴。
O(N)復(fù)雜度的輕節(jié)點擁有所有區(qū)塊頭兴喂,很容易驗證最長鏈?zhǔn)悄膫€,但如果是O(logN)復(fù)雜度的情況焚志,由于缺乏從創(chuàng)世塊到最新塊的完整鏈路衣迷,如何識別最長鏈?zhǔn)且粋€難題。因此在設(shè)計比輕節(jié)點更輕的超輕節(jié)點時面臨最重要的問題就是「如何確保超輕節(jié)點可靠識別出最長鏈」娩嚼。
超輕節(jié)點的基本模型是這樣的蘑险,超輕節(jié)點V連接了多個全節(jié)點P,其中至少有一個是非作惡的全節(jié)點岳悟,V向P請求驗證「某個交易是否真實存在鏈上」佃迄,P返回相關(guān)證明泼差,V根據(jù)P返回結(jié)果做判斷。判斷的第一步是確定非作惡全節(jié)點呵俏,第二步是根據(jù)該節(jié)點返回的數(shù)據(jù)驗證「某個交易是否真實存在鏈上」堆缘。
基于這個套路,2018年出現(xiàn)了NiPoPOW普碎,2019年出現(xiàn)了FlyClient吼肥,下面我們簡要介紹一下這兩種技術(shù)。
(3)NiPoPOW
NiPoPOW的全稱是Non-Interactive Proofs of Proof-Of-Work麻车,是一種非交互式的工作量證明的證明機制缀皱。POW是證明記賬者付出了一定工作量的證明,NiPoPOW是對POW的證明动猬,可以簡單理解為是對歷史所有工作量的證明啤斗。顧名思義,NiPoPOW只對采用POW共識機制的區(qū)塊鏈有效赁咙。
運行POW尋找Nonce時钮莲,如果找到前n位為0的Nonce概率為p,那么找到前n+1位為0的Nonce概率為p/2彼水,找到前n+2位為0的Nonce概率為p/4崔拥,以此類推,每次概率減半凤覆。NiPoPOW基于這個原理链瓦,將區(qū)塊按照Nonce規(guī)律進行分層處理,通過interlink連接不同層的父區(qū)塊叛赚,如下圖所示澡绩。
在NiPoPOW中,P是如何為V構(gòu)造證明的呢俺附?論文有詳盡的證明和算法介紹,此處摘取最核心的兩幅圖來簡要說明其原理溪掀。
證明內(nèi)容的第一部分是「證明我是最長鏈」事镣,根據(jù)安全系數(shù)(m,k)揪胃,結(jié)合Nonce分布原理璃哟,從interlink中構(gòu)造出當(dāng)前鏈的POW證明。從最高層開始往下遞歸喊递,每層選出最新的m個區(qū)塊随闪,然后再拼接最新的k個區(qū)塊,構(gòu)成證明所需的子鏈骚勘。如上圖m=k=3铐伴,藍色標(biāo)記的區(qū)塊為證明所需的區(qū)塊撮奏。這一步實現(xiàn)從「線性」復(fù)雜度降低到「對數(shù)」復(fù)雜度。
證明內(nèi)容的第二部分是「證明有個區(qū)塊包含了該筆交易」当宴,首先要找到該交易所在位置(區(qū)塊)畜吊,如果在第一步證明獲取的區(qū)塊中已經(jīng)存在就直接跳過,不存在的話就采用跳表的方式(如上圖)將包含該交易的區(qū)塊囊括進來户矢,然后就采用Merkle Proof機制為該交易構(gòu)造存在于該區(qū)塊的證明玲献。
(4)FlyClient
與NiPoPOW中P向V構(gòu)造「我是最長鏈」證明的機制不同,F(xiàn)lyClient采用V向P抽樣從而發(fā)現(xiàn)「誰是作惡節(jié)點」梯浪,如果說NiPoPOW的方式是「正面進攻」捌年,F(xiàn)lyClient則采用「后路包抄」的策略。
抽樣的方式有多種挂洛,全局隨機抽樣是一種樸素的方式延窜,它需要抽樣較大數(shù)量才能達到一定精度,采用二分查找的抽樣可以減少抽樣數(shù)量抹锄,但是需要多輪交互逆瑞,F(xiàn)lyClient沒有采用這兩種方法。
FlyClient采用的抽樣方法如上圖所示伙单,先從整條鏈中隨機抽取k個區(qū)塊获高,然后在更新的一半子鏈中再抽樣k個區(qū)塊,如此循環(huán)直到剩余的子鏈長度小于k吻育,所有抽樣出來的區(qū)塊集合構(gòu)成驗證集念秧。在這種抽樣方式下,一個作惡節(jié)點(有無效區(qū)塊)被發(fā)現(xiàn)的概率為1-((1+c)/2)k布疼,其中c為作惡節(jié)點算力占比(小于1)摊趾。論文中對抽樣這塊有詳盡的證明,并且提出了優(yōu)化的方法游两,感興趣的可以閱讀論文砾层,此處不再贅述。
抽樣只是第一步贱案,得到抽樣區(qū)塊之后還需要快速識別區(qū)塊的有效性肛炮,F(xiàn)lyClient采用MMR(Merkle Mountain Tree)來解決這個問題。MMR是一個比較有趣的數(shù)據(jù)結(jié)構(gòu)宝踪,由Peter Todd提出侨糟。有別于Merkle Tree,MMR被設(shè)計成append only瘩燥,數(shù)據(jù)插入之后不能再改變秕重,支持動態(tài)插入。更多MMR的細節(jié)可以閱讀參考資料「MMR解析」厉膀,限于篇幅溶耘,本文也不贅述二拐。
FlyClient在區(qū)塊頭中增加了一個Mi字段記錄MMR root,第n個區(qū)塊頭的Mn表示為前n-1個區(qū)塊構(gòu)成的MMR root汰具。眼尖的讀者看到這里應(yīng)該已經(jīng)知道卓鹿,這是經(jīng)典的從原來Prev-Hash構(gòu)成的「列表」數(shù)據(jù)結(jié)構(gòu)往「樹」數(shù)據(jù)結(jié)構(gòu)進行變換套路。有了MMR留荔,F(xiàn)lyClient就可以快速判斷任何一個區(qū)塊與創(chuàng)世塊是否在同一條鏈上吟孙,即可識別任何一個區(qū)塊的有效性。
FlyClient比NiPoPOW晚一年提出來聚蝶,解決了NiPoPOW無法解決的問題杰妓,體現(xiàn)出明顯的優(yōu)越性。FlyClient可以支持Nonce尋找難度變化的情況碘勉,不受「賄賂攻擊」影響巷挥,證明數(shù)據(jù)相對較小,還可以擴展適用于POS等場景验靡。因此倍宾,NiPoPOW雖然提出更早但落地較難,F(xiàn)lyClient的落地相對較多胜嗓。
FlyClient采用概率抽樣的策略高职,理論上講是不具備絕對的安全保障,但是作惡成功的概率已經(jīng)很低很低辞州。密碼學(xué)被廣泛使用怔锌,背后依賴的計算困難問題,也不是絕對的安全变过。在限定的時代埃元、場景、技術(shù)背景下媚狰,相對的安全是夠用的岛杀。從這個角度來講,F(xiàn)lyClient達到了安全和便捷的有效平衡哈雏。
還能比超輕更輕嗎楞件?
超輕節(jié)點實現(xiàn)O(logn)復(fù)雜度開銷的情況下獲得安全和便捷上的有效平衡,前面也提過O(1)復(fù)雜度的「托管」模式存在安全風(fēng)險裳瘪,那是不是真的就不存在安全且便捷的O(1)復(fù)雜度方案了呢?
把目光轉(zhuǎn)向聯(lián)盟鏈罪针,我們發(fā)現(xiàn)大部分聯(lián)盟鏈采用是類BFT的共識機制彭羹。在這種機制下,每個區(qū)塊會記錄參與該區(qū)塊的共識者的簽名泪酱,因為簽名的不可抵賴性派殷,通過驗證簽名可以確定該區(qū)塊是由誰共識產(chǎn)生还最,區(qū)塊的有效性由參與共識節(jié)點的簽名來保證。在這種模式下毡惜,只需要拿到區(qū)塊頭和區(qū)塊的共識簽名列表(區(qū)塊頭中一般包含了共識公鑰列表)拓轻,就可以快速驗證區(qū)塊的有效性。因此经伙,在這類場景中就存在安全的O(1)復(fù)雜度算法扶叉。
當(dāng)然,類BFT的共識機制下實現(xiàn)這種安全算法也不是非常容易的帕膜,考慮到參與共識節(jié)點通常會變化枣氧、輪換等,如果精準(zhǔn)識別這些變化垮刹,保證區(qū)塊檢測算法的輸入準(zhǔn)確性达吞,也是設(shè)計中要重點考慮的。
后話
本文從普通用戶使用區(qū)塊鏈的體驗和安全風(fēng)險角度出發(fā)荒典,分析了如何為C端用戶設(shè)計安全且便捷的服務(wù)模式酪劫。很多挑戰(zhàn)先發(fā)于公有鏈,亦先解于公有鏈寺董,但不限用于公有鏈覆糟。眾多場景需要用到輕節(jié)點技術(shù)、超輕節(jié)點技術(shù)螃征,甚至需要比超輕更輕的技術(shù)搪桂。
聯(lián)盟鏈場景中的用戶安全,跨鏈架構(gòu)的中繼服務(wù)盯滚,物聯(lián)網(wǎng)場景的弱設(shè)備體驗…
歌德曾經(jīng)說“人類最大的罪是不快活”踢械,其實人類最偉大的地方正是不滿足于當(dāng)下的快活
參考資料
BitCoin論文:https://bitcoin.org/bitcoin.pdf
NiPoPOW論文:https://eprint.iacr.org/2017/963.pdf
NiPoPOW解析:https://zhuanlan.zhihu.com/p/93463586
FlyClient論文:https://eprint.iacr.org/2019/226.pdf
FlyClient解析:https://zhuanlan.zhihu.com/p/95927454
FlyClient視頻:https://www.youtube.com/watch?v=vuzYwutBqjY