add dodoCollection
This commit is contained in:
@@ -72,6 +72,9 @@ module.exports = {
|
||||
InitializableERC1155: "",
|
||||
NFTTokenFactory: "",
|
||||
|
||||
DodoNftErc721: "",
|
||||
DodoNftErc1155: "",
|
||||
|
||||
DODONFTRegistry: "",
|
||||
DODONFTProxy: "",
|
||||
|
||||
|
||||
@@ -70,6 +70,9 @@ module.exports = {
|
||||
InitializableERC1155: "0xc4d86FFB26EB6EcAe80D3f1e2c8519832Fd478B2",
|
||||
NFTTokenFactory: "0x834D13Ca0322Ccfe67596f09Cc26Ee3584297B94",
|
||||
|
||||
DodoNftErc721: "",
|
||||
DodoNftErc1155: "",
|
||||
|
||||
DODONFTRegistry: "0x579eBcC668b5517F733587091C35D495FE8d6b68",
|
||||
DODONFTProxy: "0xe121c6C90735e2Ca12e21708F2F379A55Ce61426",
|
||||
|
||||
@@ -85,6 +88,6 @@ module.exports = {
|
||||
|
||||
//================= DropsV2 ==================
|
||||
DropsFeeModel: "0xDBe1C360050638C9d0f28f23B51b198C8B70D9eA",
|
||||
DropsProxy: "0xa3a23cee044F995a97D86defeABf769bAd57c7c8"
|
||||
DropsProxy: "0xa3a23cee044F995a97D86defeABf769bAd57c7c8",
|
||||
}
|
||||
}
|
||||
@@ -1,57 +0,0 @@
|
||||
/*
|
||||
|
||||
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 {SafeMath} from "../../lib/SafeMath.sol";
|
||||
import {DecimalMath} from "../../lib/DecimalMath.sol";
|
||||
|
||||
interface IMemSource {
|
||||
function getMemLevel(address user) external returns (uint256);
|
||||
}
|
||||
|
||||
contract MemRegistry is Ownable {
|
||||
using SafeMath for uint256;
|
||||
|
||||
address[] internal _VALID_MEM_SOURCE_LIST_;
|
||||
mapping(address => bool) internal _VALID_MEM_SOURCE_;
|
||||
mapping(address => uint256) internal _MEM_SOURCE_WEIGHT_;
|
||||
|
||||
function getMemLevel(address user) public returns (uint256 memLevel) {
|
||||
for (uint8 i = 0; i < _VALID_MEM_SOURCE_LIST_.length; i++) {
|
||||
address _source = _VALID_MEM_SOURCE_LIST_[i];
|
||||
memLevel = memLevel.add(
|
||||
IMemSource(_source).getMemLevel(user).mul(_MEM_SOURCE_WEIGHT_[_source])
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function setMemSourceWeight(address source, uint256 weight) external onlyOwner {
|
||||
_MEM_SOURCE_WEIGHT_[source] = weight;
|
||||
}
|
||||
|
||||
function addMemSource(address source) external onlyOwner {
|
||||
require(!_VALID_MEM_SOURCE_[source], "SOURCE_ALREADY_EXIST");
|
||||
_VALID_MEM_SOURCE_LIST_.push(source);
|
||||
_VALID_MEM_SOURCE_[source] = true;
|
||||
}
|
||||
|
||||
function removeMemSource(address source) external onlyOwner {
|
||||
require(_VALID_MEM_SOURCE_[source], "SOURCE_NOT_EXIST");
|
||||
for (uint8 i = 0; i <= _VALID_MEM_SOURCE_LIST_.length - 1; i++) {
|
||||
if (_VALID_MEM_SOURCE_LIST_[i] == source) {
|
||||
_VALID_MEM_SOURCE_LIST_[i] = _VALID_MEM_SOURCE_LIST_[_VALID_MEM_SOURCE_LIST_
|
||||
.length - 1];
|
||||
_VALID_MEM_SOURCE_LIST_.pop();
|
||||
break;
|
||||
}
|
||||
}
|
||||
_VALID_MEM_SOURCE_[source] = false;
|
||||
}
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
/*
|
||||
|
||||
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 {IPermissionManager} from "../../lib/PermissionManager.sol";
|
||||
import {IMemSource} from "./MemSourceStake.sol";
|
||||
|
||||
contract MemPermission is Ownable {
|
||||
uint256 public _MEM_LEVEL_THRESHOLD_;
|
||||
address public _MEM_LEVEL_SOURCE_;
|
||||
|
||||
constructor(address memLevelSource, uint256 memLevelThreshold) public {
|
||||
_MEM_LEVEL_THRESHOLD_ = memLevelThreshold;
|
||||
_MEM_LEVEL_SOURCE_ = memLevelSource;
|
||||
}
|
||||
|
||||
function isAllowed(address account) external returns (bool) {
|
||||
return IMemSource(_MEM_LEVEL_SOURCE_).getMemLevel(account) >= _MEM_LEVEL_THRESHOLD_;
|
||||
}
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
/*
|
||||
|
||||
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 {IMemSource} from "./MemAggregator.sol";
|
||||
import {IERC20} from "../../intf/IERC20.sol";
|
||||
|
||||
contract MemSourceHold is Ownable, IMemSource {
|
||||
address public _DODO_TOKEN_;
|
||||
|
||||
constructor(address dodoToken) public {
|
||||
_DODO_TOKEN_ = dodoToken;
|
||||
}
|
||||
|
||||
// ============ View Function ============
|
||||
|
||||
function getMemLevel(address user) external override returns (uint256) {
|
||||
return IERC20(_DODO_TOKEN_).balanceOf(user);
|
||||
}
|
||||
}
|
||||
@@ -1,85 +0,0 @@
|
||||
/*
|
||||
|
||||
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 {IMemSource} from "./MemAggregator.sol";
|
||||
import {IERC20} from "../../intf/IERC20.sol";
|
||||
import {SafeMath} from "../../lib/SafeMath.sol";
|
||||
import {SafeERC20} from "../../lib/SafeERC20.sol";
|
||||
import {DecimalMath} from "../../lib/DecimalMath.sol";
|
||||
|
||||
contract MemSourceStake is Ownable, IMemSource {
|
||||
using SafeMath for uint256;
|
||||
using SafeERC20 for IERC20;
|
||||
|
||||
address public _DODO_TOKEN_;
|
||||
uint256 public _DODO_RESERVE_;
|
||||
uint256 public _COLD_DOWN_DURATION_;
|
||||
|
||||
mapping(address => uint256) internal _STAKED_DODO_;
|
||||
mapping(address => uint256) internal _PENDING_DODO_;
|
||||
mapping(address => uint256) internal _EXECUTE_TIME_;
|
||||
|
||||
constructor(address dodoToken) public {
|
||||
_DODO_TOKEN_ = dodoToken;
|
||||
}
|
||||
|
||||
// ============ Owner Function ============
|
||||
|
||||
function setColdDownDuration(uint256 coldDownDuration) external onlyOwner {
|
||||
_COLD_DOWN_DURATION_ = coldDownDuration;
|
||||
}
|
||||
|
||||
// ============ DODO Function ============
|
||||
|
||||
function admitStakedDODO(address to) external {
|
||||
uint256 dodoInput = IERC20(_DODO_TOKEN_).balanceOf(address(this)).sub(_DODO_RESERVE_);
|
||||
_STAKED_DODO_[to] = _STAKED_DODO_[to].add(dodoInput);
|
||||
_sync();
|
||||
}
|
||||
|
||||
function stakeDODO(uint256 amount) external {
|
||||
_transferDODOIn(msg.sender, amount);
|
||||
_STAKED_DODO_[msg.sender] = _STAKED_DODO_[msg.sender].add(amount);
|
||||
_sync();
|
||||
}
|
||||
|
||||
function requestDODOWithdraw(uint256 amount) external {
|
||||
_STAKED_DODO_[msg.sender] = _STAKED_DODO_[msg.sender].sub(amount);
|
||||
_PENDING_DODO_[msg.sender] = _PENDING_DODO_[msg.sender].add(amount);
|
||||
_EXECUTE_TIME_[msg.sender] = block.timestamp.add(_COLD_DOWN_DURATION_);
|
||||
}
|
||||
|
||||
function withdrawDODO() external {
|
||||
require(_EXECUTE_TIME_[msg.sender] <= block.timestamp, "WITHDRAW_COLD_DOWN");
|
||||
_transferDODOOut(msg.sender, _PENDING_DODO_[msg.sender]);
|
||||
_PENDING_DODO_[msg.sender] = 0;
|
||||
}
|
||||
|
||||
// ============ Balance Function ============
|
||||
|
||||
function _transferDODOIn(address from, uint256 amount) internal {
|
||||
IERC20(_DODO_TOKEN_).transferFrom(from, address(this), amount);
|
||||
}
|
||||
|
||||
function _transferDODOOut(address to, uint256 amount) internal {
|
||||
IERC20(_DODO_TOKEN_).transfer(to, amount);
|
||||
}
|
||||
|
||||
function _sync() internal {
|
||||
_DODO_RESERVE_ = IERC20(_DODO_TOKEN_).balanceOf(address(this));
|
||||
}
|
||||
|
||||
// ============ View Function ============
|
||||
|
||||
function getMemLevel(address user) external override returns (uint256) {
|
||||
return _STAKED_DODO_[user];
|
||||
}
|
||||
}
|
||||
43
contracts/Factory/DODONFT.sol
Normal file
43
contracts/Factory/DODONFT.sol
Normal file
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
|
||||
Copyright 2021 DODO ZOO.
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
*/
|
||||
|
||||
pragma solidity 0.6.9;
|
||||
|
||||
import {ERC721URIStorage} from "../external/ERC721/ERC721URIStorage.sol";
|
||||
import {InitializableOwnable} from "../lib/InitializableOwnable.sol";
|
||||
|
||||
contract DODONFT is ERC721URIStorage, InitializableOwnable {
|
||||
|
||||
uint256 public _CUR_TOKENID_;
|
||||
|
||||
// ============ Event =============
|
||||
event DODONFTMint(address creator, uint256 tokenId);
|
||||
event DODONFTBurn(uint256 tokenId);
|
||||
|
||||
function init(
|
||||
address owner,
|
||||
string memory name,
|
||||
string memory symbol
|
||||
) public {
|
||||
initOwner(owner);
|
||||
_name = name;
|
||||
_symbol = symbol;
|
||||
}
|
||||
|
||||
function mint(string calldata uri) external {
|
||||
_safeMint(msg.sender, _CUR_TOKENID_);
|
||||
_setTokenURI(_CUR_TOKENID_, uri);
|
||||
emit DODONFTMint(msg.sender, _CUR_TOKENID_);
|
||||
_CUR_TOKENID_ = _CUR_TOKENID_ + 1;
|
||||
}
|
||||
|
||||
function burn(uint256 tokenId) external onlyOwner {
|
||||
require(tokenId < _CUR_TOKENID_, "TOKENID_INVALID");
|
||||
_burn(tokenId);
|
||||
emit DODONFTBurn(tokenId);
|
||||
}
|
||||
}
|
||||
57
contracts/Factory/DODONFT1155.sol
Normal file
57
contracts/Factory/DODONFT1155.sol
Normal file
@@ -0,0 +1,57 @@
|
||||
/*
|
||||
|
||||
Copyright 2021 DODO ZOO.
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
*/
|
||||
|
||||
pragma solidity 0.6.9;
|
||||
|
||||
import {ERC1155} from "../external/ERC1155/ERC1155.sol";
|
||||
import {Strings} from "../external/utils/Strings.sol";
|
||||
import {InitializableOwnable} from "../lib/InitializableOwnable.sol";
|
||||
|
||||
contract DODONFT1155 is ERC1155, InitializableOwnable {
|
||||
using Strings for uint256;
|
||||
|
||||
uint256 public _CUR_TOKENID_;
|
||||
string internal _baseUri = "";
|
||||
mapping (uint256 => string) private _tokenURIs;
|
||||
|
||||
// ============ Event =============
|
||||
event DODONFTMint(address creator, uint256 tokenId, uint256 amount);
|
||||
event DODONFTBurn(address account, uint256 tokenId, uint256 amount);
|
||||
|
||||
|
||||
function mint(string calldata uri, uint256 amount) external {
|
||||
_mint(msg.sender, _CUR_TOKENID_, amount, "");
|
||||
_setTokenURI(_CUR_TOKENID_, uri);
|
||||
emit DODONFTMint(msg.sender, _CUR_TOKENID_, amount);
|
||||
_CUR_TOKENID_ = _CUR_TOKENID_ + 1;
|
||||
}
|
||||
|
||||
function burn(address account, uint256 tokenId, uint256 amount) external onlyOwner {
|
||||
require(tokenId < _CUR_TOKENID_, "TOKENID_INVALID");
|
||||
_burn(account, tokenId, amount);
|
||||
emit DODONFTBurn(account, tokenId, amount);
|
||||
}
|
||||
|
||||
function uri(uint256 tokenId) public view override returns (string memory) {
|
||||
string memory _tokenURI = _tokenURIs[tokenId];
|
||||
string memory base = _baseUri;
|
||||
|
||||
if (bytes(base).length == 0) {
|
||||
return _tokenURI;
|
||||
}
|
||||
|
||||
if (bytes(_tokenURI).length > 0) {
|
||||
return string(abi.encodePacked(base, _tokenURI));
|
||||
}
|
||||
|
||||
return super.uri(tokenId);
|
||||
}
|
||||
|
||||
function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal {
|
||||
_tokenURIs[tokenId] = _tokenURI;
|
||||
}
|
||||
}
|
||||
@@ -344,3 +344,15 @@ Init DODONFTProxyAddress Tx: 0x6b72dd067b291dfb731af0304ceb0127e6b82696a0dca40e6
|
||||
DODOApproveProxy unlockAddProxy tx: 0x181aea8369c404f6626b17f843a61e7c51511730360fd112e8b45f89ac2a1865
|
||||
DODOApproveProxy addDODOProxy tx: 0x65363a442ef5cf984374d9add8a0c5f97a0cd72f34dba0a1ed1243aa9e5d4ee8
|
||||
Add AdminList on DODONFTRegistry Tx: 0x67c34c94a14ba9ee7639f7ff0ba8379eff062d219f16177398803d853b45f253
|
||||
====================================================
|
||||
network type: kovan
|
||||
Deploy time: 2021/5/27 下午7:32:05
|
||||
Deploy type: DODO Collections
|
||||
====================================================
|
||||
network type: kovan
|
||||
Deploy time: 2021/5/27 下午7:33:49
|
||||
Deploy type: DODO Collections
|
||||
DodoNftErc721Address: 0x98f2A8d6100635Ecb40ADA1B1FFb1ff4f0b3c5D8
|
||||
Init DodoNftErc721 Tx: 0x13011015953cf45401c13204bf8b89c85daa00b238eb588d8570bd2d5886b31e
|
||||
DodoNftErc1155Address: 0xE9C572287936dB1B0a951ca0768C1b0d26b62A04
|
||||
Init DodoNftErc1155 Tx: 0xb2fe57187897820c91a35a66b2480d5ff03aef8a1c354780539894c1ec0074a2
|
||||
|
||||
@@ -15,6 +15,9 @@ const InitializableERC721 = artifacts.require("InitializableERC721");
|
||||
const InitializableERC1155 = artifacts.require("InitializableERC1155");
|
||||
const NFTTokenFactory = artifacts.require("NFTTokenFactory");
|
||||
|
||||
const DodoNftErc721 = artifacts.require("DODONFT");
|
||||
const DodoNftErc1155 = artifacts.require("DODONFT1155");
|
||||
|
||||
const DODODropsV1 = artifacts.require("MysteryBoxKAKA");
|
||||
const RandomGenerator = artifacts.require("RandomGenerator");
|
||||
|
||||
@@ -45,6 +48,9 @@ module.exports = async (deployer, network, accounts) => {
|
||||
let RandomGeneratorAddress = CONFIG.RandomGenerator;
|
||||
let RandomPool = CONFIG.RandomPool;
|
||||
|
||||
let DodoNftErc721Address = CONFIG.DodoNftErc721;
|
||||
let DodoNftErc1155Address = CONFIG.DodoNftErc1155;
|
||||
|
||||
let multiSigAddress = CONFIG.multiSigAddress;
|
||||
let defaultMaintainer = CONFIG.defaultMaintainer;
|
||||
|
||||
@@ -76,6 +82,37 @@ module.exports = async (deployer, network, accounts) => {
|
||||
}
|
||||
}
|
||||
|
||||
if (deploySwitch.COLLECTIONS) {
|
||||
logger.log("====================================================");
|
||||
logger.log("network type: " + network);
|
||||
logger.log("Deploy time: " + new Date().toLocaleString());
|
||||
logger.log("Deploy type: DODO Collections");
|
||||
|
||||
//ERC721
|
||||
if (DodoNftErc721Address == "") {
|
||||
await deployer.deploy(DodoNftErc721);
|
||||
DodoNftErc721Address = DodoNftErc721.address;
|
||||
logger.log("DodoNftErc721Address: ", DodoNftErc721Address);
|
||||
const DodoNftErc721Instance = await DodoNftErc721.at(DodoNftErc721Address);
|
||||
var tx = await DodoNftErc721Instance.init(
|
||||
multiSigAddress,
|
||||
"DODONFT",
|
||||
"DODONFT"
|
||||
);
|
||||
logger.log("Init DodoNftErc721 Tx:", tx.tx);
|
||||
}
|
||||
|
||||
//ERC1155
|
||||
if (DodoNftErc1155Address == "") {
|
||||
await deployer.deploy(DodoNftErc1155);
|
||||
DodoNftErc1155Address = DodoNftErc1155.address;
|
||||
logger.log("DodoNftErc1155Address: ", DodoNftErc1155Address);
|
||||
const DodoNftErc1155Instance = await DodoNftErc1155.at(DodoNftErc1155Address);
|
||||
var tx = await DodoNftErc1155Instance.initOwner(multiSigAddress);
|
||||
logger.log("Init DodoNftErc1155 Tx:", tx.tx);
|
||||
}
|
||||
}
|
||||
|
||||
if (deploySwitch.DEPLOY_NFT) {
|
||||
logger.log("====================================================");
|
||||
logger.log("network type: " + network);
|
||||
@@ -180,7 +217,7 @@ module.exports = async (deployer, network, accounts) => {
|
||||
|
||||
const DODONFTRegistrynstance = await DODONFTRegistry.at(DODONFTRegistryAddress);
|
||||
var tx = await DODONFTRegistrynstance.addAdminList(DODONFTProxyAddress);
|
||||
logger.log("Add AdminList on DODONFTRegistry Tx:", tx.tx);
|
||||
logger.log("Add AdminList on DODONFTRegistry Tx:", tx.tx);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -61,8 +61,9 @@ module.exports = {
|
||||
CpProxy: false,
|
||||
ERC20V2Factory: false,
|
||||
DEPLOY_NFT: false,
|
||||
COLLECTIONS: false,
|
||||
MYSTERYBOX_V1: false,
|
||||
Drops_V2: true
|
||||
Drops_V2: false,
|
||||
},
|
||||
|
||||
networks: {
|
||||
|
||||
Reference in New Issue
Block a user