为什么我不能使用这个 transferEther 函数将 Ether 发送到智能合约?

朱马尔

我有这个代码,我已经输入到 Remix IDE 中,作为 ReceivedEther.sol,一个独立的智能合约。

我已经使用 MetaMask 将 0.02 以太币转移到智能合约中。

当我检查智能合约的余额时,它按预期返回 200000000000000000。

但是,如果我尝试使用 transferEther 函数并输入一个小于此值的数字 - 例如,0.005 ETH 或 500000000000000000 作为数量 - 它无法使用 MetaMask。

当 MetaMask 提示我时,它永远不会是那个数量。这是 0 ETH 和 0.00322 gas 费(或任何 gas 费用)。基本上它总是将 ETH 的数量设置为 0,并且只收取费用。

为什么我不能在带有 MetaMask 的 Remix IDE 中使用此功能转移一定数量的 ETH?

pragma solidity ^0.8.0;


contract ReceivedEther {

    function transferEther(address payable _recipient, uint _amount) external returns (bool) {
        require(address(this).balance >= _amount, 'Not enough Ether in contract!');
        _recipient.transfer(_amount);
        return true;
    }
    
    /**
    * @return contract balance
    */
    function contractBalance() external view returns (uint) {
        return address(this).balance;
    }
}
彼得·海达

您的代码将 ETH(在_amount变量中说明)从智能合约发送到_recipient. 因此,它不需要发送任何 ETH 来执行该transferEther()功能。


如果您希望您的合约接受 ETH,则需要将接受它的函数(或通用fallback()receive()函数)标记为payable

例子:

pragma solidity ^0.8.0;

contract ReceivedEther {

    receive() external payable {} // note the `payable` keyword

    // rest of your implementation
}

然后,您可以将任意数量的 ETH 发送到智能合约地址(无需指定要执行的任何函数)。

https://docs.soliditylang.org/en/v0.8.5/contracts.html#receive-ether-function查看更多


如果您想从 Remix IDE 中预填充 MetaMask 中的金额,您可以使用“部署和运行事务”选项卡中的“值”输入。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么不能将以太币发送到我的智能合约的地址?

为什么我不能使用Python的`requests`库将“无”作为数据发送到POST请求中?

如何将 eth 从指定账户发送到智能合约

为什么我不能使用Node.js和Express将数据从POST发送到下一个呈现页面上的表单?

为什么我不能使用REST API将一些UTF-8字符发送到Firebase?

Warum kann ich diese transferEther-Funktion nicht verwenden, um Ether an den Smart Contract zu senden?

为什么我们不能通过智能合约将以太币发送到以太坊地址0x1

如何使用 RPC / web3 / ether.js 识别以太坊智能合约传输?

将结构数组发送到不同的合约

使用模板将类型发送到函数

使用argv和argc将参数发送到函数

使用.ajax将数据发送到php函数

为什么我不能通过AngularJS的POST将帖子发送到WebApi?

无法理解为什么我不使用PHP mail()函数将邮件发送到主机邮件

为什么我的函数不能使用参数?

使用web3将weidwei转换为ether

POSTFIX:不能使用邮件客户端将邮件发送到其他域

使用JavaScript将“%”发送到API

为什么我不能使用 Cordova 发送 XHR 请求?

如果我将原始列表发送到更改它的递归函数,如何使用它?

为什么我不能使用 map 将函数应用于 lm fit 列表?

为什么将PUT发送到show()而不是update()?

为什么将shell输出发送到stderr?

在将参数发送到@Query函数时,如果我给像?1,则试图像吗?只要

如何使用Azure函数将数据发送到服务总线主题?

使用 argparse 将参数发送到 Python 脚本中的函数

如何将额外的结果从python生成器发送到使用者函数?

使用bash函数捕获stdin / stdout时将命令发送到后台

使用节点 js 将函数参数值发送到 html 模板中