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更有效,再次感谢!