萬向區塊鏈蜂巢學院第56期,邀請了Mina亞洲技術大使兼上海前沿技術研討會發起人姚翔,從Mina區塊鏈出發分享了遞歸零知識證明和Snapps的價值和應用前景。

蜂巢學院的朋友們,大家晚上好!

我是姚翔,今天我會圍繞Mina這一新的區塊鏈與大家分享“遞歸零知識證明,如何打造簡潔的區塊鏈?”本次分享中會涉及一些技術術語,但大家不需要太多技術背景也能聽得明白。

下面就開始我今天的分享。

現在的區塊鏈成百上千,大家耳熟能詳的就有很多。無論是以太坊還是以太坊的殺手們,很多都已經構建了自己龐大的生態系統。為什麼這時候Mina要做一條新的區塊鏈?它的優勢究竟是什麼?如果說只是在枝節上有一些改進,那麼是不是值得去啟動一條區塊鏈呢?

實際上Mina在技術層面和應用層面都有比較獨到的創新,它的技術願景是打造世界上最“輕”的區塊鏈,這個怎麼理解?我們可以一會兒再展開。

在應用層面,Mina想要構建真實世界和密碼學世界之間的一個橋樑,而且這個橋樑是能保護隱私的。 Mina是如何進行隱私保護的呢?我們可以先從現在區塊鏈面臨的一些問題來說起。

我們看到目前一些公鏈中出現了以下問題:

第一,積重難返。

現在的區塊鏈都很“重”,很重的意思是說要去運行一個節點非常困難。我相信聽眾朋友們很少有人會自己去運行以太坊的節點,大家都是通過一些中間機構去和以太坊網絡交互,也就說沒有中間商直接去訪問區塊鏈非常的昂貴,也很困難。

第二,規模化分佈協同。

參與這個網絡,它的規模化、分散程度也是受限的,因為參與這個網絡對資源是有很高要求的,尤其是帶寬資源。當吞吐量上升時,運行節點的門檻會提高,去中心化的程度會降低,或者反過來說網絡集中化的程度會增加。

第三,隱私和可驗證性。

所有的事務、交易和數據都是被公開、上鍊的,用戶的隱私並沒有得到很好的保存,實際上我們想要的是驗證這些數據的準確性,並不需要數據本身。

那這些問題怎麼去解決呢? Mina在設計上就是要解決這些問題。

第一,Mina是很輕的區塊鏈,它的大小在KB級別,所以用戶去維護這樣一個全節點相對來說是比較容易的。因此,每個用戶都可以去運行一個節點,這樣在訪問Mina的時候不需要第三方服務提供商。

第二,Mina共識算法非常特別,共識參與不受限制,Mina共識驗證者的數量是沒有上限的。實際上現在大多數PoS算法,如果是基於這些委員會選舉的共識算法,一般來說只能容納大概數百名的驗證者,因為網絡通信的複雜度隨著驗證者數量的上升會急速上升,節點沒有辦法承受通信開銷。而Mina選用了一個比較成熟的競爭性PoS算法Ouroboros,並且做了一些改進,產生了一個叫做“Ouroboros Samasika”的變體,這是有助於節點的分散。

同時,它還帶來一些額外的好處,因為Mina對驗證人是沒有罰沒機制的,所以在運行節點的時候不用擔心自己掉線或者是大規模掉線所導致的罰沒。

第三,在Mina上部署的應用,叫“Snapps”,Snapps就是零知識證明驅動的應用。這些應用可以在保護用戶隱私的情況下使用離線數據,而用戶分享的不是數據,不需要把自己的隱私數據提交到區塊鏈上,而是提交關於這些數據的證明,這樣區塊鏈只需要去驗證這些數據符合一定的要求就可以了。

聽了這些會覺得Mina有些獨特的地方、有些神奇的地方,它到底是怎麼工作的呢?我們從整體上來討論這個問題。

從設計上,Mina的整個區塊鏈都只有22KB大小,並且永遠維持這個大小。也就是說隨著時間的增長、隨著網絡交易的變多,它的大小仍然不會變化。而22KB是很小的,可能就是幾條語音消息的大小,所以任何的設備,包括運算能力相對較弱的手機,也可以輕鬆地去同步驗證Mina網絡,而且不需要花費很長的時間。

