diff --git a/contracts/SmartRoute/adapter/CurveUnderlyingAdapter.sol b/contracts/SmartRoute/adapter/CurveUnderlyingAdapter.sol index 6543d0d..a902c6b 100644 --- a/contracts/SmartRoute/adapter/CurveUnderlyingAdapter.sol +++ b/contracts/SmartRoute/adapter/CurveUnderlyingAdapter.sol @@ -18,35 +18,28 @@ import {SafeERC20} from "../../lib/SafeERC20.sol"; contract CurveUnderlyingAdapter is IDODOAdapter { using SafeMath for uint; - //fromToken == token[0], underlying - function sellBase(address to, address pool, bytes memory moreInfo) external override { + function _curveSwap(address to, address pool, bytes memory moreInfo) internal { (address fromToken, address toToken, int128 i, int128 j) = abi.decode(moreInfo, (address, address, int128, int128)); - require(fromToken == ICurve(pool).underlying_coins(i), 'DepthAdapter: WRONG_TOKEN'); - require(toToken == ICurve(pool).underlying_coins(j), 'DepthAdapter: WRONG_TOKEN'); - uint256 sellBaseAmount = IERC20(fromToken).balanceOf(address(this)); + require(fromToken == ICurve(pool).underlying_coins(i), 'CurveAdapter: WRONG_TOKEN'); + require(toToken == ICurve(pool).underlying_coins(j), 'CurveAdapter: WRONG_TOKEN'); + uint256 sellAmount = IERC20(fromToken).balanceOf(address(this)); // approve - IERC20(fromToken).approve(pool, sellBaseAmount); + IERC20(fromToken).approve(pool, sellAmount); // swap - ICurve(pool).exchange_underlying(i, j, sellBaseAmount, 0); + ICurve(pool).exchange_underlying(i, j, sellAmount, 0); if(to != address(this)) { SafeERC20.safeTransfer(IERC20(toToken), to, IERC20(toToken).balanceOf(address(this))); } } + //fromToken == token[0], underlying + function sellBase(address to, address pool, bytes memory moreInfo) external override { + _curveSwap(to, pool, moreInfo); + } + //fromToken == token[1], underlying function sellQuote(address to, address pool, bytes memory moreInfo) external override { - (address fromToken, address toToken, int128 i, int128 j) = abi.decode(moreInfo, (address, address, int128, int128)); - require(fromToken == ICurve(pool).underlying_coins(i), 'DepthAdapter: WRONG_TOKEN'); - require(toToken == ICurve(pool).underlying_coins(j), 'DepthAdapter: WRONG_TOKEN'); - uint256 sellQuoteAmount = IERC20(toToken).balanceOf(address(this)); - - // approve - IERC20(toToken).approve(pool, sellQuoteAmount); - // swap - ICurve(pool).exchange_underlying(i, j, sellQuoteAmount, 0); - if(to != address(this)) { - SafeERC20.safeTransfer(IERC20(fromToken), to, IERC20(fromToken).balanceOf(address(this))); - } + _curveSwap(to, pool, moreInfo); } } \ No newline at end of file diff --git a/contracts/SmartRoute/adapter/UniAdapter.sol b/contracts/SmartRoute/adapter/UniAdapter.sol index 8cfc184..1382223 100644 --- a/contracts/SmartRoute/adapter/UniAdapter.sol +++ b/contracts/SmartRoute/adapter/UniAdapter.sol @@ -1,8 +1,6 @@ /* - Copyright 2020 DODO ZOO. SPDX-License-Identifier: Apache-2.0 - */ pragma solidity 0.6.9; @@ -24,13 +22,10 @@ contract UniAdapter is IDODOAdapter { uint balance0 = IERC20(baseToken).balanceOf(pool); uint sellBaseAmount = balance0 - reserveIn; - uint receiveQuoteAmount = 0; - { uint sellBaseAmountWithFee = sellBaseAmount.mul(997); uint numerator = sellBaseAmountWithFee.mul(reserveOut); uint denominator = reserveIn.mul(1000).add(sellBaseAmountWithFee); - receiveQuoteAmount = numerator / denominator; - } + uint receiveQuoteAmount = numerator / denominator; IUni(pool).swap(0, receiveQuoteAmount, to, new bytes(0)); } @@ -43,13 +38,10 @@ contract UniAdapter is IDODOAdapter { uint balance1 = IERC20(quoteToken).balanceOf(pool); uint sellQuoteAmount = balance1 - reserveIn; - uint receiveBaseAmount = 0; - { uint sellQuoteAmountWithFee = sellQuoteAmount.mul(997); uint numerator = sellQuoteAmountWithFee.mul(reserveOut); uint denominator = reserveIn.mul(1000).add(sellQuoteAmountWithFee); - receiveBaseAmount = numerator / denominator; - } + uint receiveBaseAmount = numerator / denominator; IUni(pool).swap(receiveBaseAmount, 0, to, new bytes(0)); } } \ No newline at end of file diff --git a/contracts/SmartRoute/proxies/DODORouteProxy.sol b/contracts/SmartRoute/proxies/DODORouteProxy.sol index 47b5e56..bec4379 100644 --- a/contracts/SmartRoute/proxies/DODORouteProxy.sol +++ b/contracts/SmartRoute/proxies/DODORouteProxy.sol @@ -80,13 +80,13 @@ contract DODORouteProxy { address[] memory mixPairs, address[] memory assetTo, uint256 directions, - bool isIncentive, + bool, uint256 deadLine ) external payable judgeExpired(deadLine) returns (uint256 returnAmount) { - require(mixPairs.length > 0, "DODOV2Proxy02: PAIRS_EMPTY"); - require(mixPairs.length == mixAdapters.length, "DODOV2Proxy02: PAIR_ADAPTER_NOT_MATCH"); - require(mixPairs.length == assetTo.length - 1, "DODOV2Proxy02: PAIR_ASSETTO_NOT_MATCH"); - require(minReturnAmount > 0, "DODOV2Proxy02: RETURN_AMOUNT_ZERO"); + require(mixPairs.length > 0, "DODORouteProxy: PAIRS_EMPTY"); + require(mixPairs.length == mixAdapters.length, "DODORouteProxy: PAIR_ADAPTER_NOT_MATCH"); + require(mixPairs.length == assetTo.length - 1, "DODORouteProxy: PAIR_ASSETTO_NOT_MATCH"); + require(minReturnAmount > 0, "DODORouteProxy: RETURN_AMOUNT_ZERO"); address _fromToken = fromToken; address _toToken = toToken; @@ -113,7 +113,7 @@ contract DODORouteProxy { returnAmount = IERC20(_toToken).tokenBalanceOf(msg.sender).sub(toTokenOriginBalance); } - require(returnAmount >= minReturnAmount, "DODOV2Proxy02: Return amount is not enough"); + require(returnAmount >= minReturnAmount, "DODORouteProxy: Return amount is not enough"); emit OrderHistory( _fromToken, diff --git a/migrations/4_deploy_periphery.js b/migrations/4_deploy_periphery.js index 617c3ed..dcc9fe9 100644 --- a/migrations/4_deploy_periphery.js +++ b/migrations/4_deploy_periphery.js @@ -28,7 +28,7 @@ const DODOV2RouteHelper = artifacts.require("DODOV2RouteHelper"); const ERC20Mine = artifacts.require("ERC20Mine"); const vDODOMine = artifacts.require("vDODOMine"); -const DepthAdapter = artifacts.require("DepthUnderlyingAdapter"); +const CurveAdapter = artifacts.require("CurveUnderlyingAdapter"); module.exports = async (deployer, network, accounts) => { let CONFIG = GetConfig(network, accounts) @@ -371,20 +371,6 @@ module.exports = async (deployer, network, accounts) => { } } - if(deploySwitch.MULTIHOP) { - logger.log("===================================================="); - logger.log("network type: " + network); - logger.log("Deploy time: " + new Date().toLocaleString()); - logger.log("Deploy type: MaxHops - Adapter"); - - await deployer.deploy( - RABSwap, - WETHAddress, - DODOApproveProxyAddress - ); - - logger.log("DODOMaxHops Address: ", RABSwap.address); - } if(deploySwitch.test_ADAPTER) { logger.log("===================================================="); @@ -392,8 +378,8 @@ module.exports = async (deployer, network, accounts) => { logger.log("Deploy time: " + new Date().toLocaleString()); logger.log("Deploy type: test - Adapter"); - await deployer.deploy(DepthAdapter); + await deployer.deploy(CurveAdapter); - logger.log("test_Adapter Address: ", DepthAdapter.address); + logger.log("test_Adapter Address: ", CurveAdapter.address); } };