为什么我的取款函数会消耗无限的 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进行测试。
这是我的第一份 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进行测试。