主页 > imtoken创建多个钱包 > 在以太坊上开发Dapp有哪些瓶颈和门槛? | 精选博客文章

在以太坊上开发Dapp有哪些瓶颈和门槛? | 精选博客文章

imtoken创建多个钱包 2023-06-17 06:17:51

出品 | 区块链训练营(blockchain_camp)

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

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

本文概述了典型的 Dapp 架构,并指出了当今标准以太坊堆栈的一些固有局限性,这些局限性使开发人员难以创建令人信服的用户体验。 然后我将介绍以太坊基础设施领域的一些创新,可以帮助开发者克服这些挑战。

以太坊dapp开发语言_以太坊开发区块链_以太坊DApp开发实战入门

经典的以太坊 Dapp 架构

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

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

自建后端节点

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

节点即服务 (NaaS) 提供商

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

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

以太坊DApp开发实战入门_以太坊dapp开发语言_以太坊开发区块链

以太坊节点的固有局限性

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

主要限制包括:

1.观察到的状态信息不一致

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

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

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

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

2. 在区块链上搜索信息缓慢且受限

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

3.缺乏原子性

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

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

4.节点是被动的

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

以太坊开发区块链_以太坊dapp开发语言_以太坊DApp开发实战入门

重新思考 Dapp 基础设施

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

希望通过该平台,可以解决上述所有的局限性,打破传统以太坊节点的局限性。

1. 一致的观点

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

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

2. 高速、细粒度的搜索

它使Dapp开发者能够以极细的粒度、非凡的速度和效率查询区块链的历史记录。 它还可以通过GraphQL、gRPC和Websocket接口实现实时过滤和流式读取。

3.原子操作

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

4.主动后端

一个好的平台会给你一个可以发起事件的活跃后端。 例如,可以根据您指定的精确条件(通过上述搜索和其他功能)调用您选择的 lambda 函数(或云函数)。 这允许 Dapps 实现异步架构,其中数据更新可以通过多个通信渠道平稳、实时地发布给用户。

5. 为尖端 Dapps 构建的现代平台

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

因此,在以太坊上开发Dapps遇到上述问题时,可以尝试使用不同的工具来解决问题。 只有经过产品打磨和用户培养,才能有更精致、更实用、更成熟的Dapps问世。

以太坊开发区块链_以太坊dapp开发语言_以太坊DApp开发实战入门