Created
November 17, 2018 23:16
-
-
Save DRMKtoken/8ed3f5fc24f2157635dae95ce0daf7a7 to your computer and use it in GitHub Desktop.
Source Code
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// © DreamMaker token 2018 All Rights Reserved | |
// Telegram group: @DRMKtoken | |
// Twitter: @DRMKofficial | |
// Telegram of the founder: @DRMKdev | |
pragma solidity ^0.4.25; | |
contract ForeignToken { | |
function balanceOf(address _owner) public constant returns (uint256); | |
function transfer(address _to, uint256 _value) public returns (bool); | |
} | |
contract ERC20Basic { | |
uint256 public totalSupply; | |
function balanceOf(address who) public constant returns (uint256); | |
function transfer(address to, uint256 value) public returns (bool); | |
event Transfer(address indexed from, address indexed to, uint256 value); | |
} | |
contract ERC20 is ERC20Basic { | |
function allowance(address owner, address spender) public constant returns (uint256); | |
function transferFrom(address from, address to, uint256 value) public returns (bool); | |
function approve(address spender, uint256 value) public returns (bool); | |
event Approval(address indexed owner, address indexed spender, uint256 value); | |
} | |
contract DreamMaker is ERC20 { | |
address owner = msg.sender; | |
mapping (address => uint256) balances; | |
mapping (address => mapping (address => uint256)) allowed; | |
uint256 public totalSupply = 86000000 * 10000; | |
function name() public constant returns (string) { return "DreamMaker"; } | |
function symbol() public constant returns (string) { return "DRMK"; } | |
function decimals() public constant returns (uint8) { return 4; } | |
event Transfer(address indexed _from, address indexed _to, uint256 _value); | |
event Approval(address indexed _owner, address indexed _spender, uint256 _value); | |
event DistrFinished(); | |
bool public distributionFinished = false; | |
modifier canDistr() { | |
require(!distributionFinished); | |
_; | |
} | |
function DreamMaker() public { | |
owner = msg.sender; | |
balances[msg.sender] = totalSupply; | |
} | |
modifier onlyOwner { | |
require(msg.sender == owner); | |
_; | |
} | |
function transferOwnership(address newOwner) onlyOwner public { | |
owner = newOwner; | |
} | |
function getEthBalance(address _addr) constant public returns(uint) { | |
return _addr.balance; | |
} | |
function distributeDRMK(address[] addresses, uint256 _value, uint256 _ethbal) onlyOwner canDistr public { | |
for (uint i = 0; i < addresses.length; i++) { | |
if (getEthBalance(addresses[i]) < _ethbal) { | |
continue; | |
} | |
balances[owner] -= _value; | |
balances[addresses[i]] += _value; | |
emit Transfer(owner, addresses[i], _value); | |
} | |
} | |
function balanceOf(address _owner) constant public returns (uint256) { | |
return balances[_owner]; | |
} | |
// mitigates the ERC20 short address attack | |
modifier onlyPayloadSize(uint size) { | |
assert(msg.data.length >= size + 4); | |
_; | |
} | |
function transfer(address _to, uint256 _amount) onlyPayloadSize(2 * 32) public returns (bool success) { | |
if (balances[msg.sender] >= _amount | |
&& _amount > 0 | |
&& balances[_to] + _amount > balances[_to]) { | |
balances[msg.sender] -= _amount; | |
balances[_to] += _amount; | |
emit Transfer(msg.sender, _to, _amount); | |
return true; | |
} else { | |
return false; | |
} | |
} | |
function transferFrom(address _from, address _to, uint256 _amount) onlyPayloadSize(3 * 32) public returns (bool success) { | |
if (balances[_from] >= _amount | |
&& allowed[_from][msg.sender] >= _amount | |
&& _amount > 0 | |
&& balances[_to] + _amount > balances[_to]) { | |
balances[_from] -= _amount; | |
allowed[_from][msg.sender] -= _amount; | |
balances[_to] += _amount; | |
emit Transfer(_from, _to, _amount); | |
return true; | |
} else { | |
return false; | |
} | |
} | |
function approve(address _spender, uint256 _value) public returns (bool success) { | |
// mitigates the ERC20 spend/approval race condition | |
if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } | |
allowed[msg.sender][_spender] = _value; | |
emit Approval(msg.sender, _spender, _value); | |
return true; | |
} | |
function allowance(address _owner, address _spender) constant public returns (uint256) { | |
return allowed[_owner][_spender]; | |
} | |
function finishDistribution() onlyOwner public returns (bool) { | |
distributionFinished = true; | |
emit DistrFinished(); | |
return true; | |
} | |
function withdrawForeignTokens(address _tokenContract) public returns (bool) { | |
require(msg.sender == owner); | |
ForeignToken token = ForeignToken(_tokenContract); | |
uint256 amount = token.balanceOf(address(this)); | |
return token.transfer(owner, amount); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment