Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
以太坊提供了查询某个block中包含的Transactions,以及根据交易hash来获取Transaction的方法。但是以太坊并没有提供,直接根据一个Address查询对应交易记录的方法。那么我们有三种方法可以来查询。3 I: K, \8 g+ W0 F# W% ?( N 1 N( y* n. D h9 M2 g5 x: a 利用循环的方式,查询某一个block区间中,包含的与该地址相关的交易。 8 L" }* o; P# n) l. L 4 A# N3 w' A1 f) D: |/ P$ k8 I利用 filter监听交易,当出现与该地址相关的交易时,存储到数据库中(eg:ES)。但是这个可能会遇到一个问题,就是假如某一个时刻,服务中断或出现异常,那么可能这一条数据就丢失了。 ) G1 M9 O8 p2 @" z3 U( G; u8 z ( l2 o2 A- q1 C) t0 K启动一个Job,用Job来遍历数据,把数据插入到本地数据库中,(eg:ES).( C4 G7 j; }% o& M% r 7 S7 G% \% S' @, n 根据地址查询交易 2 Q" m0 C0 v; ^3 H0 U0 w. _. ?* U! e% W2 A) z" E% W 这边提供第一种方法的web3.js实现,利用循环的方式,查询某一个block区间中,包含的与该地址相关的交易。废话不多说,代码如下: 5 q2 I8 d, |* g% U( b `8 f P, v% s: F9 ^3 l8 k3 T
  1. # x ^' w5 b0 t! w
  2. <div>var Web3 = require("web3");var web3 = new Web3(); 5 \0 n* H2 c4 [. j
  3. web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')); + x n7 }/ `) A; `. M& t. D
  4. getTransactionsByAddr(web3,"0x6e4Cc3e76765bdc711cc7b5CbfC5bBFe473B192E",133064,134230);//myaccount :需要查询的地址信息,startBlockNumber:查询的其实blockNumber,endBlockNumber:查询的结束blockNumberasync function getTransactionsByAddr(web3,myaccount,startBlockNumber,endBlockNumber) { if (endBlockNumber == null) { ! F- n+ {) W7 [3 c9 Z
  5. endBlockNumber = await web3.eth.blockNumber; console.log("Using endBlockNumber: " + endBlockNumber); 6 h9 u" u; C; o$ j: f
  6. } if (startBlockNumber == null) {: y$ K9 } ~( D* u8 D! x
  7. startBlockNumber = endBlockNumber - 1000; console.log("Using startBlockNumber: " + startBlockNumber); 2 r: Y8 ?! ]# H; B8 b
  8. } console.log("Searching for transactions to/from account "" + myaccount + "" within blocks " + startBlockNumber + " and " + endBlockNumber); </div>
复制代码
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13