账户
0x0f...b36c
0x0F...b36C

0x0F...b36C

$500
此合同的源代码已经过验证!
合同元数据
编译器
0.6.1+commit.e6f7d5a4
语言
Solidity
合同源代码
文件 1 的 1:MinereumLuckyDraw.sol
pragma solidity ^0.6.0;

interface Minereum {
  function BurnTokens ( uint256 mneToBurn ) external returns ( bool success );
  function CreateTokenICO (  ) payable external;
  function availableBalanceOf ( address _address ) external view returns ( uint256 Balance );
  function balanceOf ( address _address ) external view returns ( uint256 balance );
  function transfer ( address _to, uint256 _value ) external;
  function transferFrom ( address _from, address _to, uint256 _amount ) external returns ( bool success );  
}


contract MinereumLuckyDraw
{
	Minereum public mne;
	uint public stakeHoldersfee = 30;
	uint public mnefee = 0;
	uint public ethfee = 10000000000000000;
	uint public totalSentToStakeHolders = 0;
	uint public totalPaidOut = 0;
	uint public ticketsSold = 0;
	address public owner = 0x0000000000000000000000000000000000000000;
	
	constructor(address mneAddress) public
	{
		mne = Minereum(mneAddress);
		owner = payable(msg.sender);		
	}
    event Numbers(address indexed from, uint[] n, string m);
    
	uint public maxNumber = 10001;
	uint public systemNumber = 3223;
	
	receive() external payable { }
    
    function BuyTickets (uint max) public payable
    {
		uint[] memory numbers = new uint[](max);
        uint i = 0;
        bool win = false;
		
		//some sort of security to prevent miners from hacking block.timestamp. Contract Valid for 6 months.
		if (!(block.timestamp >= 1587477930 && block.timestamp <= 1603256393))
			revert('wrong timestamp');		
		
		while (i < max)
        {	
            //Random number generation
			numbers[i] = uint256(uint256(keccak256(abi.encodePacked(block.timestamp, msg.sender, i)))%maxNumber);
            if (numbers[i] == systemNumber)
                win = true;
            i++;
        }
        
        if (win)
		{
			address payable add = payable(msg.sender);
			uint contractBalance = address(this).balance;
			emit Numbers(msg.sender, numbers, "You WON!");
			if (!add.send(contractBalance)) revert('Error While Executing Payment.');
			totalPaidOut += contractBalance;
		}
        else
		{
            emit Numbers(msg.sender, numbers, "Your numbers don't match the System Number! Try Again.");
		}
		ticketsSold += max;
		
		uint totalEthfee = ethfee * max;
		uint totalMneFee = mnefee * max;
		if (msg.value < totalEthfee) revert('Not enough ETH.');
		uint valueStakeHolder = msg.value * stakeHoldersfee / 100;
		mne.CreateTokenICO.value(valueStakeHolder)();
		totalSentToStakeHolders += valueStakeHolder;
		
		if (totalMneFee > 0)
		{
			if (!mne.transferFrom(msg.sender, address(this), totalMneFee)) revert('Not enough MNE.');
			mne.BurnTokens(totalMneFee);
		}
    }
	
	function transferFundsOut() public
	{
		if (msg.sender == owner)
		{
			address payable add = payable(msg.sender);
			uint contractBalance = address(this).balance;
			if (!add.send(contractBalance)) revert('Error While Executing Payment.');			
		}
		else
		{
			revert();
		}
	}
	
	function updateFees(uint _stakeHoldersfee, uint _mnefee, uint _ethfee) public
	{
		if (msg.sender == owner)
		{
			stakeHoldersfee = _stakeHoldersfee;
			mnefee = _mnefee;
			ethfee = _ethfee;
		}
		else
		{
			revert();
		}
	}
	
	function updateSystemNumber(uint _systemNumber) public
	{
		if (msg.sender == owner)
		{
			systemNumber = _systemNumber;
		}
		else
		{
			revert();
		}
	}
	
	function updateMaxNumber(uint _maxNumber) public
	{
		if (msg.sender == owner)
		{
			maxNumber = _maxNumber;
		}
		else
		{
			revert();
		}
	}
}
设置
{
  "compilationTarget": {
    "MinereumLuckyDraw.sol": "MinereumLuckyDraw"
  },
  "evmVersion": "istanbul",
  "libraries": {},
  "metadata": {
    "bytecodeHash": "ipfs"
  },
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "remappings": []
}
ABI
[{"inputs":[{"internalType":"address","name":"mneAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"n","type":"uint256[]"},{"indexed":false,"internalType":"string","name":"m","type":"string"}],"name":"Numbers","type":"event"},{"inputs":[{"internalType":"uint256","name":"max","type":"uint256"}],"name":"BuyTickets","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"ethfee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mne","outputs":[{"internalType":"contract Minereum","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mnefee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakeHoldersfee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"systemNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ticketsSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPaidOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSentToStakeHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transferFundsOut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakeHoldersfee","type":"uint256"},{"internalType":"uint256","name":"_mnefee","type":"uint256"},{"internalType":"uint256","name":"_ethfee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxNumber","type":"uint256"}],"name":"updateMaxNumber","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_systemNumber","type":"uint256"}],"name":"updateSystemNumber","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]