18.52
($1.57%)
| 1 Gwei
pragma solidity ^0.4.26; // --------------------------------------------------------------------------------------------------------- // 'UniversalCoin' ERC223 token contract // // Deployed to : 0xeA5194232f499925c3F6ADF8CB4F26646BA06481 // Symbol : UVC // Name : UniversalCoin // Total supply: 40,000,000,000 // Decimals : 5 // Published : 27 October 2019 // // Adapted from OpenZeppelin (ERC20) + Saturn DAO contracts by @Dan_UniversalCoin and @Deano_UniversalCoin // --------------------------------------------------------------------------------------------------------- interface IERC223 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); function transfer(address recipient, uint256 amount, bytes data) external returns (bool); event ERC223Transfer(address indexed from, address indexed to, uint256 value, bytes data); } contract Context { constructor () internal { } function _msgSender() internal view returns (address) {return msg.sender;} function _msgData() internal view returns (bytes memory) { this; return msg.data; } } contract ERC223 is Context, IERC223 { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; function isContract(address account) private view returns (bool) { uint length; assembly { length := extcodesize(account) } if(length>0) { return true; } else { return false; } } function totalSupply() public view returns (uint256) {return _totalSupply;} function balanceOf(address account) public view returns (uint256) {return _balances[account];} function allowance(address owner, address spender) public view returns (uint256) {return _allowances[owner][spender];} function transfer(address recipient, uint256 amount) external returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function transfer(address recipient, uint256 amount, bytes data) external returns (bool) { _transfer(_msgSender(), recipient, amount, data); return true; } function approve(address spender, uint256 amount) public returns (bool) { _approve(_msgSender(), spender, amount); return true; } // Note this function requires explicit workaround from remaining ERC223 functionality otherwise function fails function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) { require(sender != address(0), "Transfer from the zero address"); require(recipient != address(0), "Transfer to the zero address"); _balances[sender] = _balances[sender].sub(amount, "Transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "Transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "Decreased allowance below zero")); return true; } function _transfer(address sender, address recipient, uint256 amount) internal { bytes memory empty = hex"00000000"; if(isContract(recipient)) { return _transferToContract(sender, recipient, amount, empty); } else { return _transferToAddress(sender, recipient, amount, empty); } } function _transfer(address sender, address recipient, uint256 amount, bytes memory data) internal { if(isContract(recipient)) { return _transferToContract(sender, recipient, amount, data); } else { return _transferToAddress(sender, recipient, amount, data); } } function _transferToContract(address sender, address recipient, uint256 amount, bytes memory data) internal { require(sender != address(0), "Transfer from the zero address"); require(recipient != address(0), "Transfer to the zero address"); _balances[sender] = _balances[sender].sub(amount, "Transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); IERC223Recipient receiver = IERC223Recipient(recipient); receiver.tokenFallback(msg.sender, amount, data); emit Transfer(sender, recipient, amount); emit ERC223Transfer(sender, recipient, amount, data); } function _transferToAddress(address sender, address recipient, uint256 amount, bytes memory data) internal { require(sender != address(0), "Transfer from the zero address"); require(recipient != address(0), "Transfer to the zero address"); _balances[sender] = _balances[sender].sub(amount, "Transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); emit ERC223Transfer(sender, recipient, amount, data); } function _mint(address account, uint256 amount) internal { bytes memory empty = hex"00000000"; require(account != address(0), "Mint to the zero address"); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); emit ERC223Transfer(address(0), account, amount, empty); } function _burn(address account, uint256 amount) internal { bytes memory empty = hex"00000000"; require(account != address(0), "Burn from the zero address"); _balances[account] = _balances[account].sub(amount, "Burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); emit ERC223Transfer(account, address(0), amount, empty); } function _approve(address owner, address spender, uint256 amount) internal { require(owner != address(0), "Approve from the zero address"); require(spender != address(0), "Approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _burnFrom(address account, uint256 amount) internal { _burn(account, amount); _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "Burn amount exceeds allowance")); } } contract ERC223Burnable is Context, ERC223 { function burn(uint256 amount) public {_burn(_msgSender(), amount);} function burnFrom(address account, uint256 amount) public {_burnFrom(account, amount);} } contract ERC223Detailed is IERC223 { string private _name; string private _symbol; uint8 private _decimals; constructor (string memory name, string memory symbol, uint8 decimals) public { _name = name; _symbol = symbol; _decimals = decimals; } function name() public view returns (string memory) {return _name;} function symbol() public view returns (string memory) {return _symbol;} function decimals() public view returns (uint8) {return _decimals;} } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) {return sub(a, b, "SafeMath: subtraction overflow");} function div(uint256 a, uint256 b) internal pure returns (uint256) {return div(a, b, "SafeMath: division by zero");} function mod(uint256 a, uint256 b) internal pure returns (uint256) {return mod(a, b, "SafeMath: modulo by zero");} function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) {return 0;} uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; return c; } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract IERC223Recipient { function tokenFallback(address _from, uint256 _value, bytes memory _data) public; } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) {return _owner;} function isOwner() public view returns (bool) {return _msgSender() == _owner;} function transferOwnership(address newOwner) public onlyOwner {_transferOwnership(newOwner);} modifier onlyOwner() { require(isOwner(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract UniversalCoin is Context, Ownable, ERC223, ERC223Detailed, ERC223Burnable { constructor () public ERC223Detailed("UniversalCoin", "UVC", 5) { _mint(_msgSender(), 40000000000 * (10 ** 5)); } }
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"amount","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"sender","type":"address"},{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"},{"name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"},{"name":"data","type":"bytes"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"data","type":"bytes"}],"name":"ERC223Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]