摘要:第一則: 鏈接:https://twitter.com/SomsenRuben/status/1349437071686062083 @StopAndDecrypt: 有沒有比特幣愛好者來解釋下zkrollup?我不指望以太坊的開發者會誠實地講清楚其中的權衡,也不指望以太坊的粉絲真的明白它是怎麼…
第一則:
鏈接:https://twitter.com/SomsenRuben/status/1349437071686062083
@StopAndDecrypt :
有沒有比特幣愛好者來解釋下zkrollup?
我不指望以太坊的開發者會誠實地講清楚其中的權衡,也不指望以太坊的粉絲真的明白它是怎麼工作的。
(這是個嚴肅的問題哦)
@SomsenRuben:
用比特幣的術語來說,就是一個大區塊方案—— 每個人都要下載額外的數據。在交易進入區塊之前,一個中間人先使用一個SNARK 證據來聚合/壓縮所有的見證數據(witness,比如簽名)(當前的SNARK 需要使用受信任的啟動設置),並發布新狀態的UTXO 集合承諾(也是用上述的SNARK 證據來證明的)。
每個人都驗證這個SNARK,證明區塊的有效性和UTXO 集合承諾的正確性。沒人必須生成UTXO 集合,因為SNARK 已經證明過了,只要你想,你就能生成出來。如果那個中間人失踪了,你只需使用UTXO 集合承諾證明自己的狀態即可動用資金。
簡而言之,好處是你可以節約見證數據和計算量(都外包給了SNARK 證據)。 zkrollup 只是應用了我們一直知道的SNARK 能做的事,可能差別只在於它用在了單獨的一個UTXO 集合上。
亦見我寫的SNARK 文章:SNARK 與區塊鏈的未來。 (譯者註:下文有附。非常清楚地說明了SNARK 能做的事,以及為什麼zkrollup 要把不含見證數據的交易數據發佈出來。)
第二則(很長,請耐心):
鏈接:https://twitter.com/SomsenRuben/status/1420299197979504642
(略去兩人對二層網絡興起會不會降低對一層區塊空間需求的討論)
@AdrianoFeria
側鏈不能提供與L1 同樣的安全性。 Statechain 不是完全免信任的。我還沒研究Chaumian banks。
@bergealex4 :
(側鏈)當然不能,它從來也沒說自己能。
你沒法跨層複製L1 的安全性。
@AdrianoFeria
“你沒法跨層複製L1 的安全性。”
這就是ZK-Rollup 能做到的事。
@bergealex4 :
好吧,即使我們接受這個前提,光憑這一點也不能讓ETH 優於BTC。
@AdrianoFeria
就憑這一點,以太坊就有了一種擴容機制,可以保留L1 的安全性,同時無需付出開啟/關閉通道的開銷,也不必承擔閃電網絡內在的數據可得性風險。
我們沒法靠推特來討論哪個系統在整體上更優。
無論如何,zk-rollup 是一個大進步,並且提供了比支付通道更大的好處。
@SomsenRuben:
ZK-rollup 和支付通道是不同維度的(orthogonal)。 zk-rollup 就像擴大的區塊(extention block) —— 非見證數據放到鏈上,並由每一個人(通過SNARK,便宜地)驗證。我可以理解為什麼你們管它叫“L2”,但從技術上來說,它其實不是。它只是做了非交互的見證數據聚合(NIWA)。看我的文章《SNARK 與區塊鏈的未來》。
@AdrianoFeria
它是個L2,因為SNARK 的計算是委託給另一個網絡的。 L1 只用來存儲證明,結果是它提高了L1 的吞吐量大約100 倍。據我了解,它就相當於無損壓縮。
@SomsenRuben:
“L2” 只是個標籤。關鍵是我們同意這個過程裡面SNARK 做了什麼—— 非交互的見證數據聚合,這個也可以用在主鏈上(就是完全用在L1 上,由礦工來做NIWA),或者用在鏈中鏈上(就像zk-rollup 一樣,但它就是“擴大的區塊”)。
在比特幣網絡中,見證數據只占區塊的50%(跟以太坊不同),所以你最多只能獲得2 倍的效率提升(從區塊空間的角度來看),而且這是假設了完美的SNARK 技術;這個擴容效果很一般。即使運用了它,支付通道仍顯然是有好處的。
@AdrianoFeria
在rollup 基礎上再運行支付通道就不可能嗎?
@SomsenRuben:
當然可以,這就是為什麼我說他們不是同一個維度的。
(略)
@AdrianoFeria
是不是可以斷言,它(zk-rollup)提高了L1 的吞吐量,代價是增加了額外的計算量(在以太坊的情形下,由於當前的規範要求,驗證者沒法這麼做)?而且,即使證據的提供者崩潰了,資金也仍然可以取回。
@SomsenRuben:
我那篇文章提出的NIWA 概念解釋了這種直覺。任何人都可以收集所有的見證數據(包括簽名在內、證明交易合法性的數據)並壓縮/聚合成一個SNARK 證據。只需某人付出多一點,結果有益所有人。
資金總是可以取回的,證據的提供者也總是可以替換的。
@AdrianoFeria
我理解這些,但理想情況下,SNARK 的計算應該作為一項服務,由一個去中心化的網絡來提供。這就是以太坊生態裡面正在發生的事,而且我看不出為什麼類似的東西對比特幣來說就不可取。
@SomsenRuben:
它總有可取之處,但你過高地估計了它的好處(擴容效果最多只有2 倍),也低估了它的代價(其數學原理未經考驗、不使用受信任的啟動設置就很低效,以及礦工的中心化)。
我確實相信有一天SNARK 會成熟,會變得很有意義,但現在還沒到時候。
@AdrianoFeria
普遍共識是,zkrollup 在以太坊上的擴容效果是100 倍(這個信息在多個信息源中是一致的)。
為什麼它對比特幣就沒有這樣的效果呢?
@SomsenRuben:
我能想到的兩個原因:
相比比特幣,以太坊中的witness 數據大得多,驗證起來也更昂貴—— 所以SNARK 能更好地緩解以太坊的低效率。
地址重用進一步減少了非見證數據—— 對比特幣來說,這種隱私上的犧牲也是不太可能被接受的。
我的主張是很容易推理的:
-
SNARK 只能減少見證數據
-
比特幣的見證數據大約占區塊的50%
只要你理解這些,你就不需要“相信我是個專家”,但100 倍的說法,實在是很難推理出來。
@AdrianoFeria
我沒有在任何地方看到有人挑戰這個100 倍的說法。我假設zkrollup 的技術設計可能稍微不同於你用比特幣來舉的例子,以及/或者跟UTXO 或比特幣腳本的限制有關。
@SomsenRuben:
我不會那麼快就開始假設。 “別信任,自己驗證”。
總的來說,我也建議你不要為某種主張辯護,除非你有非常強的信心。謙虛一些,http://www.paulgraham.com/identity.html
@AdrianoFeria
所以我也歡迎對這個說法的技術上的挑戰呀。基於一個事實:它已經被許多著名的開發者引用,也廣為流傳,也沒有被挑戰,偏向這個陳述是合理的。 Rollup 已經快集成好了,證據就在眼前。
你需要務實地遵守這個“別信任,自己驗證” 的信條。相信某些東西,而不是自己驗證每一件事,是有理由的。比如:
-
相信SHA-256 運作良好
-
相信公鑰密碼學
-
為客戶端創建二進制未見得編譯器是有效的
@SomsenRuben:
我只不過給了一種你(應該)可以驗證的,比特幣無法靠SNARK 實現兩倍以上擴容,的證明。
從這個角度看,說以太坊可以實現100 倍擴容的主張至少可以開始懷疑。
如果這還不叫“驗證”,那我也不知道什麼是。
@AdrianoFeria
我一直沒法完全消化這一點,但這篇文章看起來與你用比特幣來描述的情形完全不同。你有什麼評論嗎?https://medium.com/interdax/ethereum-l2-optimistic-and-zk-rollups-dffa58870c93
@SomsenRuben:
文章裡列舉了許多擴容方案,但就我所知,除了zk-rollup,其它方案都已經被以太坊社區拋棄了。
但相比之下,我更了解比特幣。如果你對我的文章有什麼疑問,我很樂於幫你解答。這也會間接幫你了解以太坊。
@AdrianoFeria
Vitalik 剛剛發布了這篇文章,我還沒來得及看,但它似乎講解了許多技術設計上的細節,以及各種類型的交易能壓縮多少數據的細節。 《Rollup 不完全指南》
@SomsenRuben:
好文章。所以我的兩個理由都是對的,但現在我更理解這個100 倍是怎麼來的了。在以太坊中,空間和計算量都要消耗gas,但前者的gas 成本更低。因為SNARK 將計算量降到了接近0,所以所有的gas 都可以用來發布數據。缺點是什麼?區塊變得更大。
@AdrianoFeria
區塊是變得更大了,但這是我知道的對存儲空間最有效率的用法。
另外,這篇文章也證明了,一筆普通的交易可因此節約10 倍空間。所以,這說明rollup 比你用比特幣來描述的情形有5 倍的效率優勢。這可不小了。
@SomsenRuben:
你忘了第二個代價,地址重用,這是個很嚴重的隱私降級。你也可以為比特幣引入這樣的反向升級來節約區塊空間,以前也有人提議過,但大家以很好的理由拒絕了。
@AdrianoFeria
我看不出地址重用怎麼就是專屬於rollup 的問題,而且這個問題也可以通過專門設計的提高隱私性的智能合約來緩解。而且,錢包就不能每次收銀都使用一個新地址、模擬UTXO 的隱私性嗎?
@SomsenRuben:
關鍵在於地址重用就是他們縮小交易體積的辦法呀。如果你為每一筆交易都使用一個新地址(以及找零地址),那zk-rollup 的交易體積會大得多。
(這場討論中還有其它旁生的討論,在此不附)
(譯者註:不知道讀者還記不記得zk-rollup 的擴容效果是怎麼論證出來的。簡單來說,它是假設一筆普通交易在主鏈上發生要消耗X 單位gas,而在zk-rollup 上發生只需消耗Y 單位gas,所以擴容效果是X/Y。換言之,所有的論證都基於不同操作在以太坊上的gas 定價,但是,gas 並不是一種真實的資源,它只是一種虛擬的單位並假設了不同的資源的代價可以化約到一個指標。假如你現在把calldata 的gas 定價下調一倍,zk-rollup 的擴容效果就可以提高一倍(EIP-4488 和4490 正有這樣的意思)。這不是有點兒戲嗎?相反,Somsen 對SNARK 擴容效果的論證更接近於技術本來的面目,它就是節約見證數據(以及理想情況下,節約驗證計算量)而已。
另外,zk-rollup 也確實有地址重用的問題(見這篇文章)。 Adriano 所謂的模擬UTXO,每次都使用一個新地址的辦法,不是不行,但在以太坊的世界裡不是一個良好實踐,因為所有的歷史地址都會留在狀態中,變成節點的負擔,這就是所謂的狀態爆炸問題。
下面,是Somsen 的文章)
SNARK 與區塊鏈的未來
作者:Ruben Somsen
來源:https://medium.com/@RubenSomsen/snarks-and-the-future-of-blockchains-55b82012452b
SNARK(succinct non-interactive argument of knowledge,簡潔的非交互式知識證明)常被認為是“解決” 擴容問題的靈丹妙藥。雖然SNARK 可以提供難以想像的好處,但我們也要知道—— SNARK 無法解決區塊鏈當前面臨的帶寬約束問題。
本文希望能通過(相對)簡要地介紹SNRAK 能為區塊鏈做什麼和不能做什麼,來揭開SNARK 的神秘面紗。我們會先談談,為什麼它與區塊鏈有關的功能可以被簡潔地歸納為“非交互式見證數據壓縮(NIWA)”。只要你知道比特幣是怎麼運行的,你就能理解這篇文章。
應當指出的是,SNARK 在很大程度上仍然處於活躍的研究階段。許多SNARK 的變種,要么效率不足以至於無法證明復雜的語句(statement),要么證明的體積非常大,大到不切實際,要么需要一個受信任的啟動設置(trused setup)。也就是說,雖然這幾年我們看到了許多進展,預計未來數十年我們還將看到更多。本文的寫作對這些進展有預期,即使它們今天看來可能不實用。
什麼是SNARK ?
SNARK 是一種技術,讓你可以在給定一個規則集和一個起始狀態時,高效地驗證一個結果。導致這個結果的輸入是不公開的(“零知識性”)。聽起來一頭霧水?我們拿象棋舉一個簡單的例子的好了。
象棋案例
-
規則:象棋規則
-
起始狀態:棋盤的起始局面 A
-
結果:棋盤的新局面 B
證明棋局從局面A 到局面B 是有效轉換的傳統方法是公開每一個步驟並檢查每一步是不是都有效。 SNARK 也同樣能用來檢查狀態轉換的有效性,但效果更好:
-
步驟不必公開(隱私性、節約數據)
-
驗證在計算上更高效
但有一個問題—— 創建SNARK 的計算成本很高。不過,在一個許多人都想驗證同一個結果的系統(比如區塊鏈)中,使用這種技術可能仍是值得的。只需要一個人花力氣來創建SNARK,就能提高所有人的驗證效率。
區塊鏈案例
-
規則:全節點軟件
-
起始狀態:時間點A 的區塊頭和UXTO 集合哈希值
-
結果:時間點B 的區塊頭和UTXO 集合
類似於我們上面提到的象棋,驗證狀態轉換有效性的常規方法是:從時間點A 的UTXO 集合(所有未花費的交易)開始,接收截至B 點所有的區塊並更新UTXO 集合。有了SNARK,那就不需要這些數據來證明有效性了。實際上,如果時間點A 被設為創世區塊(空的UTXO 集合),而時間點B 被設成現在,那麼無需接收任何歷史數據就能驗證整條鏈。
重要的是,你需要B 點的整個UTXO 集合,而關於A 點你只需要知道UTXO 集合的哈希值。雖然這個數據不是證明有效性嚴格必需的,但我們也關心。如果你總是只能拿到UTXO 集合的哈希值,那即使你知道一個有效的狀態存在,你也不能知道那個狀態究竟是什麼。也就是說你沒法花費任何資金,因為你沒有數據來證明某個UTXO 屬於當前的集合。如果以像棋為類比,那就是你知道了一個新局面的哈希值,但你並不知道那個局面到底是怎麼樣的,所以也沒法繼續玩這個遊戲。
記住,無論是誰來創建SNARK(假設是礦工)都要具備這個數據(結果UTXO 集合)(因為這是創建SNARK 必需的),但他們可能會選擇扣住數據,不發給你。
SNARK 區塊鏈
為了保證每個人都會花費自己的錢,更新UTXO 集合所需的所有數據都必須與每個區塊一起傳播。你還是要知道哪些UTXO 被花費了(即輸入)、哪些UTXO 新產生了(輸出)。這就是所謂的“非見證數據”。
狀態轉換的有效性可以靠一個SNARK 來驗證,因此SNARK 可以取代所有的見證數據(腳本、簽名),而且幾乎不佔用帶寬。輸入和輸出之間的關聯將被抹消—— 一個區塊看起來就像一筆很大的coinjoin 交易一樣。大部分數據都是非見證數據。
所以,與大眾的想像相反,SNARK 無法解決輕客戶端或者非聯盟側鏈背後的根本問題,因為你必須下載非見證數據。如果非見證數據丟失,全節點有能力拒絕一個有效的SNARK;但如果一個輕客戶端疏忽於下載非見證數據,它可能會錯誤地認為一個數據丟失的鍊是有效的。即使非見證數據的一小塊被礦工扣住了,其他人也就沒法在有效的SNARK 上創建新區塊—— 最終它會變成一個許可型系統。
SNARK 消耗見證數據
用於區塊鏈的SNARK 最好的總結可能是,它可以啟用一種功能:非交互的見證聚合(NIWA)。
我在這裡使用“見證” 一詞是比較隨意的。在比特幣中,見證數據是放在交易中、用來證明具體的UTXO 是否能夠合法創建出來的數據。但隨著時間推移,這個UTXO(非見證數據)也會變成自身的見證數據,在它被花費的時候。假設1 btc 從Alice 轉給了Bob 又轉給了Carol,Bob 的交易就是從Alice 到Carol 的轉賬的見證數據。同樣地,創世塊以來的所有支付交易,都是當前UTXO 集合的見證數據s。
同樣要指出的是,一個SNARK 自身就是一個見證數據。如果每一筆交易都由一個SNARK 來驗證,我們也可以將這些SNARK 都聚合(NIWA)在一起、為區塊生成單個的SNARK。而且,因為輸出在花費時會變成見證數據,我們甚至可以在交易池中取出未上鍊確認、但已經被花費的輸出,並聚合它們。 Alice 轉給Bob 再轉給Carol 會變成Alice 轉給Carol,實現非交互的交易合併(transaction cut-through)。當帶有許多鏈外交易分支的單個UTXO 被強制上鍊時(比如閃電網絡通道工廠),這種功能特別有用。
簡單總結
我們已經用NIWA 概念總結了SNARK 為區塊鏈提供的核心功能。任何見證數據都可以被一個SNARK 非交互式地聚合在一起。而剩下的非見證數據就是對系統狀態(UTXO 集合)的直接反映。雖然SNARK 可以實現一些神奇的功能,比如直接下載一個UTXO 集合和一個SNARK 就從創世狀態跳躍到最新狀態、非交互式地將未上鍊交易的序列聚合為單筆交易,但我們還是需要為每一個新區塊發布所有的非見證數據,以使所有的全節點都能更新他們的UTXO 集合。因此,SNARK 無法解決區塊鏈面臨的帶寬根本約束。
感謝Sanket Kanjalkar 富有教益的討論和評論。
– NIWA 在行動。 SNARK 消耗witness,但自身也是一個witness。所以SNARK 可以吞吃SNARK –