主页 > imtoken官网下载2.0安卓钱包 > 在以太坊上开发 dapps 的主要问题是什么

在以太坊上开发 dapps 的主要问题是什么

以太坊是什么语言开发的_以太坊开发web3.js_基于以太坊开发

去中心化应用程序 (dapps) 被广泛认为是银行 (DeFi) 和游戏等领域的颠覆性创新。 但如果不能满足消费者的期望,即使是最具创新性的解决方案也不会被认可。

消费者想要的是流畅、成熟的用户体验,而实现这一点是以太坊上dapp开发者面临的又一大挑战。

本文概述了典型的 dapp 架构,并指出了当今标准以太坊堆栈的一些固有局限性,这些局限性使开发人员难以创建令人信服的用户体验。

接下来,我们将介绍一些以太坊基础设施领域的创新,可以帮助开发者克服这些挑战,比如 dfuse。 dfuse 很自豪能够为区块链开发人员提供更好的开发体验并加速以太坊应用程序的主流采用。

经典的以太坊 dapp 架构

(有经验的以太坊开发者可以跳到下一节)

一般来说,以太坊上的 dapp 由三个主要部分组成:

还有各种库可以促进与 Eth 节点的前端通信,其中最流行的是 web3.js 和 ethers.js。 还有许多其他语言(Java、Python、Rust……)的 web3 库。

自建后端节点

在以太坊早期,开发者必须运营自己的以太坊节点。 dapp 发布后,他们还必须运行一个生产级节点(或节点集群)。 运营一个区块链节点是一项繁重的工作量,也会对开发者的效率造成负担。

节点即服务 (NaaS) 提供商

上述挑战导致 Infura 等公司以及 Nodesmith、Quiknode、Blockdaemon、Ethernode、Chainstack、Alchemy、CloudFlare 等相对较新的公司出现了“节点即服务”平台。

这些平台为开发者提供了基于云端的以太坊节点,节省了开发者操作节点的精力。 开发和生产解决方案。 这些平台将基本操作系统和节点软件本身的系统管理(例如补丁和更新)卸载给开发人员。

以太坊节点的固有局限性

即使节点服务能够成功取代开发者成为系统管理员,也无法帮助开发者实现更好的用户体验来构建更好的dapp,因为节点服务的架构以及JSON-RPC和GraphQL接口的先天局限性。

主要限制包括:

观察到的状态信息不一致

为了在提供更高可靠性的同时扩展到单个节点的容量之外,节点作为服务平台通过负载均衡器提供对节点池的访问。

由于这些节点都是作为以太坊网络中的对等节点自主运行的,当信息在某一时刻通过网络传输时,不同的节点可能处于不同的区块高度,甚至处于不同的分叉。 这意味着 dapp 可能会收到有关区块链状态的不一致信息,因为其请求的结果由负载均衡器后面的不同节点提供。

节点服务平台通常会尝试通过负载均衡器上的会话粘性来解决这个问题,负载均衡器会一直尝试将指定前端的查询发送到同一个后端节点,但这种方法在以下几种情况下会失败:

由于前端经常访问多个区块链状态彼此不一致的后端节点,因此 dapps 很难处理链重组。 当向后追溯链历史时,dapp 可能会突然发现它正在寻找的父块不再存在(因为它现在正在与不同分叉上的另一个节点交互)。 然后 dapp 开发者必须编写代码来解决这个问题(通常是通过反复重连直到找到节点)。 这给 dapp 增加了不必要的复杂性,并可能导致呈现给用户的信息出现差异。

在区块链上搜索信息缓慢且有限

dapps 在搜索交易或链上历史的能力上受到限制,因为标准的以太坊节点不太适合支持精确搜索或执行实时数据的过滤监听。 为了以高效的方式做到这一点,我们需要对数百万个区块和交易进行大量索引,但是:

缺乏原子性

在大多数现代环境中,例如关系数据库,事务通常是原子的,但在以太坊(或其他区块链)上它们不是。 每笔交易都会经历一系列的状态转换,在这个过程中可能会遇到各种问题或故障。 dapp 必须调用多个 API,查询许多不同的数据源(块、内存池、网络状态),以便跟踪事务的生命周期,直到它完成。

同样,负担落在前端代码上以反复轮询以弄清楚到底发生了什么,而 dapp 的用户体验延迟,并且需要在 dapp 执行所有这些额外工作时进行刷新。

节点是被动的

以太坊节点是被动的,这意味着它们无法生成事件或回调并调用 webhook。 所有操作都必须由前端启动,而前端又必须轮询节点以获取更新信息。 以太坊节点的事件流读取能力太有限,无法满足大多数dapps的需求,而且只能在JSON-RPC接口中使用,在GraphQL接口中不可用(见这里)。

使用 dfuse 重新思考 dapp 基础架构

dfuse 提供的是一个面向更高层级区块链 API 的平台,与区块链节点提供的原生 API 相比,它可以更轻松地完成更多工作。 dfuse 旨在为 dapp 开发人员提供构建现代区块链应用程序所需的功能,这些应用程序具有快速、流畅的界面,可提供出色的用户体验。

dfuse 旨在解决上述所有限制,打破传统以太坊节点的局限性。

一致的观点

dfuse 是一个集成的超大规模数据平台,而不是负载均衡器上多个以太坊节点的集合。 dfuse 平台提供所有连接和所有时间点的链状态信息。 dfuse 平台要么看到一个区块(同时检测到链分叉和重组),要么根本不报告该区块(在区块进行快速重组且传播不远的情况下)。

这样 dapp 永远不会面临链状态的不一致视图,并且可以专注于其主要功能,而不是忙于验证区块链的细节。

高速、细粒度的搜索

dfuse 使 dapp 开发者能够以极细的粒度、非凡的速度和效率搜索区块链的历史记录以太坊是什么语言开发的,并通过 GraphQL、gRPC 和 Websocket 接口实现实时过滤和流式读取。

原子操作

dfuse 提供了一个流式读取端点,它了解交易可以进入的所有复杂状态,并在它达到最终确定时通知您。 无需通过重复轮询或检查多个数据源来跟踪交易状态,您只需将交易推送并保持连接以接收实时状态更新,从而也为您的用户提供实时交易状态。

活动后端

dfuse 平台为您提供了一个可以启动事件的活动后端。 例如,dfuse 可以根据您指定的精确条件(通过上面的搜索等)调用您选择的 lambda 函数(或云函数)。 这允许 dapps 实现异步架构,其中数据更新可以通过多个通信渠道以流畅和实时的方式发布给用户。

为尖端 dapps 构建的现代平台

dfuse 为您的 dapps 提供了一个现代基础设施层,即:

今天试试 dfuse。 如果您有任何问题或建议,您可以通过推特、微博、微信或邮件联系我们,并与我们分享在以太坊上开发dapps的经验——如果您对我们的服务满意以太坊是什么语言开发的,我们很乐意听到。