这是我有史以来的第一个固定合同,我不知道为什么我的提款功能要消耗无限的汽油。当我编制合同时会发出警告。
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);
}
}
}
注意:我已经成功部署了合同,但是由于交易用尽而导致交易失败。是由于此警告吗?
答案 0 :(得分:3)
如果您想将以太币发送给合约而不调用其任何功能,则需要在该合约中具有一个后备功能。
在合同中添加此功能:
function () external payable {}
代码看起来不错。
在实际运行代码时,我也没有遇到任何问题。 有时错误消息不准确。也许您称取有价值的提款?
您可以使用remix对其进行测试。