去中心化应用架构剖析
去中心化应用程序 (dApp) 部分或全部基于去中心化技术构建。 在本文中,我们将探索 dApp 的完整架构,包括前端、托管、钱包、智能合约、节点访问、数据存储和其他潜在组件。
一键发币: SOL | BNB | ETH | BASE | Blast | ARB | OP | POLYGON | AVAX | FTM | OK
去中心化应用程序 (dApp) 为用户提供自主权、安全性和透明度,正在改变数字格局。 与依赖集中式服务器的传统应用程序不同,dApp(部分或全部)基于去中心化技术构建。 在本文中,我们将探索 dApp 的完整架构,包括前端、托管、钱包、智能合约、节点访问、数据存储和其他潜在组件。 每一层都可以自己填写一个完整的博客,但我们尝试全面总结整个技术栈。
1、前端
前端(frontend)是 dApp 的用户界面 (UI)。 与 web2 一样,它通常是使用流行的 Web 技术(例如 HTML、CSS 和 JavaScript)构建的。 React、Angular 和 Vue.js 等框架通常用于创建响应式动态 UI。
前端必须以某种方式与后端进行通信。 为此,需要连接到节点,并且看开发库利用节点进行通信。 最流行的 Javascript 库是 Web3.js 和 Ethers.js,最流行的 Python 库是 web3.py。 虽然我们看到越来越多的 Javascript 库和包,尤其是支持 React 的库和包正在发布,但 Python 生态系统还不够发达(提示:有一个明显的空白你可以填补🙌)。 这些库提供了用于处理前端逻辑的实用程序,包括签署交易、检索帐户信息、管理 web3 钱包等。
dApp 还要求前端在向 dApp 后端发送请求之前连接到区块链节点,后端由部署在链上的智能合约组成。 虽然自己运行区块链节点可能会减少对任何提供商的依赖,但它是资源密集型的。 Alchemy、QuickNode、Tatum、Ankr 或 Infura 等提供商提供了合适的解决方案。
向 Alchemy 的朋友们致敬,尤其是 Vitto,他们构建了 npx 包 create-web3-dapp,其中包括开始超快速构建 dApp 所需的一切。
2、应用托管
托管(hosting)是指存储和提供应用程序文件的过程,允许用户通过互联网访问它并与之交互。
在传统的集中式托管中,一台或多台专用服务器负责提供应用程序的内容。 这种方法通常依赖于单个实体,即托管提供商。 如今绝大多数 dApp 都使用集中式托管。 这会造成潜在的单点故障以及潜在的审查。
去中i虚拟化应用程序托管与集中式模型不同,它将应用程序的文件分布在节点网络上,每个节点都贡献存储和带宽资源。 可以使用 IPFS 或 Swarm 等解决方案。 如果你想开始托管你的去中心化 dApp,一定要看看 Fleek。 如果你觉得去中心化托管太过了,仍然可以看看 Fleek(他们的团队做得非常酷)
3、钱包
钱包(wallet)用于管理用户的数字资产、验证用户身份并在区块链上签署交易。 在 dApp 的背景下,钱包存储用户的私钥并促进与底层智能合约的交易。 关于什么样的钱包能够提供合理的用户体验、进入门槛低,但最重要的是为用户提供高安全性,有很多不同的观点。不幸的是,有太多的坏人试图窃取私钥并获取私钥, 通过社会工程访问钱包!
有不同类型的钱包:浏览器内置钱包 vs. 浏览器扩展,或者托管钱包 vs. 非托管钱包。
一些网络浏览器(例如 Brave 或 Opera)带有内置钱包,允许用户管理其数字资产并直接在浏览器内与 dApp 交互。 微软最近刚刚宣布,他们还将在其 Edge 浏览器中内置原生钱包。 浏览器扩展钱包(例如 MetaMask 或 Trust Wallet)是单独的附加组件,用户可以在其首选浏览器中安装。 这些钱包通常更加通用,支持更广泛的加密货币和区块链网络。 虽然如今内置钱包支持的区块链数量通常受到限制,但扩展程序更容易受到网络钓鱼等攻击。
托管钱包由第三方服务提供商管理,例如交易所或钱包服务,它们保持对用户私钥的控制。 用户通过服务提供商的平台访问钱包,依靠它们来实现安全和资产管理。 非托管钱包使用户可以完全控制自己的私钥,使他们能够在不依赖第三方的情况下管理自己的数字资产。 通常可用于与 dApp 交互的钱包是非托管的,因此用户必须自行管理私钥。 非托管钱包有多种不同的方法,例如 Magic、Argent 或 Metamask。
4、区块链节点
节点(node)是通过验证和中继交易参与区块链网络的单独服务器。 要与 dApp 交互,客户端/前端必须连接到区块链网络内的节点。 然而,用户也可以直接通过节点或另一个智能合约与 dApp 交互! 这意味着如果您的智能合约部署在公共区块链上,您的前端并不是用户与后端交互的唯一方式。
Alchemy 和 QuickNode 等服务提供对远程节点的访问,使开发人员能够专注于构建他们的 dApp,而无需维护自己的基础设施。 对于启动专用节点但仍无法自行管理的情况,Chainstack 是一个可行的解决方案。 或者,开发人员可以使用 Geth(以太坊)或 Solana 的 Validator 等软件运行自己的节点。
节点支持读写操作。 如果你的应用程序仅允许从区块链读取数据,则无需支付交易费用。 如果你的 dApp 支持写入操作,则需要支付交易费(= Gas 费)。 例如 Tatum 不仅提供了节点,还为 dApp 开发者提供了支付用户 Gas 费的解决方案,因此用户不必自己支付 Gas 费,这保证了你的用户可以与你的 dApp 充分交互, 即使他们的数字资产可能不足以支付gas费用。
5、智能合约
智能合约是任何 dApp 的支柱,允许写入和读取区块链。 智能合约采用 Solidity (Ethereum) 或 Rust (Solana) 等编程语言编写,定义了管理 dApp 操作的逻辑和规则。
在典型的智能合约中,一旦部署,其代码就无法更改,这可能会导致尝试修复错误或添加新功能时遇到困难。 可升级(代理)合约通过将合约逻辑与合约数据存储分离来解决这个问题。 这些合约由两个主要部分组成(基本上是 2 个或更多智能合约):
- 代理合约:代理合约充当中间人,将传入请求转发到逻辑合约,同时维护合约的状态。 代理合约在升级过程中保持不变。
- 逻辑合约:逻辑合约包含应用程序的实际代码和业务逻辑。 开发者可以部署新版本的逻辑合约并更新代理合约以指向新的逻辑,从而在不影响合约数据的情况下实现无缝升级。
dApp不仅可以利用内部开发的智能合约,还可以与其他人部署的智能合约(协议)连接。 例如,流行的 dApp 1inch(DEX 聚合器)开发了智能合约,可以与 Uniswap 和 Sushiswap 等各种去中心化交易所的智能合约进行交互。
部署在一条链(例如以太坊)上的智能合约不能简单地与部署在另一条链(例如Polygon)上的另一个智能合约交互。 支持多个链将有助于满足更多的用户群体,并可能带来先进的功能,例如零知识证明或更快的交易吞吐量。 这种跨链交互的唯一方法是在 dApp 中实现像 Wormhole 这样的桥梁或像 Cosmos 这样的互操作协议。
6、索引方案
索引(indexing)方案使区块链数据更易于访问和查询,在去中心化应用程序 (dApp) 生态系统中发挥着至关重要的作用。
随着区块链规模和复杂性的增长,直接从链中检索特定数据可能会很慢并且占用资源。 索引方案通过创建结构化索引数据库来应对这一挑战,从而实现更快、更高效的数据检索。 许多索引解决方案提供实时数据同步,确保在相关事件发生时立即通知 dApp。 这使得 dApp 能够快速准确地触发 webhooks 或操作来响应链上事件。
最常见的解决方案是 The Graph,它是一种去中心化索引协议,用于开发子图,但如今许多节点提供商(例如 QuickNode)也提供索引功能。
7、数据存储
虽然区块链适合存储交易数据,但由于可扩展性和成本问题,它并不适合大规模数据存储。 IPFS 或 Filecoin 等去中心化存储解决方案通常用于链下存储 dApp 数据,提供更高效、更具成本效益的存储选项。 这些服务采用加密和分片来确保数据隐私和完整性。 构建 dApp 时也可以使用集中式数据存储,但它不会再完全去中心化,这一点与上面讨论的托管相同。
8、预言机
智能合约根据区块链网络中可用的信息执行预定义的逻辑。 然而,许多用例需要来自外部源的数据(例如天气、股票价格或体育比分)才能有效运行。 预言机通过向智能合约安全地提供链下数据来满足这一需求。 流行的预言机是 Chainlink 和 UMA。
9、结束语
去中心化应用程序的完整技术栈由许多层和组件组成,并且目前可以决定实施许多不同的供应商或方法。 更重要的是,新工具正在高速构建,并以更快的速度增加 dApp 的功能、复杂性和可用性。
原文链接:Architecture of Decentralized Applications (dApps)
DefiPlot翻译整理,转载请标明出处