1. 久十比特币首页
  2. 区块链

去中心化应用程序 (dApp) 的架构

去中心化应用程序 (dApp) 正在通过为用户提供自主权、安全性和透明度来改变数字格局。与依赖中心化服务器的传统应用程序不同,dApps(部分或全部)建立在去中心化技术之上。在本文中,我们将探索 dApp 的完整堆栈架构,包括前端、托管、钱包、智能合约、节点访问、数据存储和其他潜在组件。每一层都可以自己填写一个完整的博客,但我们试图全面地总结整个堆栈。

去中心化应用程序 (dApp) 的架构

? 前端

前端(客户端)是 dApp 的用户界面(UI)。与在 web2 中一样,它通常使用流行的网络技术构建,如 HTML、CSS 和 JavaScript。React、Angular和Vue.js等框架通常用于创建响应式和动态 UI。

币安Binance

币安Binance

全球顶级交易所,手机即可买比特币,10元买比特币,1元买NFT!!!

前端必须以某种方式与后端通信。为此,需要连接到节点,并且图书馆使用通信。最流行的 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 所需的一切?。

? 托管

托管是指存储和提供应用程序文件的过程,允许用户通过 Internet 访问它并与之交互。在传统的集中式托管中,一台或多台专用服务器负责为应用程序的内容提供服务。这种方法通常依赖于单个实体,即托管服务提供商。今天绝大多数 dApp 都在使用中心化托管。这会造成潜在的单点故障以及审查制度的可能性。分散式应用程序托管与集中式模型不同,它通过节点网络分发应用程序的文件,每个节点都提供存储和带宽资源。可以使用IPFS或Swarm等解决方案。如果你想开始托管你的 dApp 去中心化,一定要看看弗莱克。如果您觉得去中心化托管有点矫枉过正,仍然可以查看 Fleek(他们的团队做得非常棒,呵呵)。

? 钱包

钱包用于管理用户的数字资产、对用户进行身份验证以及在区块链上签署交易。在 dApp 的上下文中,钱包存储用户的私钥并促进与底层智能合约的交易。关于什么样的钱包可以提供合理的用户体验,进入门槛低,但最重要的是为用户提供高安全性,有很多不同的看法(不幸的是,有太多的坏人试图窃取私钥并获得通过社会工程学访问钱包!)

两种不同类型的钱包一方面是浏览器内置钱包与浏览器扩展钱包,另一方面是托管钱包与非托管钱包。

一些网络浏览器,例如Brave或Opera,带有内置钱包,允许用户管理他们的数字资产并直接在浏览器内与 dApp 交互。微软最近刚刚宣布,他们还将在其Edge浏览器中内置一个原生钱包。浏览器扩展钱包,例如MetaMask或Trust Wallet,是用户可以在其首选浏览器中安装的独立插件。这些钱包通常更通用,支持范围更广的加密货币和区块链网络。虽然内置钱包在当今受支持的区块链数量上通常受到限制,但扩展更容易受到网络钓鱼等攻击。

托管钱包由第三方服务提供商管理,例如交易所或钱包服务,它们保持对用户私钥的控制。用户通过服务提供商的平台访问他们的钱包,依靠他们进行安全和资产管理。非托管钱包让用户可以完全控制他们的私钥,使他们能够在不依赖第三方的情况下管理他们的数字资产。通常可用于与 dApp 交互的钱包是非托管的,因此用户必须自己管理私钥。非托管钱包有多种不同的方法,如Magic、Argent或Metamask。

? 节点

节点是通过验证和中继交易参与区块链网络的独立服务器。要与 dApp 交互,客户端/前端必须连接到区块链网络中的节点。然而,用户也可以直接通过节点或通过另一个智能合约与 dApp 交互!这意味着如果您的智能合约部署在公共区块链上,您的前端并不是用户与后端交互的唯一方式。

