Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
以太坊提供了查询某个block中包含的Transactions,以及根据交易hash来获取Transaction的方法。但是以太坊并没有提供,直接根据一个Address查询对应交易记录的方法。那么我们有三种方法可以来查询。 ( _' m2 ?4 o" I" m7 A- K# a7 D 7 M$ }6 c) n& D$ m利用循环的方式,查询某一个block区间中,包含的与该地址相关的交易。& e0 Y0 G$ f& J- Q7 E3 ?# I $ N% a9 h$ G; o: J/ v 利用 filter监听交易,当出现与该地址相关的交易时,存储到数据库中(eg:ES)。但是这个可能会遇到一个问题,就是假如某一个时刻,服务中断或出现异常,那么可能这一条数据就丢失了。 / N% y0 F! J( G W 3 c1 K7 Z) @3 t1 A% @8 W/ v P启动一个Job,用Job来遍历数据,把数据插入到本地数据库中,(eg:ES).% _4 X) B% K. I1 l( p: T 8 G# A6 L7 a+ V/ P5 { 根据地址查询交易& E/ M' L( h! e& X; }/ ~ 1 Y0 h; w4 m8 S% X5 u7 G这边提供第一种方法的web3.js实现,利用循环的方式,查询某一个block区间中,包含的与该地址相关的交易。废话不多说,代码如下: , c# ~$ p5 J1 ?$ c% {+ Y( R# J$ C3 L% Z+ B* D0 V
  1. & C7 B( s' N% e* d% J. i/ D% x2 W
  2. <div>var Web3 = require("web3");var web3 = new Web3(); ( T" t6 [& e; V' [8 {9 _
  3. web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545'));) Q" q" L& C d1 h) Q; ]& E
  4. getTransactionsByAddr(web3,"0x6e4Cc3e76765bdc711cc7b5CbfC5bBFe473B192E",133064,134230);//myaccount :需要查询的地址信息,startBlockNumber:查询的其实blockNumber,endBlockNumber:查询的结束blockNumberasync function getTransactionsByAddr(web3,myaccount,startBlockNumber,endBlockNumber) { if (endBlockNumber == null) { 9 h, Y+ y& Y# J" z& E2 k) K
  5. endBlockNumber = await web3.eth.blockNumber; console.log("Using endBlockNumber: " + endBlockNumber);) ^" [) ]1 a/ l; A! a& O* E
  6. } if (startBlockNumber == null) { 2 l3 h S& @& i8 W0 b7 V* e1 Z5 \
  7. startBlockNumber = endBlockNumber - 1000; console.log("Using startBlockNumber: " + startBlockNumber);9 t9 L" u# R( W- i3 d- O7 R% H
  8. } console.log("Searching for transactions to/from account "" + myaccount + "" within blocks " + startBlockNumber + " and " + endBlockNumber); </div>
复制代码
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

华胥 初中生
  • 粉丝

    0

  • 关注

    0

  • 主题

    13