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

Posted

技术标签:

【中文标题】cpp-ethereum/aleth 监听智能合约事件问题【英文标题】:cpp-ethereum/aleth listening to smart contract events problem 【发布时间】:2021-08-31 21:50:50 【问题描述】:

我们正在开发来自 cpp-ethereum/aleth 的以太坊分支,我想知道如果 websocket 不可用,如何监听合约事件? 在 web3 中有 web3.eth.subscribe 但如果没有 websocket 则它不起作用,因为只有 HTTP 提供程序可用。

如果没有它,我们应该如何监听合约事件?使用 'pending' 调用 eth_getlogs 那么我们如何在事件发生时被触发?

【问题讨论】:

【参考方案1】:

这是 HTTP 和 WSS 连接之间的主要区别之一。

HTTP 连接为每个操作打开然后关闭 WSS 连接打开一次,然后在不关闭连接的情况下传输消息

因此,如果您需要使用 HTTP 连接,则需要轮询 eth_getlogs 的结果。轮询不断要求更新,例如每一秒。请注意,间隔时间很短,您很可能会遇到提供商的速率限制。

日志是作为挖掘的结果发布的,因此它们在内存池中尚不可用(即pending 选项)。您需要查询每个 latest 块(或其编号)。

【讨论】:

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

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

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

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

Web3.js的基本使用(与以太坊智能合约的交互)

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

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