區(qū)塊鏈技術(shù)的「不可能三角」與多方狀態(tài)通道解決方案|Neo專欄

在之前的Neo專欄中
Neo核心開發(fā)者廖京輝???♂?
為我們深入淺出地介紹了
N3「合約運(yùn)行時(shí)隨機(jī)數(shù)」的
系統(tǒng)架構(gòu)、單點(diǎn)執(zhí)行邏輯和完整共識流程??
并通過圖表的方式向我們展示了性能評估的結(jié)果
本期Neo專欄中
他將繼續(xù)帶領(lǐng)我們了解區(qū)塊鏈技術(shù)的「不可能三角」
及其鏈下解決方案「多方狀態(tài)通道」的獨(dú)特優(yōu)點(diǎn)??
廖工和他的小伙伴們將如何致力于
「為智能合約在運(yùn)行時(shí)提供安全的隨機(jī)數(shù)」???
快來一起看看吧??
區(qū)塊鏈的「不可能三角」??
對區(qū)塊鏈技術(shù)面比較了解的小伙伴應(yīng)該都知道當(dāng)前制約區(qū)塊鏈的一個(gè)不可能三角,一個(gè)是安全,一個(gè)是性能,一個(gè)是可拓展性。
不可能三角的意思就是無論我們怎么研發(fā),都最多只能同時(shí)兼顧這三者之中的兩者。舉個(gè)例子,你要提升性能和可拓展性,那肯定就會犧牲安全性。雖然目前還沒有很嚴(yán)謹(jǐn)?shù)淖C明來驗(yàn)證這個(gè)不可能三角的正確性,但是區(qū)塊鏈經(jīng)過這么十來年的發(fā)展,說實(shí)話的確是在這三個(gè)要素之間來回掙扎,有專注做安全的,比如隱私交易;有做高性能的,比如EOS;有做高可拓展性的,比如IoT類的鏈;當(dāng)然也有嘗試兼顧的,比如Algorand。
但是除了這些在鏈本身下功夫的項(xiàng)目之外,也有人把眼光投到了鏈外,比如側(cè)鏈,比如rollup,也比如狀態(tài)通道。通過鏈外處理的方式把那些大量的中間交易放到鏈外解決,主鏈只負(fù)責(zé)最終狀態(tài)的同步和資產(chǎn)安全的管理。鏈下方案其實(shí)是一個(gè)比較合理的方案,甚至可能比現(xiàn)在以太坊拼了老命也想更新的2.0更合理。當(dāng)然這個(gè)只是個(gè)人意見,暫且不談。
而這次被AsiaCCS2022接收的文章就是專注于鏈下方向之一的狀態(tài)通道的。論文的名字是「Speedster: An Efficient Multi-party State Channel via Enclaves」, 就是通過可信執(zhí)行環(huán)境來提升狀態(tài)通道的功能和性能。我的單位為南科大、韋恩州立大學(xué)和Neo,合作作者是南科大的張鋒巍教授,普渡大學(xué)的孫文海教授和韋恩州立大學(xué)的施巍松教授。(說起來我自己是個(gè)可信執(zhí)行環(huán)境的死忠,奈何這種硬件解決方案不受待見~Neo的小伙伴們目前主要在探索零知識證明的各種方案。)
多方狀態(tài)通道??
狀態(tài)通道本質(zhì)是一個(gè)在主鏈上創(chuàng)建的、由兩個(gè)人共同控制的賬戶。只有兩個(gè)人同時(shí)操作才可以從這個(gè)賬戶里取錢。由于是兩個(gè)人共同操作的賬戶,兩個(gè)人就可以在鏈外通過狀態(tài)通道任意的發(fā)送任何交易,這些交易都不需要上鏈,只需要在兩個(gè)人想要關(guān)閉通道的時(shí)候共同協(xié)商好這個(gè)鏈上賬戶的資產(chǎn)分配就行了。
是不是聽起來很方便?比如你去一家經(jīng)常吃飯的飯店吃飯,你就可以用這個(gè)狀態(tài)通道支付,只要提前跟老板創(chuàng)建個(gè)狀態(tài)通道,然后你把錢存進(jìn)去,以后吃飯只要你們線下交易就可以了,完全不用等待漫長的共識,連手續(xù)費(fèi)都不用付。這里技術(shù)細(xì)節(jié)不再贅述。
但是這個(gè)方案好是好,可是不完美。首先是這個(gè)方案里每個(gè)通道就只能有兩個(gè)人參與,也就是說你跟老板的通道就只有你倆能玩,別人加不進(jìn)去。這個(gè)重要么?重要!如果我們想要在鏈下執(zhí)行復(fù)雜的邏輯,那只有兩個(gè)人才能參與的狀態(tài)通道顯然是滿足不了需求的,我們肯定需要能有多人參與的狀態(tài)通道。
為了解決這個(gè)問題,之前有人研究了虛擬狀態(tài)通道,就是在兩個(gè)人跟兩個(gè)人之間的通道上面再虛擬出一個(gè)可以多個(gè)人參與的通道。有一點(diǎn)類似于網(wǎng)絡(luò)里的NAT,本來沒有的東西,但是我用邏輯給你虛擬出來。Celer Network在做那種圍棋(五子棋?)比賽的時(shí)候是用的兩兩匹配,然后晉級的人再匹配的形式(當(dāng)然他們用了多跳,為了簡化介紹不贅述)。那有沒有一種形式可以直接把所有人都連接在同一個(gè)狀態(tài)通道里,并且可以像我們的局域網(wǎng)似的,任何人想加入就加入,想離開就離開呢?
這就引出了我們的工作——一種基于可信執(zhí)行環(huán)境的高效多方狀態(tài)通道。
我們的獨(dú)特優(yōu)點(diǎn)如下??
支持多方狀態(tài)通道
可以在鏈外創(chuàng)建和關(guān)閉狀態(tài)通道
可以實(shí)現(xiàn)最高百萬級別的TPS
我們的狀態(tài)通道可以最高實(shí)現(xiàn)百萬級別的TPS——相對于現(xiàn)在主鏈上幾十上百TPS來講,百萬級別的TPS是很恐怖的。在我們之前也有專注于用可信執(zhí)行環(huán)境來實(shí)現(xiàn)狀態(tài)通道的,叫TeeChain,這個(gè)工作是發(fā)在計(jì)算機(jī)頂會SOSP上的,不過這個(gè)工作比較早,是專注于比特幣的支付通道,而且不支持多方通道TPS也沒有我們來的高。
我們的工作的原理其實(shí)就是在以往只信任區(qū)塊鏈主鏈這種信任模型里加入鏈外的可信基,就是可信執(zhí)行環(huán)境。
在我們的系統(tǒng)里,用戶不僅可以信任區(qū)塊鏈,還可以信任這個(gè)基于硬件的可信執(zhí)行環(huán)境。用戶在這個(gè)環(huán)境里創(chuàng)建并管理一個(gè)賬戶,然后用這個(gè)賬戶去在線下跟別人交易,別人就會相信你這個(gè)賬戶不會發(fā)生雙花交易,并且不需要在鏈上做驗(yàn)證。
也是因?yàn)橛墟溝碌男湃位?,所以哪怕多方之間參與共同的狀態(tài)通道也不會出現(xiàn)問題,只要每一方都使用基于可信執(zhí)行環(huán)境的賬戶就可以。至于效率方面,我們拋棄了在區(qū)塊鏈領(lǐng)域里通用的數(shù)字簽名機(jī)制來給交易的真實(shí)性提供保護(hù),轉(zhuǎn)而使用基于對稱加密的AES-GCM來保護(hù)狀態(tài)通道中的交易,這個(gè)目前在整個(gè)區(qū)塊鏈領(lǐng)域還是獨(dú)一份。由于這個(gè)轉(zhuǎn)變,交易的執(zhí)行速度提升了數(shù)倍。
運(yùn)行時(shí)隨機(jī)數(shù)??
而我跟Neo的小伙伴們當(dāng)前正在進(jìn)行的工作,則是為智能合約在運(yùn)行時(shí)提供安全的隨機(jī)數(shù)。
在我之前很多的博文里都有提到過為Neo的合約提供隨機(jī)數(shù)這件事。從18年開始,我就陸陸續(xù)續(xù)提出了好幾個(gè)不同思路的方案,甚至有基于可信執(zhí)行環(huán)境的思路。后來EOS大量的博彩類DApp因?yàn)殡S機(jī)數(shù)暴雷,Chainlink推出了基于VRF的隨機(jī)數(shù)發(fā)生器,以太坊2.0里也計(jì)劃推出基于延遲函數(shù)的隨機(jī)信標(biāo),Loot用哈希函數(shù)來生成隨機(jī)數(shù),我就更感覺隨機(jī)數(shù)的研發(fā)迫在眉睫。索性去年的時(shí)候有了機(jī)會可以跟Neo的小伙伴開始一起研究探索隨機(jī)數(shù)方案。
不同于Chainlink,我們不想要那種基于回調(diào)機(jī)制的隨機(jī)數(shù)方案。用戶需要先把交易的參數(shù)提交到鏈上,再由Chainlink的VRF計(jì)算出隨機(jī)數(shù)然后通過另一筆交易把隨機(jī)數(shù)推送給合約。主要原因如下??
●?我們做過測試,這種方案需要的額外開銷是很大的,不管是手續(xù)費(fèi)的開銷,還是主鏈需要承擔(dān)的額外的數(shù)據(jù)存儲開銷都很大。
●?在這種方案里合約的邏輯需要拆開到兩個(gè)函數(shù)中,用戶需要等待很長的時(shí)間才能得到執(zhí)行結(jié)果。
我們想要的隨機(jī)數(shù)是那種用戶發(fā)送交易到鏈上,合約執(zhí)行過程中直接就可以請求到隨機(jī)數(shù),用戶的交易直接就可以完成執(zhí)行,并且合約可以請求任意數(shù)量的隨機(jī)數(shù)。
目前在區(qū)塊鏈領(lǐng)域,Neo以外,除了那些專注于隱私保護(hù)智能合約的區(qū)塊鏈項(xiàng)目,比如Oasis和Ekiden,還沒有項(xiàng)目可以實(shí)現(xiàn)運(yùn)行時(shí)隨機(jī)數(shù)。這個(gè)問題的難點(diǎn)在于,如果不采用回調(diào)的機(jī)制,那么攻擊者就可以在你生成隨機(jī)數(shù)之后立即針對性的構(gòu)造攻擊載荷實(shí)施MEV攻擊。
所以想要提供運(yùn)行時(shí)隨機(jī)數(shù),首先就是要解決掉MEV攻擊。我們現(xiàn)在的思路是解決MEV主要靠把區(qū)塊交易列表的生成權(quán)限從議長提案改成共識聚合。從以往議長一個(gè)人單獨(dú)決定交易順序的模式換成由每一個(gè)共識節(jié)點(diǎn)都提出自己的交易列表,然后在共識的過程中由多個(gè)列表聚合成一個(gè)最終的交易列表,這樣就可以保證沒有任何人可以發(fā)動(dòng)MEV攻擊。在解決了隨機(jī)數(shù)之后,再由BLS這種聚合簽名算法來為每一個(gè)區(qū)塊生成一個(gè)隨機(jī)數(shù)種子。由于BLS本身支持門限簽名,因此BLS不會阻礙正常的dBFT共識過程。然后在交易的運(yùn)行時(shí)由偽隨機(jī)函數(shù)來不斷地給合約提供隨機(jī)數(shù)。
但是目前我們的工作還有一個(gè)較大的問題亟待解決,那就是BLS本身是需要一個(gè)秘鑰分發(fā)的過程來實(shí)現(xiàn)初始化,這個(gè)初始化的過程如果使用DKG的話,那每次共識節(jié)點(diǎn)更新的時(shí)候,都要進(jìn)行一次DKG的過程,而如果DKG失敗了或者延遲很高,那很可能會導(dǎo)致新一輪的共識節(jié)點(diǎn)之間沒有完成BLS的初始化,這樣就會導(dǎo)致出塊失敗。
Neo的小伙伴為此開發(fā)了一套很復(fù)雜的容錯(cuò)機(jī)制,但是需要對共識機(jī)制本身進(jìn)行修改,所以目前還處于研究階段。另外一個(gè)思路則是使用動(dòng)態(tài)秘鑰更新機(jī)制,這種機(jī)制可以實(shí)現(xiàn)區(qū)塊鏈共識節(jié)點(diǎn)的更新,同時(shí)實(shí)現(xiàn)BLS秘鑰的安全轉(zhuǎn)移。目前相關(guān)的工作已經(jīng)完成了論文的撰寫,不過想要把運(yùn)行時(shí)隨機(jī)數(shù)真正完成部署還要一些時(shí)間。
All in One · All in Neo
Neo是一個(gè)由社區(qū)驅(qū)動(dòng)的開源平臺。利用區(qū)塊鏈技術(shù)與數(shù)字身份,開發(fā)者可以通過智能合約實(shí)現(xiàn)資產(chǎn)管理數(shù)字化與自動(dòng)化。Neo致力于通過分布式網(wǎng)絡(luò)建設(shè)下一代互聯(lián)網(wǎng)基礎(chǔ)設(shè)施,為區(qū)塊鏈技術(shù)大規(guī)模落地奠定基礎(chǔ),以實(shí)現(xiàn)智能經(jīng)濟(jì)的宏大愿景。
自2016年上線至今,Neo主網(wǎng)已穩(wěn)定運(yùn)行超過五年。全新版本Neo N3已于2021年發(fā)布,提供了更高吞吐量、更強(qiáng)穩(wěn)定性與安全性,帶來了優(yōu)化的智能合約系統(tǒng)及功能豐富的基礎(chǔ)設(shè)施集合,旨在賦能開發(fā)者并加速企業(yè)級區(qū)塊鏈創(chuàng)新。


