陀螺科普 | 零知識證明如何改變區塊鏈

買賣虛擬貨幣

關於零知識證明(ZKP)的技術部落格文章很多。我最近寫了一篇自己的文章,比較了新的通用zk-SNARKs。我注意到在ZKP用例上缺少非技術性的帖子。ZKP不僅可以用於隱私,還可以用於其他用途。ZKP非常靈活,因此可能會重新定義區塊鏈的工作方式。

第1部分:簡潔的區塊鏈,從千兆位元組到千位元組

區塊鏈可能很大,並且每個區塊的大小都在不斷增長。那是設計使然。我們已經接受了這是事實。但是,Coda最近的測試網卻有所不同。首先,Coda的區塊鏈是固定大小的。它沒有增長。其次,它只有22 KB(!)的大小。它很容易安裝在1980年代的Commodore 64或ZX Spectrum中。然而,Coda的安全性甚至可以說比傳統的區塊鏈還要安全。接下來還有更多專案:Mir和Starling(我是Starling的一部分)將很快推出類似但功能更廣泛的“簡潔區塊鏈”。它是如何工作的?

曾經旋轉過一個區塊鏈節點的任何人都知道痛苦:同步節點需要數小時甚至數天。區塊鏈通常是如此之大,以至於磁碟空間和頻寬需求超出了大多數人的家庭需求。這導致集中化。甚至像以太坊這樣的流行區塊鏈也僅包含約10,000個節點。其中大多數託管在AWS上,並且節點僅由少數幾個實體擁有。區塊鏈的分散性不如許多人想象的那樣。

為什麼同步區塊鏈需要這麼長時間?有兩個原因。第一個原因很明顯:下載數百GB或更多的資料需要一段時間。其次,區塊鏈需要在下載後進行驗證,因為惡意節點可能向您傳送了不正確的資料。

要驗證區塊鏈,必須從創世塊中重播它:執行第一個交易並確認計算出的狀態等於下載狀態。移至下一個交易,直到您檢查了區塊鏈中的每個交易。這既浪費時間又浪費時間。在您進行之前,成千上萬的節點已經進行了完全相同的計算。

之所以需要這樣做,是因為在傳統計算中,知道計算是否已正確計算的唯一方法是重做計算。對於小型計算而言這很好,但對於諸如重播區塊鏈之類的慢速計算而言卻不是很好。

ZKP可提高效率和頻寬

事實證明,有一種方法可以廉價地驗證計算結果而無需重做計算:零知識證明(ZKP),其中的zk-SNARK可能是最著名的。

如何運作?我們必須將區塊鏈重播功能重寫為zk-SNARK。zk-SNARK將輸出兩件事:原始輸出(就像原始重放功能一樣)和一個小的數學證明,證明結果計算正確。證明可以小到200個位元組(是的,小於一千位元組)。

不需要所有(甚至多臺)計算機都執行重放功能。一臺計算機可以建立證明,無數臺計算機可以在他們認為合適的任何時間進行驗證。無論原始計算花費了多長時間(即使是數小時,數天或數年,這都沒關係),驗證只需要幾毫秒。該證明可以透過USB記憶棒線上分發,甚至可以印在T恤上。

如果惡意節點更改餘額,則證明將與結果不匹配,並且任何驗證者都將拒絕該狀態。如果惡意節點更改了zk-SNARK程式碼,結果也將被拒絕。(第三個引數是將證明與zk-SNARK程式碼也繫結在一起的公共共享字串。如果更改了程式碼,則證明和共享字串將不匹配,並且驗證程式將拒絕結果。)

我們消除了重做昂貴計算的需要,並且不再需要下載區塊鏈(因為我們已經有了數學證明,該區塊鏈存在並且有效)。您只需要當前狀態(例如最後一個塊),再加上一個微小的證明即可證明當前狀態是有效區塊鏈的一部分,並花費幾毫秒的時間來驗證結果。

遞迴組合

驗證證明很快,但是如何建立證明呢?事實證明,它不是固定的時間,與傳統計算相比,它在計算和記憶體方面的效率要低得多。實際上,儘管重播功能的zk-SNARK版本聽起來不錯,但實際上並不是一個很好的解決方案。它在記憶體方面將是巨大的,甚至比原始的非zk-SNARK重播功能還要慢。

但是,還有另一個優雅的解決方案。透過一些技巧,事實證明可以使用遞迴zk-SNARK。透過遞迴,我們不必從頭開始驗證區塊鏈,但是我們可以在先前狀態的基礎上進行構建。那要快得多。請注意,遞迴zk-SNARK的效率不如非遞迴zk-SNARK,但是最近的zk-SNARK構造取得了長足的進步。

遞迴zk-SNARK程式將先前狀態,屬於先前狀態的證明和新交易用作輸入。它使用提供的證明來驗證先前狀態,並檢查處於新狀態的交易是否有效。如果是這樣,它將輸出新狀態和證明。

將新狀態和證明分發到網路後,所有節點都可以簡單地丟棄先前的狀態,而不會產生任何負面影響。新節點僅需要下載最新狀態和證明。這就是Coda,Mir和Starling能夠擁有一個微小的固定大小的區塊鏈的方式。

在我們的最後一個示例中,只有一個節點將建立一個新塊和證明。顯然,不必由同一個單個節點來生成每個塊。例如,可以從許多節點中隨機選擇一個節點(具有“可驗證的隨機功能”的節點甚至可以隨機選擇自己而不作弊)。我們可以做得更好。我們可以將塊生成邏輯劃分為多個zk-SNARK。

最終結果是區塊生產者不需要完整的區塊鏈,而只需要先前的狀態。這樣的解決方案會縮小多少?常規的Coda節點僅需要22 KB即可儲存證明,當前狀態以及到一個天平的Merkle路徑。節點具有22 KB的空間,可以驗證完整的區塊鏈,查詢餘額並建立交易。但是要生成塊,節點需要更多:它需要先前狀態的完整餘額Merkle樹。默克爾樹的大小取決於錢包的數量。如果Coda擁有與以太坊一樣多的錢包,那麼Coda區塊生產者仍將只需要約1 GB。截至2019年12月,以太坊上最小的完整節點為230 GB。巨大的區別。

這樣,網路具有更多的活動節點,增加了分散性,併為程式提供了許多與區塊鏈互動的新可能性,而無需像Infura或Metamask這樣的解決方案。考慮到99%的新使用者在安裝Metamask之前就退出了,這可能會產生巨大的影響。

感謝您的校對:Daniel Lubarov(先生),Shane Vitarana,Stan van de Burgt,Taariq Lewis和Dmitriy Berenzon。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;