Go-Ethereum

使用 Go-ethereum BoundContract (abigen) 估算氣體限制

  • March 19, 2021

我有一個智能合約,它是在 go-ethereum(如果重要的話,版本 1.9.11)abigen 中生成的本機綁定。我正在尋找一種在呼叫智能合約方法之前估計氣體限制的方法。

除了提供原始消息之外,我在文件中找不到任何方法來估計交易的氣體使用量,這似乎違背了首先進行綁定的目的。

現在我想通了:

//error handling removed for brevity
//contracts.MyContractABI is from abigen file.
abi, _ := abi.JSON(strings.NewReader(contracts.MyContractABI))
data, _ := abi.Pack("myFunction", myParam, myParam2)

ethRPCParams := ethereum.CallMsg{
   From:     from,
   To:       contractAddr,
   Value:    big.NewInt(0),
   Data:     data,
}
gas, _ := c.ethClient.EstimateGas(context.Background(), ethRPCParams)

但它似乎是一種解決方法,將 abi 與 BoundContract 中已經存在和實例化的 abi 分開實例化。

所以,我的問題是解決這個操作的正確方法是什麼。例如,在這裡我在估算 gas 價格時沒有獲得數據類型安全性,我必須重新實例化應該已經實例化的東西,程式碼可讀性較差等。

NoSend 選項已添加到 TransactOpts。也許正是你需要的。

引用自:https://ethereum.stackexchange.com/questions/94142