This contract's source code is verified! Compiler
0.6.0+commit.26b70077
File 1 of 4: ERC20Contract.sol
pragma solidity ^0.6.0;
abstract contract ERC20Interface {
function totalSupply ( ) public virtual view returns (uint ) ;
function balanceOf (address tokenOwner ) public virtual view returns (uint256 balance ) ;
function allowance (address tokenOwner, address spender ) public virtual view returns (uint256 remaining ) ;
function transfer (address to, uint256 tokens ) public virtual returns (bool success ) ;
function approve (address spender, uint256 tokens ) public virtual returns (bool success ) ;
function transferFrom (address from , address to, uint256 tokens ) public virtual returns (bool success ) ;
event Transfer (address indexed from , address indexed to, uint256 tokens ) ;
event Approval (address indexed tokenOwner, address indexed spender, uint256 tokens ) ;
}File 2 of 4: HATCH.sol
pragma solidity ^0.6.0;
import './SafeMath.sol' ;
import './ERC20Contract.sol' ;
import './Owned.sol' ;
contract HatchToken is ERC20Interface , Owned {
using SafeMath for uint256 ;
string public symbol = "HATCH" ;
string public name = "HatchDAO" ;
uint256 public decimals = 18 ;
uint256 private maxCapSupply = 1e7 * 10 * * (decimals);
uint256 _totalSupply = 520000 * 10 * * (decimals);
address incubator;
mapping (address = > uint256 ) balances;
mapping (address = > mapping (address = > uint256 )) allowed;
constructor ( ) public {
balances[owner] = balances[owner].add(_totalSupply);
emit Transfer(address (0 ),owner, _totalSupply);
}
function SetIncubator (address _address ) external onlyOwner {
require (_address ! = address (0 ), "Invalid address" );
incubator = _address;
}
function MintTokens (uint256 _amount, address _beneficiary ) public returns (bool ) {
require (msg .sender = = incubator);
require (_beneficiary ! = address (0 ), "Invalid address" );
require (_totalSupply.add(_amount) < = maxCapSupply, "exceeds max cap supply 10 million" );
_totalSupply = _totalSupply.add(_amount);
balances[_beneficiary] = balances[_beneficiary].add(_amount);
emit Transfer(address (0 ),_beneficiary, _amount);
return true ;
}
function BurnTokens (uint256 _amount ) external {
_burn(_amount, msg .sender );
}
function _burn (uint256 _amount, address _account ) internal {
require (balances[_account] > = _amount, "insufficient account balance" );
_totalSupply = _totalSupply.sub(_amount);
balances[_account] = balances[_account].sub(_amount);
emit Transfer(_account, address (0 ), _amount);
}
function totalSupply ( ) public override view returns (uint256 ) {
return _totalSupply;
}
function balanceOf (address tokenOwner ) public override view returns (uint256 balance ) {
return balances[tokenOwner];
}
function transfer (address to, uint256 tokens ) public override returns (bool success ) {
require (address (to) ! = address (0 ));
require (balances[msg .sender ] > = tokens );
require (balances[to].add(tokens) > = balances[to]);
balances[msg .sender ] = balances[msg .sender ].sub(tokens);
balances[to] = balances[to].add(tokens);
emit Transfer(msg .sender ,to,tokens);
return true ;
}
function approve (address spender, uint256 value ) public override returns (bool ) {
_approve(msg .sender , spender, value);
return true ;
}
function transferFrom (address from , address to, uint256 tokens ) public override returns (bool success ) {
require (tokens < = allowed[from ][msg .sender ]);
require (balances[from ] > = tokens);
require (from ! = address (0 ), "Invalid address" );
require (to ! = address (0 ), "Invalid address" );
balances[from ] = balances[from ].sub(tokens);
balances[to] = balances[to].add(tokens);
allowed[from ][msg .sender ] = allowed[from ][msg .sender ].sub(tokens);
emit Transfer(from ,to,tokens);
return true ;
}
function allowance (address tokenOwner, address spender ) public override view returns (uint256 remaining ) {
return allowed[tokenOwner][spender];
}
function increaseAllowance (address spender, uint256 addedValue ) public returns (bool ) {
_approve(msg .sender , spender, allowed[msg .sender ][spender].add(addedValue));
return true ;
}
function decreaseAllowance (address spender, uint256 subtractedValue ) public returns (bool ) {
_approve(msg .sender , spender, allowed[msg .sender ][spender].sub(subtractedValue));
return true ;
}
function _approve (address owner, address spender, uint256 value ) internal {
require (owner ! = address (0 ), "ERC20: approve from the zero address" );
require (spender ! = address (0 ), "ERC20: approve to the zero address" );
allowed[owner][spender] = value;
emit Approval(owner, spender, value);
}
}File 3 of 4: Owned.sol
pragma solidity ^0.6.0;
contract Owned {
address payable public owner;
event OwnershipTransferred (address indexed _from, address indexed _to ) ;
constructor ( ) public {
owner = msg .sender ;
}
modifier onlyOwner {
require (msg .sender = = owner);
_ ;
}
function transferOwnership (address payable _newOwner ) public onlyOwner {
owner = _newOwner;
emit OwnershipTransferred(msg .sender , _newOwner);
}
}File 4 of 4: SafeMath.sol
pragma solidity ^0.6.0;
library SafeMath {
function mul (uint256 a, uint256 b ) internal pure returns (uint256 ) {
if (a = = 0 ) {
return 0 ;
}
uint256 c = a * b;
assert (c / a = = b);
return c;
}
function div (uint256 a, uint256 b ) internal pure returns (uint256 ) {
uint256 c = a / b;
return c;
}
function sub (uint256 a, uint256 b ) internal pure returns (uint256 ) {
assert (b < = a);
return a - b;
}
function add (uint256 a, uint256 b ) internal pure returns (uint256 ) {
uint256 c = a + b;
assert (c > = a);
return c;
}
function ceil (uint a, uint m ) internal pure returns (uint r ) {
return (a + m - 1 ) / m * m;
}
}{
"compilationTarget" : {
"HATCH.sol" : "HatchToken"
} ,
"evmVersion" : "istanbul" ,
"libraries" : { } ,
"metadata" : {
"bytecodeHash" : "ipfs"
} ,
"optimizer" : {
"enabled" : false ,
"runs" : 200
} ,
"remappings" : [ ]
} [{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenOwner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","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":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"BurnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_beneficiary","type":"address"}],"name":"MintTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"SetIncubator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"remaining","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]