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()

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Geoffrey_Zhu/article/details/142843830