刘果 | Guo Liu
刘果 | Guo Liu

“To change something, build a new model that makes the existing model obsolete.”

Web3 應用架構

Matters Web3 講座系列的筆記,關於 web3 應用程序架構的新興趨勢和模式。

Web3 的定義有很多方面。它可以是數字資產創造和使用的新模式,也可以是網絡結構和權力結構的去中心化。下面的討論將集中在 Web3 應用架構上,並且僅限於去中心化網絡結構方面。我假設觀眾對區塊鏈的工作原理有基本的了解,並且熟悉“智能合約”或“錢包”等概念。

Web2 與 Web3 架構

不斷發展的 Web3 堆棧建立在我們當前的技術之上,用戶仍然依賴 Web 瀏覽器來獲取 Web 應用程序並與之交互。瀏覽器是複雜且發展緩慢的軟件,因此很多技術進步都取決於與當前瀏覽器生態系統的合作或圍繞瀏覽器生態系統的工作。

通常在 Web2 中,用戶在瀏覽器中輸入地址後,例如 google.com,瀏覽器會從域名系統 (DNS) 服務器獲取 Google 服務器的 IP,然後從 Google 服務器獲取 Web 應用程序,最後渲染用戶的網絡應用程序。為了與用戶交互,Web 應用程序然後通過瀏覽器調用 Google 的服務器。

Web2

在 Web3 中,這個過程還是類似的。除了此時瀏覽器從基於區塊鏈的命名系統(如ENS )中獲取內容哈希,並通過內容哈希從去中心化存儲系統(如IPFS )中獲取 Web 應用程序。 Web 應用程序現在需要與區塊鏈、去中心化存儲和索引器交互,而不是與集中式服務器交互。

Web3

在談論去中心化時,大多數討論都指的是 Web 應用程序背後的 API 服務器。但命名系統有時更重要,特別是對於審查彈性而言,因為它是用戶需要的第一項服務,也是 DNS 欺騙等方法通常攻擊的對象。

區塊鏈天然適合去中心化的命名系統。命名系統由人類可讀的名稱和一段數據之間的映射組成,每個數據都由其所有者控制。這需要一個全球賬本,可以在區塊鏈上實現。

一個流行的例子是基於以太坊的 ENS。 ENS 中人類可讀的名稱可以映射到應用程序可以使用的以太坊地址或內容哈希。因此用戶可以將它用作他們錢包的名稱,項目可以使用它來指向其 Web 應用程序的內容哈希。

以太坊等區塊鍊和 IPFS 等存儲網絡通常以這種方式組合在一起,以提供去中心化應用程序的主幹。 IPFS擅長存儲靜態數據,可以利用以太坊動態指向IPFS上的最新版本。用戶向 ENS 查詢內容哈希,然後向 IPFS 查詢內容哈希對應的應用程序。

區塊鏈上的存儲在成本和形式上有很多限制,因此應用程序有時需要一個索引器來聚合來自區塊鏈的數據。一個流行的例子是 The Graph,它允許開發人員將區塊鏈數據聚合成所需的數據結構,然後使用一種稱為 GraphQL 的語言查詢數據。另一個例子是 RSS3,它將鏈上數據聚合到內容提要中供客戶檢索。

智能合約通常需要有關鏈下世界的信息,例如,買賣代幣的合約取決於股票市場。在這種情況下,需要一個受信任的服務器或一個服務器集群來將數據輸入到智能合約中。這個服務器或集群通常被稱為“oracle”,Chainlink 就是一個流行的例子。


實際上,應用程序使用的服務器比上面提到的要多得多。例如,大多數應用程序無法連接到以太坊或 IPFS 並以點對點的方式驗證數據,而是依賴於服務提供商。這種依賴性很重要,因為它們決定了應用程序的中心化程度或審查彈性。我們將在後面的部分討論細節。

去中心化網絡演進方向

以主機為中心與以內容為中心

