我正在开发dogechain
。我正在尝试使用web3.js.获取TokenLockerManagerV1合约上的TokenLockerCreated
事件
这是合同中的活动部分。
emit TokenLockerCreated(
id,
tokenAddress_,
token0Address,
token1Address,
_msgSender(),
token.balanceOf(lockerAddress),
unlockTime_
);
这是我用来捕捉这个事件的web3.js
部分。
const web3 = new Web3(new Web3.providers.HttpProvider("https://rpc03-sg.dogechain.dog"));
const contract = new web3.eth.Contract(LPAbi, pairAddr);
contract.getPastEvents("TokenLockerCreated",
{
fromBlock: 0,
toBlock: 'latest',
})
.then(events => console.log(events))
.catch((err) => console.error(err));
我尝试了allEvents
而不是TokenLockerCreated
,但它们都返回空数组作为events
。
由于范围问题,这是非常常见的,链支持一个范围,并且它还可以与其他几个约束一起工作。
这个例子只是为了重新阅读,为了让它发挥作用,我建议使用这个
web3.eth.getBlockNumber((error, result) => {
if (!error) {
Contract.getPastEvents("TokenLockerCreated",{fromBlock: result - 1000 ,toBlock: result},
(error, events) => {
// todo
});
}
});
在某些链中,该范围可接受高达5000,有些链使用1000的限制,因此使用1000,
这在一定范围内有效,但从不试图获取从第0个块到截止日期的过去事件,