币圈工具箱 bqbot.cn 月访问量达90w
https://bqbot.cn/jms.html (在线版地址)
Event事件
检索事件
const { ethers } = require(\”hardhat\”);
async function SearchEvent() {
try {
const provider = new ethers.JsonRpcProvider(\”http://127.0.0.1:8545\”);
const signer = await provider.getSigner();
const TokenAddress = \”0xxxxx\”;//合约地址
const TokenABI =[]//合约的abi;
const TokenContract = new ethers.Contract(TokenAddress, TokenABI, signer);//创建合约
//读取合约
const name = await TokenContract.name();
console.log(\”Contract Name:\”, name);
const symbol = await TokenContract.symbol();
console.log(\”Contract Symbol:\”, symbol);
const totalSupply = await TokenContract.totalSupply();
console.log(\”Total Supply:\”, totalSupply.toString());
//合约转eth
const arr1=\”0xxxxxxxx\”
await TokenContract.transfer(arr1,10);//给arr1转10;
const block = await provider.getBlockNumber()//得到当前block
const transferEvents = await TokenContract.queryFilter(\’Transfer\’, block – x, block);//检索合约Transfer,从block – x,到block之间的解析事件
console.log(`Transfer事件数量: ${transferEvents.length}`);
//transferEvents是个数组,我们可以解析他的参数
console.log(…transferEvents[0].args);//返回form,to ,value
}catch (error) {
console.error(\”Error:\”, error);
}
}
监听事件
//以上同上
TokenContract.on(\”Transfer\”, (from, to, value, event) => {
console.log(`Transfer事件触发:`);
console.log(`From: ${from}`);
console.log(`To: ${to}`);
console.log(`Value: ${value.toString()}`);
console.log(` 从 ${from}=> 到 ${to} = ${value.toString()}`);
console.log(`Event Details:`, event);
});
过滤事件
设置过滤规则:contract.filters.EVENT_NAME( …args )说明:EVENT_NAME:过滤事件,…args:过滤规则
基础规则汇总
| null | 该位置不限制,匹配任意值 | contract.filters.Transfer(null, addr) |
| 单个值 | 必须完全匹配 | contract.filters |
