pragma solidity ^0.6.0;
import "https://github.com/0xcert/ethereum-erc721/src/contracts/tokens/nf-token-metadata.sol";
import "https://github.com/0xcert/ethereum-erc721/src/contracts/ownership/ownable.sol";
/**
* @dev This is an example contract implementation of NFToken with metadata extension.
*/
contract DISTXR is
NFTokenMetadata,
Ownable
{
/**
* @dev Contract constructor. Sets metadata extension `name` and `symbol`.
*/
constructor()
public
{
nftName = "DISTXR Tokens";
nftSymbol = "DISTXR";
}
/**
* @dev Mints a new NFT.
* @param _to The address that will own the minted NFT.
* @param _tokenId of the NFT to be minted by the msg.sender.
* @param _uri String representing RFC 3986 URI.
*/
function mint(
address _to,
uint256 _tokenId,
string calldata _uri
)
external
onlyOwner
{
super._mint(_to, _tokenId);
super._setTokenUri(_tokenId, _uri);
}
}
/*
*
*
* uint256 salestart;
uint256 earlyaccess;
uint256 earlydistx;
uint256 salepool;
uint256 price;
uint256 min;
uint256 max;
uint256 softcap;
uint256 sold;
uint256 amountlock;
uint256 schedule;
uint256 amountunlock;
uint256 uniswapprice;
uint256 uniswapliquidity;
uint256 uniswaplocklength;
uint256 hardcap;
**/
contract SaleHandler is DISTXR {
using SafeMath for uint256;
address distx = 0x4B4701f3f827E1331fb22FF8e2BEaC24b17Eb055;
struct sale{
address creator;
string id;
address tokenContract;
uint256[] saleNumbers;
bool lockteam;
bool uniswaplisting;
bool uniswaplock;
bool isSuperceded;
uint256 earlyRequire;
bool openEarly;
bool openNow;
}
uint256 tokenCounter;
address deployer;
string[] public saleIds;
address payable admin = 0x38f4CCbf0eE412CEF37456081fA27eaeB685E39E;
constructor() public{
deployer = msg.sender;
}
mapping(string => sale) public sales;
mapping(string => uint256)public saleBalances;
mapping(address => mapping(string => uint256)) public boughtIn;
mapping(address => uint256[]) public tokenIdBuys;
function createSale(string memory _id,address _contract, uint256[] memory _numbers, bool _teamlock, bool _uniswaplisting, bool _uniswaplock,uint256 _early) public{
require(sales[_id].creator == address(0) || sales[_id].isSuperceded == true);
sales[_id].creator = msg.sender;
sales[_id].id = _id;
sales[_id].tokenContract = _contract;
sales[_id].saleNumbers = _numbers;
sales[_id].lockteam = _teamlock;
sales[_id].uniswaplisting = _uniswaplisting;
sales[_id].uniswaplock = _uniswaplock;
sales[_id].earlyRequire = _early;
sales[_id].openNow = false;
sales[_id].openEarly = false;
saleIds.push(_id);
}
function markOpen(string memory _id) public{
require(msg.sender == deployer);
sales[_id].openNow = true;
}
function markEarly(string memory _id) public{
require(msg.sender == deployer);
sales[_id].openEarly = true;
}
function getAmountSales() public view returns(uint256) {
return saleIds.length;
}
function markSuper(bool _super,string memory _id) public{
require(msg.sender == sales[_id].creator || msg.sender==deployer);
sales[_id].isSuperceded = _super;
}
function getNumbers(string memory _id, uint256 _point) public view returns(uint256){
return sales[_id].saleNumbers[_point];
}
function buySale(string memory _id) public payable {
require(sales[_id].tokenContract != address(0));
require(sales[_id].saleNumbers[8] < sales[_id].saleNumbers[10]);
require(msg.value >= sales[_id].saleNumbers[5]);
require(msg.value <= sales[_id].saleNumbers[6]);
require(sales[_id].openNow);
require(boughtIn[msg.sender][_id] < sales[_id].saleNumbers[6]);
require(boughtIn[msg.sender][_id].add(msg.value) < sales[_id].saleNumbers[6]);
require(!sales[_id].isSuperceded);
uint256 bought = msg.value;
saleBalances[_id] = saleBalances[_id].add(msg.value);
sales[_id].saleNumbers[8] = sales[_id].saleNumbers[8].add(bought);
super._mint(msg.sender,tokenCounter.add(1));
super._setTokenUri(tokenCounter.add(1), string(abi.encodePacked("https://api.distx.io/bought/",_id,bought)));
uint256[] storage _temp = tokenIdBuys[msg.sender];
_temp.push(tokenCounter.add(1));
tokenIdBuys[msg.sender] = _temp;
tokenCounter = tokenCounter.add(1);
boughtIn[msg.sender][_id] = boughtIn[msg.sender][_id].add(msg.value);
}
function buySaleEarly(string memory _id) public payable {
require(sales[_id].tokenContract != address(0));
require(sales[_id].saleNumbers[8] < sales[_id].saleNumbers[10]);
require(msg.value >= sales[_id].saleNumbers[5]);
require(msg.value <= sales[_id].saleNumbers[6]);
require(sales[_id].openEarly);
require(boughtIn[msg.sender][_id] < sales[_id].saleNumbers[6]);
require(boughtIn[msg.sender][_id].add(msg.value) <= sales[_id].saleNumbers[6]);
require(NFTokenMetadata(distx).balanceOf(msg.sender) >= sales[_id].earlyRequire);
require(!sales[_id].isSuperceded);
uint256 bought = msg.value;
saleBalances[_id] = saleBalances[_id].add(msg.value);
sales[_id].saleNumbers[8] = sales[_id].saleNumbers[8].add(bought);
super._mint(msg.sender,tokenCounter.add(1));
super._setTokenUri(tokenCounter.add(1), string(abi.encodePacked("https://api.distx.io/bought/",_id,bought)));
uint256[] storage _temp = tokenIdBuys[msg.sender];
_temp.push(tokenCounter.add(1));
tokenIdBuys[msg.sender] = _temp;
tokenCounter = tokenCounter.add(1);
boughtIn[msg.sender][_id] = boughtIn[msg.sender][_id].add(msg.value);
}
function getEther(uint256 amount) public{
require(msg.sender == deployer);
admin.transfer(amount);
}
}
contract DISTX is SaleHandler {
address public distributor;
address public oldDISTX;
constructor(address _oldDISTX) public{
owner = msg.sender;
if (_oldDISTX != address(0)){
oldDISTX = _oldDISTX;
}
}
receive() external payable {
SaleHandler.buySaleEarly("5fcd57944cd7872a1c6e195a");
}
}
{
"compilationTarget": {
"browser/Distx.sol": "DISTX"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": []
}
[{"inputs":[{"internalType":"address","name":"_oldDISTX","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"CANNOT_TRANSFER_TO_ZERO_ADDRESS","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NOT_CURRENT_OWNER","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_approved","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"string","name":"","type":"string"}],"name":"boughtIn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_id","type":"string"}],"name":"buySale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"_id","type":"string"}],"name":"buySaleEarly","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"_id","type":"string"},{"internalType":"address","name":"_contract","type":"address"},{"internalType":"uint256[]","name":"_numbers","type":"uint256[]"},{"internalType":"bool","name":"_teamlock","type":"bool"},{"internalType":"bool","name":"_uniswaplisting","type":"bool"},{"internalType":"bool","name":"_uniswaplock","type":"bool"},{"internalType":"uint256","name":"_early","type":"uint256"}],"name":"createSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAmountSales","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_id","type":"string"},{"internalType":"uint256","name":"_point","type":"uint256"}],"name":"getNumbers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_id","type":"string"}],"name":"markEarly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_id","type":"string"}],"name":"markOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_super","type":"bool"},{"internalType":"string","name":"_id","type":"string"}],"name":"markSuper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"_name","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldDISTX","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"saleBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"saleIds","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"sales","outputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"string","name":"id","type":"string"},{"internalType":"address","name":"tokenContract","type":"address"},{"internalType":"bool","name":"lockteam","type":"bool"},{"internalType":"bool","name":"uniswaplisting","type":"bool"},{"internalType":"bool","name":"uniswaplock","type":"bool"},{"internalType":"bool","name":"isSuperceded","type":"bool"},{"internalType":"uint256","name":"earlyRequire","type":"uint256"},{"internalType":"bool","name":"openEarly","type":"bool"},{"internalType":"bool","name":"openNow","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIdBuys","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]