如何跳出 Rollup 的思維定式,以更寬泛、更開放的框架,將 Web2 平臺與 Web3 融合?

作者:霧月,極客 Web3

封面:Photo by Jigar Panchal on Unsplash

導語:本文將前瞻性地介紹一種看起來有點特立獨行的 Web3 基礎設施設計範式——存儲共識範式 SCP(Storage-based Consensus Paradigm),這種產品設計模式雖然在理論上,與乙太坊 Rollup 等主流模塊化區塊鏈方案存在較大差異,但在落地簡易度以及與 Web2 平臺銜接的難易度上,可行性卻很高,因為他從一開始就不打算像 Rollup 那樣把自己限制在一個狹窄的實現路徑上,想要以一種更寬泛、更開放的框架,將 Web2 平臺與 Web3 設施融合起來,可以說是一個腦洞大開、頗具想像力的做法。

正文:讓我們設想一種公鏈擴容方案,具有下列特性:

  • 擁有媲美傳統 Web2 應用或交易所的速度,遠超任何公鏈、L2、rollup、側鏈等。
  • 沒有 Gas 費,使用成本幾乎為 0。
  • 資金安全性高,遠超中心化設施如交易所等,遜於 Rollup 但大於等於側鏈。
  • 與 Web2 相同的用戶體驗,無需對區塊鏈的公私鑰、錢包、基礎設施等有任何認知。

這樣的方案確實令人非常興奮:一方面它在擴容上基本已經做到了極致; 另一方面在 Web3 的 mass adoption 上也奠定了很堅實的基礎,基本消除了 Web2 與 Web3 使用體驗的鴻溝。

不過,我們似乎想不到多少方案能做到如此完備,因為主流討論與實踐確實太少。

我們在上面用擴容這個大家非常熟悉的議題作為引子,實際上 SCP 並不僅限於擴容使用,其設計靈感確實來源於比特幣、乙太坊等公鏈的擴容方案與社區討論。 而它的願景和實際應用是構建新一代的去信任化基礎設施,甚至是非區塊鏈結構的運算平臺。

SCP 基礎元件和工作原理

一般而言,SCP 也像乙太坊和 Celestia 社區所說的「模組化區塊鏈」一樣,具有數據可用性層、執行層、共識層、結算層等模組劃分。

  • 數據可用性層:由一條被廣泛認可且久經考驗的公鏈來承擔,或存儲類設施作為數據可用性層,如乙太坊、Arweave、Celestia 等。
  • 執行層:一台伺服器,用於接收使用者交易並執行,同時將使用者簽名后的交易數據批量提交到 DA 層,與 Rollup 的排序器相似。 但執行層並不一定要有區塊鏈式的鏈表結構,它可以完全是 Web2 資料庫+計算系統,但整個計算系統必須開源,具備透明度。
  • 共識層:由一群節點組成,它們拉取執行層提交到 DA 層上的數據,並用與執行層相同的演算法,對這些數據進行運算,確認執行層的結果輸出是否正確,並可以作為執行層的防災冗餘。 使用者也可以讀取共識層各節點返回的數據,確保執行層沒有欺詐行為。
  • 結算層:由一群節點與其他鏈上的合約或地址組成,用於處理使用者充值進入 SCP,或提現離開 SCP 的行為,有點類似於跨鏈橋的運作模式。 結算層節點通過多簽合約或基於 TSS 的位址,控制充值位址的提現功能。 充值時使用者向所在鏈的指定位址充入資產,提現時則發送請求,結算層節點讀取到數據后,通過多簽或 TSS 對資產放行。 結算層的安全程度,取決於採用的跨鏈機制。

SCP 的實踐框架

我們可以通過如下框架,來理解 SCP 範式。 一個滿足 SCP 框架的產品,可以具備如充值、轉帳、提現、swap 等主要功能,在此基礎上還可以進一步擴展。  下圖是一個此類產品的原理圖:

  • 該專案的 DA 層使用了永久存儲設施 Arweave,即圖中的大圓圈。
  • 協調者 Coordinator,即執行層。  使用者將交易提交至協調者,協調者執行運算並展現運算結果,然後將使用者的原始輸入數據批量提交至 DA 層。
  • 檢測者 Detector,從 Arweave 上拉取協調者提交的交易原始數據,使用與協調者一致的演算法,對數據和結果進行驗證。 檢測者的客戶端同樣也是開源的,任何人都可以運行。
  • 守望者 Watchmen,掌管了提現系統多簽的一組檢測者。  會根據交易數據對提現請求進行驗證和放行。 另外守望者也負責簽署提案。

