Solidity

如何將 WETH 轉換回 ETH (solidity)

  • May 31, 2021

我正在嘗試將 WETH 轉換回 ETH(實際上是 BSC 上的 BNB)。我正在執行以下操作:

   function allToBNB() public{
       WETH.transfer(address(this), WETH.balanceOf(address(this)));
   }`

在我的建構子中,我定義了WETH

   IWETH private WETH;

   constructor() public{
       pancakeRouter = PancakeRouter(PANCAKESWAP_ROUTER_ADDRESS);
       WETH = IWETH(pancakeRouter.WETH());
       require(WETH.approve(address(pancakeRouter), 115792089237316195423570985008687907853269984665640564039457584007913129639935), 'approve failed.');
   }
   

的介面WETH是:

interface IWETH {
   function deposit() external payable;
   function transfer(address to, uint value) external returns (bool);
   function approve(address spender, uint value) external returns (bool);
   function balanceOf(address owner) external view returns (uint);
}

但是,當我打電話時allToBNB,我看到我所有的 WBNB 餘額都自動轉給了我自己(契約),而不是解開回 BNB(https://testnet.bscscan.com/tx/0x60be76d6c0574ad549e98c678eb8ea9e668d96192926a9e71995ff69be0f863d)。

也許我需要呼叫withdraw函式?但這似乎使用 msg.address 而不是契約地址進行退貨。

我究竟做錯了什麼?謝謝。

為了將 WBNB 轉換為 BNB,您必須withdrawWBNB 合約中呼叫

function withdraw(uint wad) public {
   require(balanceOf[msg.sender] >= wad);
   balanceOf[msg.sender] -= wad;
   msg.sender.transfer(wad);
   Withdrawal(msg.sender, wad);
}

引用自:https://ethereum.stackexchange.com/questions/100016