Ethereum eth.estimateGas失败,合同地址作为第二个参数
新手。 有一种go ethereum方法:Ethereum eth.estimateGas失败,合同地址作为第二个参数,ethereum,go-ethereum,Ethereum,Go Ethereum,新手。 有一种go ethereum方法: eth.estimateGas({from:'firstAccount',to:'secondAccount'}) 这很有效, 但与合同地址相同的方法如下: eth.estimateGas({from:'firstAccount',to:'contractAddr'}) 因错误而失败 所需气体超过允许值或始终无法进行交易 我已经研究了go以太坊源代码,它有一行,其中包含使用合同地址作为第二个参数的建议: 问题是:是否有可能使用合同地址为第二个参数的e
eth.estimateGas({from:'firstAccount',to:'secondAccount'})
这很有效,
但与合同地址相同的方法如下:
eth.estimateGas({from:'firstAccount',to:'contractAddr'})
因错误而失败
所需气体超过允许值或始终无法进行交易
我已经研究了go以太坊源代码,它有一行,其中包含使用合同地址作为第二个参数的建议:
问题是:是否有可能使用合同地址为第二个参数的eth.estimateGas,以及如何避免上述错误?
谢谢。你没有在合同中具体说明你在执行什么,所以没有什么可估算的。当您
estimateGas
转账到EOA账户时,没有要执行的合同代码,因此没有要作为交易对象一部分发送的消息数据。如果您在合同调用中估算天然气,则需要包含合同的数据
例如,如果您想将天然气估算为本合同中的setValue(2)
方法
pragma solidity ^0.4.19;
contract SimpleContract {
uint256 _value;
function setValue(uint256 value) public {
_value = value;
}
}
你的电话是
var data = '552410770000000000000000000000000000000000000000000000000000000000000002';
eth.estimateGas({from: fromAccount, to: contractAddress, data});
数据的值来自对函数签名和参数值进行编码。你可以使用一个简单的工具(比如)来生成这个。您只需输入函数名以及参数参数类型及其值,它就会为您生成消息数据。您也可以使用web3js来实现这一点
<>我忽略了考虑回退函数的合同。在合约上执行estimateGas
,而不传入消息数据,可为具有回退功能的合约提供估值。如果合同没有回退功能,调用将失败。忘记提到:这是一个专用网络,我有足够的以太,合同已经部署和挖掘。将编码方法作为数据传递,但请注意,如果您要对合同的乙醚交易进行估算,您还必须传递估算交易对象中的准确值。再次感谢!所以根据这篇评论:-如果合同没有合同资金的默认方法,上述错误将导致?是的。不过,关于回退功能,您提出了一个很好的观点。我会在答案中加上这个。