为什么我的取款函数会消耗无限的 gas?这是一个相当简单的功能

why is my withdraw function consuming infinite gas? it's a fairly simple function

这是我的第一份 solidity 合约,我不明白为什么我的提款函数会消耗无限的 gas。当我编译合同时,它会发出警告。

函数的 gas 需求 Faucet.withdraw(uint256) 高:无限。 如果函数的 gas 要求高于区块 gas 限制,则无法执行。请避免在您的函数或操作中修改大面积存储的循环(这包括清除或复制存储中的数组)"

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 {}

代码看起来不错。

实际上 运行 你的代码我也没有遇到任何问题。 有时错误消息不准确。也许你调用 withdraw with value?

您可以使用remix进行测试。