第一次走查
This commit is contained in:
@@ -38,6 +38,8 @@ contract DPP is DPPTrader {
|
||||
_GAS_PRICE_LIMIT_ = IExternalValue(gasPriceSource);
|
||||
_TRADE_PERMISSION_ = IPermissionManager(tradePermissionManager);
|
||||
_resetTargetAndReserve();
|
||||
_checkIK();
|
||||
require(_BASE_TOKEN_ != _QUOTE_TOKEN_, "BASE_QUOTE_CAN_NOT_BE_SAME");
|
||||
}
|
||||
|
||||
// ============ Version Control ============
|
||||
|
||||
@@ -9,16 +9,20 @@ pragma solidity 0.6.9;
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
import {IDPP} from "../intf/IDPP.sol";
|
||||
import {IDODOApprove} from '../../intf/IDODOApprove.sol';
|
||||
import {IDODOApprove} from "../../intf/IDODOApprove.sol";
|
||||
import {InitializableOwnable} from "../../lib/InitializableOwnable.sol";
|
||||
|
||||
contract DPPAdmin is InitializableOwnable {
|
||||
|
||||
address public _DPP_;
|
||||
address public _OPERATOR_;
|
||||
address public _OPERATOR_;
|
||||
address public _DODO_APPROVE_;
|
||||
|
||||
function init(address owner, address dpp,address operator, address dodoApprove) external {
|
||||
function init(
|
||||
address owner,
|
||||
address dpp,
|
||||
address operator,
|
||||
address dodoApprove
|
||||
) external {
|
||||
initOwner(owner);
|
||||
_DPP_ = dpp;
|
||||
_OPERATOR_ = operator;
|
||||
@@ -29,33 +33,33 @@ contract DPPAdmin is InitializableOwnable {
|
||||
_OPERATOR_ = newOperator;
|
||||
}
|
||||
|
||||
function setLpFeeRateModel(address newLpFeeRateModel) external onlyOwner {
|
||||
IDPP(_DPP_).setLpFeeRateModel(newLpFeeRateModel);
|
||||
}
|
||||
// function setLpFeeRateModel(address newLpFeeRateModel) external onlyOwner {
|
||||
// IDPP(_DPP_).setLpFeeRateModel(newLpFeeRateModel);
|
||||
// }
|
||||
|
||||
function setMtFeeRateModel(address newMtFeeRateModel) external onlyOwner {
|
||||
IDPP(_DPP_).setMtFeeRateModel(newMtFeeRateModel);
|
||||
}
|
||||
// function setMtFeeRateModel(address newMtFeeRateModel) external onlyOwner {
|
||||
// IDPP(_DPP_).setMtFeeRateModel(newMtFeeRateModel);
|
||||
// }
|
||||
|
||||
function setTradePermissionManager(address newTradePermissionManager) external onlyOwner {
|
||||
IDPP(_DPP_).setTradePermissionManager(newTradePermissionManager);
|
||||
}
|
||||
// function setTradePermissionManager(address newTradePermissionManager) external onlyOwner {
|
||||
// IDPP(_DPP_).setTradePermissionManager(newTradePermissionManager);
|
||||
// }
|
||||
|
||||
function setMaintainer(address newMaintainer) external onlyOwner {
|
||||
IDPP(_DPP_).setMaintainer(newMaintainer);
|
||||
}
|
||||
|
||||
function setGasPriceSource(address newGasPriceLimitSource) external onlyOwner {
|
||||
IDPP(_DPP_).setGasPriceSource(newGasPriceLimitSource);
|
||||
}
|
||||
// function setGasPriceSource(address newGasPriceLimitSource) external onlyOwner {
|
||||
// IDPP(_DPP_).setGasPriceSource(newGasPriceLimitSource);
|
||||
// }
|
||||
|
||||
function setISource(address newISource) external onlyOwner {
|
||||
IDPP(_DPP_).setISource(newISource);
|
||||
}
|
||||
// function setISource(address newISource) external onlyOwner {
|
||||
// IDPP(_DPP_).setISource(newISource);
|
||||
// }
|
||||
|
||||
function setKSource(address newKSource) external onlyOwner {
|
||||
IDPP(_DPP_).setKSource(newKSource);
|
||||
}
|
||||
// function setKSource(address newKSource) external onlyOwner {
|
||||
// IDPP(_DPP_).setKSource(newKSource);
|
||||
// }
|
||||
|
||||
function setBuy(bool open) external onlyOwner {
|
||||
IDPP(_DPP_).setBuy(open);
|
||||
@@ -65,12 +69,16 @@ contract DPPAdmin is InitializableOwnable {
|
||||
IDPP(_DPP_).setSell(open);
|
||||
}
|
||||
|
||||
function retrieve(address payable to,address token,uint256 amount) external onlyOwner {
|
||||
IDPP(_DPP_).retrieve(to,token,amount);
|
||||
function retrieve(
|
||||
address payable to,
|
||||
address token,
|
||||
uint256 amount
|
||||
) external onlyOwner {
|
||||
IDPP(_DPP_).retrieve(to, token, amount);
|
||||
}
|
||||
|
||||
function reset(
|
||||
address assetTo,
|
||||
address operator,
|
||||
uint256 newLpFeeRate,
|
||||
uint256 newMtFeeRate,
|
||||
uint256 newI,
|
||||
@@ -78,28 +86,12 @@ contract DPPAdmin is InitializableOwnable {
|
||||
uint256 baseOutAmount,
|
||||
uint256 quoteOutAmount
|
||||
) external {
|
||||
require(msg.sender == _OWNER_ || (msg.sender == IDODOApprove(_DODO_APPROVE_).getDODOProxy() && assetTo == _OPERATOR_), "RESET FORBIDDEN!");
|
||||
IDPP(_DPP_).reset(
|
||||
assetTo,
|
||||
newLpFeeRate,
|
||||
newMtFeeRate,
|
||||
newI,
|
||||
newK,
|
||||
baseOutAmount,
|
||||
quoteOutAmount
|
||||
require(
|
||||
msg.sender == _OWNER_ ||
|
||||
(msg.sender == IDODOApprove(_DODO_APPROVE_).getDODOProxy() &&
|
||||
operator == _OPERATOR_),
|
||||
"RESET FORBIDDEN!"
|
||||
);
|
||||
}
|
||||
|
||||
function resetETH(
|
||||
address from,
|
||||
uint256 newLpFeeRate,
|
||||
uint256 newMtFeeRate,
|
||||
uint256 newI,
|
||||
uint256 newK,
|
||||
uint256 baseOutAmount,
|
||||
uint256 quoteOutAmount
|
||||
) external {
|
||||
require(msg.sender == _OWNER_ || (msg.sender == IDODOApprove(_DODO_APPROVE_).getDODOProxy() && from == _OPERATOR_), "RESET FORBIDDEN!");
|
||||
IDPP(_DPP_).reset(
|
||||
msg.sender,
|
||||
newLpFeeRate,
|
||||
|
||||
@@ -96,6 +96,13 @@ contract DPPStorage is InitializableOwnable, ReentrancyGuard {
|
||||
_SELLING_CLOSE_ = !open;
|
||||
}
|
||||
|
||||
function _checkIK() internal view {
|
||||
uint256 k = _K_.get();
|
||||
uint256 i = _I_.get();
|
||||
require(k > 0 && k <= 1e18, "K_OUT_OF_RANGE");
|
||||
require(i > 0 && i <= 1e36, "I_OUT_OF_RANGE");
|
||||
}
|
||||
|
||||
// ============ View Functions ============
|
||||
|
||||
function getLpFeeRate(address trader) external view returns (uint256 feeRate) {
|
||||
@@ -105,5 +112,4 @@ contract DPPStorage is InitializableOwnable, ReentrancyGuard {
|
||||
function getMtFeeRate(address trader) external view returns (uint256 feeRate) {
|
||||
return _MT_FEE_RATE_MODEL_.getFeeRate(trader);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -117,9 +117,6 @@ contract DPPTrader is DPPVault {
|
||||
"FLASH_LOAN_FAILED"
|
||||
);
|
||||
|
||||
// no output -> pure profit
|
||||
if (baseBalance >= _BASE_RESERVE_ && quoteBalance >= _QUOTE_RESERVE_) return;
|
||||
|
||||
// sell quote case
|
||||
// quote input + base output
|
||||
if (baseBalance < _BASE_RESERVE_) {
|
||||
@@ -137,8 +134,6 @@ contract DPPTrader is DPPVault {
|
||||
_RState_ = newRState;
|
||||
_QUOTE_TARGET_ = newQuoteTarget;
|
||||
}
|
||||
|
||||
_syncReserve();
|
||||
}
|
||||
|
||||
// sell base case
|
||||
@@ -158,9 +153,9 @@ contract DPPTrader is DPPVault {
|
||||
_RState_ = newRState;
|
||||
_BASE_TARGET_ = newBaseTarget;
|
||||
}
|
||||
|
||||
_syncReserve();
|
||||
}
|
||||
|
||||
_syncReserve();
|
||||
}
|
||||
|
||||
// ============ Query Functions ============
|
||||
@@ -180,11 +175,10 @@ contract DPPTrader is DPPVault {
|
||||
|
||||
uint256 lpFeeRate = _LP_FEE_RATE_MODEL_.getFeeRate(trader);
|
||||
uint256 mtFeeRate = _MT_FEE_RATE_MODEL_.getFeeRate(trader);
|
||||
mtFee = DecimalMath.mulCeil(receiveQuoteAmount, mtFeeRate);
|
||||
receiveQuoteAmount = DecimalMath.mulFloor(
|
||||
receiveQuoteAmount,
|
||||
DecimalMath.ONE.sub(mtFeeRate).sub(lpFeeRate)
|
||||
);
|
||||
mtFee = DecimalMath.mulFloor(receiveQuoteAmount, mtFeeRate);
|
||||
receiveQuoteAmount = receiveQuoteAmount
|
||||
.sub(DecimalMath.mulFloor(receiveQuoteAmount, lpFeeRate))
|
||||
.sub(mtFee);
|
||||
|
||||
return (receiveQuoteAmount, mtFee, newRState, state.B0);
|
||||
}
|
||||
@@ -204,11 +198,10 @@ contract DPPTrader is DPPVault {
|
||||
|
||||
uint256 lpFeeRate = _LP_FEE_RATE_MODEL_.getFeeRate(trader);
|
||||
uint256 mtFeeRate = _MT_FEE_RATE_MODEL_.getFeeRate(trader);
|
||||
mtFee = DecimalMath.mulCeil(receiveBaseAmount, mtFeeRate);
|
||||
receiveBaseAmount = DecimalMath.mulFloor(
|
||||
receiveBaseAmount,
|
||||
DecimalMath.ONE.sub(mtFeeRate).sub(lpFeeRate)
|
||||
);
|
||||
mtFee = DecimalMath.mulFloor(receiveBaseAmount, mtFeeRate);
|
||||
receiveBaseAmount = receiveBaseAmount
|
||||
.sub(DecimalMath.mulFloor(receiveBaseAmount, lpFeeRate))
|
||||
.sub(mtFee);
|
||||
return (receiveBaseAmount, mtFee, newRState, state.Q0);
|
||||
}
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ contract DPPVault is DPPStorage {
|
||||
return (_BASE_RESERVE_, _QUOTE_RESERVE_);
|
||||
}
|
||||
|
||||
// ============ Set Status ============
|
||||
// ============ Set States ============
|
||||
|
||||
function setTarget(uint256 baseTarget, uint256 quoteTarget) public preventReentrant onlyOwner {
|
||||
_BASE_TARGET_ = baseTarget;
|
||||
@@ -68,8 +68,6 @@ contract DPPVault is DPPStorage {
|
||||
uint256 baseOutAmount,
|
||||
uint256 quoteOutAmount
|
||||
) public preventReentrant onlyOwner {
|
||||
require(newK >= 1e12 && newK <= 1e18, "K_OUT_OF_RANGE");
|
||||
require(newI > 0 && newI <= 1e36, "I_OUT_OF_RANGE");
|
||||
_LP_FEE_RATE_MODEL_.setFeeRate(newLpFeeRate);
|
||||
_MT_FEE_RATE_MODEL_.setFeeRate(newMtFeeRate);
|
||||
_I_.set(newI);
|
||||
@@ -77,6 +75,7 @@ contract DPPVault is DPPStorage {
|
||||
_transferBaseOut(assetTo, baseOutAmount);
|
||||
_transferQuoteOut(assetTo, quoteOutAmount);
|
||||
_resetTargetAndReserve();
|
||||
_checkIK();
|
||||
}
|
||||
|
||||
function _setRState() internal {
|
||||
|
||||
Reference in New Issue
Block a user