簡單的購物網(wǎng)站源碼百度推廣充值必須5000嗎
1. 引言
SNARKs 經(jīng)常被視為“解決”擴容問題的靈丹妙藥。雖然 SNARKs 可以提供令人難以置信的好處,但也需要承認其局限性——SNARKs 無法解決區(qū)塊鏈目前面臨的現(xiàn)有帶寬限制。
本文旨在通過對 SNARKs 對比特幣能做什么和不能做什么進行(相對)簡單的概述來揭開 SNARKs 的神秘面紗。將研究其與比特幣相關(guān)的功能如何簡明扼要地概括為非交互式見證聚合 (Non-Interactive Witness Aggregation,NIWA)。如果了解比特幣的工作原理,將能夠理解本文。
值得注意的是,SNARKs 仍然是一個非?;钴S的研究領(lǐng)域。許多 SNARKs 變體要么效率不夠高,無法證明復雜的語句,要么證明大小過大,要么需要可信的設置。話雖如此,多年來已經(jīng)取得了很大進展,預計未來十年將繼續(xù)看到改進。本文是為了期待這樣的改進而寫的,即使它今天可能并不實用。【本文寫于2020年,目前SNARKs技術(shù)已走向?qū)嵱谩!?/p>
2. 何為SNARKs?
SNARKs 是一種結(jié)構(gòu),它允許在給定規(guī)則集和起點的情況下高效地驗證結(jié)果。導致結(jié)果的輸入不會被透露(“零知識”)。
以簡單的國際象棋示例來解釋。
國際象棋示例:
- 規(guī)則:國際象棋規(guī)則集
- 開始:棋盤的起始位置 A
- 結(jié)果:棋盤的新位置 B
證明游戲從位置 A 有效過渡到位置 B 的常規(guī)方法是簡單地揭示所有動作并檢查它們是否有效。SNARKs 可以做同樣的事情,但更好:
- 無需透露移動集合(私密,數(shù)據(jù)更少)
- 驗證在計算上更高效
盡管創(chuàng)建 SNARKs 的計算成本往往很高。然而,在許多人希望驗證相同結(jié)果的系統(tǒng)中,如區(qū)塊鏈,這仍然是值得的。只有一個人需要付出努力來創(chuàng)建該 SNARK,從而提高每個人的驗證效率。
區(qū)塊鏈示例:
- 規(guī)則:全節(jié)點軟件
- 開始:A 時刻的區(qū)塊頭和 UTXO 集合哈希值
- 結(jié)果:B 時刻的區(qū)塊頭和 UTXO 集合
與國際象棋示例類似,驗證轉(zhuǎn)換的常規(guī)方法是從時間 A 的 UTXO 集(所有未使用的交易)開始,接收所有區(qū)塊,并一直更新 UTXO 集,直到到達時間 B。使用 SNARKs,不需要這些數(shù)據(jù)來證明有效性。事實上,如果將時間 A 設置為創(chuàng)世區(qū)塊(空的 UTXO 集),將時間 B 設置為現(xiàn)在,則可以在不接收任何歷史數(shù)據(jù)的情況下驗證整個鏈。
需要注意的是,對于時間 B,需要整個 UTXO 集,而不僅僅是 UTXO 集哈希。雖然這些數(shù)據(jù)對于證明有效性并非嚴格必需,但也關(guān)心可用性。如果只有 UTXO 集哈希,那么雖然你知道存在有效狀態(tài),但實際上并不知道該狀態(tài)是什么。這意味著你無法花費任何coins,因為無法證明特定 UTXO 是集合的一部分的數(shù)據(jù)。在國際象棋類比中,會有新棋盤位置的哈希,但實際上不知道該位置是什么,因此無法繼續(xù)玩游戲。
請注意,無論是誰制作了 SNARKs(大概是礦工)都會擁有這些數(shù)據(jù)(因為首先需要這些數(shù)據(jù)來創(chuàng)建 SNARK),但他們可能會選擇向你隱瞞這些數(shù)據(jù)。
3. SNARK UTXO鏈
為了保證每個人都能使用自己的coins,更新 UTXO 集所需的所有數(shù)據(jù)都必須與每個區(qū)塊進行通信。需要知道哪些 UTXO 已被使用(輸入),哪些是新添加的(輸出)。這就是所謂的non-witness data非見證數(shù)據(jù)。
轉(zhuǎn)換的有效性可以通過單個 SNARK 來驗證,從而取代所有witness data見證數(shù)據(jù)(腳本、簽名),并且?guī)缀醪徽加脦?。輸入和輸出之間的關(guān)系并不明顯——一個區(qū)塊看起來就像一個大的 Coinjoin 交易。大部分數(shù)據(jù)將是非見證數(shù)據(jù)。
與普遍看法相反,SNARKs 無法解決輕節(jié)點或non-federated非聯(lián)合側(cè)鏈背后的根本問題,因為必須始終下載非見證數(shù)據(jù)。如果非見證數(shù)據(jù)缺失,全節(jié)點具有拒絕有效 SNARK 的關(guān)鍵能力,而如果輕節(jié)點忽略了下載非見證數(shù)據(jù),它可能會錯誤地認為缺少數(shù)據(jù)的鏈有效。如果礦工隱瞞哪怕一條非見證數(shù)據(jù),除了那些特定的礦工之外,沒有人能夠創(chuàng)建具有有效 SNARKs 的新區(qū)塊,從而將其變成一個許可系統(tǒng)。
4. SNARKs 消耗witnesses見證
UTXO鏈的 SNARK 或許可以概括為實現(xiàn)以下功能:
非交互式見證聚合 (Non-Interactive Witness Aggregation,NIWA)
在此廣泛使用“見證”一詞。
- 在比特幣中,見證是交易內(nèi)部的數(shù)據(jù),用于證明是否允許創(chuàng)建特定的 UTXO。
- 但隨著時間的推移,當 UTXO(非見證數(shù)據(jù))被使用時,它就會成為自己的見證。當 1 BTC 從 Alice 發(fā)送給 Bob 再發(fā)送給 Carol 時,Bob 的交易就是 Alice 向 Carol 轉(zhuǎn)賬的見證。
- 同樣,自創(chuàng)世以來的所有已使用交易都是當前 UTXO 集的見證。
還要注意,SNARKs 本身就是見證。如果每筆交易都由 SNARKs 驗證,也可以 NIWA 這些 SNARKs 成每個區(qū)塊的單個 SNARK。而且由于輸出在被使用時就成為見證,甚至可以將未確認但已使用的輸出放入內(nèi)存池中并聚合它們。Alice 到 Bob 再到 Carol 變成 Alice 到 Carol,實現(xiàn)非交互式Transaction cut-through交易直通。當單個 UTXO 帶有許多分支鏈下交易(如閃電通道工廠的情況)被強制上鏈時,這可能特別強大。
5. 小結(jié)
本文總結(jié)了 SNARKs 對于具有NIWA UTXO鏈的核心功能。任何見證數(shù)據(jù)都可以通過 SNARKs 非交互式聚合。剩余的非見證數(shù)據(jù)直接反映了系統(tǒng)的狀態(tài)——UTXO 集。雖然 SNARKs 可以實現(xiàn)一些很棒的功能,如允許僅通過下載 UTXO 集和單個 SNARK 即可從創(chuàng)世開始追趕,或者將未確認交易序列非交互式聚合為單個交易,但仍然需要發(fā)布每個新區(qū)塊的所有非見證數(shù)據(jù),以允許所有節(jié)點更新其 UTXO 集。因此,SNARKs 無法解決UTXO鏈的基本帶寬限制。
NIWA 在行動。SNARKs消耗見證,同時也是自己的見證。SNARK 消耗 SNARK。
參考資料
[1] Ruben Somsen 2020年10月博客 SNARKs and the future of blockchains