factory add template update && proxy fix

This commit is contained in:
owen05
2021-01-07 12:52:24 +08:00
parent bedc37c08a
commit 6e8c5d6f91
10 changed files with 74 additions and 47 deletions

View File

@@ -20,12 +20,11 @@ contract CrowdPoolingFactory is InitializableOwnable {
// ============ Templates ============
address public immutable _CLONE_FACTORY_;
address public immutable _CP_TEMPLATE_;
address public immutable _DVM_FACTORY_;
address public immutable _DEFAULT_MAINTAINER_;
address public immutable _DEFAULT_MT_FEE_RATE_MODEL_;
address public immutable _DEFAULT_PERMISSION_MANAGER_;
address public _CP_TEMPLATE_;
uint256 public _X_ = 50; //default
uint256 public _Y_ = 0; //default
@@ -145,6 +144,10 @@ contract CrowdPoolingFactory is InitializableOwnable {
}
// ============ Owner Functions ============
function updateCPTemplate(address _newCPTemplate) external onlyOwner {
_CP_TEMPLATE_ = _newCPTemplate;
}
function setXY(uint256 x,uint256 y) public onlyOwner {
require(x>0&&x<=100,"CP_FACTORY : INVALID_X");
_X_=x;

View File

@@ -18,10 +18,10 @@ contract DPPFactory is InitializableOwnable {
// ============ Templates ============
address public immutable _CLONE_FACTORY_;
address public immutable _DPP_TEMPLATE_;
address public immutable _DEFAULT_MAINTAINER_;
address public immutable _DEFAULT_MT_FEE_RATE_MODEL_;
address public immutable _DODO_APPROVE_;
address public _DPP_TEMPLATE_;
address public _DPP_ADMIN_TEMPLATE_;
// ============ Registry ============
@@ -115,6 +115,10 @@ contract DPPFactory is InitializableOwnable {
_DPP_ADMIN_TEMPLATE_ = _newDPPAdminTemplate;
}
function updateDppTemplate(address _newDPPTemplate) external onlyOwner {
_DPP_TEMPLATE_ = _newDPPTemplate;
}
function addPoolByAdmin(
address creator,
address baseToken,

View File

@@ -26,9 +26,9 @@ contract DVMFactory is InitializableOwnable {
// ============ Templates ============
address public immutable _CLONE_FACTORY_;
address public immutable _DVM_TEMPLATE_;
address public immutable _DEFAULT_MAINTAINER_;
address public immutable _DEFAULT_MT_FEE_RATE_MODEL_;
address public _DVM_TEMPLATE_;
// ============ Registry ============
@@ -88,6 +88,10 @@ contract DVMFactory is InitializableOwnable {
// ============ Admin Operation Functions ============
function updateDvmTemplate(address _newDVMTemplate) external onlyOwner {
_DVM_TEMPLATE_ = _newDVMTemplate;
}
function addPoolByAdmin(
address creator,
address baseToken,

View File

@@ -16,6 +16,13 @@ interface IDODOIncentive {
function triggerIncentive(address fromToken,address toToken, address assetTo) external;
}
/**
* @title DODOIncentive
* @author DODO Breeder
*
* @notice Trade Incentive in DODO platform
*/
contract DODOIncentive is InitializableOwnable {
using SafeMath for uint256;
using SafeERC20 for IERC20;

View File

@@ -22,6 +22,7 @@ import {DecimalMath} from "../lib/DecimalMath.sol";
import {ReentrancyGuard} from "../lib/ReentrancyGuard.sol";
import {InitializableOwnable} from "../lib/InitializableOwnable.sol";
//TODO: add gas return && trade incentive && replace DODOV1Proxy02
contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable {
using SafeMath for uint256;
using UniversalERC20 for IERC20;
@@ -44,8 +45,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
address toToken,
address sender,
uint256 fromAmount,
uint256 returnAmount,
uint256 sourceFlag
uint256 returnAmount
);
// ============ Modifiers ============
@@ -139,7 +139,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
function addDVMLiquidity(
address dvmAddress,
address to,
address assetTo,
uint256 baseInAmount,
uint256 quoteInAmount,
uint256 baseMinAmount,
@@ -158,8 +158,9 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
uint256 quoteAdjustedInAmount
)
{
address _dvm = dvmAddress;
(baseAdjustedInAmount, quoteAdjustedInAmount) = _addDVMLiquidity(
dvmAddress,
_dvm,
baseInAmount,
quoteInAmount
);
@@ -167,12 +168,11 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
baseAdjustedInAmount >= baseMinAmount && quoteAdjustedInAmount >= quoteMinAmount,
"DODOV2Proxy01: deposit amount is not enough"
);
address _dvm = dvmAddress;
_deposit(msg.sender, _dvm, IDODOV2(_dvm)._BASE_TOKEN_(), baseAdjustedInAmount, flag == 1);
_deposit(msg.sender, _dvm, IDODOV2(_dvm)._QUOTE_TOKEN_(), quoteAdjustedInAmount, flag == 2);
(shares, , ) = IDODOV2(_dvm).buyShares(to);
(shares, , ) = IDODOV2(_dvm).buyShares(assetTo);
// refund dust eth
if (flag == 1 && msg.value > baseAdjustedInAmount) msg.sender.transfer(msg.value - baseAdjustedInAmount);
if (flag == 2 && msg.value > quoteAdjustedInAmount) msg.sender.transfer(msg.value - quoteAdjustedInAmount);
@@ -306,8 +306,10 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
judgeExpired(deadLine)
returns (uint256 returnAmount)
{
require(dodoPairs.length > 0, "DODOV2Proxy01: PAIRS_EMPTY");
require(minReturnAmount > 0, "DODOV2Proxy01: RETURN_AMOUNT_ZERO");
uint256 originToTokenBalance = IERC20(toToken).balanceOf(msg.sender);
IWETH(_WETH_).deposit{value: msg.value}();
IWETH(_WETH_).transfer(dodoPairs[0], msg.value);
@@ -335,8 +337,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
toToken,
assetTo,
msg.value,
returnAmount,
0
returnAmount
);
}
@@ -354,6 +355,9 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
judgeExpired(deadLine)
returns (uint256 returnAmount)
{
require(dodoPairs.length > 0, "DODOV2Proxy01: PAIRS_EMPTY");
require(minReturnAmount > 0, "DODOV2Proxy01: RETURN_AMOUNT_ZERO");
IDODOApprove(_DODO_APPROVE_).claimTokens(fromToken, msg.sender, dodoPairs[0], fromTokenAmount);
for (uint256 i = 0; i < dodoPairs.length; i++) {
@@ -381,8 +385,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
_ETH_ADDRESS_,
assetTo,
fromTokenAmount,
returnAmount,
0
returnAmount
);
}
@@ -401,6 +404,9 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
judgeExpired(deadLine)
returns (uint256 returnAmount)
{
require(dodoPairs.length > 0, "DODOV2Proxy01: PAIRS_EMPTY");
require(minReturnAmount > 0, "DODOV2Proxy01: RETURN_AMOUNT_ZERO");
uint256 originToTokenBalance = IERC20(toToken).balanceOf(msg.sender);
IDODOApprove(_DODO_APPROVE_).claimTokens(fromToken, msg.sender, dodoPairs[0], fromTokenAmount);
@@ -427,8 +433,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
toToken,
assetTo,
fromTokenAmount,
returnAmount,
0
returnAmount
);
}
@@ -436,7 +441,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
address fromToken,
address toToken,
address approveTarget,
address to,
address swapTarget,
uint256 fromTokenAmount,
uint256 minReturnAmount,
bytes memory callDataConcat,
@@ -448,8 +453,9 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
judgeExpired(deadLine)
returns (uint256 returnAmount)
{
require(minReturnAmount > 0, "DODOV2Proxy01: RETURN_AMOUNT_ZERO");
uint256 toTokenOriginBalance = IERC20(toToken).universalBalanceOf(msg.sender);
if (fromToken != _ETH_ADDRESS_) {
IDODOApprove(_DODO_APPROVE_).claimTokens(
fromToken,
@@ -460,15 +466,10 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
IERC20(fromToken).universalApproveMax(approveTarget, fromTokenAmount);
}
require(isWhiteListed[to], "DODOV2Proxy01: Not Whitelist Contract");
(bool success, ) = to.call{value: fromToken == _ETH_ADDRESS_ ? msg.value : 0}(callDataConcat);
require(isWhiteListed[swapTarget], "DODOV2Proxy01: Not Whitelist Contract");
(bool success, ) = swapTarget.call{value: fromToken == _ETH_ADDRESS_ ? msg.value : 0}(callDataConcat);
require(success, "DODOV2Proxy01: Contract Swap execution Failed");
IERC20(fromToken).universalTransfer(
msg.sender,
IERC20(fromToken).universalBalanceOf(address(this))
);
require(success, "DODOV2Proxy01: External Swap execution Failed");
IERC20(toToken).universalTransfer(
msg.sender,
@@ -483,8 +484,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
toToken,
msg.sender,
fromTokenAmount,
returnAmount,
3
returnAmount
);
}
@@ -535,7 +535,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
require(returnAmount >= minReturnAmount, "DODOV2Proxy01: Return amount is not enough");
IERC20(toToken).universalTransfer(msg.sender, returnAmount);
emit OrderHistory(fromToken, toToken, msg.sender, fromTokenAmount, returnAmount, 1);
emit OrderHistory(fromToken, toToken, msg.sender, fromTokenAmount, returnAmount);
}
function mixSwapV1(
@@ -591,7 +591,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01, ReentrancyGuard, InitializableOwnable
returnAmount = IERC20(_toToken).universalBalanceOf(msg.sender).sub(toTokenOriginBalance);
require(returnAmount >= minReturnAmount, "DODOV2Proxy01: Return amount is not enough");
emit OrderHistory(_fromToken, _toToken, msg.sender, fromTokenAmount, returnAmount, 2);
emit OrderHistory(_fromToken, _toToken, msg.sender, fromTokenAmount, returnAmount);
}
//============ CrowdPooling Functions (create & bid) ============

View File

@@ -1,6 +1,7 @@
/*
Copyright 2020 DODO ZOO.
SPDX-License-Identifier: Apache-2.0
Copyright 2020 DODO ZOO.
SPDX-License-Identifier: Apache-2.0
*/

View File

@@ -55,7 +55,7 @@ interface IDODOV2Proxy01 is IDODOV1Proxy01 {
function addDVMLiquidity(
address dvmAddress,
address to,
address assetTo,
uint256 baseInAmount,
uint256 quoteInAmount,
uint256 baseMinAmount,

View File

@@ -74,3 +74,11 @@ DODOApprove Address: 0xa128Ba44B2738A558A1fdC06d6303d52D3Cef8c1
DODOProxyV1 Address: 0x0cA2d4BC266B1ad7a0787409AD7a0331D78Eea90
Set DODOProxyV1 Owner tx: 0x35c8405b4b4dfbac83971c622f4e086dc0f850ade69da408792eb9a835a683f4
Set DODOApprove Owner And Init Set Proxy tx: 0xb381ac8a87a834a6ab8cc63064153dd2c65261e7c43e5d1a504bcae11fb42a10
====================================================
network type: kovan
Deploy time: 2021/1/6 下午6:53:44
Deploy type: Proxy
DODOApprove Address: 0xE0eE1f72c0Ce4097F204beBD3B7fF508fb26292D
DODOProxyV1 Address: 0xf63baBc984ff05374dBCF0367Eaa2333663f2262
Set DODOProxyV1 Owner tx: 0x2d00a39ad1904a34b8baa7d6a69bc634ea2bc2cff0038bec79e922b7d0687e76
Set DODOApprove Owner And Init Set Proxy tx: 0xf368e47b184b3f0db035fa7a0838eabc46e6f24d98bc44cb0b1b1b8c73e31561

View File

@@ -70,7 +70,7 @@ describe("DPP Trader", () => {
it("first buy and then sell", async () => {
// buy at R=1
await ctx.transferQuoteToDPP(trader, decimalStr("100"))
await ctx.DPP.methods.sellQuote(trader).send(ctx.sendParam(trader))
await logGas(ctx.DPP.methods.sellQuote(trader), ctx.sendParam(trader), "sellQuote - buy at R=1")
var balances = await ctx.getBalances(trader)
assert.equal(balances.traderBase, "10986174542266106307")
@@ -82,7 +82,7 @@ describe("DPP Trader", () => {
// buy at R>1
await ctx.transferQuoteToDPP(trader, decimalStr("100"))
await ctx.DPP.methods.sellQuote(trader).send(ctx.sendParam(trader))
await logGas(ctx.DPP.methods.sellQuote(trader), ctx.sendParam(trader), "sellQuote - buy at R>1")
balances = await ctx.getBalances(trader)
assert.equal(balances.traderBase, "11946772292527553373")
@@ -94,7 +94,7 @@ describe("DPP Trader", () => {
// sell at R>1 and R not change state
await ctx.transferBaseToDPP(trader, decimalStr("1"))
await ctx.DPP.methods.sellBase(trader).send(ctx.sendParam(trader))
await logGas(ctx.DPP.methods.sellBase(trader), ctx.sendParam(trader), "sellBase - sell at R>1 and R not change state")
balances = await ctx.getBalances(trader)
assert.equal(balances.traderBase, "10946772292527553373")
@@ -106,7 +106,7 @@ describe("DPP Trader", () => {
// sell at R>1 and R change state
await ctx.transferBaseToDPP(trader, decimalStr("2"))
await ctx.DPP.methods.sellBase(trader).send(ctx.sendParam(trader))
await logGas(ctx.DPP.methods.sellBase(trader), ctx.sendParam(trader), "sellBase - sell at R>1 and R change state")
balances = await ctx.getBalances(trader)
assert.equal(balances.traderBase, "8946772292527553373")
@@ -124,7 +124,7 @@ describe("DPP Trader", () => {
it("first sell and then buy", async () => {
// sell at R=1
await ctx.transferBaseToDPP(trader, decimalStr("1"))
await ctx.DPP.methods.sellBase(trader).send(ctx.sendParam(trader))
await logGas(ctx.DPP.methods.sellBase(trader), ctx.sendParam(trader), "sellBase - sell at R=1")
var balances = await ctx.getBalances(trader)
assert.equal(balances.traderBase, decimalStr("9"))
@@ -136,7 +136,7 @@ describe("DPP Trader", () => {
// buy at R>1
await ctx.transferBaseToDPP(trader, decimalStr("1"))
await ctx.DPP.methods.sellBase(trader).send(ctx.sendParam(trader))
await logGas(ctx.DPP.methods.sellBase(trader), ctx.sendParam(trader), "sellBase - buy at R>1")
balances = await ctx.getBalances(trader)
assert.equal(balances.traderBase, decimalStr("8"))
@@ -148,7 +148,7 @@ describe("DPP Trader", () => {
// sell at R>1 and R not change state
await ctx.transferQuoteToDPP(trader, decimalStr("100"))
await ctx.DPP.methods.sellQuote(trader).send(ctx.sendParam(trader))
await logGas(ctx.DPP.methods.sellQuote(trader), ctx.sendParam(trader), "sell at R>1 and R not change state")
balances = await ctx.getBalances(trader)
assert.equal(balances.traderBase, "9034218146510053391")
@@ -160,7 +160,7 @@ describe("DPP Trader", () => {
// sell at R>1 and R change state
await ctx.transferQuoteToDPP(trader, decimalStr("200"))
await ctx.DPP.methods.sellQuote(trader).send(ctx.sendParam(trader))
await logGas(ctx.DPP.methods.sellQuote(trader), ctx.sendParam(trader), "sell at R>1 and R change state")
balances = await ctx.getBalances(trader)
assert.equal(balances.traderBase, "11026382738483432812")

View File

@@ -155,11 +155,11 @@ describe("DODOProxyV2.0", () => {
// );
// });
it("resetDPP", async () => {
it.only("resetDPP", async () => {
var beforeState = await DPP_DODO_USDT.methods.getPMMState().call();
assert.equal(beforeState.K, config.k);
assert.equal(beforeState.B0, decimalStr("100000"));
assert.equal(beforeState.Q0, mweiStr("20000"));
assert.equal(beforeState.B, decimalStr("100000"));
assert.equal(beforeState.Q, mweiStr("20000"));
await logGas(await ctx.DODOProxyV2.methods.resetDODOPrivatePool(
dpp_DODO_USDT,
[config.lpFeeRate, mweiStr("0.2"), decimalStr("0.2")],
@@ -171,8 +171,8 @@ describe("DODOProxyV2.0", () => {
), ctx.sendParam(project), "resetDPP");
var afterState = await DPP_DODO_USDT.methods.getPMMState().call();
assert.equal(afterState.K, decimalStr("0.2"));
assert.equal(afterState.B0, decimalStr("101000"));
assert.equal(afterState.Q0, mweiStr("21000"));
assert.equal(afterState.B, decimalStr("101000"));
assert.equal(afterState.Q, mweiStr("21000"));
});