Web3 应用架构

刘果 | Guo Liu
·
·
IPFS
·
来自 Matters Web3 讲座系列的笔记,关于 web3 应用程序架构的新兴趋势和模式。

Web3 的定义有很多方面。它可以是创造和使用数字资产的新模式,也可以是网络结构和权力结构的去中心化。以下讨论将集中在 Web3 应用程序架构上,并仅限于去中心化网络结构方面。我假设观众对区块链的工作原理有基本的了解,并且熟悉“智能合约”或“钱包”等概念。

Web2 与 Web3 架构

不断发展的 Web3 堆栈建立在我们当前的技术之上,用户仍然依赖 Web 浏览器来获取 Web 应用程序并与之交互。浏览器是复杂且发展缓慢的软件,如此多的技术进步取决于使用或围绕当前的浏览器生态系统工作。

通常在 Web2 中,用户在浏览器中输入地址后,例如 google.com,浏览器会从域名系统 (DNS) 服务器获取 Google 服务器的 IP,然后从 Google 的服务器获取 Web 应用程序,最后呈现用户的 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 并以 peer-2-peer 方式验证数据,而是依赖于服务提供商。这种依赖很重要,因为它们决定了应用程序的集中度或审查弹性。我们将在后面的部分讨论细节。

去中心化网络的演进方向

以主机为中心与以内容为中心

我们现在看到的架构很大程度上是过去的结果。互联网建立在我们可以称之为“以主机为中心”的心理模型之上,用户可以在其中指定他们想要连接的位置或对象,例如 Google.com。浏览器解析主机地址,呈现主机发回的任何数据,同时始终信任主机服务器。

例如,用户连接到 Facebook 的服务器以查看她的提要,并且由于她无条件信任 Facebook 的服务器,因此 Facebook 可以操纵她的提要以增加保留或插入广告。以主机为中心的网络本质上是围绕主机集中的。

构建互联网的 TCP/IP 堆栈是以主机为中心的。这种心智模型很大程度上继承自互联网之前的电话线网络结构,用户通过电话相互连接并进行对话。

但随着互联网的发展,大多数用例不再是会话会话,而是发布和检索指定的数据块,无论是来自合同的电子邮件、朋友的内容提要还是视频文件电影。

在这些用例中,以主机为中心的模型效率非常低,尤其是对于流行数据。例如,当两个人坐在同一个房间观看同一个Youtube视频时,他们都必须独立连接到远处的Youtube服务器,这很浪费带宽。

这些用例更自然的思维模型是以内容为中心的网络,也称为基于内容的网络、命名数据网络、面向数据的网络或以信息为中心的网络。这些不同名称背后的想法是相似的:用户不是指定连接到哪里或连接到谁,而是指定他们想要哪些数据到计算机网络。

通过这种方式,计算机可以轻松共享带宽,并且每台计算机都被抽象出来并易于替换为应用程序。这使得以内容为中心的网络可以有效地分发流行内容,并且本质上是去中心化的。


2006 年,TCP/IP 协议栈的主要贡献者之一 Van Jacobson 发表了名为A New Way to look at Networking的演讲 在 Google Tech Talks 上,正式化并阐明了这一愿景。从那时起,许多研究小组一直在研究这个主题,有关更新的设计,您可以参考 Lixia Zhang 的演讲NDN: A New Way to Communicate

同时,以内容为中心的网络已经在不同的项目中以不同的形式实施。 BitTorrent 和许多商业化的 CDN 就是其中的例子,Git 在某种意义上也是以内容为中心的。最近,区块链和分散存储系统也是以内容为中心的网络的例子。

对等发现和数据验证

在去中心化网络中,每台计算机都被抽象出来。由于用户的客户端没有连接到特定的计算机或对等点,它需要在网络中发现新的对等点。在第一次连接到网络时,客户端现在需要一个用于引导的对等点列表,以便在连接到一个或多个引导对等点后,它们将客户端介绍给更多对等点。

如果客户端连接到不受信任的随机节点,它需要验证它接收到的数据是否与它请求的数据匹配。这意味着在请求数据时,需要以可验证的方式命名数据。

一种方法是使用数据的内容哈希作为名称。内容哈希是数据的校验和,因此在接收到数据后,客户端可以验证接收到的内容的哈希是否与请求的名称匹配。这适用于请求静态内容,并且缓存和分发效率很高。 IPFS 地址、以太坊交易哈希和 Git 提交 sha 是内容哈希的示例。

对于动态数据,由于数据可以更新,客户端无法提前知道内容哈希。客户端可以通过在收到数据后验证数据中的加密签名来验证发布者的身份。 Dat 和 IPNS 就是这方面的例子,比特币余额的验证也依赖于数据发布者的验证。

正如我们所见,要形成一个去中心化和去信任的网络,需要由浏览器和 Web 应用在本地执行对等发现和数据验证。然而,浏览器是成熟而复杂的软件,需要很长时间才能进化。尽管许多浏览器项目都在从根本上试验新协议,例如 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 查询来查询索引器。

由于客户端无法验证聚合数据的完整性,因此 The Graph 还需要一个信誉系统和一个 Staking 机制,以便鼓励良好的行为,惩罚不良的行为。

轻节点

正如我们上面所讨论的,在真正去中心化的网络中,客户端需要在本地验证数据完整性并以不信任的方式连接到网络。比特币或以太坊中的节点就是这样工作的,但是对于大多数应用程序来说,它们需要太多的存储空间才能嵌入到客户端中。

这就是为什么以太坊轻节点非常重要,目前还不常见,但正在快速发展。轻节点可以在不存储所有区块链数据的情况下验证数据完整性,使拥有轻节点的普通客户端可以点对点、去信任的方式连接到以太坊网络,形成真正的去中心化网络。

然而,由于轻节点需要从其他全节点下载数据,它们的行为就像依赖于其他节点带宽的 leechers。目前尚不清楚这个问题有多大,因为轻节点尚未被广泛采用。一种可能的解决方案是将轻节点与带宽共享的激励系统相结合,类似于 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 授权

喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!

logbook icon
刘果 | Guo Liu“To change something, build a new model that makes the existing model obsolete.”
  • 来自作者
  • 相关推荐
游记
2 篇作品
分布式信息网络
9 篇作品
纽约诸法门
3 篇作品