获取以太坊区块数据应该推还是拉?

注册以太坊过滤器(filter),监听合约事件,当有被监听事件发生时以太坊节点向客户端推送(push)包含事件数据的log。

需要客户端和以太坊节点之间是双工的连接,比如tcp socket,unix socket,ipc等,不支持http连接。

定位精准,只会获取我们关心的数据

无须再次确认交易的状态是否成功,因为有事件发出则交易一定是成功的。

客户端采用定时轮询的方式查询以太坊节点是否有更新的块生成,如果有则根据块号获取块数据,遍历其中的交易,寻找我们感兴趣的交易,比如是调用特定的ERC 20合约,是否是某个用户的转账等。

灵活,可以从任意块号开始,可重试,支持http,不要事先在合约中声明事件

从区块中获取交易后,仍然需要再次检查交易的收据(receipt),以确定交易是成功还是失败。

receipt, err := c.deployBackend.TransactionReceipt(ctx, common.HexToHash(tx.Hash))
ntx.Success = (receipt.Status == 1)

选择

倾向于拉的模式,能获得较多的数据,连接方式不受限制

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容