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

Posted

技术标签:

【中文标题】如何从 node.js 应用程序永久监听智能合约中的事件?【英文标题】:How to listen permanently to events in a smart contract from node.js Application? 【发布时间】:2020-10-02 04:35:05 【问题描述】:

我有一个 node js 应用程序,它具有以下代码:

contract.getPastEvents('RequestCreated', function (error, event)  console.log(event); )
        .then(function (events) 
            console.log(events); 
        )

运行节点后,我得到一个空数组。

我的期望是一旦发出智能合约中的事件,就可以得到变量requestCount 的值

    function createRequest(string memory _fileHash) public 
        requestCount++;
        fileHash[requestCount] = _fileHash;
        emit RequestCreated(requestCount);
    

我的问题是如何从节点 js 应用程序监听智能合约中发生的事件?

我使用的是 Web3 Version > 1,所以手表功能不适合我。

【问题讨论】:

【参考方案1】:

有一个 event.watch() 功能和一个关于如何使用它的在线教程。 https://coursetro.com/posts/code/100/Solidity-Events-Tutorial---Using-Web3.js-to-Listen-for-Smart-Contract-Events

从教程中剪掉:

var instructorEvent = Coursetro.Instructor();
instructorEvent.watch(function(error, result)
            if (!error)
                
                    $("#loader").hide();
                    $("#instructor").html(result.args.name + ' (' + result.args.age + ' years old)');
                 else 
                    $("#loader").hide();
                    console.log(error);
                
        );

【讨论】:

同时检查底层 TCP/IP 连接警告ethereum.stackexchange.com/a/84194/620 正如我所提到的,event.watch() 函数不适用于 Web3 版本 1.x

以上是关于如何从 node.js 应用程序永久监听智能合约中的事件?的主要内容,如果未能解决你的问题,请参考以下文章

cpp-ethereum/aleth 监听智能合约事件问题

如何获取有关随机智能合约地址的数据。如创建日期、链表、持有者(持有多少个钱包)

区块链本地部署智能合约环境

持续监听智能合约事件

Eth,如何从智能合约中调用存款功能

在 Web3.js 中使用本地私钥