我們可以看到整套系統,他們達成的共識是全部位於鏈下的,這即存儲共識範式的核心——它拋棄了區塊鏈式的節點共識系統,讓執行層擺脫繁重的共識交流和確認過程,只需要做好一台伺服器的工作即可,從而達到近乎不受限制的 TPS 和經濟性。 這一點和 Rollup 非常類似,但 SCP 走向了和 Rollup 不同的道路,將其從一個擴容專屬的案例,嘗試轉向為一種 Web2 到 Web3 的新的過渡模式。

上面提及的協調者是一台伺服器,但這並不意味著協調者可以為所欲為。 和 Rollup 的排序器道理類似,在將使用者提交的原始數據批量地在 Arweave 上提交後,任何人都可以運行檢測者程式對其進行驗證,並和協調者返回的狀態進行對比。  某種程度上,這和銘文類應用的思路如出一轍。

在這種架構下,一個中心化的伺服器、資料庫並不構成根本的挑戰。 這也是 SCP 範式另一點,將「中心化」和「單一實體」這兩個概念綁定解耦了——一個去信任化的體系裡,可以有中心化元件,甚至可以是一個核心部件,但這並不影響整體上的去信任化。

我們可以喊出這樣一個口號——“下一代去信任化基礎設施不是非要依賴於共識協定,但應當是開源的系統與 P2P 節點網络”。

人們發明和使用區塊鏈的初衷是去信任化、帳本一致、不可偽造、可溯源等等老生常談的基本面,這在比特幣白皮書裡有明確闡述。  但在乙太坊之後,不論是舊公鏈的擴容方案,還是 Rollup 或模組化區塊鏈,大家都形成了思維定式:我們做的東西必須是一條區塊鏈(由節點的共識協議組成),或者是 Rollup 這種看起來是一條鏈的方案(只是有區塊鏈的數據結構,但節點沒有直接的共識消息互換)。

但現在來看,基於 SCP 的框架下,即使不是區塊鏈,也可以實現去信任化、帳本一致、不可偽造、可溯源等等一系列需求,當然前提是要有更明確的實現細節。

執行層

執行層是在整個系統中是至關重要的,它承擔了整個系統的運算過程,也決定了系統上可以運行怎樣的應用。

無限可能的執行環境

理論上執行層中的執行環境可以做成任何形態,可能性是無窮無盡的,具體取決於專案方如何定位自己的專案:

  • 交易所。 基於 SCP 可以構建公開、透明的、高 TPS 的交易所,該交易所既可以有 CEX 迅速、0 成本的特點,又保持了 DEX 的去中心化。 CEX 和 DEX 的分野在這裡就變得模糊起來。
  • 支付網路。 類似於支付寶、PayPal 等。
  • 支援載入程式/合約的虛擬機/區塊鏈。 任意開發者可以部署任意的應用程式在其上,和其他程式共用所有用戶的數據並根據使用者的指令進行操作。

SCP 這種支援任意執行環境的設計模式,有其獨特的好處:不必再依賴於某些存在歷史包袱的元件,尤其是像乙太坊社區獨創的 “帳戶抽象” 概念,對 SCP 來講天生就不需要。

而在 SCP 架構下,本身就不存在帳戶抽象的概念——你可以隨意採用 Web2 標準帳戶和區塊鏈帳戶等。 從這個角度講,許多成熟的 Web2 用例不需要重新思考和構建,就可以直接用於 SCP 上。 這一點或許是 SCP 相比於 Rollup 的益處。

透明與非對稱性

上面提到了賬戶系統,敏感的讀者應該已經發現,SCP 雖然可以利用 Web2 的帳戶體系,但原封不動地使用似乎也有問題。 因為這整個系統,是完全透明的! 直接使用使用者對伺服器的交互模型,會出現嚴重問題,導致整個系統毫無安全性可言。

我們先回顧下傳統的伺服器-使用者模型是如何工作的:

1. 帳號註冊:用戶在應用程式的註冊頁面輸入使用者名和密碼。 為保護使用者的密碼,伺服器收到後會通過哈希函數來處理密碼。 為增加哈希的複雜性並抵禦彩虹表攻擊,通常會為每個用戶的密碼連接一個隨機生成的字串(稱為 “鹽”),一起哈希處理。  使用者名、鹽、哈希被明文存儲在服務提供者的資料庫中,並不對外公開。  但即使如此,也需要做加鹽和安全處理,一防內鬼,二防攻擊。

