如何使用ERC20 token在solidity中转账eth?

How to use ERC20 token to transfer eth in solidity?

我正在写一个 defi 项目来在 ERC20 代币和 eth 之间转移。我想开发一个函数,从一个地址接受 ERC20 令牌,然后将 eth 发送到该地址。

我处理那个ERC20 token是在智能合约中生成token,然后把token发送给用户。问题是,如果用户 A 向用户 B 发送一些 ERC20 代币,我应该怎么做才能让用户 B 使用该代币在我的智能合约中请求 eth?

另一个简单的问题是,如何要求用户使用他们的钱包(例如 metamask)将 ERC20 代币转移到我的智能合约?

使用 payable 您可以将原生代币 (eth) 从您的合约转移到任何用户的钱包中:

    function transferEth(address payable _to, uint _amount) public {
        (bool success, ) = _to.call{value: _amount}("");
        require(success, "Failed to send Ether");
    }

请注意,上面的这个函数并不安全,因为任何人都可以调用您的合约的转账,请考虑使用 modifier 来防止它。


在你的情况下,我可以想到这样的函数:

function claimEth() public {
    if (balanceOf(msg.sender) > 100) {
        balances[msg.sender] = balances[msg.sender[.sub(100);
        transferEth(msg.sender, 5);
    }
}