Golang Geth 合约事件过滤 HTTP 中继服务
以下是一个使用 Golang 编写的 HTTP 中继服务,用于过滤 Geth 合约事件的示例代码:
package main
import (
"fmt"
"log"
"net/http"
"github.com/ethereum/go-ethereum"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/rpc"
)
func main() {
// 连接到 Geth 节点的 RPC 接口
client, err := rpc.Dial("http://localhost:8545")
if err != nil {
log.Fatal(err)
}
// 创建 HTTP 路由处理程序
http.HandleFunc("/filter", func(w http.ResponseWriter, r *http.Request) {
// 解析请求参数
address := common.HexToAddress(r.FormValue("address"))
// 创建合约事件过滤器
query := ethereum.FilterQuery{
Addresses: []common.Address{address},
}
logs, err := client.FilterLogs(r.Context(), query)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
// 返回过滤到的事件日志
for _, log := range logs {
fmt.Fprintf(w, "Block Number: %d\n", log.BlockNumber)
fmt.Fprintf(w, "Tx Hash: %s\n", log.TxHash.Hex())
fmt.Fprintf(w, "Event: %s\n", log.Topics[0].Hex())
fmt.Fprintf(w, "Data: %s\n", log.Data)
fmt.Fprintln(w, "-----------------------")
}
})
// 启动 HTTP 服务器
log.Println("Listening on :8080...")
log.Fatal(http.ListenAndServe(":8080", nil))
}
在这个示例中,我们使用 github.com/ethereum/go-ethereum 库来连接到 Geth 节点的 RPC 接口,并使用 client.FilterLogs 方法过滤合约事件日志。我们创建了一个 HTTP 路由处理程序,该程序接收一个合约地址作为参数,并返回过滤到的事件日志。
要使用这个示例,你需要先安装 github.com/ethereum/go-ethereum 库,可以使用以下命令进行安装:
go get github.com/ethereum/go-ethereum
然后,你可以使用以下命令运行这个示例:
go run main.go
这将在本地的 8080 端口启动一个 HTTP 服务器。你可以通过发送 GET 请求到 http://localhost:8080/filter?address=<合约地址> 来访问过滤器服务,并将合约地址替换为你想要过滤的合约地址。
希望这个示例能帮助到你!
原文地址: https://www.cveoy.top/t/topic/fxLF 著作权归作者所有。请勿转载和采集!