Last active
June 9, 2018 12:39
-
-
Save netkiller/6bc5c826f38c119bebf7ae10aadc9fa3 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
pragma solidity ^0.4.24; | |
/******************************************/ | |
/* Netkiller Batch Token */ | |
/******************************************/ | |
/* Author netkiller <[email protected]> */ | |
/* Home http://www.netkiller.cn */ | |
/* Version 2018-06-09 - Batch transfer */ | |
/******************************************/ | |
contract NetkillerBatchToken { | |
address public owner; | |
string public name; | |
string public symbol; | |
uint public decimals; | |
uint256 public totalSupply; | |
mapping (address => uint256) public balanceOf; | |
mapping (address => mapping (address => uint256)) public allowance; | |
event Transfer(address indexed from, address indexed to, uint256 value); | |
event Burn(address indexed from, uint256 value); | |
event Approval(address indexed owner, address indexed spender, uint256 value); | |
mapping (address => bool) public frozenAccount; | |
event FrozenFunds(address target, bool frozen); | |
bool lock = false; | |
constructor( | |
uint256 initialSupply, | |
string tokenName, | |
string tokenSymbol, | |
uint decimalUnits | |
) public { | |
owner = msg.sender; | |
name = tokenName; | |
symbol = tokenSymbol; | |
decimals = decimalUnits; | |
totalSupply = initialSupply * 10 ** uint256(decimals); | |
balanceOf[msg.sender] = totalSupply; | |
} | |
modifier onlyOwner { | |
require(msg.sender == owner); | |
_; | |
} | |
modifier isLock { | |
require(!lock); | |
_; | |
} | |
function setLock(bool _lock) onlyOwner public{ | |
lock = _lock; | |
} | |
function transferOwnership(address newOwner) onlyOwner public { | |
if (newOwner != address(0)) { | |
owner = newOwner; | |
} | |
} | |
function _transfer(address _from, address _to, uint _value) isLock internal { | |
require (_to != 0x0); | |
require (balanceOf[_from] >= _value); | |
require (balanceOf[_to] + _value > balanceOf[_to]); | |
require(!frozenAccount[_from]); | |
require(!frozenAccount[_to]); | |
balanceOf[_from] -= _value; | |
balanceOf[_to] += _value; | |
emit Transfer(_from, _to, _value); | |
} | |
function transfer(address _to, uint256 _value) public returns (bool success) { | |
_transfer(msg.sender, _to, _value); | |
return true; | |
} | |
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { | |
require(_value <= allowance[_from][msg.sender]); | |
allowance[_from][msg.sender] -= _value; | |
_transfer(_from, _to, _value); | |
return true; | |
} | |
function approve(address _spender, uint256 _value) public returns (bool success) { | |
allowance[msg.sender][_spender] = _value; | |
emit Approval(msg.sender, _spender, _value); | |
return true; | |
} | |
function burn(uint256 _value) onlyOwner public returns (bool success) { | |
require(balanceOf[msg.sender] >= _value); | |
balanceOf[msg.sender] -= _value; | |
totalSupply -= _value; | |
emit Burn(msg.sender, _value); | |
return true; | |
} | |
function burnFrom(address _from, uint256 _value) onlyOwner public returns (bool success) { | |
require(balanceOf[_from] >= _value); | |
require(_value <= allowance[_from][msg.sender]); | |
balanceOf[_from] -= _value; | |
allowance[_from][msg.sender] -= _value; | |
totalSupply -= _value; | |
emit Burn(_from, _value); | |
return true; | |
} | |
function mintToken(address target, uint256 mintedAmount) onlyOwner public { | |
uint256 _amount = mintedAmount * 10 ** uint256(decimals); | |
balanceOf[target] += _amount; | |
totalSupply += _amount; | |
emit Transfer(this, target, _amount); | |
} | |
function freezeAccount(address target, bool freeze) onlyOwner public { | |
frozenAccount[target] = freeze; | |
emit FrozenFunds(target, freeze); | |
} | |
function transferBatch(address[] _to, uint256 _value) public returns (bool success) { | |
for (uint i=0; i<_to.length; i++) { | |
_transfer(msg.sender, _to[i], _value); | |
} | |
return true; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment