3 回答
TA贡献1777条经验 获得超3个赞
您可以使用go-ethereum/ ethclient最好地解决问题:
package main
import (
"context"
"log"
"github.com/ethereum/go-ethereum"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/ethclient"
)
func main() {
client, _ := ethclient.Dial("https://mainnet.infura.io")
defer client.Close()
contractAddr := common.HexToAddress("0xCc13Fc627EFfd6E35D2D2706Ea3C4D7396c610ea")
callMsg := ethereum.CallMsg{
To: &contractAddr,
Data: common.FromHex("0x8da5cb5b"),
}
res, err := client.CallContract(context.Background(), callMsg, nil)
if err != nil {
log.Fatalf("Error calling contract: %v", err)
}
log.Printf("Owner: %s", common.BytesToAddress(res).Hex())
}
TA贡献1831条经验 获得超4个赞
如果您查看客户端库代码,您会看到 JSON RPC 响应对象已经被反汇编,失败时返回错误,或者解析的实际结果
然而,解析器已经解包了包含的“结果”字段。你的类型仍然想做额外的解包:
type response struct { Result string}
删除外部结构,只需将字符串指针传递给 的client.Call
第一个参数。
TA贡献1827条经验 获得超9个赞
您的响应结构不显示响应的 json 具有的数据
尝试这个
type response struct {
Jsonrpc string `json:"jsonrpc"`
ID int `json:"id"`
Result string `json:"result"`
}
- 3 回答
- 0 关注
- 137 浏览
添加回答
举报