
在區塊鏈的發展中,去中心化、安全、性能的不可能三角是被探討最多的議題,如何在保障前兩者的情況下,提升區塊鏈的性能,使其具備商用可能? 9 月5 日,在由Odaily主辦、36Kr 集團戰略協辦的POD 大會上, Zilliqa 聯合創始人兼技術總監、新加坡國立大學的賈瑤琪博士在會場演講中給出他的答案。
賈瑤琪表示,當前提高公鏈吞吐量以及可擴展性的解決方案如增加區塊大小、代理人共識機制、鏈下解決方案等,都不是一個完美的解決方案。首先,受計算機存儲容量以及計算能力的限制,導致區塊大小不可能提高至100 倍;另外,代理人共識機制雖提高了交易速度,但相對小的共識團體也意味著更容易受到攻擊,以及中心化色彩濃厚;而鏈下解決方案與側鏈則一定程度上喪失了區塊鏈本身去中心化,以及公開透明的特性。
對此,分片技術通過把整個網絡進行一個切割,切成不同的小組,進行不同的交易,使得整個網絡在不同的分片裡面處理不同的交易成為可能,最終達到共同計算以及共同解決交易的效果,從而達到一個很高的吞吐量。
二級標題
二級標題
以下為賈瑤琪演講實錄:
非常感謝Mandy 和Odaily邀請,今天我來為大家介紹一下,Zilliqa 在過去的三年中,針對區塊鏈特別是公有鏈擴容的一些方法的研究,特別是作為區塊鏈分片技術的一個先行研究團隊,在這方面的一些最新進展。
大家對於區塊鏈以及公有鏈的了解,可能更多的是通過它已有的一些特性,例如它的去中心化,不可篡改性,以及它的公開透明性。與此同時,區塊鏈特別是公有鏈,它本身也有一些瓶頸,例如像現在大家知道的低吞吐量。在這裡用通勤列車來作一個舉例以及類比。例如,像已有的公有鏈它可以實現每秒10-20 個交易,這就是類似於一個通勤列車,每一列只能容納10 個人,其他人都要進行排隊。
而對比傳統的支付系統,例如各種各樣的信用卡,它們可以達到8000tps,就是每一班列車可以容納8000 個人,這樣排隊的人就會變得很少。目前的公有鏈系統,它的低吞吐量導致的一些問題就是,交通擁塞。例如我們現在有上百個人,上百萬個人想去乘這樣一個列車,然而每一趟列車只能容納十個人,能做的有哪些呢?首先把票價提升,例如從最初的10 塊錢,現在我們提高到1000 塊錢,競價最高的10 個人,他們就可以搭上最新的這樣一趟列車。
與此同時,對於通勤列車系統來說,這樣會造成一個很大的擁塞。即使每輛列車可以容納10 個人,但是後面排隊的還有成千上萬個人,最終它的吞吐量還是會造成這樣一個很大的問題。我們目前可以看到,有很多項目以及團隊,大家都在探索怎樣才可以達到一個高吞吐量,以及可擴展性這樣一個公有鏈平台。
目前已有的一些解決方案中,首先就是增加區塊大小。已有這些比較流行的區塊鏈,它們中有的區塊是2MB。如果簡單把區塊大小提升兩倍甚至十倍,對應的吞吐量可以相應的提高兩到十倍。然而這個系統更像我們搭的一個巴士,你可以把它做成一個雙層的,甚至上面可以摞十層,但是由於各種限高限制,你是不可以把一個巴士上面搭100 層的。
這樣類比到區塊鏈裡面,因為目前網絡有帶寬限制,包括每台計算機有存儲容量,以及它的計算能力的限制,導致增加區塊大小,不是一個100 倍的解決方案。
與此同時,一些團隊和學者提出了代理人共識機制。目前已有的公有鏈有一萬或者兩萬個節點來運行整個系統的共識協議,處理交易和產生新的區塊。那麼我們是否可以將兩萬人的這樣一個節點減少到例如一千,甚至50,或者21 個人來進行投票形成共識呢?答案是可以的,我們可以把這樣一個共識協議,縮小到只有50 個人處理交易達成共識,生成區塊。
從計算機技術角度來看,運行共識協議的節點數目越少,形成共識的速度就會越快。當擁有一個比較小的節點群體的時候,出塊速度以及共識協議的速度,可以達到每秒成千上萬個交易。然而更多的時候我們是通過資本的數目挑選一個代理人組織,這樣就會導致選出來的小團體,很可能不是代表廣大公眾的利益。與此同時,由於代理人組織目標相對小,更加容易受到攻擊,而且一旦部分代理人受到攻擊,整個區塊鏈系統都會受到影響。
還有一種比較流行的擴容方案就是側鍊和鏈下解決方案。目前使用鏈下交易最多的場景就是小額交易。比如買咖啡,用戶可以在直接鏈上押押金,之後在咖啡店每個月買幾十次咖啡,咖啡店店主每個月進行一次鏈上結算,這樣大量的交易可以在鏈下完成,減少將交易放在鏈上的需求,從而減少對鏈本身的依賴。然而這樣一個解決方案也失去了公有鏈本身的去中心化,以及公開透明性。
與此同時,今年早些時候,Vitalik 在他推特上發布了一篇帖子,分片即將到來。作為最早對分片技術進行研究的這樣一個團隊,我們團隊2015 年開始進行分片研究,2016 年在計算機安全頂級會議CCS 上面發表了相關的論文,這也是學術界第一篇將分片技術用在公有鏈吞吐量提升的學術文章。
大家可以看到,這個是我們團隊初步做的一些實驗。在3600 節點時,我們的系統可以實現超過兩千個交易每秒。分片技術其實用簡單話來說,就是把整個網絡進行一個分割,例如整個網絡有一萬節點,我們可以分成不同的小組,每個小組處理不同的交易。整個網絡在不同的分片裡面處理不同的交易,最終達到並行處理交易的效果,從而實現一個很高的吞吐量。
分片技術也面臨許多挑戰以及問題,例如如何保證很好的安全性,還有不妥協去中心化的特性,以及高效地執行智能合約。
接下來我簡單為大家分享一下我們如何解決這些挑戰和問題的。第一個挑戰就是如何將不同的節點劃分到不同的分片裡面。這裡面有很多學問,一個惡意攻擊者可以創建不同的惡意節點,放到同一個分片裡面,從而促成更多的惡意交易。
我們怎樣解決這樣一個問題呢?首先我剛剛提到這樣一個攻擊,在學術上面叫做女巫攻擊,就是攻擊者可以創造大量這樣一些惡意節點,從而去攻占你的網絡。為防止這樣女巫攻擊,我們的系統要求每個節點都要做工作量證明。每個節點每隔一段時間,比如兩個小時,就要進行工作量證明,來聲明自己的有效身份。之後,系統會將節點隨機分佈到不同的分片,每個分片超過600 個節點。通過計算,我們可以證明出,每個分片三分之一節點是惡意的概率為百萬分之一。
當系統處理好安全分片之後,如何將不同的交易放在不同的分片裡面是下一個問題。比如Alice 是一個攻擊者,他可以創建兩個交易到不同的分片,一個交易是轉賬5 塊錢給Bob,另一個交易是把這5 塊錢轉給自己。兩個分片處理不同的交易,但是Alice 將自己的5 塊錢花了兩次,這就是我們所說的經典雙花攻擊。
對於剛剛提到的雙花攻擊,我們可以通過將不同的轉賬交易按照發送者的地址分片來防止攻擊的產生。然而目前公有鏈上面存在著大量的智能合約交易,這些交易給分片帶來了更多的挑戰。還是剛剛的例子,Alice 和Bob,他們都使用一個賣電影票的智能合約,Alice 在一個分片裡面從這個智能合約裡面買最後一張電影票,Bob 也在另一個分片裡面買到了最後一張電影票。最終他們都使用自己的餘額購買到這個電影票,但是因為不同分片之間沒有溝通,所以最後一張電影票到底屬於Alice 還是Bob 呢?這是一個數據不一致性導致的很嚴重的問題。
對於普通的轉賬交易,只有發送者會導致發送者和接受者的狀態改變。然而在智能合約裡面,不同的發送者都可以導致智能合約狀態的改變,同時,智能合約也可以導致不同用戶的狀態改變。
為解決智能合約分片的狀態不一致性問題,我們可以使用兩階段提交協議,鎖住在不同分片裡面相關的智能合約的狀態。 Alice、Bob 在不同分片裡面買最後一張電影票,我們可以讓Alice 的交易先運行同時鎖住Bob 所在分片的智能合約的狀態。然而鎖協議會導致智能合約不能在多個分片裡面同時運行。為了解決這樣的一個並行運算的問題,我們團隊研發出了另一種方法,就是通過確定性分配,來解決剛剛提到的智能合約衝突問題。
我們首先通過研究大量的智能合約,然後對這些智能合約的交易進行分類:
1、普通的轉賬交易。
2、簡單的調用智能合約。
3、比較複雜,用戶可以調用智能合約,智能合約再次調用智能合約。
之後我們將這三類交易分配到不同的分片。對於普通的轉賬交易,我們可以直接根據發送者的地址確定它是屬於哪個分片進行處理的。第二類的話,可以根據發送者以及智能合約的地址來決定它是屬於哪個分片。第三類以及第二類的特殊交易我們就交給特殊分片進行處理。經過理論分析驗證之後,我們可以很好的通過我們的算法將這三類交易放在不同的分片裡面進行並行處理,同時防止雙花攻擊和剛剛提到的數據不一致性問題。
在解決智能合約分片的問題的同事,我們也發現智能合約本身也有很多問題。例如前兩年大家看到的智能合約由於各種漏洞,款項被凍結。究其原因,是因為智能合約本身它比較複雜,以及有比較多的不可預知性。我們團隊根據自己已有的研究,開發了自己的智能合約語言Scilla,可以提供更好的安全性和便於形式化驗證。目前已經有一些比較大的廣告公司和軟件公司已經跟我們合作使用Scilla 進行智能合約開發。
在今年年底,或者明年年初Zilliqa 主網上線時大家應該可以看到,分片技術對公有鏈吞吐量帶來極大的改善。
這些就是我的分享,謝謝大家!