dfuse 的 GraphQL 端点现在提供经过 ABI 解码的数据库行为信息

在从区块链中提取数据时的时候,它返回的大部分信息都是二进制格式的,这么设计目的主要是为了节省空间,让传输数据更快。 但是这样又让它不好筛选,因为你需要去把它解码为 JSON 这样的可读格式。 dfuse 最近扩展了它的 GraphQL 端点,让你在 dfuse Search 的查询结果中可以得到经过了 ABI 解码的 table row 数据。

在没有这个功能的情况下,需要调用多次 REST API 才能得到像下面截图中这样的结果,而多次的调用会导致同步和延迟问题。 现在,GraphQL 通过实时串流读取(或 GraphQL Subscription)将其转换为一个查询,让你可以选择你的有效负载中反馈给你的信息。

dfuse 对深层数据库行为进行跟踪

如果一个叫 Alice 的账户给一个叫 Bob 的账户转了1个EOS,那么 eosio.token 合约中的两个 row 会被更新:一个记录 Alice,一个记录 Bob 的帐户。

在 eosq.app 上查看数据库行为

截图中你看到的信息叫 database operations,也就是数据库行为/操作。 dfuse 是唯一一个提供这些状态增量的 API。这种粒化的信息让你跟踪合约中出现的任何问题,你可以看到执行每个操作产生的副作用,即使一个交易中包含着25个操作。

普通的 nodeos 提供不同合约的 table 数据最新状态,但是这个数据是不断在变动的。这就好像是其他的提供历史的接口只是对信息的简单回顾,而 dfuse 提供每一个细节。

这个新功能让你可以拿到通过 ABI 解码了的 table row 的 JSON 格式数据,它还记录链上 ABI 的任何更改,在查询历史交易时始终使用正确的相关历史 ABI。

有些合约给的 ABI 是无效的,有的与其交易不一致或根本没有 ABI。如果遇到这种情况,error 字段就会给你指出,object 字段也会返回 null

通过 dfuse 的 GraphQL 端点得到统一的交易信息和状态更改

让我们来通过我们的 GraphiQL (我们的 GraphQL 网页版接口)查询一下节点账户 eoscanadacom 的投票奖励操作(eosio.vpay):

"receiver:eosio.token action:transfer data.from:eosio.vpay data.to:eoscanadacom":

在上面的截图中,与所有其它历史API的解决方案一样,你只会收到转账的数量(274.9777 EOS)。但通过我们的 GraphQL ,你还可加上几个简单的字段

然后你收到的数据就会显示出数据库行为:

你看到的 eosio.vpay 和 eoscanadacom 的 dbOps 是任何其它 history API 都不能显示的。

dfuse 让你能看到任何操作执行后提交的每个操作(或任何 table ),准确查看余额。 这更功能对于会计性的工作有着不可忽视的优势!

如果你想追踪不笼统而是完整的信息,那么 dfuse 是唯一应该为你提供信息的平台。

加入 dfuse API Telegram 群、微信群。 获取免费账户,了解为什么很多 dapp 开发人员后端在用 dfuse 提供的信息。

发布了76 篇原创文章 · 获赞 2 · 访问量 9851

猜你喜欢

转载自blog.csdn.net/weixin_43891115/article/details/94778681