2. 使用者登錄:使用者在登錄表單上輸入他們的使用者名和密碼。 系統比對處理后的密碼哈希值和資料庫中存儲的哈希值。 如果兩個哈希值匹配,表明使用者提供了正確的密碼,登錄進程繼續。

3. 操作認證:登錄驗證通過後,系統會為用戶創建一個會話。 通常情況下,會話資訊被存儲在伺服器上,並且伺服器發送一個標識(例如 cookie 或 token)給使用者的瀏覽器或應用。 使用者在接下來的操作中不再需要重複輸入使用者名和密碼:瀏覽器或應用會保存 cookie 標識,並在每個請求中附帶標識,表明自己獲得了 cookie 關聯的伺服器的許可。

我們再回顧下典型的 Web3 的區塊鏈-使用者交互體系:

1. 賬戶註冊:實際上沒有賬戶註冊這一過程,也沒有使用者名-密碼體系。 帳戶(位址)不需要註冊,天然存在,誰掌握其私鑰誰控制該帳戶。 私鑰由錢包在本地隨機生成,也不涉及聯網過程。

2. 使用者登錄:區塊鏈的使用並不需要登錄,大部分 dApp 沒有登錄這個過程,而是連接錢包。 有的 dApp 在連接錢包後, 會要求使用者進行簽名驗證,確保使用者真的持有私鑰,而不是僅僅是向前端傳了個錢包位址。

3. 操作認證:使用者直接向節點提交簽名后的數據,節點驗證後會向整個區塊鏈網路廣播該交易,滿足區塊鏈網路共識后使用者的操作即被確認。

兩種模式的差異是由對稱和非對稱導致的。 在伺服器-用戶架構中,雙方掌握相同的秘密。 在區塊鏈-用戶架構中,只有使用者掌握秘密。

SCP 的執行層雖然可以不是區塊鏈,但所有的數據又需要同步到公開可見的 DA 層,因此 SCP 所使用的登錄、操作的驗證方式必須是非對稱的。  但又因為不想有讓使用者保管私鑰、使用錢包等影響大規模採用的累贅動作和較差體驗,在 SCP 上構建的應用使用傳統的 ID 密碼或者 OAuth 三方認證登錄的需求也很強,那麼如何結合二者呢?

由於非對稱密碼學和零知識證明對具有不對稱性,我設想了兩種可能的方案:

  • 如果想使用 ID-密碼體系,可以將這個保存密碼的模組不做進 SCP 中,這樣其他人也就不可見。 SCP 執行層內部依然使用區塊鏈的公私鑰帳戶和操作邏輯,沒有註冊,沒有登錄等。  使用者的 ID 實際上會對應一個私鑰。  這個私鑰當然不能保存在專案方,比較可行的方案是使用 2-3 的 MPC 來解決中心化存儲的問題,同時又不讓使用者有使用私鑰的累贅。
  • 當依賴 OAuth 登錄時,可以利用 JWT(Json Web Token)可以作為身份認證的方式。  這個方式會比上面的顯得稍微中心化一些,因為它本質上需要依靠 Web2 大廠提供的第三方登錄服務作為身份認證。
  • 第一次使用第三方登錄時,將 JWT 中表徵使用者身份和服務商身份的欄位註冊在系統內。 在使用者的後續操作中,將操作指令作為 public input,而 JWT 整體作為一個 secret witness,用 ZKP 驗證每一筆使用者的交易。
    每個 JWT 有過期時限,使用者下次登錄時也會申請新的 JWT,所以無需永久保管。 另外這個系統內還需要依賴 JWK,這裡可以理解為大廠為驗證 JWK 提供的公鑰。 那麼 JWK 去中心化地如何輸入到系統內,日後應對私鑰輪替的方法等,也值得探討。

不論使用哪種方式,都比傳統方式的開發和運算的成本都要高一些,但這也是去中心化所付出的必要代價。  當然,專案方如果並不認為做到極致的去中心化是必要的,或者在開發的不同階段有不同的 milestone,沒有這些設計也是可以的,因為去中心化不是非黑即白,而是存在中間的灰色區域。

隱私性

上面提到的透明的問題,不僅對使用者的互動範式造成影響,也會對用戶數據造成影響。 用戶的數據都是直接暴露的。 雖然在區塊鏈中不是問題,但這在某些應用中是不太能接收的,所以開發者也可以構建隱私交易系統。

