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

98 lines
3.1 KiB
Solidity
Raw Normal View History

2021-03-18 19:54:58 +08:00
/*
Copyright 2020 DODO ZOO.
SPDX-License-Identifier: Apache-2.0
*/
pragma solidity 0.6.9;
pragma experimental ABIEncoderV2;
import {InitializableOwnable} from "../lib/InitializableOwnable.sol";
import {ICloneFactory} from "../lib/CloneFactory.sol";
import {IDVM} from "../DODOVendingMachine/intf/IDVM.sol";
2021-03-25 18:20:42 +08:00
// 这一部分最后写,先把前面的接口定下来
// 业务流程没有NFT的情况下
// 1. 上传媒体创建NFTCollateralVault
// 2. 把CollateralVault提供给FragmentFactory做碎片化
// 已经有NFT的情况下
// 1. 将NFT打包成NFTCollateralVault
// 2. 把CollateralVault提供给FragmentFactory做碎片化
// 所以总体来说factory只需要处理vault已经建立好之后的拼装工作即可
2021-03-18 19:54:58 +08:00
interface IFragmentFactory {
2021-03-18 23:43:54 +08:00
function createFragment() external returns (address newVendingMachine);
2021-03-18 19:54:58 +08:00
}
contract FragmentFactory is InitializableOwnable {
// ============ Templates ============
address public immutable _CLONE_FACTORY_;
2021-03-18 23:43:54 +08:00
address public immutable _MT_FEE_RATE_MODEL_;
2021-03-18 19:54:58 +08:00
address public _DVM_TEMPLATE_;
2021-03-18 23:43:54 +08:00
address public _FEE_DISTRIBUTOR_TEMPLATE_;
address public _FRAGMENT_TEMPLATE_;
2021-03-18 19:54:58 +08:00
// ============ Registry ============
// base -> quote -> DVM address list
mapping(address => mapping(address => address[])) public _REGISTRY_;
// creator -> DVM address list
mapping(address => address[]) public _USER_REGISTRY_;
// ============ Functions ============
constructor(
address cloneFactory,
address dvmTemplate,
2021-03-18 23:43:54 +08:00
address feeDistributorTemplate,
address fragmentTemplate,
address mtFeeRateModel
2021-03-18 19:54:58 +08:00
) public {
_CLONE_FACTORY_ = cloneFactory;
_DVM_TEMPLATE_ = dvmTemplate;
2021-03-18 23:43:54 +08:00
_FEE_DISTRIBUTOR_TEMPLATE_ = feeDistributorTemplate;
_FRAGMENT_TEMPLATE_ = fragmentTemplate;
_MT_FEE_RATE_MODEL_ = mtFeeRateModel;
2021-03-18 19:54:58 +08:00
}
2021-03-18 23:43:54 +08:00
function createFragment(
address owner,
address vault,
2021-03-18 19:54:58 +08:00
address quoteToken,
2021-03-18 23:43:54 +08:00
uint256 mtFeeRate,
2021-03-18 19:54:58 +08:00
uint256 i,
uint256 k,
2021-03-18 23:43:54 +08:00
uint256 totalSupply,
uint256 ownerRatio,
uint256 buyoutTimestamp
) external returns (address newFragment) {
2021-03-30 18:25:39 +08:00
// newFragment = ICloneFactory(_CLONE_FACTORY_).clone(_FRAGMENT_TEMPLATE_);
// newVendingMachine = ICloneFactory(_CLONE_FACTORY_).clone(_DVM_TEMPLATE_);
// newFeeDistributor = ICloneFactory(_CLONE_FACTORY_).clone(_FEE_DISTRIBUTOR_TEMPLATE_);
// {
// IFeeDistributor(newFeeDistributor).init(newFragment, quoteToken, newFragment);
// }
// {
// IDVM(newVendingMachine).init(
// newFeeDistributor,
// newFragment,
// quoteToken,
// 0,
// mtFeeRateModel,
// i,
// k,
// false
// );
// IFeeRateRegistry(mtFeeRateModel).set(newVendingMachine, mtFeeRate);
// }
// {
// IFragment(newFragment).init(owner, newVendingMachine, vault, totalSupply, ownerRatio, buyoutTimestamp);
// }
2021-03-18 19:54:58 +08:00
}
}