主页 > imtoken钱包官方版下载 > 推荐收藏!告诉你以太坊交易可以经历的 8 种状态以及 Dapps 应该如何处理它

推荐收藏!告诉你以太坊交易可以经历的 8 种状态以及 Dapps 应该如何处理它

imtoken钱包官方版下载 2023-01-18 11:37:07

出品|Blockchain_camp

在本文中,我们将重点关注以太坊上复杂的交易生命周期;开发人员试图让 dapp 在这些情况下提供理想的用户体验挑战;以及 dfuse 如何帮助克服这些挑战。

每当一个事务提交到以太坊网络时,它都会经历一系列相当复杂的状态,而且并不是每个状态转换都是向前的——事务可能会回滚到更早的状态,可能会被另一个事务替换,并且可能完全分叉。 (事务的生命周期将在下面更详细地描述。)

在 dapp 中跟踪交易的进度并为用户提供良好的体验可能具有挑战性。如今,许多基于以太坊的 dapp 提供了一种引人入胜但相对静态的用户体验:应用程序可以显示某个时间点的交易状态,但必须刷新(点击刷新或 dapp UI 定期刷新页面)才能获得信息的更新。市面上的动态接口相对较多,但提供的数据粒度仍然不够细化,或/同时以高网络流量为代价,对其底层区块链节点造成高负载。

接下来我们将讨论为什么会出现这种情况,以及 dapp 中的细粒度交易状态更新如何以网络和服务器高效的方式提供现代、流畅的用户体验。

今天的 Dapp 界面

每个 dapp 都需要向用户展示正在执行的交易的底层区块链信息——无论是以太币转账、代币转账还是智能合约调用,如今许多 dapp 的界面都在单点显示区块链的状态显示此信息的时间。

用户在交易过程中经常需要更新信息(例如,要知道何时完成转账)以太坊在哪个平台交易好,所以dapp会在界面上放一个“刷新”按钮(或者定期自动为用户刷新页面) ,或者用户需要直接点击浏览器的刷新按钮来获取更新。

一些具有更复杂用户体验的 dapp 会向用户显示交易的动态更新。他们在后台轮询 AJAX 请求,反复检查他们的以太坊节点是否有更新,然后将更新发布到前端。这样做很复杂,因为 dapp 必须进行大量 API 调用并查询许多不同的数据源(包括块、内存池和网络条件),以便从头到尾跟踪交易的生命周期。

这种方式有弊端:要么交易更新不频繁,信息粒度大,导致用户反复点击“刷新”以更快获得更新;或者dapps必须频繁轮询区块链,从而产生大量网络流量,给底层区块链节点带来高负载。

为什么不使用基于链上事件的接口?

对于 dapp 开发者来说,做静态页面或轮询一直是唯一可用的两个选项,这反映了以太坊节点提供的 API 的性质。如果有一个基于事件的链上接口,可以接收推送到链上的交易状态更新并实时反馈给用户,则 dapp 可以提供更好的用户体验——而标准的以太坊节点不提供丰富的实时——时间交易数据。

以太坊节点确实提供链上事件的流式读取,但功能有限,只能通过使用以太坊 JSON-RPC 接口的 PUB/SUB 功能获得(使用 GraphQL 时不可用)。采用)。 PUB/SUB 接口允许 dapp 接收某些事件类型的通知:

对基于这些事件类型的信息的访问受到限制,dapps 无法通过它们跟踪交易的整个生命周期。

以太坊交易生命周期

以太坊交易具有复杂的生命周期。每个事务都会经历多个状态,并在整个过程中经历各种状态变化,可能是前向的,也可能是回滚的。

交易状态

以太坊交易从提交到链上(有一定成功概率)进入区块,会经历如下一系列状态:

来自同一发件人的另一笔具有相同随机数的交易进入 IN_BLOCK 状态,或

来自同一发件人的另一笔具有相同随机数的交易但另一笔汽油价格高出 12% 的交易进入 PENDING 状态

下图显示了这些状态以及它们之间的转换。

状态转换

如上所示,状态之间的转换也是通过名称来定义的。

如上所述,以太坊上的交易生命周期非常复杂,dapps 很难准确跟踪它并为用户提供无缝、流畅的更新。

轻松跟踪交易状态

dfuse 平台提供了丰富的流监控接口,该接口支持对以太坊交易生命周期的实时详细跟踪。 dfuse Ethereum Transaction Status Tracker API 使开发人员能够提交 Ethereum 交易,然后在同一数据通道上即时获得精细的状态更新,跟踪交易在其整个生命周期中的进展。

使用 GraphQL,您可以实时监控特定类型交易的变化,同时准确指定每次交易发生变化时您希望接收的数据。 dfuse 平台处理跟踪事务的复杂性,并在事件发生时将它们实时流式传输到 dapp。

这样,您无需编写和运行复杂的后台逻辑和重复轮询,也无需浪费带宽并多次运行相同的查询。只需侦听您需要的更新,然后在界面中将这些更新反馈给用户。

下面的动画展示了一个交易经历了这个复杂的生命周期——它在最终被包含在一个区块中并被确认之前经历了八次状态转换。

如果不使用 dfuse以太坊在哪个平台交易好,dapp 必须一次又一次地访问区块链,以捕获交易经历的所有转换并更新给用户,而后端代码则需要为每次状态转换做好准备。

使用 dfuse,dapp 只需通过单个连接获取流式更新,dfuse 会为您跟踪交易经历的各种曲折,直到最终确定其命运。

高级 Dapps 的现代平台

Lifecycle API 只是 dfuse 平台的一小部分。 dfuse 为 dapps 提供了一个完整的现代基础设施层,即:

dfuse:

%E4%B8%BB%E9%A1%B5