主页 > imtoken钱包劫持 > 推荐收藏!告诉你以太坊交易可能会经历的8种状态,以及Dapp应该如何应对

推荐收藏!告诉你以太坊交易可能会经历的8种状态,以及Dapp应该如何应对

imtoken钱包劫持 2023-01-17 02:58:19

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

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

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

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

接下来我们讨论为什么会这样以太坊怎么买卖交易,以及以网络和服务器高效方式进行的细粒度交易状态更新如何在符合现代标准的 dapps 中提供流畅的用户体验。

以太坊怎么买卖交易_以太坊买卖下载哪个app_以太坊如何交易买卖

今天的 Dapp 界面

每个 dapp 都需要向用户展示正在执行交易的区块链的底层信息——无论是 Ether 转账、token 转账,还是智能合约调用,目前很多 dapp 界面在显示区块时都会显示这些信息。链在单个时间点的状态。

以太坊如何交易买卖_以太坊怎么买卖交易_以太坊买卖下载哪个app

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

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

这种做法的缺点是:要么交易更新不频繁,信息粒度大,导致用户想要反复点击“刷新”以更快地获取更新; 或者 dapp 必须频繁轮询区块链,导致大量网络流量,对底层区块链节点造成高负载。

以太坊如何交易买卖_以太坊买卖下载哪个app_以太坊怎么买卖交易

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

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

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

以太坊买卖下载哪个app_以太坊如何交易买卖_以太坊怎么买卖交易

基于这些事件类型获取的信息是有限的,dapps 无法通过它们跟踪交易的完整生命周期。

以太坊怎么买卖交易_以太坊如何交易买卖_以太坊买卖下载哪个app

以太坊交易生命周期

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

以太坊如何交易买卖_以太坊怎么买卖交易_以太坊买卖下载哪个app

交易状态

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

以太坊买卖下载哪个app_以太坊如何交易买卖_以太坊怎么买卖交易

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

来自同一发送者的另一笔具有相同随机数但 gas 价格高 12% 的交易进入 PENDING 状态

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

以太坊如何交易买卖_以太坊买卖下载哪个app_以太坊怎么买卖交易

以太坊如何交易买卖_以太坊买卖下载哪个app_以太坊怎么买卖交易

状态转换

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

以太坊怎么买卖交易_以太坊如何交易买卖_以太坊买卖下载哪个app

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

以太坊买卖下载哪个app_以太坊如何交易买卖_以太坊怎么买卖交易

轻松追踪交易状态

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

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

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

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

以太坊怎么买卖交易_以太坊买卖下载哪个app_以太坊如何交易买卖

以太坊怎么买卖交易_以太坊如何交易买卖_以太坊买卖下载哪个app

如果不使用 dfuse,dapp 必须一次又一次地访问区块链以捕获交易经历的所有转换并更新给用户,并且需要准备后端代码来处理每个状态转换。

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

以太坊如何交易买卖_以太坊买卖下载哪个app_以太坊怎么买卖交易

高级 Dapps 的现代平台

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

扩散:

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

以太坊如何交易买卖_以太坊买卖下载哪个app_以太坊怎么买卖交易