摘要:
·一個去中心化應用由多個部分構成,但目前只有最核心的後端邏輯運行在以太坊上,其他部分例如前端程式碼也部署在以太坊之外,同時還包含許多沒有上鍊的數據,所以大多數DAPP無法完整繼承以太坊的安全性,遠遠沒有達到理想化的狀態。
· 上述問題的原因主要有兩個:一是以太坊沒有提供開發者對應的前端標準和工具,二是鏈上儲存資料的成本太高。
· 為了提供去中心化的前端標準,EthStorage 團隊提出了web3:// 存取協議,為開發者提供一整套透過智慧合約來部署和存取前端程式碼,甚至是類文件系統的標準和工具,目前已成為以太坊的正式標準。
· 為了降低以太坊鏈上資料的存儲成本,EthStorage團隊開發了二層存儲協議EthStorage,利用PoRA (Proof of Random Access) 和零知識證明,在繼承以太坊一層安全性的同時,極大降低存儲開銷。
致謝:感謝來自極客Web3 的Faust,ChainFeeds 的Zhixiong Pan、LXDAO的Bruce、EthStorage 的Qi Zhou, Lun Deng 對本文的回饋。
去中心化DAPP的背景與問題
以太坊的願景是成為世界計算機,希望在其上建立的應用程式都繼承它的安全性。開發者只需一次部署,該應用程式就會永遠在以太坊上運行,沒有實體可以對其進行審查或惡意操縱。
但現在的去中心化應用DAPP是否達到上述目標了?為了更清楚的回答這個問題,我們需要將一個DAPP應用解構,看它都包含哪些部分,進而分析各部分的去信任化程度,來得出最終結論。
一般情況下,一個去中心化DAPP會包含前端介面、後端伺服器、資料庫。當使用者存取前端介面時,會透過瀏覽器和網域服務來載入前端內容。其中:
·前端和域名服務:大多沒有透過智能合約來部署和訪問,區塊鏈提供的特性如避免單點故障、代碼不可篡改、抗審查、社區治理等都沒有在前端這部分體現出來。
·後端伺服器:部分由智慧合約實現,有些運算密集的任務無法完全上鍊。
·資料庫:部分由智慧合約實現,由於鏈上儲存費用非常高,因此資料量較大的情況下DAPP還是採用鏈下的儲存方案。
透過上面的分析,可以看到現在的去中心化DAPP只有部分組件透過智能合約獲得了以太坊的保護,以太坊體系還遠遠沒有實現當初的「去中心化的世界電腦」願景。
2023年末Vitalik回顧以太坊的發展,寫了一篇反響較大的文章“Make Ethereum Cypherpunk Again”,討論了以太坊社區該如何回歸密碼朋克的理念。他在文中總結了以太坊甚至是更大範圍的Web3社群應該堅守的價值觀,提到非常重要的一點:
去中心化應用應盡量減少對任何單一主體的依賴,即便DAPP的核心開發者永久消失,應用程式也可以繼續運作。
由此可見Vitalik對於去中心化應用該如何建構也有類似的期待。接下來我們將詳細分析去中心化DAPP中每個組件面臨的問題,並探討如何進行改進。
前端和域名服務
在去中心化應用的幾個組成部分中,前端和網域服務的中心化程度最為嚴重。目前絕大部分dApp的前端都使用中心化伺服器,專案方可以隨時修改前端程式碼,不需要經過社群治理,也不受到時間鎖限制,這部分的安全性與部署在以太坊上的智慧合約相去甚遠遠。
駭客可以入侵伺服器修改前端程式碼,而dApp用戶會因為使用該惡意前端而損失資產。這個問題在上個DeFi Summer中反覆出現,我們不禁要問:為什麼前端不能和後端一樣部署在以太坊上,讓修改行為通過社區治理和時間鎖才生效呢?
另外請設想一下,假如Uniswap 的開發團隊有一天不再給他們的前端伺服器以及域名服務付費,那麼Uniswap 的用戶和LP 將如何使用Uniswap?
絕大部分用戶並不懂得如何繞過前端和智能合約交互,雖然Uniswap 有嘗試將其前端上傳到IPFS,但是IPFS 和以太坊是不同的網絡,在可靠性和去信任程度上完全不同。值得一提的是,IPFS的內容存取速度很慢,現在絕大多數用戶還是在和Uniswap部署在中心化伺服器上的前端進行互動。
此外,因為Uniswap前端的營運主體是Uniswap Labs,他們為了迎合監管,增加了對Token清單的審查,這與他們在以太坊上部署的智能合約進成了反差,因為誰都無法隨意對智能合約進行修改。所以,在前端被審查的Token還是可以在合約層級被互動到的,由此可見程式碼上鍊對抗審查的重要性。
後端伺服器
因為EVM可以提供圖靈完備的執行環境,所以大部分後端邏輯都可以在以太坊鏈上執行,我們可以說智慧合約類別的應用可以完全繼承以太坊的安全。只是因為成本原因,一些計算密集型的任務無法直接在鏈上進行。
針對這個問題,現在探索比較多的是使用ZK或OP的方式,將計算移交到鏈下完成,以太坊鏈上只對計算結果進行最終確認,以此在計算層面上進行擴容。有些AI相關的專案將這類方法推向了極致,希望將AI 大模型這種超級運算密集型的任務與區塊鏈掛鉤,值得我們去密切關注。
資料庫
對於資料庫,EVM 原本就支援鍵值對/KV型儲存(Key Value Store),可以覆蓋非常多的使用場景,但核心的問題是:鏈上儲存的成本太高。
貴到什麼地步呢?在Gas Price為10Gwei 的情況,鏈上儲存1GB的資料需要6200多枚ETH,超過2000萬美元!顯然儲存成本成為了資料庫去中心化的核心問題。
我們可能會想,能否使用和上述計算擴容類似的方法,對存儲進行擴容,也就是鏈下存儲,鏈上驗證存儲效果。後面我們會對這個思路詳細展開。
分析了上述談及的DAPP組成部分後,我們發現,只有讓DAPP的每個部分都足夠安全和去信任,其作為一個去信任的整體,才能真正成為一個去中心化的DAPP。而以太坊作為dApp的運作與託管平台,需要提供開發者對應的解決方案,才能孕育出符合以太坊願景的應用生態。
DAPP的去信任解決方案
圍繞著如何讓DAPP完全基於以太坊來部署和訪問,EthStorage團隊提出了兩套解決方案:
- web3:// 存取協定:解決如何使用智慧合約來部署和存取前端程式碼,甚至是類別檔案系統的問題。
- EthStorage 二層儲存協定:在繼承以太坊安全性的同時,大幅降低了儲存開銷。
web3:// 存取協議
web3:// 可以理解為去中心化版本的http://,與http 的URL 中透過指定伺服器IP 位址或網域名稱來存取中心化的資源類似,web3 的URL 需要指定一個智慧合約位址或ENS域名,來存取儲存在其上的資源。
我們可以將一個網站的前端全部部署到一個智慧合約中,並透過web3:// 來存取!可以比較一下兩者的差異:
目前web3:// 已經成為了以太坊的正式標準(ERC-4804),如果希望詳細了解web3:// 存取協議的內容,可以存取其官網。為了更好的在智能合約中做檔案管理,我們提出了ERC-5018,它在智能合約中模擬了一套檔案系統的接口,這樣就可以透過ethfs-cli,將打包好的前端程式碼資料夾上傳到一個智能合約中,並透過web3:// 來訪問這個網站。
大家如果有興趣,可以按照教學完成一個簡單的去中心化應用部署和存取。
有了web3:// 存取協議,我們才能真正讓dApp 前端也具有了「Code is law」的屬性。對開發者來說,一旦部署,這個前端將永久執行下去。試想如果Uniswap labs也將其前端部署到了以太坊,那麼即使團隊想在前端層面對用戶進行審查和限制,也無法阻止人們使用其部署在以太坊上的前端了。
當然在解決了可行性的問題後,我們也意識到鏈上儲存大量資料的成本會非常高,從而使開發者在鏈上部署前端的時候面臨困擾。我們進一步開發了EthStorage 二層儲存協議,在繼承以太坊安全性的同時,大幅降低儲存開銷。
EthStorage二層儲存協定
EthStorage 協定由部署在以太坊上的智慧合約和Layer2網路中的儲存節點組成,其中,智慧合約提供了鍵值儲存, 而二層的儲存節點負責存放資料本身。
使用者透過EIP-4844 的BLOB 將待儲存的資料上傳到以太坊上,EthStorage智慧合約只會記錄BLOB內資料的哈希,從而有效的降低儲存成本。
同時,二層的儲存節點會下載對應的BLOB資料到本機磁碟,使用PoRA (Proof of Random Access) 和ZK,將儲存證明提交至以太坊上的合約做驗證,該合約需要透過先前記錄的Blob哈希伯來確認儲存節點上傳的ZK證明能否對上號,以此確認二層網路中的儲存節點真的存放了這些資料。
具體流程如下:
對於開發者來說,其上傳資料和獲取資料的介面非常簡單:
應用開發者可以直接透過EthStorage提供的合約接口,對大塊資料進行讀寫,寫入成本約等於直接在鏈上儲存資料的千分之一。因此,EthStorage不僅支援鏈上部署前端,對更廣泛的鍵值儲存資料庫操作也提供了成本更低的解決方案。
目前,EthStorage已獲得了以太坊官方的Grants,並且已經在Sepolia 部署了公開測試網,歡迎大家加入。
總結與展望
大多數DAPP的重要元件如前端和資料庫未部署在以太坊,無法繼承以太坊的安全,導致應用作為一個整體無法做到永久執行,抗審查,可治理。
EthStorage 對此提出了兩個方案解決這個問題:web3:// 存取協定解決使用智慧合約來部署和存取前端的問題;EthStorage 二層儲存協定解決儲存成本過高的問題。
為了實現以太坊最初的願景,我們認為它將演進為一個去中心化的Web伺服器,生態中的去中心化應用會將其所有元件都部署於以太坊,不管是後端程式碼、前端還是數據,一旦部署,程式碼可以永久運行,資料可以永久訪問,成為一個真正的Unstoppable Dapp。
EthStorage 公開測試網正在進行第二次激勵活動,有興趣的社區夥伴可以按照Guide 完成自己的第一個Unstoppable Dapp 部署和訪問!