add cp event && smartroute helper fix
This commit is contained in:
@@ -143,7 +143,8 @@ contract DODOIncentive is InitializableOwnable {
|
||||
uint256 reward,
|
||||
uint256 baseRate,
|
||||
uint256 totalRate,
|
||||
uint256 curTotalReward
|
||||
uint256 curTotalReward,
|
||||
uint256 perBlockReward
|
||||
)
|
||||
{
|
||||
baseRate = defaultRate;
|
||||
@@ -153,5 +154,6 @@ contract DODOIncentive is InitializableOwnable {
|
||||
uint256 _totalReward = _getTotalReward();
|
||||
reward = ((_totalReward - totalDistribution) * totalRate) / 1000;
|
||||
curTotalReward = _totalReward - totalDistribution;
|
||||
perBlockReward = dodoPerBlock;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -355,9 +355,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
|
||||
|
||||
_dodoGasReturn(originGas);
|
||||
|
||||
if(isIncentive) {
|
||||
IDODOIncentive(_DODO_INCENTIVE_).triggerIncentive(_ETH_ADDRESS_,toToken,msg.sender);
|
||||
}
|
||||
_execIncentive(isIncentive, _ETH_ADDRESS_, toToken);
|
||||
|
||||
emit OrderHistory(
|
||||
_ETH_ADDRESS_,
|
||||
@@ -411,9 +409,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
|
||||
|
||||
_dodoGasReturn(originGas);
|
||||
|
||||
if(isIncentive) {
|
||||
IDODOIncentive(_DODO_INCENTIVE_).triggerIncentive(fromToken,_ETH_ADDRESS_,msg.sender);
|
||||
}
|
||||
_execIncentive(isIncentive, fromToken, _ETH_ADDRESS_);
|
||||
|
||||
emit OrderHistory(
|
||||
fromToken,
|
||||
@@ -467,9 +463,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
|
||||
|
||||
_dodoGasReturn(originGas);
|
||||
|
||||
if(isIncentive) {
|
||||
IDODOIncentive(_DODO_INCENTIVE_).triggerIncentive(fromToken,toToken,msg.sender);
|
||||
}
|
||||
_execIncentive(isIncentive, fromToken, toToken);
|
||||
|
||||
emit OrderHistory(
|
||||
fromToken,
|
||||
@@ -525,9 +519,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
|
||||
|
||||
_externalGasReturn();
|
||||
|
||||
if(isIncentive) {
|
||||
IDODOIncentive(_DODO_INCENTIVE_).triggerIncentive(fromToken,toToken,msg.sender);
|
||||
}
|
||||
_execIncentive(isIncentive, fromToken, toToken);
|
||||
|
||||
emit OrderHistory(
|
||||
fromToken,
|
||||
@@ -596,9 +588,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
|
||||
|
||||
_dodoGasReturn(originGas);
|
||||
|
||||
if(isIncentive) {
|
||||
IDODOIncentive(_DODO_INCENTIVE_).triggerIncentive(_fromToken,_toToken,msg.sender);
|
||||
}
|
||||
_execIncentive(isIncentive, _fromToken, _toToken);
|
||||
|
||||
emit OrderHistory(_fromToken, _toToken, msg.sender, fromTokenAmount, returnAmount);
|
||||
}
|
||||
@@ -611,35 +601,28 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
|
||||
uint256 minReturnAmount,
|
||||
address[] memory mixAdapters,
|
||||
address[] memory mixPairs,
|
||||
address[] memory assetTo,
|
||||
uint256 directions,
|
||||
bool isIncentive,
|
||||
uint256 deadLine
|
||||
) external override payable judgeExpired(deadLine) returns (uint256 returnAmount) {
|
||||
require(mixPairs.length > 0, "DODOV2Proxy01: PAIRS_EMPTY");
|
||||
require(mixPairs.length == mixAdapters.length, "DODOV2Proxy01: ADAPTER_PAIR_NOT_MATCH");
|
||||
require(mixPairs.length == mixAdapters.length, "DODOV2Proxy01: PAIR_ADAPTER_NOT_MATCH");
|
||||
require(mixPairs.length == assetTo.length - 1, "DODOV2Proxy01: PAIR_ASSETTO_NOT_MATCH");
|
||||
require(minReturnAmount > 0, "DODOV2Proxy01: RETURN_AMOUNT_ZERO");
|
||||
|
||||
uint256 toTokenOriginBalance = IERC20(toToken).universalBalanceOf(msg.sender);
|
||||
|
||||
{
|
||||
address _fromToken = fromToken;
|
||||
_deposit(msg.sender, mixPairs[0], _fromToken, fromTokenAmount, _fromToken == _ETH_ADDRESS_);
|
||||
_deposit(msg.sender, assetTo[0], _fromToken, fromTokenAmount, _fromToken == _ETH_ADDRESS_);
|
||||
}
|
||||
|
||||
address assetTo = toToken == _ETH_ADDRESS_ ? address(this): msg.sender;
|
||||
for (uint256 i = 0; i < mixPairs.length; i++) {
|
||||
if (i == mixPairs.length - 1) {
|
||||
if (directions & 1 == 0) {
|
||||
IDODOAdapter(mixAdapters[i]).sellBase(assetTo,mixPairs[i]);
|
||||
} else {
|
||||
IDODOAdapter(mixAdapters[i]).sellQuote(assetTo,mixPairs[i]);
|
||||
}
|
||||
if (directions & 1 == 0) {
|
||||
IDODOAdapter(mixAdapters[i]).sellBase(assetTo[i + 1],mixPairs[i]);
|
||||
} else {
|
||||
if (directions& 1 == 0) {
|
||||
IDODOAdapter(mixAdapters[i]).sellBase(mixPairs[i + 1],mixPairs[i]);
|
||||
} else {
|
||||
IDODOAdapter(mixAdapters[i]).sellQuote(mixPairs[i + 1],mixPairs[i]);
|
||||
}
|
||||
IDODOAdapter(mixAdapters[i]).sellQuote(assetTo[i + 1],mixPairs[i]);
|
||||
}
|
||||
directions = directions >> 1;
|
||||
}
|
||||
@@ -656,9 +639,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
|
||||
|
||||
_externalGasReturn();
|
||||
|
||||
if(isIncentive) {
|
||||
IDODOIncentive(_DODO_INCENTIVE_).triggerIncentive(fromToken,toToken,msg.sender);
|
||||
}
|
||||
_execIncentive(isIncentive, fromToken, toToken);
|
||||
|
||||
emit OrderHistory(
|
||||
fromToken,
|
||||
@@ -794,4 +775,11 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
|
||||
IChi(_CHI_TOKEN_).freeUpTo(_gasExternalReturn);
|
||||
}
|
||||
}
|
||||
|
||||
function _execIncentive(bool isIncentive, address fromToken,address toToken) internal {
|
||||
if(isIncentive && gasleft() > 30000) {
|
||||
IDODOIncentive(_DODO_INCENTIVE_).triggerIncentive(fromToken, toToken, msg.sender);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ contract DODOV1Adapter is IDODOAdapter {
|
||||
uint256 curAmountIn = IERC20(curBase).balanceOf(address(this));
|
||||
IERC20(curBase).universalApproveMax(pool, curAmountIn);
|
||||
IDODOV1(pool).sellBaseToken(curAmountIn, 0, "");
|
||||
if(to == msg.sender) {
|
||||
if(to != address(this)) {
|
||||
address curQuote = IDODOV1(pool)._QUOTE_TOKEN_();
|
||||
IERC20(curQuote).transfer(to,IERC20(curQuote).balanceOf(address(this)));
|
||||
}
|
||||
@@ -44,7 +44,7 @@ contract DODOV1Adapter is IDODOAdapter {
|
||||
curAmountIn
|
||||
);
|
||||
IDODOV1(pool).buyBaseToken(canBuyBaseAmount, curAmountIn, "");
|
||||
if(to == msg.sender) {
|
||||
if(to != address(this)) {
|
||||
address curBase = IDODOV1(pool)._BASE_TOKEN_();
|
||||
IERC20(curBase).transfer(to,IERC20(curBase).balanceOf(address(this)));
|
||||
}
|
||||
|
||||
46
contracts/SmartRoute/helper/DODOV1PmmHelper.sol
Normal file
46
contracts/SmartRoute/helper/DODOV1PmmHelper.sol
Normal file
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
|
||||
Copyright 2020 DODO ZOO.
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
*/
|
||||
|
||||
pragma solidity 0.6.9;
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
import {IDODOV1} from "../intf/IDODOV1.sol";
|
||||
|
||||
contract DODOV1PmmHelper {
|
||||
|
||||
struct PairDetail {
|
||||
uint256 i;
|
||||
uint256 K;
|
||||
uint256 B;
|
||||
uint256 Q;
|
||||
uint256 B0;
|
||||
uint256 Q0;
|
||||
uint256 R;
|
||||
uint256 lpFeeRate;
|
||||
uint256 mtFeeRate;
|
||||
address baseToken;
|
||||
address quoteToken;
|
||||
address curPair;
|
||||
uint256 pairVersion;
|
||||
}
|
||||
|
||||
function getPairDetail(address pool) external view returns (PairDetail[] memory res) {
|
||||
res = new PairDetail[](1);
|
||||
PairDetail memory curRes = PairDetail(0,0,0,0,0,0,0,0,0,address(0),address(0),pool,1);
|
||||
curRes.i = IDODOV1(pool).getOraclePrice();
|
||||
curRes.K = IDODOV1(pool)._K_();
|
||||
curRes.B = IDODOV1(pool)._BASE_BALANCE_();
|
||||
curRes.Q = IDODOV1(pool)._QUOTE_BALANCE_();
|
||||
(curRes.B0,curRes.Q0) = IDODOV1(pool).getExpectedTarget();
|
||||
curRes.R = IDODOV1(pool)._R_STATUS_();
|
||||
curRes.lpFeeRate = IDODOV1(pool)._LP_FEE_RATE_();
|
||||
curRes.mtFeeRate = IDODOV1(pool)._MT_FEE_RATE_();
|
||||
curRes.baseToken = IDODOV1(pool)._BASE_TOKEN_();
|
||||
curRes.quoteToken = IDODOV1(pool)._QUOTE_TOKEN_();
|
||||
res[0] = curRes;
|
||||
}
|
||||
}
|
||||
@@ -27,6 +27,7 @@ contract DODOV2RouteHelper {
|
||||
address baseToken;
|
||||
address quoteToken;
|
||||
address curPair;
|
||||
uint256 pairVersion;
|
||||
}
|
||||
|
||||
constructor(address dvmFactory,address dppFactory) public {
|
||||
@@ -40,7 +41,7 @@ contract DODOV2RouteHelper {
|
||||
uint256 len = baseToken0DVM.length + baseToken1DVM.length + baseToken0DPP.length + baseToken1DPP.length;
|
||||
res = new PairDetail[](len);
|
||||
for(uint8 i = 0; i < len; i++) {
|
||||
PairDetail memory curRes = PairDetail(0,0,0,0,0,0,0,0,0,address(0),address(0),address(0));
|
||||
PairDetail memory curRes = PairDetail(0,0,0,0,0,0,0,0,0,address(0),address(0),address(0),2);
|
||||
address cur;
|
||||
if(i < baseToken0DVM.length) {
|
||||
cur = baseToken0DVM[i];
|
||||
|
||||
@@ -58,9 +58,9 @@ interface IDODOV1 {
|
||||
|
||||
function _QUOTE_CAPITAL_TOKEN_() external returns (address);
|
||||
|
||||
function _BASE_TOKEN_() external returns (address);
|
||||
function _BASE_TOKEN_() external view returns (address);
|
||||
|
||||
function _QUOTE_TOKEN_() external returns (address);
|
||||
function _QUOTE_TOKEN_() external view returns (address);
|
||||
|
||||
function _R_STATUS_() external view returns (uint8);
|
||||
|
||||
|
||||
@@ -145,6 +145,7 @@ interface IDODOV2Proxy01 {
|
||||
uint256 minReturnAmount,
|
||||
address[] memory mixAdapters,
|
||||
address[] memory mixPairs,
|
||||
address[] memory assetTo,
|
||||
uint256 directions,
|
||||
bool isIncentive,
|
||||
uint256 deadLine
|
||||
|
||||
Reference in New Issue
Block a user