From 65015c0bdb4c33ec37bfbff7dbab5d75f261eff0 Mon Sep 17 00:00:00 2001 From: mingda Date: Thu, 9 Jul 2020 17:59:25 +0800 Subject: [PATCH] gas optimize --- contracts/DODOEthProxy.sol | 5 +---- contracts/impl/Trader.sol | 24 ++++++++++++++++++------ 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/contracts/DODOEthProxy.sol b/contracts/DODOEthProxy.sol index bd64db3..6c831ac 100644 --- a/contracts/DODOEthProxy.sol +++ b/contracts/DODOEthProxy.sol @@ -68,11 +68,9 @@ contract DODOEthProxy is ReentrancyGuard { require(msg.value == ethAmount, "ETH_AMOUNT_NOT_MATCH"); address DODO = IDODOZoo(_DODO_ZOO_).getDODO(_WETH_, quoteTokenAddress); require(DODO != address(0), "DODO_NOT_EXIST"); - receiveTokenAmount = IDODO(DODO).querySellBaseToken(ethAmount); - require(receiveTokenAmount >= minReceiveTokenAmount, "RECEIVE_NOT_ENOUGH"); IWETH(_WETH_).deposit{value: ethAmount}(); IWETH(_WETH_).approve(DODO, ethAmount); - IDODO(DODO).sellBaseToken(ethAmount, minReceiveTokenAmount); + receiveTokenAmount = IDODO(DODO).sellBaseToken(ethAmount, minReceiveTokenAmount); _transferOut(quoteTokenAddress, msg.sender, receiveTokenAmount); emit ProxySellEth(msg.sender, quoteTokenAddress, ethAmount, receiveTokenAmount); return receiveTokenAmount; @@ -86,7 +84,6 @@ contract DODOEthProxy is ReentrancyGuard { address DODO = IDODOZoo(_DODO_ZOO_).getDODO(_WETH_, quoteTokenAddress); require(DODO != address(0), "DODO_NOT_EXIST"); payTokenAmount = IDODO(DODO).queryBuyBaseToken(ethAmount); - require(payTokenAmount <= maxPayTokenAmount, "PAY_TOO_MUCH"); _transferIn(quoteTokenAddress, msg.sender, payTokenAmount); IERC20(quoteTokenAddress).approve(DODO, payTokenAmount); IDODO(DODO).buyBaseToken(ethAmount, maxPayTokenAmount); diff --git a/contracts/impl/Trader.sol b/contracts/impl/Trader.sol index 19d9673..65b3060 100644 --- a/contracts/impl/Trader.sol +++ b/contracts/impl/Trader.sol @@ -70,9 +70,15 @@ contract Trader is Storage, Pricing, Settlement { _quoteTokenTransferOut(_MAINTAINER_, mtFeeQuote); // update TARGET - _TARGET_QUOTE_TOKEN_AMOUNT_ = newQuoteTarget; - _TARGET_BASE_TOKEN_AMOUNT_ = newBaseTarget; - _R_STATUS_ = newRStatus; + if (_TARGET_QUOTE_TOKEN_AMOUNT_ != newQuoteTarget) { + _TARGET_QUOTE_TOKEN_AMOUNT_ = newQuoteTarget; + } + if (_TARGET_BASE_TOKEN_AMOUNT_ != newBaseTarget) { + _TARGET_BASE_TOKEN_AMOUNT_ = newBaseTarget; + } + if (_R_STATUS_ != newRStatus) { + _R_STATUS_ = newRStatus; + } _donateQuoteToken(lpFeeQuote); emit SellBaseToken(msg.sender, amount, receiveQuote); @@ -105,9 +111,15 @@ contract Trader is Storage, Pricing, Settlement { _baseTokenTransferOut(_MAINTAINER_, mtFeeBase); // update TARGET - _TARGET_QUOTE_TOKEN_AMOUNT_ = newQuoteTarget; - _TARGET_BASE_TOKEN_AMOUNT_ = newBaseTarget; - _R_STATUS_ = newRStatus; + if (_TARGET_QUOTE_TOKEN_AMOUNT_ != newQuoteTarget) { + _TARGET_QUOTE_TOKEN_AMOUNT_ = newQuoteTarget; + } + if (_TARGET_BASE_TOKEN_AMOUNT_ != newBaseTarget) { + _TARGET_BASE_TOKEN_AMOUNT_ = newBaseTarget; + } + if (_R_STATUS_ != newRStatus) { + _R_STATUS_ = newRStatus; + } _donateBaseToken(lpFeeBase); emit BuyBaseToken(msg.sender, amount, payQuote);