/* 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_; function createDODOVenderMachine( address maintainer, address baseToken, address quoteToken, address lpFeeRateModel, address mtFeeRateModel, uint256 i, uint256 k, uint256 gasPriceLimit ) external returns (address newVenderMachine) { DVMController controller = DVMController( ICloneFactory(_CLONE_FACTORY_).clone(_CONTROLLER_TEMPLATE_) ); DVMVault vault = DVMVault(ICloneFactory(_CLONE_FACTORY_).clone(_VAULT_TEMPLATE_)); vault.init(address(controller), baseToken, quoteToken); // vault owner is controller controller.init( msg.sender, maintainer, address(vault), lpFeeRateModel, mtFeeRateModel, i, k, gasPriceLimit ); newVenderMachine = address(controller); return newVenderMachine; } }