我們現在看到的架構在很大程度上是過去的結果。互聯網建立在我們稱之為“以主機為中心”的心智模型之上,在該模型中,用戶指定他們想要連接的位置或對象,例如,Google.com。瀏覽器解析主機地址,呈現主機發回的任何數據,同時始終信任主機服務器。

例如,用戶連接到 Facebook 的服務器以查看她的提要,並且由於她無條件地信任 Facebook 的服務器,因此 Facebook 可以操縱她的提要以增加保留或插入廣告。以主機為中心的網絡本質上以主機為中心。

構建互聯網的 TCP/IP 棧是以主機為中心的。這種心智模型在很大程度上繼承自互聯網出現之前的電話線網絡結構,用戶通過電話相互聯繫並進行對話。

但隨著互聯網的發展,大多數用例不再是對話會話,而是命名數據塊的發布和檢索,無論是來自合同的電子郵件、朋友的內容提要,還是視頻文件電影。

在這些用例中,以主機為中心的模型效率非常低,尤其是對於流行數據。例如,當兩個人坐在同一個房間裡看同一個 Youtube 視頻時,他們都必須獨立連接到遠方的 Youtube 服務器,這是一種帶寬浪費。

這些用例的更自然的心智模型是以內容為中心的網絡,也稱為基於內容的網絡、命名數據網絡、面向數據的網絡或以信息為中心的網絡。這些不同名稱背後的想法是相似的:用戶不指定連接到哪里或連接到誰,而是指定他們想要計算機網絡的哪些數據。

通過這種方式,計算機可以輕鬆共享帶寬,並且每台計算機都被抽像出來並且可以很容易地替換為應用程序。這使得以內容為中心的網絡能夠高效地分發流行內容,並且本質上是去中心化的。


2006 年,TCP/IP 協議棧的主要貢獻者之一範·雅各布森 (Van Jacobson) 發表了名為“看待網絡的新方式”的演講 在 Google Tech Talks 上,正式闡述了這一願景。從那時起,許多研究小組一直在研究這個主題,有關更新的設計,您可以參考 Lixia Zhang 的演講NDN: A New Way to Communicate

同時,以內容為中心的網絡已經在不同的項目中以不同的形式實現。 BitTorrent 和許多商業化的 CDN 就是它的例子,而 Git 在某種意義上也是以內容為中心的。最近,區塊鍊和去中心化存儲系統也是以內容為中心的網絡的例子。

同行發現和數據驗證

在去中心化網絡中,每台計算機都被抽象化了。由於用戶的客戶端沒有連接到特定的計算機或對等點,因此它需要在網絡中發現新的對等點。第一次連接到網絡時,客戶端現在需要一個用於引導的對等點列表,以便在連接到一個或多個引導對等點後,它們將客戶端介紹給更多對等點。

如果客戶端連接到不受信任的隨機節點,它需要驗證它接收到的數據是否與它請求的數據相匹配。這意味著在請求數據時,需要以可驗證的方式命名數據。

一種方法是使用數據的內容哈希作為名稱。內容哈希是數據的校驗和,因此在接收到數據時,客戶端可以驗證接收到的內容的哈希是否與請求的名稱匹配。這適用於請求靜態內容並且可以有效地緩存和分發。 IPFS 地址、以太坊交易哈希和 Git 提交 sha 是內容哈希的示例。

對於動態數據,由於數據可以更新,客戶端無法提前知道內容哈希。客戶端可以通過在收到數據後驗證數據中的加密簽名來驗證發布者的身份。 Dat 和 IPNS 就是這樣的例子,比特幣中餘額的驗證也依賴於數據發布者的驗證。

正如我們所看到的,要形成一個去中心化和無信任的網絡,節點發現和數據驗證需要由瀏覽器和網絡應用程序在本地執行。然而,瀏覽器是成熟複雜的軟件,需要很長時間才能進化。儘管許多瀏覽器項目都在激進地嘗試新協議,例如 Brave Browser、Unstoppable Browser 和 Agregore Browser,但大多數打算去中心化的 Web 應用程序仍然依賴於服務器。

