BTC
ETH
HTX
SOL
BNB
查看行情
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

Vitalik Buterin親筆:區塊鏈驗證的哲學

金色财经
特邀专栏作者
本文約4902字,閱讀全文需要約8分鐘
區塊鍊為什麼要驗證?
AI總結
區塊鍊為什麼要驗證?

編者按:本文來自金色財經,Odaily經授權轉載。

編者按:本文來自

金色財經

金色財經

區塊鍊為什麼要驗證?

,Odaily經授權轉載。

以太坊聯合創始人Vitalik Buterin於8月17日在其個人網站發布《區塊鏈驗證的哲學》論文,金色財經將本文編譯如下:

二級標題

區塊鍊為什麼要驗證?

區塊鍊為什麼要驗證?

一個區塊鏈最強大的一個特性,就是可以獨立驗證這個區塊鏈執行的每個部分。即使大多數區塊鏈礦工(或權益證明區塊鏈中的驗證人)被攻擊者接管,如果該攻擊者試圖推送無效區塊塊,網絡也會直接拒絕這些區塊。即便用戶在某個特定時間內沒有驗證那些區塊,他們也會潛在地、自動地獲得警告,而且可以檢查攻擊者的區塊鍊是否無效並自動拒絕這些區塊,然後再按照規則接受一條鏈。

但是,我們到底需要多少驗證?需要一百個獨立驗證節點,或是一千個獨立驗證節點嗎?我們是否需要一種文化,讓全世界每個普通人都運行軟件來檢查每筆交易?如果我們要構建一個比“中本聰”最初創建的工作量證明單鏈更好的、具有共識機制的區塊鏈,解決上述問題將會是一個非常重要的挑戰。

區塊鍊為什麼要驗證?

二級標題

驗證區塊鏈對用戶非常有益,主要原因有二:

1、首先,驗證區塊鏈最大程度地提高了節點可以正確確定在規範鏈上發言的機會(金色財經註:所謂規範鏈就是社區認可的區塊鏈)通常,規範鏈被定義為類似於“具有最多支持該鏈的礦工/驗證人的有效區塊鏈”(例如,比特幣中的“最長有效鏈”)。根據定義,無效鏈將被拒絕,如果在多個有效鏈之間進行選擇,那麼獲得礦工/驗證人支持最多的那條鏈將獲勝。因此,如果您有一個可以驗證所有有效性條件的節點,從而檢測到哪些鏈有效、哪些鏈無效,那麼就可以最大程度地提高正確檢測規範鏈的機會。比特幣2、其次,驗證區塊鏈有效性還有一個更深層的原因:假設一個強大的參與者試圖推動對協議的更改(例如更改代幣發行),並得到大多數礦工的支持,如果沒有其他人驗證區塊鏈,那麼這種攻擊就很容易成功,因為在默認情況下,每個人的客戶端都會接受新鏈,等到人們看到正在發生的事情時,持不同意見的人才會來嘗試協調拒絕那條鏈。但是,如果普通用戶都在進行驗證,那麼協調問題就落在了另一邊:那些試圖更改協議的人將負責說服用戶積極下載軟件補丁以接受協議。

如果有足夠多的用戶在驗證,那麼就會避免造成不必要的混亂,也不會因為強制更改協議而產生爭議。混亂會造成很多破壞,而且需要帶外數據社交協調(out-of-band social coordination)來解決,這其實就給攻擊者設置了很大障礙,他們也因此沒有足夠的信心逃脫,繼而使攻擊者沒有發動攻擊的動力。如果大多數用戶正在(直接或間接)進行驗證,而攻擊僅得到大多數礦工的支持,則該攻擊將完全默認為失敗,這是所有結果中的最佳結果。

定義觀點vs. 協調觀點

比特幣

下圖是加文·安德森(Gavin Andresen)“按定義”觀點的一個示例:

比特幣

另一個觀點來自Wasabi錢包,從解釋完整節點為何有價值的角度來看,這一點更為直接:

請注意,這個觀點有兩個核心部分:

1、根據定義,不接受你認為基本且不可轉讓規則的那條鏈的版本不是

比特幣

2、重要的是,你必須保持鏈上有你自己認為可以接受的規則。

