每日一学
今天学习了ethers.js中的事件检索,监听,过滤 还有一些js数组跟对象的操作方法
一般的事件处理业务逻辑 : 1,初始化挂单列表:使用queryFilter()和filters搭配来获取所有事件 2,监听新的挂单列表 :使用contract.on()和filters搭配来获取所有的事件 3,处理过去的挂单列表:将过去的挂单处理后添加到现在的挂单 4,定期同步:方式网络或其他原因,需要定期使用queryFilter()来同步一下挂单列表 5,处理异常:try catch来处理异常
//假如合约有一个事件
//event List(address indexed from,uint256 indexed tokenID,uint256 price);
const abi =[];
const contractAddress = '';
const provider = new ethers.providers.JsonProvider();
const contract = new ethers.Contract(
contractAddress,
abi,
provider
);
const orders = [];//挂单列表
//contract.filters.eventName(A,null)
const listFilter = contract.filters.list(A);//创建一个过滤器,只要地址A的挂单
注:
const fromBlock = 0;//起始区块
const toBlock = 'latest';//结束区块
const pastList = await contract.queryFilter(listFilter,fromBlock,toBlock);
//拿到这个pastLIst这个事件列表数组后处理业务逻辑...
contract.on('listFilter',(from,tokenID,)=>{
处理业务逻辑...
});
//find()会遍历这个数组,如果通过,则返回这个元素
let item = this.marketlist.find(item => item.tokenId == tokenId);
//Js中这个filter会创建一个新数组,然后将处理为true的元素加到数组中
this.marketlist = this.marketlist.filter(
item => item.tokenId !== tokenId
);
//item虽然不是一个表达式或者是bool类型,但是也不是一个假值,所以强制转换为true
//if里常见的假值 null ,undefine
if(item){
item.floorPrice = price
}
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!