登录
首页 >  Golang >  Go问答

实时扩展以太坊事件日志订阅话题

来源:stackoverflow

时间:2024-02-11 11:00:23 197浏览 收藏

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《实时扩展以太坊事件日志订阅话题》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~

问题内容

我正在使用 go-ethereum 来监听智能合约的某个主题的事件,如下所示:

import "github.com/ethereum/go-ethereum/ethclient"                 
logs := make(chan types.Log)
client, _ := ethclient.Dial("wss://rinkeby.infura.io/ws/v3/{projectid}")          
var hashes []common.Hash
sub, _ := client.SubscribeFilterLogs(context.Background(), ethereum.FilterQuery{
        Addresses: []common.Address{contractAddress},
        Topics:    [][]common.Hash{hashes},
}, logs)

然后我将匹配的日志写入变量日志中。

有没有办法在运行时扩展我订阅的主题列表? 我想构建一个 rest 服务,它可以获取包含要订阅的新主题的请求。

或者我需要开始新的订阅吗?


正确答案


我一直在测试这个,因为我找不到好的答案。

您可以创建一些用于订阅管理的方法,其中有一个用于从哈希数组中添加/删除哈希的方法,该方法还将调用订阅的 .unsubscribe() 方法,然后使用新列表重新初始化。可能看起来像这样:

var hashes []common.Hash
var subscription ethereum.Subscription

func createSubscription(){
    if subscription != nil && len(hashes > 0){
        subscription.Unsubscribe()
        // your logic for creating a subscription
        // re-assign to subscription variable
    } else if len(hashes > 0) {
        // create subscription as normal, assign to subscription variable
    }
}

func appendHash(common.Hash hash){
    hashes = append(hashes, hash)
    createSubscription()
}

理论要掌握,实操不能落!以上关于《实时扩展以太坊事件日志订阅话题》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>