Files
dodo-contractV2/contracts/SmartRoute/adapter/DODOV1Adapter.sol
2021-05-11 15:03:40 +08:00

53 lines
1.9 KiB
Solidity

/*
Copyright 2020 DODO ZOO.
SPDX-License-Identifier: Apache-2.0
*/
pragma solidity 0.6.9;
import {IERC20} from "../../intf/IERC20.sol";
import {IDODOV1} from "../intf/IDODOV1.sol";
import {SafeERC20} from "../../lib/SafeERC20.sol";
import {IDODOSellHelper} from "../helper/DODOSellHelper.sol";
import {UniversalERC20} from "../lib/UniversalERC20.sol";
import {SafeMath} from "../../lib/SafeMath.sol";
import {IDODOAdapter} from "../intf/IDODOAdapter.sol";
contract DODOV1Adapter is IDODOAdapter {
using SafeMath for uint256;
using UniversalERC20 for IERC20;
address public immutable _DODO_SELL_HELPER_;
constructor(address dodoSellHelper) public {
_DODO_SELL_HELPER_ = dodoSellHelper;
}
function sellBase(address to, address pool, bytes memory) external override {
address curBase = IDODOV1(pool)._BASE_TOKEN_();
uint256 curAmountIn = IERC20(curBase).tokenBalanceOf(address(this));
IERC20(curBase).universalApproveMax(pool, curAmountIn);
IDODOV1(pool).sellBaseToken(curAmountIn, 0, "");
if(to != address(this)) {
address curQuote = IDODOV1(pool)._QUOTE_TOKEN_();
SafeERC20.safeTransfer(IERC20(curQuote), to, IERC20(curQuote).tokenBalanceOf(address(this)));
}
}
function sellQuote(address to, address pool, bytes memory) external override {
address curQuote = IDODOV1(pool)._QUOTE_TOKEN_();
uint256 curAmountIn = IERC20(curQuote).tokenBalanceOf(address(this));
IERC20(curQuote).universalApproveMax(pool, curAmountIn);
uint256 canBuyBaseAmount = IDODOSellHelper(_DODO_SELL_HELPER_).querySellQuoteToken(
pool,
curAmountIn
);
IDODOV1(pool).buyBaseToken(canBuyBaseAmount, curAmountIn, "");
if(to != address(this)) {
address curBase = IDODOV1(pool)._BASE_TOKEN_();
SafeERC20.safeTransfer(IERC20(curBase), to, canBuyBaseAmount);
}
}
}