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
|
|
|
|
}
|
|
|
|
|
|
}
|