Ethers.js-监听合约事件
监听合约事件
contract.on
在ethersjs中,合约对象有一个contract.on的监听方法,让我们持续监听合约的事件:
contract.on("eventName", function)
contract.on有两个参数,一个是要监听的事件名称"eventName",需要包含在合约abi中;另一个是我们在事件发生时调用的函数。
contract.once
合约对象有一个contract.once的监听方法,让我们只监听一次合约释放事件,它的参数与contract.on一样:
contract.once("eventName", function)
监听USDT合约
import {
ethers } from "ethers";
//以太网主网API
const ALCHEMY_MAINNET_URL = ""
const provider = new ethers.providers.JsonRpcProvider(ALCHEMY_MAINNET_URL)
const main = async () => {
const contractaddress = "0xdac17f958d2ee523a2206206994597c13d831ec7"
const abi = ["event Transfer(address indexed from, address indexed to, uint value)"]
const contractUSDT = new ethers.Contract(contractaddress, abi, provider)
// 只监听一次
console.log("\n1. 利用contract.once(),监听一次Transfer事件");
contractUSDT.once('Transfer', (from, to, value)=>{
// 打印结果
console.log(`${
from} -> ${
to} ${
ethers.utils.formatUnits(ethers.utils.parseUnits(value.toString(), "ether"),6)}`)
})
// 持续监听USDT合约
console.log("\n2. 利用contract.on(),持续监听Transfer事件");
contractUSDT.on('Transfer', (from, to, value)=>{
console.log(`${
from} -> ${
to} ${
ethers.utils.formatUnits(ethers.utils.parseUnits(value.toString(), "ether"),6)}`)
})
}
main()