Solidity
如何將 WETH 轉換回 ETH (solidity)
我正在嘗試將 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,您必須
withdraw
從WBNB 合約中呼叫function withdraw(uint wad) public { require(balanceOf[msg.sender] >= wad); balanceOf[msg.sender] -= wad; msg.sender.transfer(wad); Withdrawal(msg.sender, wad); }