add withdraw & withdrawAll func to DODO Eth proxy
This commit is contained in:
@@ -19,7 +19,7 @@ import {IWETH} from "./intf/IWETH.sol";
|
|||||||
* @title DODO Eth Proxy
|
* @title DODO Eth Proxy
|
||||||
* @author DODO Breeder
|
* @author DODO Breeder
|
||||||
*
|
*
|
||||||
* @notice Handle ETH-WETH converting for users
|
* @notice Handle ETH-WETH converting for users. Use it only when WETH is base token
|
||||||
*/
|
*/
|
||||||
contract DODOEthProxy is ReentrancyGuard {
|
contract DODOEthProxy is ReentrancyGuard {
|
||||||
using SafeERC20 for IERC20;
|
using SafeERC20 for IERC20;
|
||||||
@@ -43,7 +43,9 @@ contract DODOEthProxy is ReentrancyGuard {
|
|||||||
uint256 payQuote
|
uint256 payQuote
|
||||||
);
|
);
|
||||||
|
|
||||||
event ProxyDepositEth(address indexed lp, address indexed quoteToken, uint256 ethAmount);
|
event ProxyDepositEth(address indexed lp, address indexed DODO, uint256 ethAmount);
|
||||||
|
|
||||||
|
event ProxyWithdrawEth(address indexed lp, address indexed DODO, uint256 ethAmount);
|
||||||
|
|
||||||
// ============ Functions ============
|
// ============ Functions ============
|
||||||
|
|
||||||
@@ -104,7 +106,57 @@ contract DODOEthProxy is ReentrancyGuard {
|
|||||||
IWETH(_WETH_).deposit{value: ethAmount}();
|
IWETH(_WETH_).deposit{value: ethAmount}();
|
||||||
IWETH(_WETH_).approve(DODO, ethAmount);
|
IWETH(_WETH_).approve(DODO, ethAmount);
|
||||||
IDODO(DODO).depositBaseTo(msg.sender, ethAmount);
|
IDODO(DODO).depositBaseTo(msg.sender, ethAmount);
|
||||||
emit ProxyDepositEth(msg.sender, quoteTokenAddress, ethAmount);
|
emit ProxyDepositEth(msg.sender, DODO, ethAmount);
|
||||||
|
}
|
||||||
|
|
||||||
|
function withdrawEth(uint256 ethAmount, address quoteTokenAddress)
|
||||||
|
external
|
||||||
|
preventReentrant
|
||||||
|
returns (uint256 withdrawAmount)
|
||||||
|
{
|
||||||
|
address DODO = IDODOZoo(_DODO_ZOO_).getDODO(_WETH_, quoteTokenAddress);
|
||||||
|
require(DODO != address(0), "DODO_NOT_EXIST");
|
||||||
|
address ethLpToken = IDODO(DODO)._BASE_CAPITAL_TOKEN_();
|
||||||
|
|
||||||
|
// transfer all pool shares to proxy
|
||||||
|
uint256 lpBalance = IERC20(ethLpToken).balanceOf(msg.sender);
|
||||||
|
IERC20(ethLpToken).transferFrom(msg.sender, address(this), lpBalance);
|
||||||
|
IDODO(DODO).withdrawBase(ethAmount);
|
||||||
|
|
||||||
|
// transfer remain shares back to msg.sender
|
||||||
|
lpBalance = IERC20(ethLpToken).balanceOf(address(this));
|
||||||
|
IERC20(ethLpToken).transfer(msg.sender, lpBalance);
|
||||||
|
|
||||||
|
// because of withdraw penalty, withdrawAmount may not equal to ethAmount
|
||||||
|
// query weth amount first and than transfer ETH to msg.sender
|
||||||
|
uint256 wethAmount = IERC20(_WETH_).balanceOf(address(this));
|
||||||
|
IWETH(_WETH_).withdraw(wethAmount);
|
||||||
|
msg.sender.transfer(wethAmount);
|
||||||
|
emit ProxyWithdrawEth(msg.sender, DODO, wethAmount);
|
||||||
|
return wethAmount;
|
||||||
|
}
|
||||||
|
|
||||||
|
function withdrawAllEth(address quoteTokenAddress)
|
||||||
|
external
|
||||||
|
preventReentrant
|
||||||
|
returns (uint256 withdrawAmount)
|
||||||
|
{
|
||||||
|
address DODO = IDODOZoo(_DODO_ZOO_).getDODO(_WETH_, quoteTokenAddress);
|
||||||
|
require(DODO != address(0), "DODO_NOT_EXIST");
|
||||||
|
address ethLpToken = IDODO(DODO)._BASE_CAPITAL_TOKEN_();
|
||||||
|
|
||||||
|
// transfer all pool shares to proxy
|
||||||
|
uint256 lpBalance = IERC20(ethLpToken).balanceOf(msg.sender);
|
||||||
|
IERC20(ethLpToken).transferFrom(msg.sender, address(this), lpBalance);
|
||||||
|
IDODO(DODO).withdrawAllBase();
|
||||||
|
|
||||||
|
// because of withdraw penalty, withdrawAmount may not equal to ethAmount
|
||||||
|
// query weth amount first and than transfer ETH to msg.sender
|
||||||
|
uint256 wethAmount = IERC20(_WETH_).balanceOf(address(this));
|
||||||
|
IWETH(_WETH_).withdraw(wethAmount);
|
||||||
|
msg.sender.transfer(wethAmount);
|
||||||
|
emit ProxyWithdrawEth(msg.sender, DODO, wethAmount);
|
||||||
|
return wethAmount;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ============ Helper Functions ============
|
// ============ Helper Functions ============
|
||||||
|
|||||||
@@ -44,4 +44,8 @@ interface IDODO {
|
|||||||
function withdrawQuote(uint256 amount) external returns (uint256);
|
function withdrawQuote(uint256 amount) external returns (uint256);
|
||||||
|
|
||||||
function withdrawAllQuote() external returns (uint256);
|
function withdrawAllQuote() external returns (uint256);
|
||||||
|
|
||||||
|
function _BASE_CAPITAL_TOKEN_() external returns (address);
|
||||||
|
|
||||||
|
function _QUOTE_CAPITAL_TOKEN_() external returns (address);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user