V1Proxy02 - more protection

This commit is contained in:
owen05
2021-01-10 15:48:54 +08:00
parent ff4a51982f
commit dc28166194
3 changed files with 40 additions and 26 deletions

View File

@@ -18,7 +18,6 @@ import {IUni} from "./intf/IUni.sol";
import {IDODOApprove} from "../intf/IDODOApprove.sol";
import {IDODOV1Proxy02} from "./intf/IDODOV1Proxy02.sol";
import {InitializableOwnable} from "../lib/InitializableOwnable.sol";
import {IDODOIncentive} from "./DODOIncentive.sol";
/**
* @title DODOV1Proxy02
@@ -33,7 +32,6 @@ contract DODOV1Proxy02 is IDODOV1Proxy02, InitializableOwnable {
// ============ Storage ============
address constant _ETH_ADDRESS_ = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
address public immutable _DODO_INCENTIVE_;
address public immutable _DODO_APPROVE_;
address public immutable _DODO_SELL_HELPER_;
address public immutable _WETH_;
@@ -63,14 +61,12 @@ contract DODOV1Proxy02 is IDODOV1Proxy02, InitializableOwnable {
address dodoApporve,
address dodoSellHelper,
address weth,
address chiToken,
address dodoIncentive
address chiToken
) public {
_DODO_APPROVE_ = dodoApporve;
_DODO_SELL_HELPER_ = dodoSellHelper;
_WETH_ = weth;
_CHI_TOKEN_ = chiToken;
_DODO_INCENTIVE_ = dodoIncentive;
}
fallback() external payable {}
@@ -97,7 +93,6 @@ contract DODOV1Proxy02 is IDODOV1Proxy02, InitializableOwnable {
uint256 minReturnAmount,
address[] memory dodoPairs,
uint256 directions,
bool isIncentive,
uint256 deadLine
) external override payable judgeExpired(deadLine) returns (uint256 returnAmount) {
require(dodoPairs.length > 0, "DODOV1Proxy02: PAIRS_EMPTY");
@@ -155,10 +150,6 @@ contract DODOV1Proxy02 is IDODOV1Proxy02, InitializableOwnable {
if(gasleft() > 27710 + gasTokenBurn * 6080)
IChi(_CHI_TOKEN_).freeUpTo(gasTokenBurn);
}
if(isIncentive) {
IDODOIncentive(_DODO_INCENTIVE_).triggerIncentive(fromToken,toToken,msg.sender);
}
}
function externalSwap(
@@ -169,11 +160,11 @@ contract DODOV1Proxy02 is IDODOV1Proxy02, InitializableOwnable {
uint256 fromTokenAmount,
uint256 minReturnAmount,
bytes memory callDataConcat,
bool isIncentive,
uint256 deadLine
) external override payable judgeExpired(deadLine) returns (uint256 returnAmount) {
require(minReturnAmount > 0, "DODOV1Proxy02: RETURN_AMOUNT_ZERO");
require(fromToken != _CHI_TOKEN_, "DODOV1Proxy02: NOT_SUPPORT_SELL_CHI");
address _fromToken = fromToken;
address _toToken = toToken;
@@ -208,10 +199,6 @@ contract DODOV1Proxy02 is IDODOV1Proxy02, InitializableOwnable {
if(gasleft() > 27710 + _gasExternalReturn * 6080)
IChi(_CHI_TOKEN_).freeUpTo(_gasExternalReturn);
}
if(isIncentive) {
IDODOIncentive(_DODO_INCENTIVE_).triggerIncentive(_fromToken,_toToken,msg.sender);
}
}
@@ -223,12 +210,12 @@ contract DODOV1Proxy02 is IDODOV1Proxy02, InitializableOwnable {
address[] memory mixPairs,
uint256[] memory directions,
address[] memory portionPath,
bool isIncentive,
uint256 deadLine
) external override payable judgeExpired(deadLine) returns (uint256 returnAmount) {
require(mixPairs.length == directions.length, "DODOV1Proxy02: PARAMS_LENGTH_NOT_MATCH");
require(mixPairs.length > 0, "DODOV1Proxy02: PAIRS_EMPTY");
require(minReturnAmount > 0, "DODOV1Proxy02: RETURN_AMOUNT_ZERO");
require(fromToken != _CHI_TOKEN_, "DODOV1Proxy02: NOT_SUPPORT_SELL_CHI");
uint256 toTokenOriginBalance = IERC20(toToken).universalBalanceOf(msg.sender);
@@ -282,9 +269,5 @@ contract DODOV1Proxy02 is IDODOV1Proxy02, InitializableOwnable {
if(gasleft() > 27710 + _gasExternalReturn * 6080)
IChi(_CHI_TOKEN_).freeUpTo(_gasExternalReturn);
}
if(isIncentive) {
IDODOIncentive(_DODO_INCENTIVE_).triggerIncentive(fromToken,toToken,msg.sender);
}
}
}

View File

@@ -16,7 +16,6 @@ interface IDODOV1Proxy02 {
uint256 minReturnAmount,
address[] memory dodoPairs,
uint256 directions,
bool isIncentive,
uint256 deadLine
) external payable returns (uint256 returnAmount);
@@ -28,7 +27,6 @@ interface IDODOV1Proxy02 {
uint256 fromTokenAmount,
uint256 minReturnAmount,
bytes memory callDataConcat,
bool isIncentive,
uint256 deadLine
) external payable returns (uint256 returnAmount);
@@ -40,7 +38,6 @@ interface IDODOV1Proxy02 {
address[] memory mixPairs,
uint256[] memory directions,
address[] memory portionPath,
bool isIncentive,
uint256 deadLine
) external payable returns (uint256 returnAmount);
}

View File

@@ -8,9 +8,8 @@
pragma solidity 0.6.9;
pragma experimental ABIEncoderV2;
import {IDODOV1Proxy02} from "./IDODOV1Proxy02.sol";
interface IDODOV2Proxy01 is IDODOV1Proxy02 {
interface IDODOV2Proxy01 {
function dodoSwapV2ETHToToken(
address toToken,
uint256 minReturnAmount,
@@ -116,4 +115,39 @@ interface IDODOV2Proxy01 is IDODOV1Proxy02 {
uint256 deadLine
) external payable returns(uint256, uint256);
function dodoSwapV1(
address fromToken,
address toToken,
uint256 fromTokenAmount,
uint256 minReturnAmount,
address[] memory dodoPairs,
uint256 directions,
bool isIncentive,
uint256 deadLine
) external payable returns (uint256 returnAmount);
function externalSwap(
address fromToken,
address toToken,
address approveTarget,
address to,
uint256 fromTokenAmount,
uint256 minReturnAmount,
bytes memory callDataConcat,
bool isIncentive,
uint256 deadLine
) external payable returns (uint256 returnAmount);
function mixSwapV1(
address fromToken,
address toToken,
uint256 fromTokenAmount,
uint256 minReturnAmount,
address[] memory mixPairs,
uint256[] memory directions,
address[] memory portionPath,
bool isIncentive,
uint256 deadLine
) external payable returns (uint256 returnAmount);
}