Go-Ethereum

如何正確估算 go-ethereum 和 golang 函式呼叫的 gas 成本?

  • May 2, 2018

我正在嘗試在 golang 中建構一個程序來模擬我編寫的智能合約的函式呼叫的乙太坊 gas 成本。我已經成功地估計了它們,ethclient.EstimateGas但是報告的 gas 成本似乎被低估了,從 22K-> 24K gas 發送代幣,並改變儲存中的一些布爾變數?這不可能是正確的汽油成本。如果 go-ethereum 庫報告的成本幾乎與現實世界的成本不匹配,我無法找出像 ethgasstation 這樣的網站如何可靠地估算 gas 成本?

我不能告訴你為什麼ethclient.EstimateGas少報消耗的氣體。我記得曾經遇到過同樣的問題,我懶惰的解決方案是將它報告的任何內容乘以 3。

為了計算方法呼叫的正確 gas 價格,您需要合約的二進制 EVM 程式碼。一旦你有了這個,你可以在附錄 G 和 H 的黃皮書中查找每條指令的價格。然而,這個計算的難點在於,精確的 gas 成本將取決於執行指令的虛擬機的狀態。程式碼(EVM)。為了正確計算,您可能需要模擬整個虛擬機。在一般情況下,整個乙太坊區塊鏈,即你需要一個乙太坊區塊鏈節點。

例如,如果您呼叫 ERC20 函式transfer,您最終將支付至少 21,000 的 gas 來進行函式呼叫,並支付 10,000 到 40,000 之間來更新余額和 400 來讀取餘額加上額外的 gas 來支付跳轉表邏輯契約的開始。更新每個餘額(發送方和接收方)所支付的金額將取決於地址是否有餘額(每次更新 5,000 gas vs. 20,000 gas),因此您需要了解虛擬機的整個狀態。在其他情況下,您需要了解其他乙太坊賬戶的狀態,例如餘額或部署的智能合約。

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