Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
以太坊提供了查询某个block中包含的Transactions,以及根据交易hash来获取Transaction的方法。但是以太坊并没有提供,直接根据一个Address查询对应交易记录的方法。那么我们有三种方法可以来查询。: o( J0 U$ E. q6 v % G. p8 S9 q+ a% u! G. o" R利用循环的方式,查询某一个block区间中,包含的与该地址相关的交易。 * {3 _/ t9 c' I* C: l I! M/ a- l* R0 |利用 filter监听交易,当出现与该地址相关的交易时,存储到数据库中(eg:ES)。但是这个可能会遇到一个问题,就是假如某一个时刻,服务中断或出现异常,那么可能这一条数据就丢失了。* p4 Z, _- G. n. y0 ?5 f / C- X5 N; _- T 启动一个Job,用Job来遍历数据,把数据插入到本地数据库中,(eg:ES). * W/ w! k, C) ]1 r* z) }. C0 o4 e6 P7 B7 u5 p7 q 根据地址查询交易 * S5 A" [) V z. \5 ~6 j% R " J, \+ `$ V8 J/ d; p5 U3 ~这边提供第一种方法的web3.js实现,利用循环的方式,查询某一个block区间中,包含的与该地址相关的交易。废话不多说,代码如下:" G8 G# C6 ?, \/ ^! i9 n+ D9 w6 a7 u & @! |: h) D/ z, z# P4 O) q2 k
  1. ; ^ r! i* V3 n
  2. <div>var Web3 = require("web3");var web3 = new Web3(); ' Y+ ?8 f7 Z. k
  3. web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545'));! h- \3 }) k2 e
  4. getTransactionsByAddr(web3,"0x6e4Cc3e76765bdc711cc7b5CbfC5bBFe473B192E",133064,134230);//myaccount :需要查询的地址信息,startBlockNumber:查询的其实blockNumber,endBlockNumber:查询的结束blockNumberasync function getTransactionsByAddr(web3,myaccount,startBlockNumber,endBlockNumber) { if (endBlockNumber == null) { 1 K2 z" `% R( Y) M/ L/ L ~
  5. endBlockNumber = await web3.eth.blockNumber; console.log("Using endBlockNumber: " + endBlockNumber);, T3 b g" `* ^" I; U& b
  6. } if (startBlockNumber == null) {' R/ `) t# ~+ S4 V( w
  7. startBlockNumber = endBlockNumber - 1000; console.log("Using startBlockNumber: " + startBlockNumber);* G& w2 V9 e! L
  8. } console.log("Searching for transactions to/from account "" + myaccount + "" within blocks " + startBlockNumber + " and " + endBlockNumber); </div>
复制代码
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13