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

71 lines
1.9 KiB
Solidity
Raw Normal View History

2020-10-23 01:16:52 +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 {DVMVault} from "./impl/DVMVault.sol";
import {DVMController} from "./impl/DVMController.sol";
contract DVMFactory is Ownable {
address public _CLONE_FACTORY_;
address public _VAULT_TEMPLATE_;
address public _CONTROLLER_TEMPLATE_;
2020-10-23 17:11:50 +08:00
// base -> quote -> DVM address list
mapping(address => mapping(address => address[])) _REGISTRY_;
constructor(
address cloneFactory,
address vaultTemplate,
address controllerTemplate
) public {
_CLONE_FACTORY_ = cloneFactory;
_VAULT_TEMPLATE_ = vaultTemplate;
_CONTROLLER_TEMPLATE_ = controllerTemplate;
}
2020-10-26 19:19:10 +08:00
function createDODOVendorMachine(
2020-10-23 01:16:52 +08:00
address maintainer,
address baseToken,
address quoteToken,
address lpFeeRateModel,
address mtFeeRateModel,
uint256 i,
uint256 k,
uint256 gasPriceLimit
2020-10-26 19:19:10 +08:00
) external returns (address newVendorMachine) {
newVendorMachine = ICloneFactory(_CLONE_FACTORY_).clone(_CONTROLLER_TEMPLATE_);
address vault = ICloneFactory(_CLONE_FACTORY_).clone(_VAULT_TEMPLATE_);
DVMVault(vault).init(newVendorMachine, baseToken, quoteToken); // vault owner is controller
2020-10-23 01:16:52 +08:00
2020-10-26 19:19:10 +08:00
DVMController(newVendorMachine).init(
2020-10-23 01:16:52 +08:00
msg.sender,
maintainer,
2020-10-26 19:19:10 +08:00
vault,
2020-10-23 01:16:52 +08:00
lpFeeRateModel,
mtFeeRateModel,
i,
k,
gasPriceLimit
);
2020-10-26 19:19:10 +08:00
_REGISTRY_[baseToken][quoteToken].push(newVendorMachine);
return newVendorMachine;
}
function getVendorMachine(address baseToken, address quoteToken)
external
view
returns (address[] memory machines)
{
return _REGISTRY_[baseToken][quoteToken];
2020-10-23 01:16:52 +08:00
}
}