Files
dodo-contractV2/contracts/Factory/DVMFactory.sol

92 lines
2.8 KiB
Solidity
Raw Normal View History

2020-11-05 00:26:45 +08:00
/*
Copyright 2020 DODO ZOO.
SPDX-License-Identifier: Apache-2.0
*/
pragma solidity 0.6.9;
pragma experimental ABIEncoderV2;
import {Ownable} from "../lib/Ownable.sol";
import {ICloneFactory} from "../lib/CloneFactory.sol";
import {IConstFeeRateModel} from "../lib/ConstFeeRateModel.sol";
2020-11-20 18:58:35 +08:00
import {IDVM} from "../DODOVendingMachine/intf/IDVM.sol";
2020-11-05 00:26:45 +08:00
import {IPermissionManager} from "../lib/PermissionManager.sol";
contract DVMFactory is Ownable {
address public _CLONE_FACTORY_;
address public _DVM_TEMPLATE_;
address public _FEE_RATE_MODEL_TEMPLATE_;
address public _PERMISSION_MANAGER_TEMPLATE_;
2020-11-11 16:42:00 +08:00
address public _DEFAULT_GAS_PRICE_SOURCE_;
2020-11-05 00:26:45 +08:00
// base -> quote -> DVM address list
mapping(address => mapping(address => address[])) _REGISTRY_;
constructor(
address cloneFactory,
address dvmTemplate,
address feeRateModelTemplate,
2020-11-11 16:42:00 +08:00
address permissionManagerTemplate,
address defaultGasPriceSource
2020-11-05 00:26:45 +08:00
) public {
_CLONE_FACTORY_ = cloneFactory;
_DVM_TEMPLATE_ = dvmTemplate;
_FEE_RATE_MODEL_TEMPLATE_ = feeRateModelTemplate;
_PERMISSION_MANAGER_TEMPLATE_ = permissionManagerTemplate;
2020-11-11 16:42:00 +08:00
_DEFAULT_GAS_PRICE_SOURCE_ = defaultGasPriceSource;
2020-11-05 00:26:45 +08:00
}
2020-11-20 18:58:35 +08:00
function createStandardDODOVendingMachine(
2020-11-05 00:26:45 +08:00
address baseToken,
address quoteToken,
uint256 lpFeeRate,
uint256 mtFeeRate,
uint256 i,
uint256 k
) external returns (address newVendorMachine) {
newVendorMachine = ICloneFactory(_CLONE_FACTORY_).clone(_DVM_TEMPLATE_);
IDVM(newVendorMachine).init(
msg.sender,
msg.sender,
2020-11-18 17:51:50 +08:00
baseToken,
quoteToken,
2020-11-05 00:26:45 +08:00
createConstFeeRateModel(msg.sender, lpFeeRate),
createConstFeeRateModel(msg.sender, mtFeeRate),
createPermissionManager(msg.sender),
2020-11-11 16:42:00 +08:00
_DEFAULT_GAS_PRICE_SOURCE_,
2020-11-05 00:26:45 +08:00
i,
k
);
_REGISTRY_[baseToken][quoteToken].push(newVendorMachine);
return newVendorMachine;
}
function createConstFeeRateModel(address owner, uint256 feeRate)
public
returns (address feeRateModel)
{
feeRateModel = ICloneFactory(_CLONE_FACTORY_).clone(_FEE_RATE_MODEL_TEMPLATE_);
IConstFeeRateModel(feeRateModel).init(owner, feeRate);
return feeRateModel;
}
function createPermissionManager(address owner) public returns (address permissionManager) {
permissionManager = ICloneFactory(_CLONE_FACTORY_).clone(_PERMISSION_MANAGER_TEMPLATE_);
IPermissionManager(permissionManager).initOwner(owner);
return permissionManager;
}
function getVendorMachine(address baseToken, address quoteToken)
external
view
returns (address[] memory machines)
{
return _REGISTRY_[baseToken][quoteToken];
}
}