比特幣的區塊鏈資料增長(從2009年到2018年,MB為單位) (https://www.blockchain.com/en/charts/blocks-size?timespan=all)
前言
為什麼不是每個人都能成為一個全節點?深入研究之前,我們應該首先了解典型的加密貨幣協議的基本操作 - 節點(也稱為礦工或權益人(分別對應於PoW與PoS))將交易應用於世界狀態。然後,全節點會觀察這些交易,以確保其行為誠實。終端使用者通常不獨立進行驗證,而是將信任委託給全節點。這是為什麼?
· 硬體的要求和執行全節點的複雜性不鼓勵終端使用者自己去驗證。
· 在計算機上執行全節點非常複雜,在手機上無法執行。
· 信任第三方來完成驗證更容易。
在任何一種特定的加密貨幣的早期,由於區塊鏈很小(可能只有幾兆位元組),操作整個節點相對容易。但是,隨著時間的流逝和記錄更多的事務,它會增長到數百GB(如上圖所示)。也就是說,在一般的計算機上維護節點不太現實,更別提在智慧手機上了。
如何在不需要歷史交易的情況下,確認當前區塊鏈狀態的正確性?
Coda介紹
“ Coda是一種新的加密貨幣協議,具有全節點級安全性,它允許在任何裝置上與任何人進行網路同步。而做到這些,僅需下載幾千位元組的資料(而不是上GB的資料)並進行幾毫秒的計算。”
https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2F4AJKUGNwzZ0%3Ffeature%3Doembed&display_name=YouTube&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D4AJKUGNwzZ0&Izaak Meckler & Evan Shapiro: Coda — A Succinct Blockchain — Epicenter
O(1) Labs正在開發“Coda協議”,以透過建立第一個“簡潔的”或“壓縮的區塊鏈”(幾條推文的大小)來解決區塊鏈資料大小的問題。這為終端使用者提供了較低的進入門檻驗證交易。
這是怎麼做到的?
· 利用zk-SNARK有效地將區塊壓縮為單個證明。
· 終端使用者檢查此證明,而不是檢查整個塊的交易歷史。
· SNARKs的遞迴證明實現了區塊鏈資料的恆定大小。
zk-SNARK是零知識證明的一種加密方案,在向驗證者提供計算證明時,驗證者獲取不到任何知識(零知識)。
Coda如何工作
Coda中的zk-SNARKs
Coda協議的核心是zk-SNARKs。zk-SNARKs能用來驗證任何計算。
zk-SNARKs提供“不可偽造的證明”,能證明計算正確執行,而無需提供整個計算過程。如前所述,我們可以對任何計算,例如驗證一個塊中的交易,建立一個SNARK的證明。此證明無需顯示所有交易即可證明區塊交易歷史的準確性。這樣有效地將區塊的大小減小到單個SNARK證明(〜1kB)。
SNARK的證明會證明共識需要的所有的規則。
這些規則包括:
· 交易的簽名是否正確。
· 交易是否有效。
· 共識相關的規則(PoW的總算力以及鏈的強度,PoS的VRF函式以及其他規則)
SNARK證明必須真實生成,否則無效。網路中的任何人都可以在類似Raspberry Pi 或智慧手機之類的“輕節點”上驗證。
在低端計算裝置上能驗證區塊的正確性是針對當前問題的可持續且可擴充套件的解決方案的第一步。
節點間可以傳遞SNARK的證明,而不必傳輸區塊中的所有交易。
節點和終端使用者之間的真實的對話:
“嗨,驗證者/終端使用者!我建立了一個證明,以便您可以輕鬆地驗證區塊中的交易。這個過程需要大量的計算能力,因此我也獲得獎勵。您可以透過檢查SNARK證明來驗證準確性,該過程僅需要幾毫秒和幾千位元組的儲存空間。這樣,您無需下載數百GB的資料即可驗證區塊鏈!” — SNARK節點。
“非常感謝您,節點。我將驗證此證明!由於它是如此之小,我不必委託其他人來為我驗證區塊鏈資料,我終於可以在諸如智慧手機之類的裝置上執行一個驗證節點和錢包。謝謝!現在的生活真好。” — 終端使用者。
每個區塊用SNARK證明代替,還不是完整的方案
最初,我們認為可以為每個區塊簡單地建立一個SNARK證明,將每個區塊資料縮小到大約一千位元組,並將其命名為day(天)。但是,隨著SNARK的堆積,這仍將導致區塊資料線性增長,儘管程度要比現有的區塊鏈小得多。
如何進一步解決資料量的問題?
我們知道一個SNARK證明可以驗證任何計算。建立一個SNARK證明本身也是一種計算,那能不能建立一個SNARK證明能證明多個SNARK證明?
Coda遞迴證明
如前所述,我們可以將這些證明以遞迴組合的形式“連結”在一起,並將區塊鏈保持〜20kB 的恆定大小(SNARK證明 + Merkle路徑)。
每次每生成一個新塊,就會生成一個新的SNARK證明。該證明能證明之前的所有的證明,也就是說,一個證明能證明所有的從創世紀的區塊到最新區塊的所有的交易狀態。
簡單的說,假設你有:
· 一個證明能證明區塊0到區塊2是正確的。
· 另外一個證明能證明區塊2到區塊4是正確的。
你能用一個新的SNARK證明,將上述的兩個證明“合併”,證明區塊0到區塊4是正確的。
新的SNARK證明大小為 ~1kB. 從更大範圍來說,可以為區塊鏈的所有區塊(整個交易歷史)建立一個SNARK證明,該證明的大小恆定不變。隨著區塊的增多,越來越多的“證明”被壓縮到最新的SNARK證明中。
驗證節點需要資訊:
一個遞迴生成的zk-SNARK證明(1kB),以及一個默克爾樹的路徑。SNARK證明能證明所有的交易歷史的正確性。這兩個資訊一起能證明一個使用者的賬戶資訊的正確性。所有這些資訊只需要毫秒級時間就能同步完。
終端使用者驗證當前狀態,其中包括所有所有交易的SNARK證明以及默克爾路徑。這些資訊可以讓一個使用者可以驗證其餘額。
應用程式,去中心化以及可擴充套件性
應用程式
Coda協議使終端使用者可以輕鬆地透過瀏覽器和應用程式“訪問”區塊鏈,而無需下載數百GB資料,並且無需委派信任。
想象一下一個應用程式,例如超輕量級錢包,不需要相信開發人員可以正確執行驗證過程。終端使用者並不需要特殊的硬體就可以完成驗證過程。
任何裝置都可以執行驗證節點, 包括但不限於 智慧手機,瀏覽器或功能手機(是的,包括堅不可摧的諾基亞)。
去中心化
當今現有加密貨幣協議的終端使用者將信任委託給線上錢包或輕節點等服務。如果發生51%的攻擊,這可能會成為問題,因為驗證交易的責任通常集中在這些服務提供商。
透過提供簡易的驗證方式,廣大的終端使用者能直接進行驗證,從而增強了去中心化能力。
可擴充套件性
就擴充套件性而言,如果現有區塊鏈協議將TPS提升到上千的話,區塊鏈資料量將增加,不可避免地會遇到增長速度超過其可驗證性的問題。
然而,Coda協議將其區塊鏈保持在恆定大小,也就是可以減輕驗證交易所需的資料。同時因為驗證資料被壓縮了多個數量級,Coda協議實現高吞吐量。
總結
透過建立固定資料大小的區塊鏈,Coda協議降低了終端使用者驗證交易的門檻。
· 毋需委託信任給目前傳統區塊鏈協議的全節點。
· 擁有全節點等級的安全性。任何裝置只需要下載一個SNARK證明和默克爾路徑就可以驗證交易。
· 採用遞迴證明的方法,Coda協議將區塊鏈資料恆定在~20kB左右。
· 因為降低了終端使用者驗證交易的門檻,增強了去中心化的能力。
有意思的想法
你可以將Coda協議想像成精靈寶可夢的寶貝球。Coda協議,就像將卡比獸壓縮排寶貝球一樣,將交易資訊壓縮成固定大小的SNARK證明。