From 8a4da4b5253e0efb7bfec7afb5944f6ac7032d2c Mon Sep 17 00:00:00 2001 From: owen05 Date: Tue, 24 Nov 2020 17:25:10 +0800 Subject: [PATCH] add dvm && dpp admin control --- contracts/DODOPrivatePool/impl/DPP.sol | 2 +- contracts/DODOPrivatePool/impl/DPPAdmin.sol | 58 +++++++++++++++++++ contracts/DODOPrivatePool/impl/DPPStorage.sol | 1 + contracts/DODOPrivatePool/intf/IDPP.sol | 21 +++++++ contracts/DODOPrivatePool/intf/IDPPAdmin.sol | 13 +++++ contracts/DODOVendingMachine/impl/DVM.sol | 6 ++ .../DODOVendingMachine/impl/DVMAdmin.sol | 50 ++++++++++++++++ .../DODOVendingMachine/impl/DVMStorage.sol | 3 + contracts/DODOVendingMachine/intf/IDVM.sol | 17 ++++++ .../DODOVendingMachine/intf/IDVMAdmin.sol | 13 +++++ contracts/Factory/DPPFactory.sol | 44 ++++++++------ contracts/Factory/DVMFactory.sol | 27 ++++++--- contracts/SmartRoute/DODOV2Proxy01.sol | 13 +++-- contracts/intf/IDODOV2.sol | 14 +++-- contracts/intf/IDODOV2Proxy01.sol | 6 +- test/utils/Contracts.ts | 2 + test/utils/ProxyContext.ts | 4 ++ 17 files changed, 253 insertions(+), 41 deletions(-) create mode 100644 contracts/DODOPrivatePool/impl/DPPAdmin.sol create mode 100644 contracts/DODOPrivatePool/intf/IDPPAdmin.sol create mode 100644 contracts/DODOVendingMachine/impl/DVMAdmin.sol create mode 100644 contracts/DODOVendingMachine/intf/IDVMAdmin.sol diff --git a/contracts/DODOPrivatePool/impl/DPP.sol b/contracts/DODOPrivatePool/impl/DPP.sol index 53ded34..5c94b59 100644 --- a/contracts/DODOPrivatePool/impl/DPP.sol +++ b/contracts/DODOPrivatePool/impl/DPP.sol @@ -15,7 +15,6 @@ import {IERC20} from "../../intf/IERC20.sol"; import {DPPTrader} from "./DPPTrader.sol"; contract DPP is DPPTrader { - constructor() public { _FACTORY_ = msg.sender; } @@ -34,6 +33,7 @@ contract DPP is DPPTrader { ) external { require(msg.sender == _FACTORY_, 'INIT FORBIDDEN'); initOwner(owner); + _ADMIN_ = owner; _MAINTAINER_ = maintainer; _BASE_TOKEN_ = IERC20(baseTokenAddress); _QUOTE_TOKEN_ = IERC20(quoteTokenAddress); diff --git a/contracts/DODOPrivatePool/impl/DPPAdmin.sol b/contracts/DODOPrivatePool/impl/DPPAdmin.sol new file mode 100644 index 0000000..805ea83 --- /dev/null +++ b/contracts/DODOPrivatePool/impl/DPPAdmin.sol @@ -0,0 +1,58 @@ +/* + + Copyright 2020 DODO ZOO. + SPDX-License-Identifier: Apache-2.0 + +*/ + +pragma solidity 0.6.9; +pragma experimental ABIEncoderV2; + +import {IDPP} from "../intf/IDPP.sol"; +import {InitializableOwnable} from "../../lib/InitializableOwnable.sol"; + +contract DPPAdmin is InitializableOwnable { + + address public dpp; + + function init(address owner, address _dpp) external { + initOwner(owner); + dpp = _dpp; + } + + function setLpFeeRateModel(address newLpFeeRateModel) external onlyOwner { + IDPP(dpp).setLpFeeRateModel(newLpFeeRateModel); + } + + function setMtFeeRateModel(address newMtFeeRateModel) external onlyOwner { + IDPP(dpp).setMtFeeRateModel(newMtFeeRateModel); + } + + 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 setISource(address newISource) external onlyOwner { + IDPP(dpp).setISource(newISource); + } + + function setKSource(address newKSource) external onlyOwner { + IDPP(dpp).setKSource(newKSource); + } + + function setBuy(bool open) external onlyOwner { + IDPP(dpp).setBuy(open); + } + + function setSell(bool open) external onlyOwner { + IDPP(dpp).setSell(open); + } +} diff --git a/contracts/DODOPrivatePool/impl/DPPStorage.sol b/contracts/DODOPrivatePool/impl/DPPStorage.sol index 2f51e33..21562af 100644 --- a/contracts/DODOPrivatePool/impl/DPPStorage.sol +++ b/contracts/DODOPrivatePool/impl/DPPStorage.sol @@ -28,6 +28,7 @@ contract DPPStorage is InitializableOwnable, ReentrancyGuard { using SafeMath for uint256; address public _FACTORY_; + address public _ADMIN_; // ============ Variables for Control ============ diff --git a/contracts/DODOPrivatePool/intf/IDPP.sol b/contracts/DODOPrivatePool/intf/IDPP.sol index 41df191..c42b5d2 100644 --- a/contracts/DODOPrivatePool/intf/IDPP.sol +++ b/contracts/DODOPrivatePool/intf/IDPP.sol @@ -21,4 +21,25 @@ interface IDPP { address gasPriceSource, address tradePermissionManager ) external; + + //=========== admin ========== + function setLpFeeRateModel(address newLpFeeRateModel) external; + + function setMtFeeRateModel(address newMtFeeRateModel) external; + + function setTradePermissionManager(address newTradePermissionManager) external; + + function setMaintainer(address newMaintainer) external; + + function setGasPriceSource(address newGasPriceLimitSource) external; + + function setISource(address newISource) external; + + function setKSource(address newKSource) external; + + function setBuy(bool open) external; + + function setSell(bool open) external; + //============================== + } diff --git a/contracts/DODOPrivatePool/intf/IDPPAdmin.sol b/contracts/DODOPrivatePool/intf/IDPPAdmin.sol new file mode 100644 index 0000000..046269a --- /dev/null +++ b/contracts/DODOPrivatePool/intf/IDPPAdmin.sol @@ -0,0 +1,13 @@ +/* + + Copyright 2020 DODO ZOO. + SPDX-License-Identifier: Apache-2.0 + +*/ + +pragma solidity 0.6.9; +pragma experimental ABIEncoderV2; + +interface IDPPAdmin { + function init(address owner, address _dpp) external; +} \ No newline at end of file diff --git a/contracts/DODOVendingMachine/impl/DVM.sol b/contracts/DODOVendingMachine/impl/DVM.sol index 64a7e93..1bad01b 100644 --- a/contracts/DODOVendingMachine/impl/DVM.sol +++ b/contracts/DODOVendingMachine/impl/DVM.sol @@ -17,6 +17,10 @@ import {DVMFunding} from "./DVMFunding.sol"; import {DVMVault} from "./DVMVault.sol"; contract DVM is DVMTrader, DVMFunding { + constructor() public { + _FACTORY_ = msg.sender; + } + function init( address owner, address maintainer, @@ -29,7 +33,9 @@ contract DVM is DVMTrader, DVMFunding { uint256 i, uint256 k ) external { + require(msg.sender == _FACTORY_, 'INIT FORBIDDEN'); initOwner(owner); + _ADMIN_ = owner; _BASE_TOKEN_ = IERC20(baseTokenAddress); _QUOTE_TOKEN_ = IERC20(quoteTokenAddress); _LP_FEE_RATE_MODEL_ = IFeeRateModel(lpFeeRateModel); diff --git a/contracts/DODOVendingMachine/impl/DVMAdmin.sol b/contracts/DODOVendingMachine/impl/DVMAdmin.sol new file mode 100644 index 0000000..66203bb --- /dev/null +++ b/contracts/DODOVendingMachine/impl/DVMAdmin.sol @@ -0,0 +1,50 @@ +/* + + Copyright 2020 DODO ZOO. + SPDX-License-Identifier: Apache-2.0 + +*/ + +pragma solidity 0.6.9; +pragma experimental ABIEncoderV2; + +import {IDVM} from "../intf/IDVM.sol"; +import {InitializableOwnable} from "../../lib/InitializableOwnable.sol"; + +contract DVMAdmin is InitializableOwnable { + + address public dvm; + + function init(address owner, address _dvm) external { + initOwner(owner); + dvm = _dvm; + } + + function setLpFeeRateModel(address newLpFeeRateModel) external onlyOwner { + IDVM(dvm).setLpFeeRateModel(newLpFeeRateModel); + } + + function setMtFeeRateModel(address newMtFeeRateModel) external onlyOwner { + IDVM(dvm).setMtFeeRateModel(newMtFeeRateModel); + } + + function setTradePermissionManager(address newTradePermissionManager) external onlyOwner { + IDVM(dvm).setTradePermissionManager(newTradePermissionManager); + } + + function setMaintainer(address newMaintainer) external onlyOwner { + IDVM(dvm).setMaintainer(newMaintainer); + } + + function setGasPriceSource(address newGasPriceLimitSource) external onlyOwner { + IDVM(dvm).setGasPriceSource(newGasPriceLimitSource); + } + + function setBuy(bool open) external onlyOwner { + IDVM(dvm).setBuy(open); + } + + function setSell(bool open) external onlyOwner { + IDVM(dvm).setSell(open); + } +} diff --git a/contracts/DODOVendingMachine/impl/DVMStorage.sol b/contracts/DODOVendingMachine/impl/DVMStorage.sol index 0bfb276..3be6516 100644 --- a/contracts/DODOVendingMachine/impl/DVMStorage.sol +++ b/contracts/DODOVendingMachine/impl/DVMStorage.sol @@ -21,6 +21,9 @@ import {IERC20} from "../../intf/IERC20.sol"; contract DVMStorage is InitializableOwnable, ReentrancyGuard { using SafeMath for uint256; + address public _FACTORY_; + address public _ADMIN_; + // ============ Variables for Control ============ IExternalValue public _GAS_PRICE_LIMIT_; diff --git a/contracts/DODOVendingMachine/intf/IDVM.sol b/contracts/DODOVendingMachine/intf/IDVM.sol index 1e9afd8..b8225af 100644 --- a/contracts/DODOVendingMachine/intf/IDVM.sol +++ b/contracts/DODOVendingMachine/intf/IDVM.sol @@ -33,4 +33,21 @@ interface IDVM { function sellQuote(address to) external returns (uint256); function buyShares(address to) external returns (uint256); + + + //=========== admin ========== + function setLpFeeRateModel(address newLpFeeRateModel) external; + + function setMtFeeRateModel(address newMtFeeRateModel) external; + + function setTradePermissionManager(address newTradePermissionManager) external; + + function setMaintainer(address newMaintainer) external; + + function setGasPriceSource(address newGasPriceLimitSource) external; + + function setBuy(bool open) external; + + function setSell(bool open) external; + //============================== } diff --git a/contracts/DODOVendingMachine/intf/IDVMAdmin.sol b/contracts/DODOVendingMachine/intf/IDVMAdmin.sol new file mode 100644 index 0000000..8f24680 --- /dev/null +++ b/contracts/DODOVendingMachine/intf/IDVMAdmin.sol @@ -0,0 +1,13 @@ +/* + + Copyright 2020 DODO ZOO. + SPDX-License-Identifier: Apache-2.0 + +*/ + +pragma solidity 0.6.9; +pragma experimental ABIEncoderV2; + +interface IDVMAdmin { + function init(address owner, address _dvm) external; +} \ No newline at end of file diff --git a/contracts/Factory/DPPFactory.sol b/contracts/Factory/DPPFactory.sol index 396c785..c376696 100644 --- a/contracts/Factory/DPPFactory.sol +++ b/contracts/Factory/DPPFactory.sol @@ -13,24 +13,23 @@ import {ICloneFactory} from "../lib/CloneFactory.sol"; import {IFeeRateModel} from "../lib/FeeRateModel.sol"; import {IExternalValue} from "../lib/ExternalValue.sol"; import {IDPP} from "../DODOPrivatePool/intf/IDPP.sol"; +import {IDPPAdmin} from "../DODOPrivatePool/intf/IDPPAdmin.sol"; import {IPermissionManager} from "../lib/PermissionManager.sol"; contract DPPFactory is Ownable { address public _CLONE_FACTORY_; address public _DPP_TEMPLATE_; + address public _DPP_ADMIN_TEMPLATE_; address public _FEE_RATE_MODEL_TEMPLATE_; address public _PERMISSION_MANAGER_TEMPLATE_; address public _VALUE_SOURCE_; - //TODO: 平台修改tag的权限 + //TODO: 平台修改tag的权限 && 池子标签类型 struct DPPInfo { address creator; uint256 createTimeStamp; - //TODO:池子类型 } - //TODO:tags filter event - // base -> quote -> DPP address list mapping(address => mapping(address => address[])) _REGISTRY_; // token0 -> token1 -> DPP address list @@ -43,12 +42,14 @@ contract DPPFactory is Ownable { constructor( address cloneFactory, address dppTemplate, + address dppAdminTemplate, address defautFeeRateModelTemplate, address defaultPermissionManagerTemplate, address defaultExternalValueTemplate ) public { _CLONE_FACTORY_ = cloneFactory; _DPP_TEMPLATE_ = dppTemplate; + _DPP_ADMIN_TEMPLATE_ = dppAdminTemplate; _FEE_RATE_MODEL_TEMPLATE_ = defautFeeRateModelTemplate; _PERMISSION_MANAGER_TEMPLATE_ = defaultPermissionManagerTemplate; _VALUE_SOURCE_ = defaultExternalValueTemplate; @@ -57,25 +58,26 @@ contract DPPFactory is Ownable { function createDODOPrivatePool( address baseToken, address quoteToken, - //TODO: tag 粒度 - address[] memory valueTemplates, //feeRateAddr,mtRateAddr,kAddr,iAddr - uint256[] memory values // feeRate,mtRate,k,i + uint256 lpFeeRate, + uint256 mtFeeRate, + uint256 i, + uint256 k ) external returns (address newPrivatePool) { - require(valueTemplates.length == 4 && values.length == 4, "Incorrect number of initialization parameters"); (address token0, address token1) = baseToken < quoteToken ? (baseToken, quoteToken) : (quoteToken, baseToken); newPrivatePool = ICloneFactory(_CLONE_FACTORY_).clone(_DPP_TEMPLATE_); IDPP(newPrivatePool).init( - msg.sender, + _createDPPAdminModel(msg.sender,newPrivatePool), msg.sender, baseToken, quoteToken, - (valueTemplates[0] == address(0) ? _createFeeRateModel(newPrivatePool, values[0]) : valueTemplates[0]), - (valueTemplates[1] == address(0) ? _createFeeRateModel(newPrivatePool, values[1]) : valueTemplates[1]), - (valueTemplates[2] == address(0) ? _createExternalValueModel(newPrivatePool, values[2]) : valueTemplates[2]), - (valueTemplates[3] == address(0) ? _createExternalValueModel(newPrivatePool, values[3]) : valueTemplates[3]), - //hardcode + _createFeeRateModel(newPrivatePool, lpFeeRate), + _createFeeRateModel(newPrivatePool, mtFeeRate), + _createExternalValueModel(newPrivatePool, k), + _createExternalValueModel(newPrivatePool, i), + //TODO:hardcode _createExternalValueModel(msg.sender, 10**22), + //TODO:讨论 _createPermissionManager(msg.sender) ); @@ -88,24 +90,30 @@ contract DPPFactory is Ownable { createTimeStamp: block.timestamp }) ); - return newPrivatePool; } function _createFeeRateModel(address owner, uint256 feeRate) internal returns (address feeRateModel){ feeRateModel = ICloneFactory(_CLONE_FACTORY_).clone(_FEE_RATE_MODEL_TEMPLATE_); IFeeRateModel(feeRateModel).init(owner, feeRate); - return feeRateModel; } function _createPermissionManager(address owner) internal returns (address permissionManager) { permissionManager = ICloneFactory(_CLONE_FACTORY_).clone(_PERMISSION_MANAGER_TEMPLATE_); IPermissionManager(permissionManager).initOwner(owner); - return permissionManager; } function _createExternalValueModel(address owner, uint256 value) internal returns (address valueModel) { valueModel = ICloneFactory(_CLONE_FACTORY_).clone(_VALUE_SOURCE_); IExternalValue(valueModel).init(owner, value); - return valueModel; + } + + function _createDPPAdminModel(address owner, address dpp) internal returns (address adminModel) { + adminModel = ICloneFactory(_CLONE_FACTORY_).clone(_DPP_ADMIN_TEMPLATE_); + IDPPAdmin(adminModel).init(owner,dpp); + } + + //TODO: 讨论 or 升级整个Factory + function updateAdminTemplate(address _newDPPAdminTemplate) external onlyOwner { + _DPP_ADMIN_TEMPLATE_ = _newDPPAdminTemplate; } } diff --git a/contracts/Factory/DVMFactory.sol b/contracts/Factory/DVMFactory.sol index 4153f85..24fa89a 100644 --- a/contracts/Factory/DVMFactory.sol +++ b/contracts/Factory/DVMFactory.sol @@ -12,19 +12,21 @@ import {Ownable} from "../lib/Ownable.sol"; import {ICloneFactory} from "../lib/CloneFactory.sol"; import {IConstFeeRateModel} from "../lib/ConstFeeRateModel.sol"; import {IDVM} from "../DODOVendingMachine/intf/IDVM.sol"; +import {IDVMAdmin} from "../DODOVendingMachine/intf/IDVMAdmin.sol"; import {IPermissionManager} from "../lib/PermissionManager.sol"; contract DVMFactory is Ownable { address public _CLONE_FACTORY_; address public _DVM_TEMPLATE_; + address public _DVM_ADMIN_TEMPLATE_; address public _FEE_RATE_MODEL_TEMPLATE_; address public _PERMISSION_MANAGER_TEMPLATE_; address public _DEFAULT_GAS_PRICE_SOURCE_; + //TODO: 平台修改tag的权限 && 池子标签类型 struct DVMInfo { address creator; uint256 createTimeStamp; - //TODO:other tags } // base -> quote -> DVM address list @@ -39,12 +41,14 @@ contract DVMFactory is Ownable { constructor( address cloneFactory, address dvmTemplate, + address dvmAdminTemplate, address feeRateModelTemplate, address permissionManagerTemplate, address defaultGasPriceSource ) public { _CLONE_FACTORY_ = cloneFactory; _DVM_TEMPLATE_ = dvmTemplate; + _DVM_ADMIN_TEMPLATE_ = dvmAdminTemplate; _FEE_RATE_MODEL_TEMPLATE_ = feeRateModelTemplate; _PERMISSION_MANAGER_TEMPLATE_ = permissionManagerTemplate; _DEFAULT_GAS_PRICE_SOURCE_ = defaultGasPriceSource; @@ -62,13 +66,12 @@ contract DVMFactory is Ownable { newVendingMachine = ICloneFactory(_CLONE_FACTORY_).clone(_DVM_TEMPLATE_); IDVM(newVendingMachine).init( - msg.sender, + _createDVMAdminModel(msg.sender,newVendingMachine), msg.sender, baseToken, quoteToken, - //TODO:标准库 统一的feeRateModel,owner归平台控制 - _createConstFeeRateModel(newVendingMachine, lpFeeRate), - _createConstFeeRateModel(newVendingMachine, mtFeeRate), + _createFeeRateModel(newVendingMachine, lpFeeRate), + _createFeeRateModel(newVendingMachine, mtFeeRate), _createPermissionManager(msg.sender), _DEFAULT_GAS_PRICE_SOURCE_, i, @@ -87,16 +90,24 @@ contract DVMFactory is Ownable { return newVendingMachine; } - function _createConstFeeRateModel(address owner, uint256 feeRate) internal returns (address feeRateModel) { + function _createFeeRateModel(address owner, uint256 feeRate) internal returns (address feeRateModel) { feeRateModel = ICloneFactory(_CLONE_FACTORY_).clone(_FEE_RATE_MODEL_TEMPLATE_); IConstFeeRateModel(feeRateModel).init(owner, feeRate); - return feeRateModel; } function _createPermissionManager(address owner) internal returns (address permissionManager) { permissionManager = ICloneFactory(_CLONE_FACTORY_).clone(_PERMISSION_MANAGER_TEMPLATE_); IPermissionManager(permissionManager).initOwner(owner); - return permissionManager; + } + + function _createDVMAdminModel(address owner, address dvm) internal returns (address adminModel) { + adminModel = ICloneFactory(_CLONE_FACTORY_).clone(_DVM_ADMIN_TEMPLATE_); + IDVMAdmin(adminModel).init(owner,dvm); + } + + //TODO: 讨论 or 升级整个Factory + function updateAdminTemplate(address _newDVMAdminTemplate) external onlyOwner { + _DVM_ADMIN_TEMPLATE_ = _newDVMAdminTemplate; } function getVendingMachine(address baseToken, address quoteToken) diff --git a/contracts/SmartRoute/DODOV2Proxy01.sol b/contracts/SmartRoute/DODOV2Proxy01.sol index dbb36d4..ddd0f4e 100644 --- a/contracts/SmartRoute/DODOV2Proxy01.sol +++ b/contracts/SmartRoute/DODOV2Proxy01.sol @@ -130,7 +130,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01 { require(baseActualInAmount >= baseMinAmount && quoteActualInAmount >= quoteMinAmount, "DODOV2Proxy01: deposit amount is not enough"); } - //TODO:ETH + //TODO:ETH 构造data function removeDVMLiquidity( address DVMAddress, address to, @@ -140,8 +140,7 @@ contract DODOV2Proxy01 is IDODOV2Proxy01 { uint256 deadline ) external virtual override payable judgeExpired(deadline) returns (uint256 baseOutAmount,uint256 quoteOutAmount) { require(shares > 0, "DODOV2Proxy01: Insufficient_Liquidity"); - IDODOV2(smartApprove).claimTokens(DVMAddress, msg.sender, DVMAddress, shares); - (baseOutAmount,quoteOutAmount) = IDODOV2(DVMAddress).sellShares(to); + (baseOutAmount,quoteOutAmount) = IDODOV2(DVMAddress).sellShares(to, shares, ""); require(baseOutAmount >= baseOutMinAmount && quoteOutAmount >= quoteOutMinAmount,"DODOV2Proxy01: withdraw amount is not enough"); } @@ -151,11 +150,13 @@ contract DODOV2Proxy01 is IDODOV2Proxy01 { address quoteToken, uint256 baseInAmount, uint256 quoteInAmount, - address[] memory valueTemplates, //feeRateAddr,mtRateAddr,kAddr,iAddr - uint256[] memory values, // feeRate,mtRate,k,i + uint256 lpFeeRate, + uint256 mtFeeRate, + uint256 i, + uint256 k, uint256 deadline ) external virtual override payable judgeExpired(deadline) returns (address newPrivatePool) { - newPrivatePool = IDODOV2(dppFactory).createDODOPrivatePool(baseToken,quoteToken,valueTemplates,values); + newPrivatePool = IDODOV2(dppFactory).createDODOPrivatePool(baseToken, quoteToken, lpFeeRate, mtFeeRate, i, k); if(baseInAmount > 0) IDODOV2(smartApprove).claimTokens(baseToken, msg.sender, newPrivatePool, baseInAmount); if(quoteInAmount > 0) diff --git a/contracts/intf/IDODOV2.sol b/contracts/intf/IDODOV2.sol index fdd58d2..c2f7ee3 100644 --- a/contracts/intf/IDODOV2.sol +++ b/contracts/intf/IDODOV2.sol @@ -18,10 +18,6 @@ interface IDODOV2 { function sellQuote(address to) external returns (uint256 receiveBaseAmount); - function buyShares(address to) external returns (uint256,uint256,uint256); - - function sellShares(address to) external returns (uint256,uint256); - function getVaultReserve() external view returns (uint256 baseReserve, uint256 quoteReserve); function _BASE_TOKEN_() external returns (address); @@ -39,6 +35,10 @@ interface IDODOV2 { uint256 k ) external returns (address newVendingMachine); + function buyShares(address to) external returns (uint256,uint256,uint256); + + function sellShares(address to, uint256 amount, bytes calldata data) external returns (uint256,uint256); + //========== DODOPrivatePool =========== function initTargetAndReserve() external; @@ -46,8 +46,10 @@ interface IDODOV2 { function createDODOPrivatePool( address baseToken, address quoteToken, - address[] memory valueTemplates, //feeRateAddr,mtRateAddr,kAddr,iAddr - uint256[] memory values //feeRate,mtRate,k,i + uint256 lpFeeRate, + uint256 mtFeeRate, + uint256 i, + uint256 k ) external returns (address newPrivatePool); function reset( diff --git a/contracts/intf/IDODOV2Proxy01.sol b/contracts/intf/IDODOV2Proxy01.sol index 7fad30d..e740431 100644 --- a/contracts/intf/IDODOV2Proxy01.sol +++ b/contracts/intf/IDODOV2Proxy01.sol @@ -74,8 +74,10 @@ interface IDODOV2Proxy01 { address quoteToken, uint256 baseInAmount, uint256 quoteInAmount, - address[] memory valueTemplates, //feeRateAddr,mtRateAddr,kAddr,iAddr - uint256[] memory values, // feeRate,mtRate,k,i + uint256 lpFeeRate, + uint256 mtFeeRate, + uint256 i, + uint256 k, uint256 deadline ) external payable returns (address newPrivatePool); diff --git a/test/utils/Contracts.ts b/test/utils/Contracts.ts index d66d49f..1236a82 100644 --- a/test/utils/Contracts.ts +++ b/test/utils/Contracts.ts @@ -41,6 +41,8 @@ export const DPP_NAME = "DPP" export const DPP_FACTORY_NAME = "DPPFactory" export const SMART_APPROVE = "SmartApprove" export const DODO_SELL_HELPER = "DODOSellHelper" +export const DVM_ADMIN_NAME = "DVMAdmin" +export const DPP_ADMIN_NAME = "DPPAdmin" interface ContractJson { abi: any; diff --git a/test/utils/ProxyContext.ts b/test/utils/ProxyContext.ts index f276df1..945ca5d 100644 --- a/test/utils/ProxyContext.ts +++ b/test/utils/ProxyContext.ts @@ -52,6 +52,8 @@ export class ProxyContext { ); var dvmTemplate = await contracts.newContract(contracts.DVM_NAME) var dppTemplate = await contracts.newContract(contracts.DPP_NAME) + var dvmAdminTemplate = await contracts.newContract(contracts.DVM_ADMIN_NAME) + var dppAdminTemplate = await contracts.newContract(contracts.DPP_ADMIN_NAME) var feeRateModelTemplate = await contracts.newContract(contracts.FEE_RATE_MODEL_NAME) var permissionManagerTemplate = await contracts.newContract(contracts.PERMISSION_MANAGER_NAME) var vauleSource = await contracts.newContract(contracts.EXTERNAL_VALUE_NAME) @@ -60,6 +62,7 @@ export class ProxyContext { [ cloneFactory.options.address, dvmTemplate.options.address, + dvmAdminTemplate.options.address, feeRateModelTemplate.options.address, permissionManagerTemplate.options.address, vauleSource.options.address @@ -70,6 +73,7 @@ export class ProxyContext { [ cloneFactory.options.address, dppTemplate.options.address, + dppAdminTemplate.options.address, feeRateModelTemplate.options.address, permissionManagerTemplate.options.address, vauleSource.options.address