我正在通过掌握以太,并已经建立了他们的第一个例子水龙头合同。我认识到它们的许多语法已经过时,并用^0.4.19编写。我用^0.8.7编写了它,并通过google等将代码更新为现代标准。
它们的代码如下:
contract Faucet {
function withdraw(uint withdraw_amount) public {
require(withdraw_amount <= 100000000000000000);
msg.sender.transfer(withdraw_amount);
}
function () public payable {}
}我更新的代码如下:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
contract myFirstFaucet {
function withdraw(uint withdrawAmount) view public {
require(withdrawAmount <= 100000000000000000);
payable(msg.sender);
}
fallback () external payable {}
receive () external payable {}
}我知道回退函数可以工作,尽管我仍然对回退->接收拆分背后的原因有些困惑。
然而,每当我调用提取函数时,它就不会发出以太。我知道Ropsten的合同余额是5 ETH:
https://ropsten.etherscan.io/address/0x73a3c2810ce8819321ff5e5629377a422350bee9
我认为这是因为我需要在payable(msg.sender)行的某个地方指定他们得到了withdrawAmount,但是我很难找到正确的语法。有人能帮忙吗?谢谢。
发布于 2022-06-09 23:12:02
payable关键字用于将地址转换为能够接收ETH的地址。在您的示例中这样做了,但是您忘记了转移资金,您可以稍微修改代码,使其具有以下内容:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
contract myFirstFaucet {
function withdraw(uint withdrawAmount) view public {
require(withdrawAmount <= 100000000000000000);
payable(msg.sender).transfer(withdrawAmount);
}
fallback () external payable {}
receive () external payable {}
}https://ethereum.stackexchange.com/questions/129935
复制相似问题