連接到去中心化網絡

在以太坊或 IPFS 等去中心化網絡中,節點以對等方式連接。然而,大多數應用程序中的客戶端軟件不具備在本地運行完整節點的資源,因此需要服務提供商連接到網絡。

因此,與分散網絡的連接通常是集中點。由於應用程序開發者需要不斷地為服務提供商付費,這也是一個財務“漏洞”,需要收入流來維持應用程序。

在以太坊中,存儲數據的成本以汽油費的形式支付給網絡。然而,讀取數據的成本不是。大多數其他區塊鏈也是如此。在 IPFS 中,網絡不包括經濟模型,存儲數據的成本由每個節點單獨處理,類似於 BitTorrent 和 Dat。然後,應用程序需要為節點使用或實施激勵層,以便為最終用戶提供帶寬和存儲數據。

應用程序如何連接到去中心化網絡是 Web3 基礎設施的許多發展所圍繞的問題。這也表明了 Web3 的去中心化和成熟程度。

我們將以以太坊和 IPFS 作為示例進行以下討論。以太坊的案例是區塊鏈的典型案例,IPFS 的案例是 p2p 存儲網絡的典型案例。

連接到以太坊

中心化服務提供商

連接到以太坊網絡的最常見方式是通過集中式服務提供商。這可以是 Alchemy 或 Infura 等商業服務提供商,也可以是應用程序開發人員提供的服務。

該提供者提供標準化服務並且易於替換,但仍然是單點故障,可以被阻止或篡改。此外,客戶端和用戶必須信任服務提供商,而無法驗證接收到的數據。

去中心化服務提供商

服務提供商也可以去中心化,這樣客戶端就可以連接到節點網絡,而不是連接到特定的以太坊節點,其中可以使用代幣來激勵為客戶端提供帶寬。一個例子是 Pocket Network,它目前在 DApp 開發人員中越來越受歡迎。

但是,由於客戶端無法在本地進行路由,它仍然需要依賴中心化服務器將流量路由或轉發到特定節點。而且由於客戶端無法驗證接收到的數據的完整性,網絡需要一個聲譽和抵押系統來懲罰不良行為。

索引器網絡

索引器網絡是連接到以太坊的另一種方式,但索引器節點不是使用標準 API 向客戶端提供原始區塊鏈數據,而是提供區塊鏈數據的聚合版本。這很有用,因為區塊鏈中的數據結構非常有限,開發人員可以使用索引器將數據聚合成合適的形狀。

索引器網絡的一個例子是 The Graph,它允許用戶在 GraphQL 中查詢不同的區塊鏈,GraphQL 是一種描述數據的語言。開發人員可以將 GraphQL 模式和解析器提交到索引器網絡,該網絡根據模式聚合數據,然後使用 GraphQL 查詢來查詢索引器。

由於客戶端無法驗證聚合數據的完整性,因此 The Graph 還需要一個信譽系統和一個 staking 機制,以鼓勵良好的行為和懲罰不良的行為。

輕節點

正如我們上面所討論的,在真正去中心化的網絡中,客戶端需要在本地驗證數據完整性並以無信任的方式連接到網絡。比特幣或以太坊中的節點是這樣工作的,但它們需要太多的存儲空間才能嵌入到大多數應用程序的客戶端中。

這就是為什麼以太坊輕節點非常重要,目前還不普遍但正在快速發展的原因。輕節點可以在不存儲所有區塊鏈數據的情況下驗證數據的完整性,這樣擁有輕節點的普通客戶端就可以以點對點、去信任的方式連接到以太坊網絡,形成真正的去中心化網絡。

然而,由於輕節點需要從其他全節點下載數據,它們就像吸血鬼一樣依賴他人的帶寬。由於輕節點尚未被廣泛採用,因此不知道這個問題有多大。一種可能的解決方案是將輕節點與帶寬共享激勵系統相結合,類似於 Pocket Network,這樣輕節點可以為他們需要的帶寬付費,但保持去中心化。