Mina是如何做到這麼“輕”的呢?因為Mina使用了一個技術——遞歸零知識證明,所以,我們不需要從頭開始驗證整個區塊鏈。以以太坊為例,如果一台新機器要加入以太坊網絡,就需要下載以太坊從創世的那天開始產生的所有區塊,並執行所有交易,從而才能得到最新狀態。在Mina當中,這個全節點並不存儲鏈本身,存儲的是這個狀態變化的證明,所以存儲的數據也變少了。同時,由於遞歸零知識證明的引入,也不需要從頭開始對數據進行驗證。

我們可以做個簡單的比較,其實比特幣區塊鏈的大小大概是在300GB,用一台普通個人電腦需要花大概6個小時進行同步。以太坊的大小在700-800GB,不同客戶端間略有差異,同步的時間是以天計的,取決於網絡速度。

為什麼遞歸零知識證明可以實現這樣的一個功效?這實際上是一個比較深的密碼學算法,但我們嘗試用一種比喻的方式來幫助大家去理解這個問題。

在大部分區塊鏈當中,全節點需要存儲所有的狀態數據,那“狀態”是什麼呢?比如說我有10塊錢,或者說我在某某一個應用上有塊地,這些就是狀態數據。而我要去操作這些數據的時候,所有的節點需要執行這些交易,它必須擁有當前的這些狀態數據,也就是說它必須存儲了所有的狀態。

當一個新區塊產生時,所有的節點都需要執行所有數據交換,更新到最新狀態。這樣一種架構導致了大量重複的計算,並且狀態數據會越來越多,因為越來越多的人在使用這個區塊鏈,所以執行會越來越耗費資源。

而使用零知識證明技術實際上是改變這樣一種執行的架構,不再讓鏈本身進行計算,而是把狀態進行壓縮、做一個快照,當新區塊產生時,要從狀態A變成狀態A ',那需要提供的是什麼呢?是一個關於這個狀態變化的零知識證明,這樣每個節點只需要去驗證證明的正確性,不需要實際執行,這樣計算量就大大降低了,狀態也不會發生膨脹。

這樣看起來每個區塊都需要提供一個證明,區塊鏈大小還是在線性增長,這時候遞歸零知識證明就起到了作用。那什麼叫“遞歸零知識證明”?簡單說,就是我們把證明的過程也封裝起來,在下一次證明的時候把上一次證明也封裝到這裡面來,所以每個證明都可以包括對所有歷史的驗證,這個聽起來會有些晦澀。

比如你想向一個朋友證明你每天都去了一個公園,這個公園有一個日期牌,你要做的是什麼呢?可以每天在那個日期牌前面拍張自拍,並且把這個照片發給他,一個星期就要發7張照片給他。但我們有一種方法可以去減少這樣的交互,怎麼做呢?第一天去拍照,從第二天開始,每一天都把前一天的照片拿在手上,再做一個自拍,在第七天之後,實際上只要把第七天的照片發給朋友,他就能很輕鬆地驗證你每天都去了那個地方,不需要再發7張照片給他,這就是遞歸證明。當然,這是一個比方,不是零知識的。

如果說要更詳細地了解零知識證明,我建議大家可以去讀一些更專業的文獻。同時,今年3月,Mina基金會和以太坊基金會開展了一個聯合資助,去征集能讓以太坊的虛擬機高效驗證Mina提供的遞歸零知識證明的方案,如果這個能實現, Mina零知識證明的網絡也可以同時為以太坊區塊鏈提供零知識的計算服務。

總結一下,zk-SNARKs其實就是零知識簡潔、無交互知識認證,大家也可以認為就是一個零知識證明。在它的幫助下可以實現一些特性:

1、低門檻的可驗證性;

2、分散的可擴展性;

3、一種新的應用形式Snapps。

當然這些工作仍然是在高速的開發當中,為了實現這樣的願景,我們有很多的工作要去做,接下來主要談一談在Mina上的應用Snapps。

現在大多數的區塊鏈實際上沒有辦法和互聯網的應用直接交互,這直接限制了應用的適用範圍和效用。 Mina可以在保護隱私的情況下,和任何網站交互,並且可以把真實世界當中已經驗證過的數據傳到鏈上,讓鏈上應用直接去使用。所以,Mina的願景其實是要打造一個通往真實世界的隱秘的網關,這個“隱秘”的意思就說保護用戶隱私。

