Ethereum 为什么我的提取函数消耗无限的气体?这是一个相当简单的函数

Ethereum 为什么我的提取函数消耗无限的气体?这是一个相当简单的函数,ethereum,solidity,remix,metamask,Ethereum,Solidity,Remix,Metamask,这是我有史以来第一个固体合同,我不明白为什么我的提取函数消耗无限的气体。当我编写合同时,它给出了一个警告 多功能水龙头的气体要求。抽出装置256高:无限大。 如果某个功能的气体要求高于块气体限值,则无法执行该功能。请避免在函数或操作中出现修改大存储区域的循环—包括清除或复制存储中的阵列 pragma solidity ^0.5.11; //Our First Contract is a Faucet contract Faucet { //Deposits ethers function

这是我有史以来第一个固体合同,我不明白为什么我的提取函数消耗无限的气体。当我编写合同时,它给出了一个警告

多功能水龙头的气体要求。抽出装置256高:无限大。 如果某个功能的气体要求高于块气体限值,则无法执行该功能。请避免在函数或操作中出现修改大存储区域的循环—包括清除或复制存储中的阵列

pragma solidity ^0.5.11;

//Our First Contract is a Faucet
contract Faucet
{

//Deposits ethers
 function deposit(uint256 amount) payable public {
     require(msg.value == amount);
    // nothing to do!
}


//Give out ether to anyone who asks
function withdraw(uint256 withdraw_amount) public
{
    if(withdraw_amount <= address(this).balance)
    {
        //Send  the amount to address which requested it
        msg.sender.transfer(withdraw_amount);

    }

}

}
注意:我已经成功地部署了合同,但是事务失败了,因为它们耗尽了资源。是由于此警告吗?

更新 如果您希望在不调用其任何函数的情况下将以太发送到协定,则需要在该协定中具有回退函数

在合同中添加此功能:

function () external payable {}
代码看起来不错

我在实际运行代码时也没有遇到任何问题。 有时错误消息并不准确。也许你会用价值来取款

您可以使用来测试它。

更新 如果您希望在不调用其任何函数的情况下将以太发送到协定,则需要在该协定中具有回退函数

在合同中添加此功能:

function () external payable {}
代码看起来不错

我在实际运行代码时也没有遇到任何问题。 有时错误消息并不准确。也许你会用价值来取款


您可以使用来测试它。

它给出了一个警告,即功能水龙头的气体要求。抽出装置256高:无限我已成功部署它,但每当我发送一些以太时,事务都会失败,因为气体已全部使用,有什么提示吗?合同公钥是0x11aC92886904c05C5f4b82E1E031Dded356EB828您可以自己检查我也会更新我的问题检查一下:它给出了功能水龙头的警告气体要求。提取单元256高:无限我已成功部署它,但每当我发送一些以太时,事务都会失败,因为气体已全部使用,有什么问题吗?合同公钥是0x11aC92886904c05C5f4b82E1E031Dded356EB828您可以自己检查我也会更新我的问题检查此项: