change contract name && fix addLiquidity

This commit is contained in:
owen05
2020-11-27 12:13:58 +08:00
parent 5154c86e24
commit 29f6f0d9f8
9 changed files with 88 additions and 90 deletions

View File

@@ -9,20 +9,20 @@ pragma solidity 0.6.9;
pragma experimental ABIEncoderV2; pragma experimental ABIEncoderV2;
import {IDPP} from "../intf/IDPP.sol"; import {IDPP} from "../intf/IDPP.sol";
import {ISmartApprove} from '../../intf/ISmartApprove.sol'; import {IDODOApprove} from '../../intf/IDODOApprove.sol';
import {InitializableOwnable} from "../../lib/InitializableOwnable.sol"; import {InitializableOwnable} from "../../lib/InitializableOwnable.sol";
contract DPPAdmin is InitializableOwnable { contract DPPAdmin is InitializableOwnable {
address public _DPP_; address public _DPP_;
address public _OPERATOR_; address public _OPERATOR_;
address public _DODO_SMART_APPROVE_; address public _DODO_APPROVE_;
function init(address owner, address dpp,address operator, address dodoSmartApprove) external { function init(address owner, address dpp,address operator, address dodoApprove) external {
initOwner(owner); initOwner(owner);
_DPP_ = dpp; _DPP_ = dpp;
_OPERATOR_ = operator; _OPERATOR_ = operator;
_DODO_SMART_APPROVE_ = dodoSmartApprove; _DODO_APPROVE_ = dodoApprove;
} }
function setOperator(address newOperator) external onlyOwner { function setOperator(address newOperator) external onlyOwner {
@@ -78,7 +78,7 @@ contract DPPAdmin is InitializableOwnable {
uint256 baseOutAmount, uint256 baseOutAmount,
uint256 quoteOutAmount uint256 quoteOutAmount
) external { ) external {
require(msg.sender == _OWNER_ || (msg.sender == ISmartApprove(_DODO_SMART_APPROVE_).getSmartSwap() && assetTo == _OPERATOR_), "RESET FORBIDDEN"); require(msg.sender == _OWNER_ || (msg.sender == IDODOApprove(_DODO_APPROVE_).getDODOProxy() && assetTo == _OPERATOR_), "RESET FORBIDDEN");
IDPP(_DPP_).reset( IDPP(_DPP_).reset(
assetTo, assetTo,
newLpFeeRate, newLpFeeRate,
@@ -99,7 +99,7 @@ contract DPPAdmin is InitializableOwnable {
uint256 baseOutAmount, uint256 baseOutAmount,
uint256 quoteOutAmount uint256 quoteOutAmount
) external { ) external {
require(msg.sender == _OWNER_ || (msg.sender == ISmartApprove(_DODO_SMART_APPROVE_).getSmartSwap() && from == _OPERATOR_), "RESET FORBIDDEN"); require(msg.sender == _OWNER_ || (msg.sender == IDODOApprove(_DODO_APPROVE_).getDODOProxy() && from == _OPERATOR_), "RESET FORBIDDEN");
IDPP(_DPP_).reset( IDPP(_DPP_).reset(
msg.sender, msg.sender,
newLpFeeRate, newLpFeeRate,

View File

@@ -11,16 +11,16 @@ import {IERC20} from "../intf/IERC20.sol";
import {SafeERC20} from "../lib/SafeERC20.sol"; import {SafeERC20} from "../lib/SafeERC20.sol";
import {Ownable} from "../lib/Ownable.sol"; import {Ownable} from "../lib/Ownable.sol";
contract SmartApprove is Ownable { contract DODOApprove is Ownable {
using SafeERC20 for IERC20; using SafeERC20 for IERC20;
address public smartSwap; address public dodoProxy;
function setSmartSwap(address _smartSwap) external onlyOwner { function setDODOProxy(address _dodoProxy) external onlyOwner {
smartSwap = _smartSwap; dodoProxy = _dodoProxy;
} }
function getSmartSwap() public view returns (address) { function getDODOProxy() public view returns (address) {
return smartSwap; return dodoProxy;
} }
function claimTokens( function claimTokens(
@@ -29,7 +29,7 @@ contract SmartApprove is Ownable {
address dest, address dest,
uint256 amount uint256 amount
) external { ) external {
require(msg.sender == smartSwap, "Not SmartSwap Address, Access restricted"); require(msg.sender == dodoProxy, 'DODOApprove:Access restricted');
IERC20(token).safeTransferFrom(who, dest, amount); IERC20(token).safeTransferFrom(who, dest, amount);
} }
} }

View File

@@ -12,33 +12,28 @@ import {IERC20} from "../intf/IERC20.sol";
import {UniversalERC20} from "../lib/UniversalERC20.sol"; import {UniversalERC20} from "../lib/UniversalERC20.sol";
import {SafeMath} from "../lib/SafeMath.sol"; import {SafeMath} from "../lib/SafeMath.sol";
import {IDODOSellHelper} from "../intf/IDODOSellHelper.sol"; import {IDODOSellHelper} from "../intf/IDODOSellHelper.sol";
import {IDODOApprove} from "../intf/IDODOApprove.sol";
import {IDODO} from "../intf/IDODO.sol"; import {IDODO} from "../intf/IDODO.sol";
import {IWETH} from "../intf/IWETH.sol"; import {IWETH} from "../intf/IWETH.sol";
interface ISmartApprove {
function claimTokens(IERC20 token,address who,address dest,uint256 amount) external;
function getSmartSwap() external view returns (address);
}
contract DODOV1Proxy01 is Ownable {
contract SmartSwap is Ownable {
using SafeMath for uint256; using SafeMath for uint256;
using UniversalERC20 for IERC20; using UniversalERC20 for IERC20;
IERC20 constant ETH_ADDRESS = IERC20(0x000000000000000000000000000000000000000E); address constant ETH_ADDRESS = 0x000000000000000000000000000000000000000E;
ISmartApprove public smartApprove; address public dodoApprove;
IDODOSellHelper public dodoSellHelper; address public dodoSellHelper;
address payable public _WETH_; address payable public _WETH_;
modifier judgeExpired(uint256 deadline) { modifier judgeExpired(uint256 deadline) {
require(deadline >= block.timestamp, 'DODO SmartSwap: EXPIRED'); require(deadline >= block.timestamp, 'DODOV1Proxy01: EXPIRED');
_; _;
} }
event OrderHistory( event OrderHistory(
IERC20 indexed fromToken, address indexed fromToken,
IERC20 indexed toToken, address indexed toToken,
address indexed sender, address indexed sender,
uint256 fromAmount, uint256 fromAmount,
uint256 returnAmount, uint256 returnAmount,
@@ -46,12 +41,12 @@ contract SmartSwap is Ownable {
); );
constructor( constructor(
address _smartApprove, address _dodoApprove,
address _dodoSellHelper, address _dodoSellHelper,
address payable _weth address payable _weth
) public { ) public {
smartApprove = ISmartApprove(_smartApprove); dodoApprove = _dodoApprove;
dodoSellHelper = IDODOSellHelper(_dodoSellHelper); dodoSellHelper = _dodoSellHelper;
_WETH_ = _weth; _WETH_ = _weth;
} }
@@ -60,21 +55,20 @@ contract SmartSwap is Ownable {
receive() external payable {} receive() external payable {}
function dodoSwap( function dodoSwap(
IERC20 fromToken, address fromToken,
IERC20 toToken, address toToken,
uint256 fromTokenAmount, uint256 fromTokenAmount,
uint256 minReturnAmount, uint256 minReturnAmount,
address[] memory dodoPairs, address[] memory dodoPairs,
uint256[] memory directions, uint256[] memory directions,
uint256 deadline uint256 deadline
) public payable judgeExpired(deadline) returns (uint256 returnAmount) { ) public payable judgeExpired(deadline) returns (uint256 returnAmount) {
require(minReturnAmount > 0, "DODO SmartSwap: Min return should be bigger then 0."); require(minReturnAmount > 0, 'DODOV1Proxy01: Min return should be bigger then 0.');
require(dodoPairs.length > 0, "DODO SmartSwap: pairs should exists.");
if (fromToken != ETH_ADDRESS) { if (fromToken != ETH_ADDRESS) {
smartApprove.claimTokens(fromToken, msg.sender, address(this),fromTokenAmount); IDODOApprove(dodoApprove).claimTokens(fromToken, msg.sender, address(this),fromTokenAmount);
} else { } else {
require(msg.value == fromTokenAmount, "DODO SmartSwap: ETH_AMOUNT_NOT_MATCH"); require(msg.value == fromTokenAmount, 'DODOV1Proxy01: ETH_AMOUNT_NOT_MATCH');
IWETH(_WETH_).deposit{value: fromTokenAmount}(); IWETH(_WETH_).deposit{value: fromTokenAmount}();
} }
@@ -89,56 +83,55 @@ contract SmartSwap is Ownable {
address curDodoQuote = IDODO(curDodoPair)._QUOTE_TOKEN_(); address curDodoQuote = IDODO(curDodoPair)._QUOTE_TOKEN_();
uint256 curAmountIn = IERC20(curDodoQuote).balanceOf(address(this)); uint256 curAmountIn = IERC20(curDodoQuote).balanceOf(address(this));
IERC20(curDodoQuote).universalApprove(curDodoPair, curAmountIn); IERC20(curDodoQuote).universalApprove(curDodoPair, curAmountIn);
uint256 canBuyBaseAmount = dodoSellHelper.querySellQuoteToken( uint256 canBuyBaseAmount = IDODOSellHelper(dodoSellHelper).querySellQuoteToken(
curDodoPair, curDodoPair,
curAmountIn curAmountIn
); );
IDODO(curDodoPair).buyBaseToken(canBuyBaseAmount, curAmountIn, ""); IDODO(curDodoPair).buyBaseToken(canBuyBaseAmount, curAmountIn, "");
} }
} }
fromToken.universalTransfer(msg.sender, fromToken.universalBalanceOf(address(this))); IERC20(fromToken).universalTransfer(msg.sender, IERC20(fromToken).universalBalanceOf(address(this)));
if (toToken == ETH_ADDRESS) { if (toToken == ETH_ADDRESS) {
uint256 wethAmount = IWETH(_WETH_).balanceOf(address(this)); uint256 wethAmount = IWETH(_WETH_).balanceOf(address(this));
IWETH(_WETH_).withdraw(wethAmount); IWETH(_WETH_).withdraw(wethAmount);
} }
returnAmount = toToken.universalBalanceOf(address(this)); returnAmount = IERC20(toToken).universalBalanceOf(address(this));
require(returnAmount >= minReturnAmount, "DODO SmartSwap: Return amount is not enough"); require(returnAmount >= minReturnAmount, 'DODOV1Proxy01: Return amount is not enough');
toToken.universalTransfer(msg.sender, returnAmount); IERC20(toToken).universalTransfer(msg.sender, returnAmount);
emit OrderHistory(fromToken, toToken, msg.sender, fromTokenAmount, returnAmount, block.timestamp); emit OrderHistory(fromToken, toToken, msg.sender, fromTokenAmount, returnAmount, block.timestamp);
} }
function externalSwap( function externalSwap(
IERC20 fromToken, address fromToken,
IERC20 toToken, address toToken,
address approveTarget, address approveTarget,
address to, address to,
uint256 fromTokenAmount, uint256 fromTokenAmount,
uint256 minReturnAmount, uint256 minReturnAmount,
bytes memory callDataConcat, bytes memory callDataConcat,
uint256 deadline uint256 deadline
) public payable judgeExpired(deadline) returns (uint256 returnAmount) { ) public payable judgeExpired(deadline) returns (uint256 returnAmount) {
require(minReturnAmount > 0, 'DODOV1Proxy01: Min return should be bigger then 0.');
require(minReturnAmount > 0, "DODO SmartSwap: Min return should be bigger then 0.");
if (fromToken != ETH_ADDRESS) { if (fromToken != ETH_ADDRESS) {
smartApprove.claimTokens(fromToken, msg.sender, address(this), fromTokenAmount); IDODOApprove(dodoApprove).claimTokens(fromToken, msg.sender, address(this), fromTokenAmount);
fromToken.universalApprove(approveTarget, fromTokenAmount); IERC20(fromToken).universalApprove(approveTarget, fromTokenAmount);
} }
(bool success, ) = to.call{value: fromToken == ETH_ADDRESS ? msg.value : 0}( (bool success, ) = to.call{value: fromToken == ETH_ADDRESS ? msg.value : 0}(
callDataConcat callDataConcat
); );
require(success, "DODO SmartSwap: Contract Swap execution Failed"); require(success, 'DODOV1Proxy01: Contract Swap execution Failed');
fromToken.universalTransfer(msg.sender, fromToken.universalBalanceOf(address(this))); IERC20(fromToken).universalTransfer(msg.sender, IERC20(fromToken).universalBalanceOf(address(this)));
returnAmount = toToken.universalBalanceOf(address(this)); returnAmount = IERC20(toToken).universalBalanceOf(address(this));
require(returnAmount >= minReturnAmount, "DODO SmartSwap: Return amount is not enough"); require(returnAmount >= minReturnAmount, 'DODOV1Proxy01: Return amount is not enough');
toToken.universalTransfer(msg.sender, returnAmount); IERC20(toToken).universalTransfer(msg.sender, returnAmount);
emit OrderHistory(fromToken, toToken, msg.sender, fromTokenAmount, returnAmount, block.timestamp); emit OrderHistory(fromToken, toToken, msg.sender, fromTokenAmount, returnAmount, block.timestamp);
} }
} }

View File

@@ -21,7 +21,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01 {
address constant ETH_ADDRESS = 0x000000000000000000000000000000000000000E; address constant ETH_ADDRESS = 0x000000000000000000000000000000000000000E;
address payable public _WETH_; address payable public _WETH_;
address public smartApprove; address public dodoApprove;
address public dodoSellHelper; address public dodoSellHelper;
address public dvmFactory; address public dvmFactory;
address public dppFactory; address public dppFactory;
@@ -50,13 +50,13 @@ contract DODOV2Proxy01 is IDODOV2Proxy01 {
address _dvmFactory, address _dvmFactory,
address _dppFactory, address _dppFactory,
address payable _weth, address payable _weth,
address _smartApprove, address _dodoApprove,
address _dodoSellHelper address _dodoSellHelper
) public { ) public {
dvmFactory = _dvmFactory; dvmFactory = _dvmFactory;
dppFactory = _dppFactory; dppFactory = _dppFactory;
_WETH_ = _weth; _WETH_ = _weth;
smartApprove = _smartApprove; dodoApprove = _dodoApprove;
dodoSellHelper = _dodoSellHelper; dodoSellHelper = _dodoSellHelper;
} }
@@ -79,7 +79,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01 {
} }
if(baseInAmount > 0){ if(baseInAmount > 0){
if(baseToken != ETH_ADDRESS){ if(baseToken != ETH_ADDRESS){
IDODOV2(smartApprove).claimTokens(baseToken, msg.sender, newVendingMachine, baseInAmount); IDODOV2(dodoApprove).claimTokens(baseToken, msg.sender, newVendingMachine, baseInAmount);
}else { }else {
require(msg.value == baseInAmount, 'DODOV2Proxy01: ETH_AMOUNT_NOT_MATCH'); require(msg.value == baseInAmount, 'DODOV2Proxy01: ETH_AMOUNT_NOT_MATCH');
IWETH(_WETH_).deposit{value: baseInAmount}(); IWETH(_WETH_).deposit{value: baseInAmount}();
@@ -88,7 +88,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01 {
} }
if(quoteInAmount > 0){ if(quoteInAmount > 0){
if(quoteToken != ETH_ADDRESS){ if(quoteToken != ETH_ADDRESS){
IDODOV2(smartApprove).claimTokens(quoteToken, msg.sender, newVendingMachine, quoteInAmount); IDODOV2(dodoApprove).claimTokens(quoteToken, msg.sender, newVendingMachine, quoteInAmount);
}else { }else {
require(msg.value == quoteInAmount, 'DODOV2Proxy01: ETH_AMOUNT_NOT_MATCH'); require(msg.value == quoteInAmount, 'DODOV2Proxy01: ETH_AMOUNT_NOT_MATCH');
IWETH(_WETH_).deposit{value: quoteInAmount}(); IWETH(_WETH_).deposit{value: quoteInAmount}();
@@ -109,7 +109,6 @@ contract DODOV2Proxy01 is IDODOV2Proxy01 {
baseAdjustedInAmount = baseInAmount; baseAdjustedInAmount = baseInAmount;
quoteAdjustedInAmount = quoteInAmount; quoteAdjustedInAmount = quoteInAmount;
} }
//TODO: 若init时候 baseInAmount > 0 quoteReserve = 0 之后没法添加quote
if (quoteReserve == 0 && baseReserve > 0) { if (quoteReserve == 0 && baseReserve > 0) {
baseAdjustedInAmount = baseInAmount; baseAdjustedInAmount = baseInAmount;
quoteAdjustedInAmount = 0; quoteAdjustedInAmount = 0;
@@ -135,16 +134,16 @@ contract DODOV2Proxy01 is IDODOV2Proxy01 {
uint256 baseMinAmount, uint256 baseMinAmount,
uint256 quoteMinAmount, uint256 quoteMinAmount,
uint256 deadline uint256 deadline
) external virtual override judgeExpired(deadline) returns (uint256 shares,uint256 baseActualInAmount,uint256 quoteActualInAmount) { ) external virtual override judgeExpired(deadline) returns (uint256 shares,uint256 baseAdjustedInAmount,uint256 quoteAdjustedInAmount) {
(uint256 baseAdjustedInAmount, uint256 quoteAdjustedInAmount) = _addDVMLiquidity(DVMAddress,baseInAmount,quoteInAmount); (baseAdjustedInAmount, quoteAdjustedInAmount) = _addDVMLiquidity(DVMAddress,baseInAmount,quoteInAmount);
require(baseAdjustedInAmount >= baseMinAmount && quoteAdjustedInAmount >= quoteMinAmount, 'DODOV2Proxy01: deposit amount is not enough');
address _dvm = DVMAddress; address _dvm = DVMAddress;
if(baseAdjustedInAmount > 0) { if(baseAdjustedInAmount > 0) {
IDODOV2(smartApprove).claimTokens(IDODOV2(_dvm)._BASE_TOKEN_(), msg.sender, _dvm, baseAdjustedInAmount); IDODOV2(dodoApprove).claimTokens(IDODOV2(_dvm)._BASE_TOKEN_(), msg.sender, _dvm, baseAdjustedInAmount);
} }
if(quoteAdjustedInAmount > 0) if(quoteAdjustedInAmount > 0)
IDODOV2(smartApprove).claimTokens(IDODOV2(_dvm)._QUOTE_TOKEN_(), msg.sender, _dvm, quoteAdjustedInAmount); IDODOV2(dodoApprove).claimTokens(IDODOV2(_dvm)._QUOTE_TOKEN_(), msg.sender, _dvm, quoteAdjustedInAmount);
(shares,baseActualInAmount,quoteActualInAmount) = IDODOV2(_dvm).buyShares(to); (shares,,) = IDODOV2(_dvm).buyShares(to);
require(baseActualInAmount >= baseMinAmount && quoteActualInAmount >= quoteMinAmount, 'DODOV2Proxy01: deposit amount is not enough');
} }
function addDVMLiquidityETH( function addDVMLiquidityETH(
@@ -156,29 +155,37 @@ contract DODOV2Proxy01 is IDODOV2Proxy01 {
uint256 quoteMinAmount, uint256 quoteMinAmount,
uint8 flag, // 1 - baseInETH, 2 - quoteInETH uint8 flag, // 1 - baseInETH, 2 - quoteInETH
uint256 deadline uint256 deadline
) external virtual override payable judgeExpired(deadline) returns (uint256 shares,uint256 baseActualInAmount,uint256 quoteActualInAmount) { ) external virtual override payable judgeExpired(deadline) returns (uint256 shares,uint256 baseAdjustedInAmount,uint256 quoteAdjustedInAmount) {
(uint256 baseAdjustedInAmount, uint256 quoteAdjustedInAmount) = _addDVMLiquidity(DVMAddress,baseInAmount,quoteInAmount); (baseAdjustedInAmount, quoteAdjustedInAmount) = _addDVMLiquidity(DVMAddress,baseInAmount,quoteInAmount);
require(baseAdjustedInAmount >= baseMinAmount && quoteAdjustedInAmount >= quoteMinAmount, 'DODOV2Proxy01: deposit amount is not enough');
address _dvm = DVMAddress; address _dvm = DVMAddress;
if(baseAdjustedInAmount > 0) { if(baseAdjustedInAmount > 0) {
if(flag == 1) { if(flag == 1) {
require(msg.value >= baseAdjustedInAmount, 'DODOV2Proxy01: ETH_AMOUNT_NOT_MATCH'); require(msg.value >= baseAdjustedInAmount, 'DODOV2Proxy01: ETH_AMOUNT_NOT_MATCH');
IWETH(_WETH_).deposit{value: baseAdjustedInAmount}(); IWETH(_WETH_).deposit{value: baseAdjustedInAmount}();
assert(IWETH(_WETH_).transfer(_dvm, baseAdjustedInAmount)); assert(IWETH(_WETH_).transfer(_dvm, baseAdjustedInAmount));
if (msg.value > baseAdjustedInAmount) {
(bool success,) = msg.sender.call{value:msg.value - baseAdjustedInAmount}(new bytes(0));
require(success, 'DODOV2Proxy01: ETH_TRANSFER_FAILED');
}
}else { }else {
IDODOV2(smartApprove).claimTokens(IDODOV2(_dvm)._BASE_TOKEN_(), msg.sender, _dvm, baseAdjustedInAmount); IDODOV2(dodoApprove).claimTokens(IDODOV2(_dvm)._BASE_TOKEN_(), msg.sender, _dvm, baseAdjustedInAmount);
} }
} }
if(quoteAdjustedInAmount > 0){ if(quoteAdjustedInAmount > 0){
if(flag == 2) { if(flag == 2) {
require(msg.value >= quoteAdjustedInAmount, 'DODOV2Proxy01: ETH_AMOUNT_NOT_MATCH'); require(msg.value >= quoteAdjustedInAmount, 'DODOV2Proxy01: ETH_AMOUNT_NOT_MATCH');
IWETH(_WETH_).deposit{value: quoteAdjustedInAmount}(); IWETH(_WETH_).deposit{value: quoteAdjustedInAmount}();
assert(IWETH(_WETH_).transfer(_dvm, quoteAdjustedInAmount)); assert(IWETH(_WETH_).transfer(_dvm, quoteAdjustedInAmount));
if (msg.value > quoteAdjustedInAmount) {
(bool success,) = msg.sender.call{value:msg.value - quoteAdjustedInAmount}(new bytes(0));
require(success, 'DODOV2Proxy01: ETH_TRANSFER_FAILED');
}
}else { }else {
IDODOV2(smartApprove).claimTokens(IDODOV2(_dvm)._QUOTE_TOKEN_(), msg.sender, _dvm, quoteAdjustedInAmount); IDODOV2(dodoApprove).claimTokens(IDODOV2(_dvm)._QUOTE_TOKEN_(), msg.sender, _dvm, quoteAdjustedInAmount);
} }
} }
(shares,baseActualInAmount,quoteActualInAmount) = IDODOV2(_dvm).buyShares(to); (shares,,) = IDODOV2(_dvm).buyShares(to);
require(baseActualInAmount >= baseMinAmount && quoteActualInAmount >= quoteMinAmount, 'DODOV2Proxy01: deposit amount is not enough');
} }
function createDODOPrivatePool( function createDODOPrivatePool(
@@ -195,7 +202,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01 {
newPrivatePool = IDODOV2(dppFactory).createDODOPrivatePool(); newPrivatePool = IDODOV2(dppFactory).createDODOPrivatePool();
if(baseInAmount > 0){ if(baseInAmount > 0){
if(baseToken != ETH_ADDRESS){ if(baseToken != ETH_ADDRESS){
IDODOV2(smartApprove).claimTokens(baseToken, msg.sender, newPrivatePool, baseInAmount); IDODOV2(dodoApprove).claimTokens(baseToken, msg.sender, newPrivatePool, baseInAmount);
}else { }else {
require(msg.value == baseInAmount, 'DODOV2Proxy01: ETH_AMOUNT_NOT_MATCH'); require(msg.value == baseInAmount, 'DODOV2Proxy01: ETH_AMOUNT_NOT_MATCH');
IWETH(_WETH_).deposit{value: baseInAmount}(); IWETH(_WETH_).deposit{value: baseInAmount}();
@@ -205,7 +212,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01 {
} }
if(quoteInAmount > 0){ if(quoteInAmount > 0){
if(quoteToken != ETH_ADDRESS){ if(quoteToken != ETH_ADDRESS){
IDODOV2(smartApprove).claimTokens(quoteToken, msg.sender, newPrivatePool, quoteInAmount); IDODOV2(dodoApprove).claimTokens(quoteToken, msg.sender, newPrivatePool, quoteInAmount);
}else { }else {
require(msg.value == quoteInAmount, 'DODOV2Proxy01: ETH_AMOUNT_NOT_MATCH'); require(msg.value == quoteInAmount, 'DODOV2Proxy01: ETH_AMOUNT_NOT_MATCH');
IWETH(_WETH_).deposit{value: quoteInAmount}(); IWETH(_WETH_).deposit{value: quoteInAmount}();
@@ -238,9 +245,9 @@ contract DODOV2Proxy01 is IDODOV2Proxy01 {
uint256 deadline uint256 deadline
) external virtual override judgeExpired(deadline) { ) external virtual override judgeExpired(deadline) {
if(baseInAmount > 0) if(baseInAmount > 0)
IDODOV2(smartApprove).claimTokens(IDODOV2(DPPAddress)._BASE_TOKEN_(), msg.sender, DPPAddress, baseInAmount); IDODOV2(dodoApprove).claimTokens(IDODOV2(DPPAddress)._BASE_TOKEN_(), msg.sender, DPPAddress, baseInAmount);
if(quoteInAmount > 0) if(quoteInAmount > 0)
IDODOV2(smartApprove).claimTokens(IDODOV2(DPPAddress)._QUOTE_TOKEN_(), msg.sender, DPPAddress, quoteInAmount); IDODOV2(dodoApprove).claimTokens(IDODOV2(DPPAddress)._QUOTE_TOKEN_(), msg.sender, DPPAddress, quoteInAmount);
IDODOV2(IDODOV2(DPPAddress)._OWNER_()).reset( IDODOV2(IDODOV2(DPPAddress)._OWNER_()).reset(
msg.sender, msg.sender,
newLpFeeRate, newLpFeeRate,
@@ -271,7 +278,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01 {
IWETH(_WETH_).deposit{value: baseInAmount}(); IWETH(_WETH_).deposit{value: baseInAmount}();
assert(IWETH(_WETH_).transfer(DPPAddress, baseInAmount)); assert(IWETH(_WETH_).transfer(DPPAddress, baseInAmount));
}else { }else {
IDODOV2(smartApprove).claimTokens(IDODOV2(DPPAddress)._BASE_TOKEN_(), msg.sender, DPPAddress, baseInAmount); IDODOV2(dodoApprove).claimTokens(IDODOV2(DPPAddress)._BASE_TOKEN_(), msg.sender, DPPAddress, baseInAmount);
} }
} }
if(quoteInAmount > 0){ if(quoteInAmount > 0){
@@ -280,7 +287,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01 {
IWETH(_WETH_).deposit{value: quoteInAmount}(); IWETH(_WETH_).deposit{value: quoteInAmount}();
assert(IWETH(_WETH_).transfer(DPPAddress, quoteInAmount)); assert(IWETH(_WETH_).transfer(DPPAddress, quoteInAmount));
}else { }else {
IDODOV2(smartApprove).claimTokens(IDODOV2(DPPAddress)._QUOTE_TOKEN_(), msg.sender, DPPAddress, quoteInAmount); IDODOV2(dodoApprove).claimTokens(IDODOV2(DPPAddress)._QUOTE_TOKEN_(), msg.sender, DPPAddress, quoteInAmount);
} }
} }
if( (flag == 3 && baseOutAmount > 0) || (flag == 4 && quoteOutAmount > 0) ) { if( (flag == 3 && baseOutAmount > 0) || (flag == 4 && quoteOutAmount > 0) ) {
@@ -370,7 +377,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01 {
uint256 deadline uint256 deadline
) external virtual override judgeExpired(deadline) returns (uint256 returnAmount) { ) external virtual override judgeExpired(deadline) returns (uint256 returnAmount) {
require(minReturnAmount > 0, 'DODOV2Proxy01: Min return should be bigger than 0.'); require(minReturnAmount > 0, 'DODOV2Proxy01: Min return should be bigger than 0.');
IDODOV2(smartApprove).claimTokens(fromToken, msg.sender, dodoPairs[0], fromTokenAmount); IDODOV2(dodoApprove).claimTokens(fromToken, msg.sender, dodoPairs[0], fromTokenAmount);
for (uint256 i = 0; i < dodoPairs.length; i++) { for (uint256 i = 0; i < dodoPairs.length; i++) {
if(i == dodoPairs.length - 1){ if(i == dodoPairs.length - 1){
@@ -406,7 +413,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01 {
uint256 deadline uint256 deadline
) external virtual override judgeExpired(deadline) returns (uint256 returnAmount) { ) external virtual override judgeExpired(deadline) returns (uint256 returnAmount) {
require(minReturnAmount > 0, 'DODOV2Proxy01: Min return should be bigger than 0.'); require(minReturnAmount > 0, 'DODOV2Proxy01: Min return should be bigger than 0.');
IDODOV2(smartApprove).claimTokens(fromToken, msg.sender, dodoPairs[0], fromTokenAmount); IDODOV2(dodoApprove).claimTokens(fromToken, msg.sender, dodoPairs[0], fromTokenAmount);
for (uint256 i = 0; i < dodoPairs.length; i++) { for (uint256 i = 0; i < dodoPairs.length; i++) {
if(i == dodoPairs.length - 1){ if(i == dodoPairs.length - 1){
@@ -439,7 +446,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01 {
) external virtual override payable judgeExpired(deadline) returns (uint256 returnAmount) { ) external virtual override payable judgeExpired(deadline) returns (uint256 returnAmount) {
require(minReturnAmount > 0, 'DODOV2Proxy01: Min return should be bigger then 0.'); require(minReturnAmount > 0, 'DODOV2Proxy01: Min return should be bigger then 0.');
if (fromToken != ETH_ADDRESS) { if (fromToken != ETH_ADDRESS) {
IDODOV2(smartApprove).claimTokens(fromToken, msg.sender, address(this), fromTokenAmount); IDODOV2(dodoApprove).claimTokens(fromToken, msg.sender, address(this), fromTokenAmount);
IERC20(fromToken).universalApprove(approveTarget, fromTokenAmount); IERC20(fromToken).universalApprove(approveTarget, fromTokenAmount);
} }

View File

@@ -8,7 +8,7 @@
pragma solidity 0.6.9; pragma solidity 0.6.9;
pragma experimental ABIEncoderV2; pragma experimental ABIEncoderV2;
interface ISmartApprove { interface IDODOApprove {
function claimTokens(address token,address who,address dest,uint256 amount) external; function claimTokens(address token,address who,address dest,uint256 amount) external;
function getSmartSwap() external view returns (address); function getDODOProxy() external view returns (address);
} }

View File

@@ -24,8 +24,6 @@ interface IDODOV2 {
function _OWNER_() external returns (address); function _OWNER_() external returns (address);
function getOwner() external view returns (address);
//========== DODOVendingMachine ======== //========== DODOVendingMachine ========
function createDODOVendingMachine( function createDODOVendingMachine(
@@ -87,6 +85,6 @@ interface IDODOV2 {
function claimTokens(address token,address who,address dest,uint256 amount) external; function claimTokens(address token,address who,address dest,uint256 amount) external;
function getSmartSwap() external view returns (address); function getDODOProxy() external view returns (address);
} }

View File

@@ -74,7 +74,7 @@ interface IDODOV2Proxy01 {
uint256 baseMinAmount, uint256 baseMinAmount,
uint256 quoteMinAmount, uint256 quoteMinAmount,
uint256 deadline uint256 deadline
) external returns (uint256 shares,uint256 baseActualInAmount,uint256 quoteActualInAmount); ) external returns (uint256 shares,uint256 baseAdjustedInAmount,uint256 quoteAdjustedInAmount);
function addDVMLiquidityETH( function addDVMLiquidityETH(
address DVMAddress, address DVMAddress,
@@ -85,7 +85,7 @@ interface IDODOV2Proxy01 {
uint256 quoteMinAmount, uint256 quoteMinAmount,
uint8 flag, // 1 - baseInETH, 2 - quoteInETH uint8 flag, // 1 - baseInETH, 2 - quoteInETH
uint256 deadline uint256 deadline
) external payable returns (uint256 shares,uint256 baseActualInAmount,uint256 quoteActualInAmount); ) external payable returns (uint256 shares,uint256 baseAdjustedInAmount,uint256 quoteAdjustedInAmount);
function createDODOPrivatePool( function createDODOPrivatePool(
address baseToken, address baseToken,

View File

@@ -39,7 +39,7 @@ export const DODO_PROXY_NAME = "DODOV2Proxy01"
export const FEE_RATE_MODEL_NAME = "FeeRateModel" export const FEE_RATE_MODEL_NAME = "FeeRateModel"
export const DPP_NAME = "DPP" export const DPP_NAME = "DPP"
export const DPP_FACTORY_NAME = "DPPFactory" export const DPP_FACTORY_NAME = "DPPFactory"
export const SMART_APPROVE = "SmartApprove" export const SMART_APPROVE = "DODOApprove"
export const DODO_SELL_HELPER = "DODOSellHelper" export const DODO_SELL_HELPER = "DODOSellHelper"
export const DVM_ADMIN_NAME = "DVMAdmin" export const DVM_ADMIN_NAME = "DVMAdmin"
export const DPP_ADMIN_NAME = "DPPAdmin" export const DPP_ADMIN_NAME = "DPPAdmin"

View File

@@ -107,7 +107,7 @@ export class ProxyContext {
] ]
); );
await this.SmartApprove.methods.setSmartSwap(this.DODOProxy.options.address).send(this.sendParam(this.Deployer)); await this.SmartApprove.methods.setDODOProxy(this.DODOProxy.options.address).send(this.sendParam(this.Deployer));
this.DODO = await contracts.newContract( this.DODO = await contracts.newContract(
contracts.MINTABLE_ERC20_CONTRACT_NAME, contracts.MINTABLE_ERC20_CONTRACT_NAME,