eth.estimateGas 以合约地址作为第二个参数失败
eth.estimateGas fails with contract address as second parameter
新手。
有一个go-ethereum方法:
eth.estimateGas({from:'firstAccount', to:'secondAccount'})
效果很好,
但与合约地址相同的方法如下:
eth.estimateGas({from:'firstAccount', to:'contractAddr'})
失败并出现错误
gas required exceeds allowance or always failing transaction
我查看了 go-ethereum 源代码,它有一行,其中包含使用合约地址作为第二个参数的建议:
https://github.com/ethereum/go-ethereum/blob/master/accounts/abi/bind/base.go#L221
问题是:有没有可能使用eth.estimateGas,合约地址作为第二个参数,如何避免上述错误?
谢谢。
你没有在合同中具体说明你在执行什么,所以没有什么可以估计的。当您 estimateGas
向 EOA 账户转账时,没有要执行的合约代码,因此没有要作为交易对象的一部分发送的消息数据。如果您在合同调用中估算气体,则需要包括合同的 data
。
例如,如果你想在这个合约
中用setValue(2)
方法估算gas
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});
data
的值来自对函数签名和参数值的编码。您可以使用一个简单的工具(如 https://abi.hashex.org)来生成它。您只需输入函数名称以及参数参数类型及其值,它就会为您生成消息数据。您也可以使用 web3js 执行此操作。
编辑 - 我忽略了考虑具有回退功能的合同。在不传递消息数据的情况下对合约执行 estimateGas
可提供具有回退功能的合约的估计值。如果合约没有fallback函数,调用会失败。
新手。 有一个go-ethereum方法:
eth.estimateGas({from:'firstAccount', to:'secondAccount'})
效果很好, 但与合约地址相同的方法如下:
eth.estimateGas({from:'firstAccount', to:'contractAddr'})
失败并出现错误
gas required exceeds allowance or always failing transaction
我查看了 go-ethereum 源代码,它有一行,其中包含使用合约地址作为第二个参数的建议: https://github.com/ethereum/go-ethereum/blob/master/accounts/abi/bind/base.go#L221
问题是:有没有可能使用eth.estimateGas,合约地址作为第二个参数,如何避免上述错误? 谢谢。
你没有在合同中具体说明你在执行什么,所以没有什么可以估计的。当您 estimateGas
向 EOA 账户转账时,没有要执行的合约代码,因此没有要作为交易对象的一部分发送的消息数据。如果您在合同调用中估算气体,则需要包括合同的 data
。
例如,如果你想在这个合约
中用setValue(2)
方法估算gas
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});
data
的值来自对函数签名和参数值的编码。您可以使用一个简单的工具(如 https://abi.hashex.org)来生成它。您只需输入函数名称以及参数参数类型及其值,它就会为您生成消息数据。您也可以使用 web3js 执行此操作。
编辑 - 我忽略了考虑具有回退功能的合同。在不传递消息数据的情况下对合约执行 estimateGas
可提供具有回退功能的合约的估计值。如果合约没有fallback函数,调用会失败。