首先这是个很简单的方案,只是最近困扰了一段时间,所以写篇专门的文章。

上代码...

mycontract.getPastEvents('myEvent', {filter: {}, fromBlock: 0, toBlock: "latest"});

这是web3调用事件的方法,我相信在看这个方法的朋友一定疑问且开心 。“这能从第0个区块直接查到最新的区块?”

事实在不同的节点的RPC,他们的通常会限制你查的区块大小,metamask是5000区块,这也好理解,毕竟从0到最新区块所帅选的数据量比较大。

我们在开发时或多或少会遇到调用以段时间的事件记录,打个比方,我写个DAPP,要调用用户这段时在我的DAPP上的各项资金流动记录,5000个区块显然不够,解决方案就是循环调用...这么一说估计很容易理解。

web3js.eth.getBlockNumber(function(error, result){
	var _from = result - 890000;
        var _to = _from + 5000;
	for(var i = 0; i < 180; i++){
	    mycontrack.getPastEvents('myEvent', {filter: {}, fromBlock: _from, toBlock: _to}).then((res) => {
            for(var m = 0;m <res.length;m++){
	          //拿出数据记录
	     }
        });
	_to += 5000;
	_from += 5000;
	}	
});

我们通过获取区块号,并用变量代替fromBlovk和toBlock,进行循环遍历,拿出事件的记录,写到前端里面就可以了。