收費

執行層如何收費是另一個值得關注的點。 因為向 DA 層提交數據也需要成本,包括自身伺服器的運行等。 傳統區塊鏈向使用者收取 gas 費的第一個核心目的是避免使用者刷大量重複的交易來破壞交易網路,第二個才是根據 gas 來排序交易。 Web2 沒有類似的擔憂,所以只有洪水、DDoS 這些基本的概念。

執行層可以自定義各種的收費策略,比如完全免費或部分收費,也可以從其他的行為如 MEV(在排序器中已經非常成熟),市場活動等進行獲利。

抗審查性

執行層不具備抗審查性,理論上可以無限制地拒絕使用者的交易。 在 Rollup 中抗審查性可以由 L1 合約的強制歸集功能來保證,而側鏈或公鏈是完整的分散式區塊鏈網路,也難以進行審查。

目前並沒有明確的方案來解決抗審查問題,是 SCP 範式的一個問題。

共識層

該層是由鬆散的節點組成,這些節點並不主動構成網路,因此不是嚴格意義的有共識的一層,而僅僅是用來向外界(如使用者)確認當前執行層狀態的。

例如,如果你對這些節點的運行狀態有所懷疑,可以下載其檢測者用戶端,其中會運行與協調者相同的程序代碼。

不過這和 Rollup 類似,由於數據是批量提交的,執行層給使用者返回的狀態總是比 DA 層上的更新的。 這裡面就涉及一個預確認的問題:

執行層給使用者的是預確認、軟最終性的結果,因為還沒有提交到 DA 層;

而共識層給使用者提供的是硬最終性。  使用者對此可能不是特別在意,不過對於跨鏈橋等應用,必須遵循硬最終性。 比如,交易所的充提現系統是不會相信 Rollup 序列器在鏈下廣播的數據的,必須要等這些數據上乙太坊后,才認可。

除了能用來確認結果以外,共識層還有一點很重要的作用,就是作為執行層的防災冗餘。  如果執行層永久罷工、嚴重作惡,這個時候理論上任意的共識層都可以接手執行層的工作,接收用戶的請求。 如果發生如此嚴重的情況,社區應該會選擇出穩定可靠的節點來作為執行層的伺服器。

結算層

由於 SCP 並不是 Rollup,所以無法做到像 Rollup 的提現結算層那樣,不需要人工介入、完全基於密碼學和智慧合約代碼的去信任化提現。 SCP 跨鏈橋的安全程度是與側鏈或第三方見證人跨鏈橋相同的,需要依賴有許可權的多簽管理者為資產放行,我們稱為見證人模式。

將見證人橋做的盡可能去中心化,是很多跨鏈橋研究的議題。 篇幅所限這裡就不具體展開了。 一個設計良好的 SCP 平臺,在實踐中也必須有信譽良好的去中心化橋的多簽合作方。

有人可能會問 SCP 為什麼不使用有智慧合約的鏈作為 DA 層?  這樣可以做出給予合約,完全免信任的結算層。

長遠來看,只要克服一些技術困難,如果將 DA 層放到乙太坊等有合約的 DA 層上,並能構建出相應的用於驗證的合約,SCP 也可以獲得與 Rollup 相同的結算安全性,而不需要使用多簽。

但實踐中這未必是最優選擇:

1. 乙太坊並不專門用於數據保存,相對於純粹的數據存儲公鏈來說價格太高。 而對於 SCP 範式來講,足夠低的或者固定的存儲成本是至關重要的。  只有這樣才可能支撐的起 Web2 級別的輸送量。

2.  證明系統非常難以開發,因為 SCP 中不光可以類比 EVM,而可以實現任何邏輯。  而我們看大像 Optimism 這種團隊目前其欺詐證明仍然沒有上線,以及 zkEVM 的開發難度,就可以想像在乙太坊上想實現各式各樣的系統的證明,是難度極高的一件事。

所以 Rollup 這個方案只在特定的情況下,才有更優秀的實踐可行性,如果你打算實現一種更寬泛、更開放,擺脫 EVM 體系轉而融入更多的 Web2 feature,則乙太坊 Rollup 的思路並不合適。

SCP 並不是某種公鏈的擴容方案,而是一種更大的 Web3 計算平台架構,所以顯然不需要走乙太坊 Layer2 的思路。 一張圖對比 SCP 與其他範式

免責聲明:作為區塊鏈資訊平臺,本站所發佈文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。 文章內的資訊僅供參考,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。