通过矿工地址(address),获取发生的所有交易的hash值,和该矿工所打包的区块

以太坊Go-ethereum客户端是没有根据地址查询交易列表的API的。然而,在使用过程中我们往往会用到类似的API。针对是否要在客户端上添加此API,github已经有激励的讨论了。点击一下网址可以了解一下: 
https://github.com/ethereum/go-ethereum/issues/1897


两个思路,但是都避免不了遍历所有数据手动收集区块链交易来实现这一功能。或者,你可以依赖第三方探索者的API,如EtherChain。 对于合约执行的交易,可以筛选合约日志以实现此目的。

  • 通过Json Rpc去遍历所有区块,把指定地址的交易 和 此地址所打包的区块筛选出来,此方法效率比较低,但是实现起来比较简单,对于无存量数据的处理还是可以的,比如比特币,10分钟才出一个新块,那么通过Json Rpc去请求上一个块中所有数据还是戳戳有余的。调用第三方API接口。此类接口很多,不仅能在官网上查询区块信息,而且提供了查询的API。比如:https://etherchain.org/apidoc 。接口都很简单,不过有访问频次的限制,除非很大的访问量,还是可以使用此类接口。简单,方便。
  • 直接解析账本数据文件,此方法效率较高,但是实现起来较为复杂一点,特别是对于有大量存量数据的情况,推荐这个方法。自行维护数据,自行实现此功能。此方法的基本思路是,查询每个区块的具体交易,录入到自己的数据库中,然后通过sql语句查询自己的数据。此方法就需要有一定的编码基础和设备投入。现有的API是支持查询每一个区块内的交易记录的。虽然比较笨重,但一旦数据由自己维护之后,想怎么查询只是sql语句不同的事情了。

筛选出来的数据一般是存储在关系型数据库中,方便对接你的业务,所以你可能还需要根据实际情况,把表先建好。


例外情况

如果要查询合约的交易历史,那么可以通过过滤(filter)合约日志来达到此目的。此种场景是有相应的API进行支撑的。


你可能感兴趣的:(以太坊)