是否有类似transferFrom((函数的函数,但对于ETH,本机令牌不是weth?
如果不是,您将如何制作一个具有相同功能但使用本机令牌的函数。
谢谢!
无法模拟相同的功能。
代币审批存储在代币合同中,以及代币余额中。
为了模拟与原生ETH相同的功能,还需要在存储ETH余额的同一层上有一个审批数据库。但事实并非如此。
除非您可以使用WETH代币(或任何其他自定义代币(,否则您只能让用户将本机ETH发送到托管合同。但在从合同中提取托管ETH之前,他们将无法使用该ETH。
为了简单起见,本示例只显示了一个用户的托管合同。但它可以进行扩展,以跟踪多个用户的资金。
pragma solidity ^0.8;
contract Escrow {
address holder;
address admin;
receive() external payable {}
// only the holder and the admin contract
// can pull funds from this escrow account
function withdraw(uint256 _amount) external {
require(msg.sender == holder || msg.sender == admin);
payable(msg.sender).transfer(_amount);
}
}