【问题标题】:why is my withdraw function consuming infinite gas? it's a fairly simple function为什么我的提现功能会消耗无限的气体?这是一个相当简单的功能
【发布时间】:2019-11-05 17:09:32
【问题描述】:

这是我的第一个 Solidity 合约,我不知道为什么我的提款功能会消耗无限的气体。当我编译合同时,它会发出警告。

函数 Faucet.withdraw(uint256) 的 Gas 需求高:无限。 如果一个函数的gas需求高于block gas limit,它就不能被执行。请避免在修改大面积存储的函数或操作中出现循环(这包括清除或复制存储中的数组)"

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

    }

}

}

注意:我已经成功部署了合约,但是交易失败了,因为它们的 gas 用完了。是因为这个警告吗?

【问题讨论】:

    标签: ethereum solidity remix metamask


    【解决方案1】:

    更新

    如果你想在不调用任何函数的情况下将以太币发送到合约,你需要在该合约中有一个后备函数。

    在合约中添加这个函数:

    function () external payable {}
    

    代码看起来不错。

    在实际运行您的代码时,我也没有遇到任何问题。 有时错误消息并不准确。也许你用价值来调用withdraw?

    您可以使用remix 进行测试。

    【讨论】:

    • 它给出了一个警告“功能 Faucet.withdraw(uint256) 的气体需求高:无限”我已经成功部署了它,但是每当我发送一些以太币时,交易都会失败,因为所有的气体都用完了,任何提示怎么了 ?合同公钥是“0x11aC92886904c05C5f4b82E1E031Dded356EB828”你可以自己检查我也会更新我的问题
    猜你喜欢
    • 2018-08-18
    • 1970-01-01
    • 2023-04-06
    • 2013-06-09
    • 1970-01-01
    • 2019-08-23
    • 2019-04-08
    • 2021-12-28
    • 1970-01-01
    相关资源
    最近更新 更多