首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要指定应付金额(msg.sender)?

需要指定应付金额(msg.sender)?
EN

Ethereum用户
提问于 2022-06-09 21:21:38
回答 1查看 132关注 0票数 0

我正在通过掌握以太,并已经建立了他们的第一个例子水龙头合同。我认识到它们的许多语法已经过时,并用^0.4.19编写。我用^0.8.7编写了它,并通过google等将代码更新为现代标准。

它们的代码如下:

代码语言:javascript
复制
contract Faucet {

   function withdraw(uint withdraw_amount) public {

      require(withdraw_amount <= 100000000000000000);

      msg.sender.transfer(withdraw_amount);
    }

   function () public payable {}
}

我更新的代码如下:

代码语言:javascript
复制
// 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,但是我很难找到正确的语法。有人能帮忙吗?谢谢。

EN

回答 1

Ethereum用户

发布于 2022-06-09 23:12:02

payable关键字用于将地址转换为能够接收ETH的地址。在您的示例中这样做了,但是您忘记了转移资金,您可以稍微修改代码,使其具有以下内容:

代码语言:javascript
复制
// 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 {}
}
票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/129935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档