第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何使用 Golang 正確發(fā)送 RPC 調(diào)用以獲取智能合約所有者?

如何使用 Golang 正確發(fā)送 RPC 調(diào)用以獲取智能合約所有者?

Go
ITMISS 2023-05-08 15:26:45
更新由于我無法使用此問題中的方法實(shí)現(xiàn)此目的,因此我創(chuàng)建了自己的庫來做同樣的事情(鏈接)。它不依賴 go-ethereum 包,而是使用普通net/http包來做 JSON RPC 請求。我仍然很想知道我在下面的方法中做錯(cuò)了什么。釋義:owner =與類型public約定的變量addresscontract = 擁有所有者的智能合約這是獲取合同所有者的 curl 請求。我設(shè)法得到了主人。(JSON RPC 文檔)curl localhost:8545 -X POST \--header 'Content-type: application/json' \--data '{"jsonrpc":"2.0", "method":"eth_call", "params":[{"to": "0x_MY_CONTRACT_ADDRESS", "data": "0x8da5cb5b"}, "latest"], "id":1}'{"jsonrpc":"2.0","id":1,"result":"0x000000000000000000000000_OWNER"}但是當(dāng)我嘗試在 Golang 中復(fù)制它時(shí)(下面的代碼),我得到了json: cannot unmarshal string into Go value of type main.response錯(cuò)誤。(我使用的 go-ethereum 代碼)package mainimport (    "fmt"    "log"    "os"    "github.com/ethereum/go-ethereum/rpc")func main() {    client, err := rpc.DialHTTP(os.Getenv("RPC_SERVER"))    if err != nil {        log.Fatal(err)    }    defer client.Close()    type request struct {        To   string `json:"to"`        Data string `json:"data"`    }    type response struct {        Result string    }    req := request{"0x_MY_CONTRACT_ADDRESS", "0x8da5cb5b"}    var resp response    if err := client.Call(&resp, "eth_call", req, "latest"); err != nil {        log.Fatal(err)    }    fmt.Printf("%v\n", resp)}我在這里錯(cuò)過了什么?預(yù)期結(jié)果:字符串格式的地址。例如0x3ab17372b25154400738C04B04f755321bB5a94bP/S — 我知道abigen,而且我知道使用 abigen 更好更容易地做到這一點(diǎn)。但我試圖在不使用 abigen 方法的情況下解決這個(gè)具體問題。
查看完整描述

3 回答

?
慕森王

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個(gè)贊

您可以使用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())

}


查看完整回答
反對 回復(fù) 2023-05-08
?
慕容708150

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超4個(gè)贊

如果您查看客戶端庫代碼,您會(huì)看到 JSON RPC 響應(yīng)對象已經(jīng)被反匯編,失敗時(shí)返回錯(cuò)誤,或者解析的實(shí)際結(jié)果

然而,解析器已經(jīng)解包了包含的“結(jié)果”字段。你的類型仍然想做額外的解包:

type?response?struct?{
????Result?string}

刪除外部結(jié)構(gòu),只需將字符串指針傳遞給 的client.Call第一個(gè)參數(shù)。


查看完整回答
反對 回復(fù) 2023-05-08
?
素胚勾勒不出你

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超9個(gè)贊

您的響應(yīng)結(jié)構(gòu)不顯示響應(yīng)的 json 具有的數(shù)據(jù)


嘗試這個(gè)


type response struct {

    Jsonrpc string `json:"jsonrpc"`

    ID      int    `json:"id"`

    Result  string `json:"result"`

}


查看完整回答
反對 回復(fù) 2023-05-08
  • 3 回答
  • 0 關(guān)注
  • 211 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)