update factory && kovan deploy
This commit is contained in:
@@ -25,6 +25,15 @@ interface IDVMFactory {
|
||||
uint256 i,
|
||||
uint256 k
|
||||
) external returns (address newVendingMachine);
|
||||
|
||||
function createUnOwnedDODOVendingMachine(
|
||||
address creator,
|
||||
address baseToken,
|
||||
address quoteToken,
|
||||
uint256 lpFeeRate,
|
||||
uint256 i,
|
||||
uint256 k
|
||||
) external returns (address newVendingMachine);
|
||||
}
|
||||
|
||||
contract DVMFactory is InitializableOwnable {
|
||||
@@ -34,8 +43,14 @@ contract DVMFactory is InitializableOwnable {
|
||||
address public immutable _DVM_TEMPLATE_;
|
||||
address public immutable _FEE_RATE_MODEL_TEMPLATE_;
|
||||
address public immutable _PERMISSION_MANAGER_TEMPLATE_;
|
||||
address public immutable _DEFAULT_GAS_PRICE_SOURCE_;
|
||||
address public _DVM_ADMIN_TEMPLATE_;
|
||||
|
||||
address public immutable _DEFAULT_MAINTAINER_;
|
||||
address public immutable _DEFAULT_MT_FEE_RATE_MODEL_;
|
||||
address public immutable _DEFAULT_PERMISSION_MANAGER_;
|
||||
address public immutable _DEFAULT_GAS_PRICE_SOURCE_;
|
||||
|
||||
address internal constant _EMPTY_ = 0x0000000000000000000000000000000000000000;
|
||||
|
||||
// ============ Registry ============
|
||||
|
||||
@@ -53,6 +68,8 @@ contract DVMFactory is InitializableOwnable {
|
||||
address dvm
|
||||
);
|
||||
|
||||
event RemoveDVM(address dvm);
|
||||
|
||||
// ============ Functions ============
|
||||
|
||||
constructor(
|
||||
@@ -61,13 +78,20 @@ contract DVMFactory is InitializableOwnable {
|
||||
address dvmAdminTemplate,
|
||||
address feeRateModelTemplate,
|
||||
address permissionManagerTemplate,
|
||||
address defaultGasPriceSource
|
||||
address defaultGasPriceSource,
|
||||
address defaultMaintainer,
|
||||
address defaultMtFeeRateModel,
|
||||
address defaultPermissionManager
|
||||
) public {
|
||||
_CLONE_FACTORY_ = cloneFactory;
|
||||
_DVM_TEMPLATE_ = dvmTemplate;
|
||||
_DVM_ADMIN_TEMPLATE_ = dvmAdminTemplate;
|
||||
_FEE_RATE_MODEL_TEMPLATE_ = feeRateModelTemplate;
|
||||
_PERMISSION_MANAGER_TEMPLATE_ = permissionManagerTemplate;
|
||||
|
||||
_DEFAULT_MAINTAINER_ = defaultMaintainer;
|
||||
_DEFAULT_MT_FEE_RATE_MODEL_ = defaultMtFeeRateModel;
|
||||
_DEFAULT_PERMISSION_MANAGER_ = defaultPermissionManager;
|
||||
_DEFAULT_GAS_PRICE_SOURCE_ = defaultGasPriceSource;
|
||||
}
|
||||
|
||||
@@ -101,6 +125,36 @@ contract DVMFactory is InitializableOwnable {
|
||||
emit NewDVM(baseToken, quoteToken, creator, newVendingMachine);
|
||||
}
|
||||
|
||||
|
||||
function createUnOwnedDODOVendingMachine(
|
||||
address creator,
|
||||
address baseToken,
|
||||
address quoteToken,
|
||||
uint256 lpFeeRate,
|
||||
uint256 i,
|
||||
uint256 k
|
||||
) external returns (address newVendingMachine) {
|
||||
newVendingMachine = ICloneFactory(_CLONE_FACTORY_).clone(_DVM_TEMPLATE_);
|
||||
{
|
||||
IDVM(newVendingMachine).init(
|
||||
_EMPTY_,
|
||||
_DEFAULT_MAINTAINER_,
|
||||
baseToken,
|
||||
quoteToken,
|
||||
_createFeeRateModel(_EMPTY_, lpFeeRate),
|
||||
_DEFAULT_MT_FEE_RATE_MODEL_,
|
||||
_DEFAULT_PERMISSION_MANAGER_,
|
||||
_DEFAULT_GAS_PRICE_SOURCE_,
|
||||
i,
|
||||
k
|
||||
);
|
||||
}
|
||||
_REGISTRY_[baseToken][quoteToken].push(newVendingMachine);
|
||||
_USER_REGISTRY_[creator].push(newVendingMachine);
|
||||
emit NewDVM(baseToken, quoteToken, creator, newVendingMachine);
|
||||
}
|
||||
|
||||
|
||||
function _createFeeRateModel(address owner, uint256 feeRate)
|
||||
internal
|
||||
returns (address feeRateModel)
|
||||
@@ -122,10 +176,49 @@ contract DVMFactory is InitializableOwnable {
|
||||
IDVMAdmin(adminModel).init(owner, dvm);
|
||||
}
|
||||
|
||||
// ============ Admin Operation Functions ============
|
||||
function updateAdminTemplate(address _newDVMAdminTemplate) external onlyOwner {
|
||||
_DVM_ADMIN_TEMPLATE_ = _newDVMAdminTemplate;
|
||||
}
|
||||
|
||||
function addPoolByAdmin(
|
||||
address creator,
|
||||
address baseToken,
|
||||
address quoteToken,
|
||||
address pool
|
||||
) external onlyOwner {
|
||||
_REGISTRY_[baseToken][quoteToken].push(pool);
|
||||
_USER_REGISTRY_[creator].push(pool);
|
||||
emit NewDVM(baseToken, quoteToken, creator, pool);
|
||||
}
|
||||
|
||||
function removePoolByAdmin(
|
||||
address creator,
|
||||
address baseToken,
|
||||
address quoteToken,
|
||||
address pool
|
||||
) external onlyOwner {
|
||||
address[] memory registryList = _REGISTRY_[baseToken][quoteToken];
|
||||
for (uint256 i = 0; i < registryList.length; i++) {
|
||||
if (registryList[i] == pool) {
|
||||
registryList[i] = registryList[registryList.length - 1];
|
||||
break;
|
||||
}
|
||||
}
|
||||
_REGISTRY_[baseToken][quoteToken] = registryList;
|
||||
_REGISTRY_[baseToken][quoteToken].pop();
|
||||
address[] memory userRegistryList = _USER_REGISTRY_[creator];
|
||||
for (uint256 i = 0; i < userRegistryList.length; i++) {
|
||||
if (userRegistryList[i] == pool) {
|
||||
userRegistryList[i] = userRegistryList[userRegistryList.length - 1];
|
||||
break;
|
||||
}
|
||||
}
|
||||
_USER_REGISTRY_[creator] = userRegistryList;
|
||||
_USER_REGISTRY_[creator].pop();
|
||||
emit RemoveDVM(pool);
|
||||
}
|
||||
|
||||
// ============ View Functions ============
|
||||
|
||||
function getVendingMachine(address baseToken, address quoteToken)
|
||||
|
||||
Reference in New Issue
Block a user