Alchemy和QuickNode等服务提供对远程节点的访问,使开发人员能够专注于构建他们的 dApp,而无需维护自己的基础设施。对于启动专用节点但仍然无法自行管理,Chainstack是一个可行的解决方案。或者,开发人员可以使用Geth (Ethereum) 或Solana 的 Validator等软件运行自己的节点。

节点支持读写操作。如果您的应用程序只允许从区块链读取数据,则无需支付交易费用。如果你的 dApp 支持写操作,则需要支付交易费(=gas 费)。比如Tatum,不仅提供节点,还提供dApp开发者支付用户gas费的解决方案,这样用户就不用自己支付gas费了(保证你的用户可以和你的dapp充分交互即使他们的数字资产可能不足以支付汽油费。)

? 智能合约

智能合约是任何 dApp 的支柱,允许写入和读取区块链。智能合约以 Solidity (Ethereum) 或 Rust (Solana) 等编程语言编写,定义了管理 dApp 操作的逻辑和规则。
在典型的智能合约中,一旦部署,其代码就无法更改,这可能会导致在尝试修复错误或添加新功能时遇到困难。可升级(代理)合约通过将合约逻辑与合约的数据存储分离来解决这个问题。这些合约由两个主要部分组成(基本上是 2 个或更多智能合约):

  1. 代理合约:代理合约充当中间人,将传入请求转发给逻辑合约,同时维护合约的状态。此合约在升级过程中保持不变。
  2. 逻辑合约:逻辑合约包含应用程序的实际代码和业务逻辑。开发者可以部署新版本的逻辑合约,更新代理合约指向新逻辑,实现无缝升级,不影响合约数据。

一个 dApp 不仅可以使用内部开发的智能合约,还可以连接其他人部署的智能合约(协议)。例如,流行的 dApp 1inch (DEX 聚合器)已经开发了智能合约以与各种去中心化交易所(如Uniswap和Sushiswap)的智能合约进行交互。

部署在一条链(例如以太坊)上的智能合约不能简单地与部署在另一条链(例如Polygon)上的另一个智能合约进行交互。支持多条链将有助于解决更多的用户群体,并可能带来高级功能,如零知识证明或更快的交易吞吐量。这种跨链交互的唯一方法是在 dApp 中实现Wormhole之类的桥梁或Cosmos之类的互操作性协议。

⚙️ 索引解决方案

索引解决方案通过使区块链数据更易于访问和查询,在去中心化应用程序 (dApp) 生态系统中发挥着至关重要的作用。随着区块链规模和复杂性的增长,直接从链中检索特定数据可能会很慢并且会占用大量资源。索引解决方案通过创建结构化的索引数据库来应对这一挑战,从而实现更快、更高效的数据检索。许多索引解决方案提供实时数据同步,确保在相关事件发生时立即通知 dApp。这允许 dApp 快速准确地触发网络钩子或响应链上事件的操作。

最广为人知的解决方案是The Graph,它是一种去中心化索引协议,用于开发子图,但如今许多节点提供商(如 QuickNode)也提供索引功能。

? 数据存储

虽然区块链适用于存储交易数据,但由于可扩展性和成本问题,它并不适合大规模数据存储。IPFS或Filecoin等去中心化存储解决方案通常用于链下存储 dApp 数据,提供更高效且更具成本效益的存储选项。这些服务采用加密和分片来确保数据隐私和完整性。构建 dApp 时也可以使用中心化数据存储,但它不会再完全去中心化(与上面讨论的托管相同)

? 神谕

智能合约根据区块链网络中可用的信息执行预定义的逻辑。然而,许多用例需要来自外部来源的数据(例如,天气、股票价格或体育比分)才能有效运行。预言机通过安全地向智能合约提供链下数据来满足这一需求。流行的预言机是Chainlink和UMA。

文章来源投稿,发布:Yori;文章内容仅供参考,不构成投资建议;投资者据此操作,风险自担;如若转载,请注明出处:http://www.910btc.com/1404.html

发表评论

邮箱地址不会被公开。 必填项已用*标注