持续监听智能合约事件

Posted

技术标签:

【中文标题】持续监听智能合约事件【英文标题】:Continuously listening to smart contract events 【发布时间】:2021-12-01 02:19:15 【问题描述】:

我的 NFT 项目架构只有在发生铸币事件时才会发出 minted 事件,然后我想收听该事件,因此我触发了 JSON 内容的上传,该内容随后对代币所有者(因为任何人都可以通过访问baseURI/tokenID 来访问所有代币的内容,我希望在铸造代币之前保密)。

我想创建一个函数来持续监听来自minted 事件的新事件。我正在尝试使用以下实现来访问新事件,因为我找不到持续侦听来自合约的事件的实现。

async function listener() 
    events = nftContract.getPastEvents("minted",fromBlock: 1, function(err,res) 
        console.log(res);
    )

创建一个继续从合约中轮询事件的函数的最佳方法是什么?

【问题讨论】:

我在这里向您推荐我的答案:Getting all newly minted ERC721 contracts with an ethereum node 【参考方案1】:

解决方案的完整代码是这样的:

const ethers = require('ethers');
const CONTRACT_ADDRESS = "0x10820dB......";
const ABIJSON = JSON.parse('"_format": "hh-sol-artifact-1", "contractName": "testcontract", "....')
provider = new ethers.providers.AlchemyProvider("ropsten");
const contract = new ethers.Contract(CONTRACT_ADDRESS, ABIJSON.abi, provider);

contract.on("eventName", ( caller,tokenID) => 
      //this section is called every time an event is emitted 
)

【讨论】:

以上是关于持续监听智能合约事件的主要内容,如果未能解决你的问题,请参考以下文章

从 Java 应用程序调用智能合约函数,无需监听事件

如何从 node.js 应用程序永久监听智能合约中的事件?

实现CTF智能合约题目的环境部署

智能合约学习(持续更新中)

区块链开发之Solidity编程基础合约事件

区块链开发之Solidity编程基础合约事件