msg.value 引发错误并且不发送 eth 到合约

msg.value raises error and doesn't send eth to contract

我正在尝试在 Remix 中编写一个简单的合约,但找不到解决以下问题的方法:尝试将特定数量的以太币转移到合约中。

合约编译和部署没有任何问题。 但是当我尝试调用该函数时,我收到以下错误消息,您可以在下图中看到。问题不能是以太币不够,我在 Rinkeby Testnetwork 上得到了大约 2 个以太币。

https://i.stack.imgur.com/a2hXj.png

我可以点击“发送交易”,这将打开 Metamask:

https://i.stack.imgur.com/vba66.png

几秒钟后交易失败...:

https://i.stack.imgur.com/pT9hy.png

我正在使用 msg.value() 函数。我的代码如下:

// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract Contract {
    function sendEth() public payable {
        require(msg.value > .02 ether, "Not enough ETH");
    }
}

如果有人得到提示,我将不胜感激,因为我已经用了太久了。

第三个屏幕截图显示您随交易一起发送了 0 wei。因此,您的 Solidity 代码中的要求条件失败,因为 0 不超过 0.02 以太币。

合约无法从您的钱包中提取任何 ETH - 您需要指定您希望通过交易发送多少。

在 Remix 中,“部署和 运行 事务”选项卡中有一个“值”输入,允许您指定数量。