为什么我的提现功能要消耗无限的气体?这是一个相当简单的功能

时间:2019-11-05 17:09:32

标签: ethereum solidity remix metamask

这是我有史以来的第一个固定合同,我不知道为什么我的提款功能要消耗无限的汽油。当我编制合同时会发出警告。

Faucet.withdraw(uint256)函数的气体需求高:无穷。  如果功能的气体要求高于块体气体极限,则无法执行。请避免函数或操作中的循环会修改大容量存储空间(包括清除或复制存储空间中的阵列)”

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);

    }

}

}

注意:我已经成功部署了合同,但是由于交易用尽而导致交易失败。是由于此警告吗?

1 个答案:

答案 0 :(得分:3)

更新

如果您想将以太币发送给合约而不调用其任何功能,则需要在该合约中具有一个后备功能。

在合同中添加此功能:

function () external payable {}

代码看起来不错。

在实际运行代码时,我也没有遇到任何问题。 有时错误消息不准确。也许您称取有价值的提款?

您可以使用remix对其进行测试。