但是,我相信這種“個人主義”觀點是非常錯誤的。為了弄清原因,讓我們看一下我們擔心的情況:絕大多數參與者可能會接受對協議規則的一些更改,而這些更改是你認為不可接受的。舉個例子,設想我們擁有了一個交易費用很低的未來,並且為了保證區塊鏈安全,幾乎其他所有人都同意更改為增加發行量的一組新規則,但是此時你卻頑固地繼續運行一個繼續執行舊規則的節點,並且分叉到與大多數節點不同的鏈上。

從你自己的角度來看,你仍然可以將代幣放在可以接受的舊規則下運行的系統中。但是那又怎樣呢?其他用戶根本不會接受您的代幣,交易所也不會接受您的代幣。價格網站上會羅列出代幣的價格,但他們的數據來源肯定會指向多數鏈上的那個代幣,所以你的代幣將毫無價值。加密貨幣和區塊鏈從根本上說是一種社會建構,如果沒有其他人相信它們,它們將毫無意義。

通常,我們所處世界裡所遇到的協調問題大多不是好事,這裡有幾個例子:

二級標題

二級標題

3、還有人覺得如果在經濟衰退的情況下立即將所有價格和工資降低10%將會幫助國家渡過難關,那麼其實這麼做需要每個人都同意,通常也非常困難達成。

但是,在區塊鏈應用程序中,我們利用協調問題來發揮自己的優勢,並利用協調問題造成的摩擦來抵制中心化執行者的瀆職行為。再舉個例子,我們可以構建具有屬性X的系統,並且可以保證該系統始終保留屬性X,但是如果想把規則從X更改為not-X則需要一大堆人同意同時更新其軟件。即使有一個執行者強制進行更改,這種做法也將非常困難——遠比用戶負責協調異議者抵制變更要困難得多。

二級標題

二級標題

現在,我們進入下一個主題,這個主題與輕客戶端和分片之類的主題相關性非常高:通過驗證,我們將會完成什麼工作?為了理解這一點,讓我們回到更早的時候——如果區塊鏈發生攻擊,那麼攻擊的發生方式可能具有以下優先順序:

二級標題

驗證的目標則是讓從默認狀態從勝利變成混亂(理想情況下),再從混亂變成失敗(不太理想的情況下)。如果您有一個完全驗證的節點,並且攻擊者嘗試使用不同的規則推入一條鏈,則攻擊將會失敗。如果某些人具有完全驗證的節點,而其他許多人沒有,則攻擊就會導致混亂。但是,現在我們肯定會想到另一個問題,即:到底還有沒有其他方法可以達到相同的效果嗎?

分片

二級標題

如上圖所示,區塊鏈中的獨立區塊僅涉及幾個賬戶。欺詐證明將包含這些帳戶中的數據以及證明該數據正確的Merkle證明。

二級標題

分片

二級標題

這種技術有時也稱為無狀態驗證:客戶端可以只保留區塊頭,而不必保留完整的區塊鏈狀態數據庫,並且可以通過向其他節點要求任何期望狀態的Merkle證明來實時驗證任何區塊,此外區塊驗證的條目也可以被訪問。

這項技術的強大之處在於,輕客戶端僅在偵聽到警報時才會驗證獨立區塊(並且警報是可驗證的,因此如果輕客戶端聽到虛假警報,那麼他們只能停止偵聽該節點的警報)。所以在正常情況下,輕客戶端仍然是輕客戶端,他們只會檢查大多數礦工/驗證者支持哪些區塊。然而在特殊環境下,比如在多數鏈包含一個輕客戶端不會接受區塊的情況下,只要有一個誠實節點來驗證欺詐區塊,那麼該節點就會發現該區塊是無效的,只要這個節點廣播欺詐證明,那麼網絡中的其他節點就會拒絕它。

二級標題

分片可以看做是一種網絡驗證的自然擴展:在分片系統中,系統中的交易太多,大多數人無法持續進行直接驗證,但是如果系統設計良好,則可以檢測到任何一個無效的獨立區塊,而且這種無效性往往會帶有欺詐證明的證據,該證明可以在整個網絡中傳播。我們可以把共享網絡看做是每個人都是輕客戶端,只要每個分片都具有一定量的參與者最小閾值數,那麼網絡就具有群體免疫力。

二級標題

开发者
ETH
歡迎加入Odaily官方社群