概述典型的 dapp 架构,并指出当今标准以太坊堆栈的一些固有局限性,正是这些局限性导致开发者难以打造出能有说服力用户体验。
去中心化应用程序(dapp)被广泛认为是可以为像银行业(DeFi)和游戏业等领域带来颠覆性创新的。但是,即使是最有创新性的解决方案,如果不能满足消费者的期望,也不会被认可。
消费者需要的是流畅和成熟的用户体验,而实现这个目标对以太坊的 dapp 开发者来说又是一个重大挑战。
本文将概述典型的 dapp 架构,并指出当今标准以太坊堆栈的一些固有局限性,正是这些局限性导致开发者难以打造出能有说服力用户体验。
接着,我们将介绍下以太坊基础设施领域中的一些能帮助开发者克服这些挑战的创新,例如 dfuse。dfuse 很自豪能给区块链开发者提供更好的开发体验,加速以太坊应用程序的主流采用。
(经验丰富的以太坊开发者可以跳到下一节)
一般来说,以太坊上的 dapp 包含三个主要部分:
还有各种促进前端与 Eth 节点的通信的库,其中最受欢迎的是 web3.js 和 ethers.js。也还有许多其他语言(Java,Python,Rust…)的 web3 库。
在以太坊的早期,开发者必须运营自己的以太坊节点。dapp 发布了以后,他们还必须运营生产级别的节点(或节点集群)。运营区块链节点这项工作繁重,也会对开发者的效率造成负担。
上述的这个挑战促成了一些例如 Infura,以及相对新的 Nodesmith、Quiknode、Blockdaemon、Ethernode、Chainstack、Alchemy、CloudFlare 等公司的 “节点服务” 平台的兴起。
这些平台为开发者提供了基于云端的以太坊节点,从而节省了开发者运营节点的精力。用于开发和生产的解决方案。这些平台可为开发者分担基层操作系统和节点软件本身的系统管理,例如补丁和更新。
即使节点服务能成功地替代开发者担任系统管理员的职责,它无法帮助开发者实现的用户体验去构建更好的 dapp,这是因为来自节点服务的架构以及以太坊节点支持的 JSON-RPC 和 GraphQL 接口的固有局限性。
主要的局限性包括:
为了扩展到单个节点的容量之上同时提供更高的可靠性,作为服务平台的节点是通过负载平衡器提供对节点池的访问的。
由于这些节点中是都作为以太坊网络中的对等节点自主运行的,因此当信息在通过网络传播的某一个时刻,不同的节点可能处于不同的区块高度上,甚至处于不同的分叉上。这意味着 dapp 可能收到区块链状态的信息是不一致的,因为它的请求获得的结果是由负载均衡器背后的不同节点提供的。
节点服务平台通常试图通过负载平衡器上的会话粘性来解决此问题,总是会去尝试将指定前端的查询发送到同一个后端节点,但是这种方法在多种情况下会失败:
那么由于前端经常访问多个后端节点,而这些后端节点获取的区块链状态与彼此不一致,因此 dapp 很难处理链重组。向后追溯链历史的时候,dapp 可能突然发现它想找的父区块不存在了(原因是它现在正在与在不同分叉上的另一个节点交互)。那么 dapp 开发者就不得不去专门写代码来解决这个问题(方法通常是通过反复地重连,直到它找到一个节点)。这样给 dapp 增加了不必要的复杂性,并且可能导致呈现给用户的信息有出入。
dapp 搜索交易或链上历史的能力受限,因为标准以太坊节点不适合支持精确搜索或执行实时数据的筛选式监听。想要以高性能的方式进行操作,我们需要对数百万个区块和交易做大量的索引,但是:
在大多数现代环境中,例如关系数据库,交易一般是原子操作,但在以太坊(或其他区块链)上不是。每个交易都会经过一系列状态的转换,在这个过程中可能遇到多种问题或失败。 dapp 必须调用多个 API,查询许多不同的数据源(区块、mempool、网络状态)以便跟踪交易的生命周期,直至其完成。
同样,这个负担就落在了前端代码上,通过重复轮询来弄清楚具体发生了什么,而 dapp 的用户会因为 dapp 执行所有这些额外的工作而经历延迟和需要刷新。
以太坊节点是被动的,这意味着它们无法生成事件或回调和调用 Webhooks。所有操作必须由前端来启动,而前端还必须轮询节点以获得更新的信息。以太坊节点的事件串流读取功能太有限,无法满足大多数 dapp 的需求,并且仅在 JSON-RPC 接口中可用,在 GraphQL 接口上不可用(请参见此处)。
dfuse 提供的是一个更高级别的区块链 API 的平台,与区块链节点提供的原生 API 相比,它们可以更轻松地完成更多的工作。 dfuse 是为了赋予 dapp 开发者所需的功能,使其能够通过快速、流畅的界面构建现代区块链应用程序,从而提供出色的用户体验的基础上而设计的。
dfuse 旨在解决上述所有限制,打破传统以太坊节点的局限性。
dfuse 是一个集成的超大规模数据平台,而不是在负载均衡器上的多个以太坊节点合集。 dfuse 平台在所有连接上、所有时间点上提供链的 state 信息。 dfuse 平台要么是看到一个区块(同时侦测到链的分叉和重组),要么根本不去报告该区块(在区块经历迅速重组并传播不远的情况下)。
这样 dapp 永远不会面对一个不一致的链状态视图,并且可以专注在它的主要功能上,不是去忙着验证区块链的细节。
dfuse 使 dapp 开发者能够以极细化的颗粒度、非凡的速度和效率来搜索区块链的历史记录,还能通过GraphQL、gRPC 和 Websocket 界面实现实时筛选,串流读取。
dfuse 提供了一个串流读取端点,该端点了解交易可能进入的所有复杂状态,并在其满足最终性时通知你。无需去费力地通过重复轮询或检查多个数据源去跟踪交易的状态,你只需要把交易推送上去并保持连接即可接收实时状态更新,从而也可以向你的用户提供交易的实时状态。
dfuse 平台为您提供了一个可以启动事件的主动后端。比如,dfuse 可以根据你指定的精确标准(通过上述的搜索以及其他功能)调用你所选择的 lambda 函数(或云函数)。这让 dapp 实现了异步的体系结构,数据更新可以通过多个通信渠道流畅、实时地发布给用户。
dfuse 为您的 dapp 提供了一个现代化的基础架构层,即:
现在就可以试用 dfuse。如有任何疑问和建议,可以通过 Twitter、微博、微信或电子邮件与我们联系,跟我们分享下在以太坊开发 dapp 的经验——我们很想听听你是否对我们的服务满意。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!