連接到 IPFS

對於從 IPFS 讀取數據,最常見的方式是通過公共網關,通常由團隊自願免費提供。對於存儲數據,最常見的方式是通過中心化的服務提供商,而提供商通常會向開發者收取費用。服務提供者可以是 Infura、Pinata 或 Matters。

這兩種情況都引入了單點故障的風險,使系統容易被阻塞和攻擊,並依賴一家公司繼續運營。他們還依賴於免費提供資源或尋找其他方式來補償成本的人。

連接到 IPFS 的另一種方法是通過令牌激勵的節點網絡。用戶為他們的數據被節點存儲支付代幣,例如使用 Crust Network、Arweave(通過 IPFS 橋)或 Filecoin。 Filecoin 還允許用戶為讀取數據付費。 Meson Network 提供了另一種從 IPFS 讀取數據的方法,即通過將客戶端軟件路由到附近的 IPFS 節點,同時使用令牌激勵該節點。

但是,客戶端軟件只要不能以p2p的方式進行路由和數據校驗,就需要信任和依賴一個中心化的服務器,無論是做存儲交易還是重定向到IPFS節點,這又是單點的失敗。

擁有完全去中心化網絡的唯一方法是直接在客戶端運行 IPFS 節點。與以太坊全節點相比,IPFS 節點需要的資源要少得多,並且已經在 Brave Browser、Audius 和 OpenBazaar 等桌面應用程序中實現。通過這種方式,用戶之間可以直接共享數據,因為 BitTorrent 或 eDonkey 已成功運行。

權力下放的類型

上面的討論假設去中心化是一個目標,區分去中心化的類型以了解它們是否必要或實用是有幫助的。 Vitalik Buterin 提出了一種有用的去中心化分類,即邏輯的、架構的和政治的。

當一個系統被分成兩半時,它是否能按預期運行,揭示了該系統在邏輯上的去中心化程度。有多少台計算機以及形成什麼樣的網絡結構決定了架構的去中心化。利益相關者如何做出決策是政治分權。


https://medium.com/@VitalikButerin/the-meaning-of-decentralization-a0c92b76a274

邏輯去中心化最能抵禦審查和攻擊,因為網絡的一部分在與其餘部分斷開連接時仍按設計運行。 Holochain 和 Secure Scuttlebutt 是兩個很好的例子,從理論上講,它們非常安全和健壯。然而,大多數應用程序需要某種形式的共享令牌,這需要一個全球分類賬,因此在邏輯上是中心化的。

架構去中心化還提供了一些穩健性,因為網絡不依賴於單個計算機。從上面的討論中我們可以看出,對等路由和數據驗證在客戶端進行也很重要,這樣客戶端就不需要依賴單一的服務器。

然而,由於對等路由和數據驗證的計算成本很高,因此它們在很大程度上取決於瀏覽器。瀏覽器中此類機制的標準化和採用可以看作是 web3 去中心化程度的指標,甚至可以看作是應用程序開發人員的 web3 技術棧的成熟度。在瀏覽器採用之前,如果有足夠的去中心化激勵,開發人員還可以使用 WebAssembly 等技術來實現路由和驗證。

政治去中心化可能是一種更重要的去中心化形式,因為所有應用程序都在進化,應該由使用和開發應用程序的人共同決定方向。政治去中心化會降低決策速度,因此隨著應用程序的成熟逐漸去中心化決策通常是可行的。

政治權力下放超出了本次討論的範圍。作為所有社區和社會都試圖解決的問題,它超出了任何單一討論的範圍。它可能沒有明確的解決方案,但無論我們對技術的理解如何,它都是一個我們都可以而且應該參與的話題。

CC BY-NC-ND 2.0 版權聲明

喜歡我的文章嗎?
別忘了給點支持與讚賞,讓我知道創作的路上有你陪伴。

載入中…
載入中…

發布評論