我正在使用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()
}