這個網關實際上就是通過Snapps來實現的,Snapps就是零知識證明驅動的應用,它具有一些很好的特性:

第一,可以從互聯網無縫輸入區塊鏈,只要網站支持HTTPS協議,就可以從這個網站中把數據導入到Mina的區塊鏈上,同時這個數據是可驗證的。

第二,數據本身並沒有被暴露,用戶仍然保留著對數據的控制,而僅僅去驗證和分享關於這個數據的證明。你拿到的並不是這個數據本身,而是一個你不知道是什麼的東西,但可以去驗證背後的數據具有某些屬性。

我們給一些用例:

第一,基於Snapps可以隱秘地去訪問一些互聯網服務,可以為用戶數據生成相應證明,這些證明可以由互聯網的應用來驗證。同時,也可以把互聯網的數據導入到Mina上,而在這個過程中,個人數據是沒有被洩露的,不需要去信任任何人,信任的只是算法本身。

第二,借助這樣一種技術可以去構建無需許可的互聯網預言機,因為任何網站只要提供了真實世界的數據,不需要網站本身的許可,只是用現有的這些互聯網協議,就可以把這些數據可信地傳輸到Mina區塊鏈上。

第三,有點像一個DID協議。可以用Mina來完成對互聯網網站的登錄服務,不需要創建賬戶或者交出個人數據。

我們再給一個更加具體一點的用例,這個用例也是在今年3月份的時候,Mina和Teller(DeFi的應用)聯合發布的一個示範性的應用。

Mina提供的一些良好特性,可以幫助用戶在Teller上通過零知識證明的方式驗證自己的信用分,獲得所需服務。具體來說,就是用戶去登錄一個信用分查詢服務的網站,並且去查詢自己的信用分,同時在自己的本地去生成信用分的證明,並且把這個證明發送上鍊。

而這個證明本身並沒有暴露用戶的信用分分數,社保號等隱私信息,僅僅提供他的信用分大於700的證明。只要用戶提供了這樣一個分數的證明,Teller就可以為這個用戶提供所需服務。大家可以去Teller網站上查看這個案例的Demo。

而這僅僅是一個開始,一個小的嘗試,在過去的半年時間內,零知識證明得到了高速發展,如果沒有密碼學技術的迭代,我們不能想像可以在工程上去實現這樣的應用。

伴隨著這種對未來的期許,對密碼學發展的期待,我們認為在不久的將來不需要可信設置的可組合的智能合約將會很快實現,而Mina也會提供很多開發者工具,幫助形成新的應用範式。比如隱私身份的核查、互聯網觸發的智能合約,我們知道現在智能合約的觸發有的是要依賴一些預言機。

再比如說,可以用Mina零知識證明能力服務以太坊,讓它們去具有新的功能,而不需要把以太坊上的應用邏輯牽移到新的區塊鏈上(這是很多新的區塊鏈在嘗試的事情)。

前面都是一般性的介紹,接下來我想深入介紹關Snapps,談一談他的架構。

Snapps和去中心化應用有什麼區別?主要有以下幾點區別:

1、支持私密數據。

即在使用用戶數據的時候不需要去分享數據本身,只需要分享數據的證明。

2、有通用的可驗證性,

可以在計算上實現任意計算。

3、可擴展的執行。

在狀態變更層面,執行過程不僅可以調用自己的狀態,也可以去更改其他應用的狀態。

前面提及的Mina在Teller上的應用,只是一個示範性的應用,還沒有投入大規模的使用。接下來,Mina會互聯網世界進行更多的結合,HTTP Snapps,允許從網站把數據導入到Mina上來。而關於開發者的SDK,實際上還是在構建當中,我們期待在將來的幾個月會給開發者提供更好的開發工具,這樣可以幫助大家去更簡單地在Mina上進行開發。

Mina主網在今年3月已經啟動,900個活躍的節點參與了主網的啟動,Mina也受到了創世成員和合作夥伴的支持,同時相關性能的指標都是非常好,我們也對未來有信心、也有期待。

我今天的分享就到這裡,感謝大家的時間。

【注:本文僅代表演講嘉賓個人觀點,不代表萬向區塊鏈立場。 】