首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >坚固性:我们不能抽离

坚固性:我们不能抽离
EN

Stack Overflow用户
提问于 2022-02-26 12:36:18
回答 1查看 686关注 0票数 0

我可以通过WETH智能合同将ETH转换为WETH,并将其存入我的智能合同地址,但当我想通过WETH智能契约将WETH转换为ETH并将其提取到我的钱包地址时,我无法做到。

代码语言:javascript
复制
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是我的智能契约地址。这里发生了什么事?

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2022-02-27 17:47:17

当您使用IWETH( WETH ).withdraw.value(_value)退出ETH时,它会从WETH合同中撤回ETH并将它们存储在您的合同上。为了能够提取收到的资金,您需要在取款功能中添加类似payable(msg.sender).transfer(address(this).balance)的内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71276705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档