{"content":{"title":"理解 Web3 及其架构和技术栈","body":"> * 原文链接： https://medium.com/@k.deepak629/web3-architecture-and-tech-stack-a-complete-beginners-guide-5fc624c653ce\r\n> * 译文出自：[登链翻译计划](https://github.com/lbc-team/Pioneer)\r\n> * 译者：[翻译小组](https://learnblockchain.cn/people/412)  校对：[Tiny 熊](https://learnblockchain.cn/people/15)\r\n> * 本文永久链接：[learnblockchain.cn/article…](https://learnblockchain.cn/article/6564)\r\n\r\n\r\n## 背景\r\n\r\n几个月前，当我接触到区块链时，我感到相当困惑：我不知道从 Web2 到 Web3 有哪些技术。此外，无论人们说要选择哪种过渡方式，大多数技术性问题的回答都包含非技术性的营销术语，让我更加茫然，不知道从何开始。这就是为什么这篇文章从学生的角度出现：一个刚刚结束了学习相关内容和什么是 Web3 的旅程的人。\r\n\r\n我的朋友对 Web3 的评估并不完全正确，他简单地将其视为区块链系统的另一个名称。Web3 的基本基础确实围绕着区块链，但当你更深入地了解其发展时，你会发现区块链只是其中的一个方面。为了证明这一点，在与 Web3 相关的应用程序中，区块链的角色与在 Web2 技术上的构建应用程序使用的数据库相当。\r\n\r\n**Web1** = 信息互联网；你无法与HTML CSS 网站交互 。\r\n\r\n**Web2** = 互动互联网；像 Facebook、Twitter 等现代平台，可以让你与他人端到端地连接。\r\n\r\n**Web3** = 新的价值互联网，消除了信息中心化的互联网。\r\n\r\n因此，如果我们试图定义 Web3，我们可以说它用来帮助分布式应用程序（dApps）的开发。是的 - 就是我们从《硅谷》中听到的分布式互联网，来自[Richard in Silicon Valley](https://silicon-valley.fandom.com/wiki/Richard_Hendricks)！\r\n\r\n然而，我们没有像《硅谷》中基于压缩引擎平台来构建。相反，我们基于一系列协议和平台来实现这个开发系统（Web3）。这些协议是一组规则，规定了你的应用程序的工作方式，而平台则是方便应用程序的创建。\r\n\r\n好吧，但是我们为什么需要首先使用 dApps 呢？\r\n\r\n创建 dApp 的最重要的好处是**所有权**和**身份**。拥有数据、内容，实际上是拥有自我身份的一切——这个概念在谷歌和 Facebook 等顶级机构的出现之后变得模糊不清。\r\n\r\n人们谈论的另一个重要好处是**可组合性**，这是 Web3 的核心支柱之一。\r\n\r\n目前所有软件公司都集中精力获取消费者信息，这是他们在竞争中获得独特地位的主要资产。拥有消费者记录而不是产品的公司在相互竞争，它们有类似的用户界面和操作流程，但由于其独特的“数据”而显得重要。\r\n\r\n这就是 Web3 将要颠覆，通过在不同应用程序之间共享和使用数据，使每个应用程序都可以组合。想象一下一个元宇宙，在那里你可以从 Meta 购买物品并在 Microsoft 生态系统中使用它们。这是 Web3 最令人兴奋和有趣的方面。Web3 正在使网络真正可组合！\r\n\r\n但这还不是全部；由于这些应用程序带来的高度信任和可靠性，具有无限可能性；我们甚至还没有想象出 dApp 无处不在的未来会是什么样子。我觉得 Web3 可能会像开源对开发者生态系统带来的革命一样开始。\r\n\r\n## 理解 Web3 架构\r\n\r\n现在我们已经定义了 Web3，我们需要了解这些协议和平台如何共同工作，帮助我们构建这些 dApp。\r\n\r\n当我们想象一个普通的 Web 应用程序时，我们设想的是一个由以下组成的架构：\r\n\r\n![web3 架构](https://img.learnblockchain.cn/pics/20230914175606.webp!/scale/70)\r\n\r\n虽然我没有描绘缓存、队列等内容，但一个普通的架构大致是这样的。\r\n\r\n对于一个 Web3 应用程序，前端部分将保持不变，但在后端方面会发生一些有趣的变化。让我们看看它是如何工作的：\r\n\r\n![web3 架构前端](https://img.learnblockchain.cn/pics/20230914175612.webp!/scale/70)\r\n\r\n如果我们比较 Web2 和 Web3，**区块链节点**正在承担繁重的工作并管理我们的数据，这些数据被分散到一个区块链网络中。由于直接存储在链上是昂贵的，我们有一些链下**文件存储**和**P2P 数据库**来促进数据存储。最后，为了构建一个安全层，我们有一个**钱包或基于私钥的身份验证**来验证个人的身份。\r\n\r\n请注意，这只是对架构的宏观描述。实际上，我们有更复杂的应用程序，并且需要来自 Web2 和 Web3 的架构参数。\r\n\r\n## Web3 技术栈\r\n\r\n到目前为止，我们已经了解了 Web3 架构的一般表现。现在，让我们深入研究每个组件，以更好地理解技术栈。\r\n\r\n所以让我们从底部开始：\r\n\r\n### 区块链\r\n\r\n当谈到选择哪一个区块链来构建，这是一个最具挑战性的任务之一。需要考虑许多因素：去中心化、交易吞吐量、gas费用、生态系统/互操作性等等，我们不会对它们进行辩论，因为这永远不会结束。这就像选择你的编程语言。每一种都可以工作；有些在特定情况下更好，其他用例下可能选择其他。\r\n\r\n尽管如此，作为一个初学者，我可能建议从[Ethereum 虚拟机（EVM）](https://ethereum.org/en/developers/docs/evm/)开始，使用[Solidity](https://learnblockchain.cn/docs/solidity/)。这是因为它周围有大量的开发者社区。\r\n\r\nEVM 充当虚拟机，是以太坊整个操作结构的基石。以太坊引入了智能合约的概念，是最常用的区块链。Solidity是用于创建智能合约的语言。它在语法上与 JavaScript 非常相似，这对于 Web2 开发人员可能是有帮助的。在底层，Solidity被编译成称为[opcodes](https://ethereum.org/en/developers/docs/evm/opcodeshttps://ethereum.org/en/developers/docs/evm/opcodes)的低级指令，供 EVM 解释。\r\n\r\n当你学会了这些，理解生态系统中其他技术的概念将会更容易，比如：\r\n\r\n- [Solana](https://solana.com/)：类似以太坊的另一种区块链，专注于提供更快的交易时间和更低的费用。智能合约可以用 Rust、C 和 C++编写。\r\n- Layer 2（L2）：L2 指的是在现有区块链系统（通常是以太坊）之上构建的二层协议，借用了主链的共识安全性。这里有很多选择，但受欢迎的是[Polygon](https://polygon.technology/)、[Arbitrium](https://arbitrum.io/)、[StarkEx](https://starkware.co/starkex/)和[StarkNet](https://starkware.co/starknet/)、[Optimism](https://www.optimism.io/)等。\r\n- 应用链：虽然作为新手，你不需要这个，但我认为这是目前最令人兴奋的选择。你可以使用[Tendermint](https://tender铸造.com/) / [Cosmos](https://cosmos.network/)、[Polkadot](http://polkadot.network/)等平台构建自己的区块链/共识系统。\r\n\r\n### 区块链节点\r\n\r\n要在生产环境中部署应用程序，你需要一个服务器。区块链执行此任务的是节点。区块链节点是网络利益相关者或运行“区块链软件（客户端）”的设备。因此，节点被授权跟踪分布式账本，并承担网络通信任务。P2P（点对点）协议允许节点在网络内进行通信，并传输有关交易和新区块的信息。\r\n\r\n你可以自行运行区块链节点，也可以选择像[Quicknode](https://www.quicknode.com/)、[Moralis](https://moralis.io/)、[Infura](https://infura.io/)等提供 API 以创建自动化流程的节点服务提供商。对于自托管，[AWS Cloud](https://aws.amazon.com/blockchain/)和[Azure](https://azure.microsoft.com/en-in/solutions/blockchain/)提供了适用于更受欢迎的链的镜像供你使用。另外，大多数链都会让你自己轻松运行的节点/验证器。唯一可能有些麻烦的是确保运行时间和维护，这取决于你的网络。\r\n\r\n### P2P 数据库\r\n\r\n任何人都会问的第一个问题是：既然我们使用区块链，为什么还需要数据库呢？此外，它不会妨碍我们构建 dApp 的想法吗？\r\n\r\n简单来说，将数据存储在区块链上是缓慢且昂贵的。我们需要一个额外的数据库来离线访问数据，确保我们不会一遍又一遍地访问链。为了实现去中心化，我们使用点对点（P2P）数据库来存储和托管所有数据流，以消除中心数据库服务器、区块链或本地存储。想想你是如何下载种子文件的！\r\n\r\n[Ceramic网络](https://ceramic.network/)是目前最常见的去中心化数据库提供商，我个人了解到的。\r\n\r\n### 去中心化文件存储\r\n\r\n与其他应用程序一样，我们需要一个专用的文件存储系统（类似于 Web2 应用程序中的[Amazon S3](https://aws.amazon.com/s3/)）。数据库本质上是表格数据，而文件存储则是你需要存储大型媒体文件的基于文件夹的数据。[IPFS](https://ipfs.io/)是最常见的 P2P 文件系统协议，拥有出色的社区支持。[Arweave](https://www.arweave.org/)是另一个专注于永久保存数据的选择。你可以使用像[Filecoin](https://docs.filecoin.io/about-filecoin/what-is-filecoin/)、[Skynet](https://siasky.net/)、[Storj](https://storj.io/)和[0Chain](https://0chain.net/)这样的平台来托管这些文件存储系统。\r\n\r\n### Web3 中的身份验证\r\n\r\n我真诚地认为，身份验证是 Web3 中最重要的方面之一。如果不将用户登录到智能合约中，就无法访问他们的钱包并进行最简单的交易。你应该注意，签署交易才使得与区块链的每次交互都成为可能。\r\n\r\n在 Web2 世界中，传统的登录方法是使用简单的表单结构，将用户详细信息存储在数据库中，并进行交叉检查以进行验证。此外，像 Google 和 Facebook 这样的服务提供了[OAuth](https://en.wikipedia.org/wiki/OAuth)，可以直接访问一些基本信息，使流程更加无缝。尽管这种方法很方便，但在 dApp 中无法使用，因为需要你的私钥来签署交易。\r\n\r\n在 Web3 中，我们没有持有用户的数据，但实际上，我们有钱包（本质上是私钥的包装器），在钱包中使用加密签名来证明对这些区块链地址的所有权。作为 Web3 开发人员，了解如何访问和与用户的地址和私钥进行交互是至关重要的。\r\n\r\n拥有区块链钱包的“迷人之处”在于，一旦用户丢失了钱包地址的[私钥](https://www.gemini.com/cryptopedia/public-private-keys-cryptography)，就没有人能够为他们恢复它。这既有用又可怕。有很多[加密百万富翁的故事](https://www.newyorker.com/magazine/2021/12/13/half-a-billion-in-bitcoin-lost-in-the-dump)，他们由于将私钥存储在丢失的硬盘中失去了一切。\r\n\r\n许多项目尝试了不同的方法来解决这个问题，并帮助用户恢复该密钥，其中最常见的方法之一是助记词。最著名的钱包之一，[MetaMask](https://metamask.io/)，使用了 12 个单词的助记词的概念，通过[BIP39 算法](https://learnblockchain.cn/2018/09/28/hdwallet#BIP39)为你在 MetaMask 帐户中存储的每个钱包地址和私钥生成唯一的数组。但是，记住每个钱包账户组的正确顺序的 12 个随机生成的单词对于用户来说是困难的。\r\n\r\n在尝试解决这种糟糕的用户体验的问题时，我发现了[Web3Auth](https://web3auth.io/)，有趣的是，在接下来的两个月里，我加入了他们。Web3Auth 是最受欢迎的解决方案之一，用于新用户在 Web2 和 Web3 世界之间建立桥梁。这是一个简单的身份验证基础设施，以用户自托管的方式为 Web3 应用程序提供 OAuth 功能。通过自托管，我们指的是用户拥有密钥，而不是应用程序或 Web3Auth。这是通过独特的 MPC 架构实现的，因此私钥永远不会存储在单个具有完全访问权限的服务器/节点或方法中。在[此处](https://docs.web3auth.io/overview/key-management)阅读更多关于基础设施的信息。\r\n\r\n我认为这对于项目的被采用来说可能是一件重要的事情。我建议你去看一下。\r\n\r\n### 前端实现\r\n\r\n许多开发人员可能不知道，但是 Web3 和 Web2 的前端技术是相同的。唯一的区别在于你需要重新构想应用的用户体验，因为身份验证、区块链处理和应用程序的一般流程与 Web2 应用程序略有不同。\r\n\r\n我建议你继续使用 [React](https://reactjs.org/) 和 [Next.js](https://nextjs.org/)，因为大多数开发人员目前在 Web3 世界中使用这些技术。我可能有偏见，但几乎每个其他项目都有 React 集成。如果你正在使用 Webpack 5，请确保在开发应用程序时需要处理一些 polyfills；其他的一切通常都是相同的。\r\n\r\n对于后端，情况会有所不同。在这里，你需要了解如何与区块链进行交互。Web3 交互库可以帮助你实现这一点，但你需要知道它们如何工作并与区块链进行正确的交互。\r\n\r\n### 区块链交互（Web3）库和开发工具：\r\n\r\nWeb3 库允许你使用 HTTP、IPC 或 WebSocket 与节点进行交互。这些库帮助开发人员编写直观的代码方法来初始化与你选择的任何链进行交互的 JSON RPC 请求（在底层）。\r\n\r\n在以太坊上，一些 Web3 库包括 [Web3.js](https://web3js.readthedocs.io/en/1.0/)、[Ethers.js](https://docs.ethers.io/) 和 [Light.js](https://github.com/openethereum/js-libs/tree/master/packages/light.js)。此外，许多链还有开发工具，提供的功能比公共测试网络更快速迭代。例如 [Ganache](https://www.trufflesuite.com/ganache)、[Truffle](https://www.trufflesuite.com/truffle)、[Hardhat](https://hardhat.org/) 、[Foundry](https://learnblockchain.cn/docs/foundry/i18n/zh/和 [Brownie](https://eth-brownie.readthedocs.io/en/stable/)。\r\n\r\n对于以太坊开发的入门，我强烈推荐你去看一下 [Remix IDE](https://remix.ethereum.org/) —— 这是一个初学者[学习 Solidity](https://decert.me/tutorial/solidity/intro/) 和[以太坊概念](https://decert.me/tutorial/solidity/ethereum/evm_core)的最佳地方。你可以直接与代码进行交互和测试，而无需设置所有这些库。\r\n\r\n## 总结\r\n\r\n总的来说，我相信 Web3 为新的开发者提供了一个令人兴奋的机会，让他们尝试一些不同的东西，摆脱传统软件开发的方面。同时，进行这种比较并理解从何处开始对于任何想要构建去中心化应用程序的人来说都是非常必要的，因为在世界上总会有两者的结合。\r\n\r\nWeb3 已经来了，但这并不意味着 Web2 的概念已经死了。学习新的技术栈，同时理解其关键用途和特点，是开发者能够引领这个新行业的唯一途径。\r\n\r\n我希望这篇博客能帮助你理解 Web3 应用程序的一些关键方面。如果我漏掉或搞砸了什么，请务必告诉我，因为我还是一个在这个新世界中尝试不同东西的学习者 :)\r\n\r\n\r\n\r\n---\r\n\r\n本翻译由 [DeCert.me](https://decert.me/) 协助支持， 来DeCert码一个未来， 支持每一位开发者构建自己的可信履历。"},"author":{"user":"https://learnblockchain.cn/people/412","address":null},"history":null,"timestamp":1694786819,"version":1}