我可以通过WETH智能合同将ETH转换为WETH,并将其存入我的智能合同地址,但当我想通过WETH智能契约将WETH转换为ETH并将其提取到我的钱包地址时,我无法做到。
pragma solidity ^0.5.0;
interface IWETH {
function deposit() external payable;
function transfer(address to, uint value) external returns (bool);
function withdraw(uint256 value) external payable;
}
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
contract testwithdraw {
uint256 public ETHAnt;
address public WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
function deposit() public payable{
ETHAnt = msg.value;
IWETH(WETH).deposit.value(ETHAnt)();
}
function getContractBalance(address _to) public view returns(uint) {
uint256 Balance = IERC20(WETH).balanceOf(_to);
return Balance;
}
function withdraw(uint256 _value) public payable {
IWETH(WETH).withdraw.value(_value);
}
}当使用提取函数时,它告诉我它成功地运行了。但我发现日志中的from实际上是我的钱包地址,to是我的智能契约地址。这里发生了什么事?
status true Transaction mined and execution succeed
transaction hash 0x2859b5188b12cb2f0849a26777a5d2d0972e0e2ce000b548b80f3e5ae3b85b32
from 0xAb2942DEcDEa92A43d84DE7097a2e8df373e41Ab
to testwithdraw.withdraw(uint256) 0xa5f43d3A0C3ee2A99511A14698F0DB082491C751
gas 22323 gas
transaction cost 22323 gas
hash 0x2859b5188b12cb2f0849a26777a5d2d0972e0e2ce000b548b80f3e5ae3b85b32
input 0x2e1...00000
decoded input {
"uint256 _value": "1000000000000000000000"
}
decoded output -
logs []
val 0 wei发布于 2022-02-27 17:47:17
当您使用IWETH( WETH ).withdraw.value(_value)退出ETH时,它会从WETH合同中撤回ETH并将它们存储在您的合同上。为了能够提取收到的资金,您需要在取款功能中添加类似payable(msg.sender).transfer(address(this).balance)的内容。
https://stackoverflow.com/questions/71276705
复制相似问题