以下是一个使用 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=<合约地址> 来访问过滤器服务,并将合约地址替换为你想要过滤的合约地址。

希望这个示例能帮助到你!

Golang Geth 合约事件过滤 HTTP 中继服务

原文地址: https://www.cveoy.top/t/topic/fxLF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录