mysql存储区块链_区块链研究实验室 | 使用MySQL存储以太坊事件

本文介绍如何使用MySQL缓存以太坊事件,避免因区块链增长导致的查询速度变慢。通过创建数据库表并利用JSON列存储事件,可以实现与web3.getPastEvents类似的查询功能。示例展示了如何构建后台脚本定期扫描区块链,存储和检索特定地址的转账事件。
摘要由CSDN通过智能技术生成

在本文中,我将演示一种缓存以太坊事件的简单方法。我只想说,通常我们将事务用于链下操作,例如跟踪令牌的传输或检索特定事务的筛选列表,就像一个SQL查询一样。

假设我们想要创建一个跟踪令牌传输的网站,Etherscan。我们只需要一波简单的操作,比如:取得所有令牌转移信息

取得以太坊转账来源地址

取得以太坊转账目标地址

获得特定金额的转账信息

在特定时间范围内获得转移信息

在web3中是有getPastEvents方法,其示例用法是:

这种方法的主要问题是,随着区块链的增长,速度可能会变慢,尤其是如果您不运行自己的以太坊节点,并且使用像infura或MyEtherApi这样的公共提供者。

接下来,几乎不可能实现一些比较复杂的查询,因为筛选对象的功能非常有限。

此外,已经写入区块链的事件无法更改,只能随时间添加新记录。 这个和其他事实使事件成为缓存的完美目标。

数据库选择

在这个例子中,我们将使用mysql作为保存事件记录的数据库。MySQL有能力存储原始JSON,然后使用JSON对象的属性编写查询,就好像它们是普通的SQL列一样。

我们应该储存什么?

让我们仔细看看getPastEvents方法的结果,以实现我们使用的数据。 我以Binance代币转移为例。 每个事件对象都具有以下结构:

如您所见,事件参数存储在returnValues属性中。 blockNumber,transactionHash,logIndex也可能有用࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值