Ethereum 所需气体超过块气体限制回退功能
我正在制定一份智能合同,并在这里观看了以下视频:。我准确地复制了代码,但是当我尝试调用回退函数时,我得到了以下错误:Ethereum 所需气体超过块气体限制回退功能,ethereum,solidity,smartcontracts,ether,Ethereum,Solidity,Smartcontracts,Ether,我正在制定一份智能合同,并在这里观看了以下视频:。我准确地复制了代码,但是当我尝试调用回退函数时,我得到了以下错误:所需气体超过了块气体限制:300000000。即使回退功能如下所示(它什么也不做): function()函数{ }当调用回退功能(在混音中测试)时,发布的契约确实会执行。但是,一旦您取消注释createTokens()中的逻辑,它就会失败。 后备功能的气体限值较低(2300),因此其功能非常有限。您不能执行诸如写入存储器、调用外部函数或发送乙醚之类的操作,因为您将立即达到极限。
所需气体超过了块气体限制:300000000
。即使回退功能如下所示(它什么也不做):
function()函数{
}
当调用回退功能(在混音中测试)时,发布的契约确实会执行。但是,一旦您取消注释createTokens()中的逻辑,它就会失败。
后备功能的气体限值较低(2300),因此其功能非常有限。您不能执行诸如写入存储器、调用外部函数或发送乙醚之类的操作,因为您将立即达到极限。它应该主要用于使您的合同能够接收以太网,并可能记录事件
在上面发布的示例中,删除回退函数中对createTokens()
的调用,直接从客户端调用该函数即可
客户机代码示例:
const abiDefinition = ...;
const contractAddress = ...;
const account = ...;
const amountInEther = ...;
const contract = web3.eth.contract(abiDefinition);
const contractInstance = contract.at(contractAddress);
const transactionObj = {
from: account,
value: web3.toWei(amountInEther, 'ether'),
};
contractInstance.createTokens.sendTransaction(transactionObj, (error, result) = {
...
};
另外,作为旁注,您的值计算不正确
msg.value
是Wei,不是ether。发送1个乙醚会使您的硬限制大大超过。建议您在合同中与Wei合作,因此您应该调整您的费率
请包括合同和您的客户代码。@AdamKipnis,请查找随附的代码。谢谢您的回答。我今晚再试一次。您建议如何代替调用CreateToken?这就是我需要调用的函数,毕竟,当投资者在合同中付款时。谢谢您可以通过调用sendTransaction()
发送以太。我会用一个JS客户端调用的例子来更新答案。所以更多的视频使用的是过时的Solidity版本,现在还有其他函数调用对gas更有效,再次感谢!