Go-Ethereum
如何在合約創建/部署到私有乙太坊區塊鏈時估算 gas
我做
了什麼 a) 當我web3.eth.estimateGas
用來估計沒有參數的契約創建建構子的成本時,估計是正確的。b) 如果合約已經部署,然後使用參數估計合約函式的 gas 成本,它工作正常。(
contract.myMethod.estimateGas()
使用 web3 api)問題
a) 當我使用參數化建構子在合約創建時間 (
contractObject.new
) 上估計合約中的 gas 時,它給出的 gas 成本估計不正確。(web3.eth.estimateGas
web3 api)我想要什麼
a) 當我用合約的多個參數建構子估計氣體時,它應該估計正確的氣體。(
contractObject.new
用於呼叫建構子)b) Browser-soldity 使用參數化建構子對合約進行正確的氣體估計 –> 在合約創建/部署之前(如交易成本或執行成本,我如何使用他們的算法和 web3 api 來正確估計氣體?)
嘗試使用
.getData()
.
.getData()
返回函式的編碼參數,以便手動發送交易。然後,您可以將其粘貼在web3.eth.estimateGas()
(on 上web3.eth
,而不是給定方法上)以模擬發送交易。這是一個未經測試的範例,但希望它可以幫助您:
var contractData = contractObject.new.getData(someparam, another, {data: contractBytecode}); var estimate = web3.eth.estimateGas({data: contractData})
參考:
使用 .getData() 的範例(這是第四個選項。)
使用 web3.js 版本 1.2.x 時,沒有 .getData 方法。我找到的解決方案是估算 .deploy() 方法的 gas,它有效地返回了合約創建的成本。
操作順序為:
let contractJSON = // JSON compiled contract const contractABI = contractJSON.abi; const bytecode = contractJSON.bytecode; const contract = new web3.eth.Contract(contractABI); let options = { arguments: [ arg1, arg2,... ], data: bytecode } const estimatedGas = await contract.deploy(options).estimateGas();