如何使用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);
}
}
我正在写一个 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);
}
}