Created
August 2, 2019 07:13
-
-
Save mikewlange/5f2477f7b7dfb772304f11b4ce9eecf4 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.5.7; | |
contract Ownable { | |
address public owner; | |
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); | |
constructor() public { | |
owner = msg.sender; | |
} | |
modifier onlyOwner() { | |
require(msg.sender == owner); | |
_; | |
} | |
function transferOwnership(address newOwner) public onlyOwner { | |
require(newOwner != address(0) && newOwner != owner); | |
emit OwnershipTransferred(owner, newOwner); | |
owner = newOwner; | |
} | |
} | |
library SafeMath { | |
function mul(uint256 a, uint256 b) internal pure returns (uint256) { | |
uint256 c = a * b; | |
assert(a == 0 || c / a == b); | |
return c; | |
} | |
function div(uint256 a, uint256 b) internal pure returns (uint256) { | |
assert(b > 0); | |
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; | |
} | |
} | |
contract ERC223ReceivingContract { | |
function tokenFallback(address _from, uint256 _value, bytes memory _data) public pure { | |
_from; | |
_value; | |
_data; | |
} | |
} | |
contract ERC223 { | |
event Transfer(address indexed _from, address indexed _to, uint256 _value, bytes _data); | |
} | |
contract ERC20 { | |
event Transfer(address indexed _from, address indexed _to, uint256 _value); | |
event Approval(address indexed _tokenOwner, address indexed _spender, uint _value); | |
} | |
// ERC223 https://github.com/Dexaran/ERC223-token-standard | |
contract StandardToken is ERC20, ERC223, Ownable { | |
uint256 public totalSupply; | |
using SafeMath for uint256; | |
mapping(address => uint256) balances; | |
mapping(address => mapping (address => uint256)) internal allowed; | |
function transferToAddress(address _to, uint256 _value, bytes memory _data) internal returns (bool) { | |
balances[msg.sender] = balances[msg.sender].sub(_value); | |
balances[_to] = balances[_to].add(_value); | |
emit Transfer(msg.sender, _to, _value); | |
emit Transfer(msg.sender, _to, _value, _data); | |
return true; | |
} | |
function transferToContract(address _to, uint256 _value, bytes memory _data) internal returns (bool) { | |
balances[msg.sender] = balances[msg.sender].sub(_value); | |
balances[_to] = balances[_to].add(_value); | |
ERC223ReceivingContract receiver = ERC223ReceivingContract(_to); | |
receiver.tokenFallback(msg.sender, _value, _data); | |
emit Transfer(msg.sender, _to, _value); | |
emit Transfer(msg.sender, _to, _value, _data); | |
return true; | |
} | |
function transfer(address _to, uint256 _value, bytes memory _data) public returns (bool) { | |
require(_to != address(0)); | |
require(_value <= balances[msg.sender]); | |
require(_value > 0); | |
uint256 codeLength; | |
assembly { | |
codeLength := extcodesize(_to) | |
} | |
if(codeLength > 0) { | |
return transferToContract(_to, _value, _data); | |
} else { | |
return transferToAddress(_to, _value, _data); | |
} | |
} | |
function transfer(address _to, uint256 _value) public returns (bool) { | |
require(_to != address(0)); | |
require(_value <= balances[msg.sender]); | |
require(_value > 0); | |
uint256 codeLength; | |
bytes memory empty; | |
assembly { | |
codeLength := extcodesize(_to) | |
} | |
if(codeLength > 0) { | |
return transferToContract(_to, _value, empty); | |
} else { | |
return transferToAddress(_to, _value, empty); | |
} | |
} | |
function transferFrom(address _from, address _to, uint _value) public returns (bool) { | |
require(_to != address(0)); | |
require(_value > 0); | |
require(_value <= balances[_from]); | |
require(_value <= allowed[_from][msg.sender]); | |
bytes memory empty; | |
balances[_from] = balances[_from].sub(_value); | |
balances[_to] = balances[_to].add(_value); | |
allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); | |
emit Transfer(_from, _to, _value); | |
emit Transfer(_from, _to, _value, empty); | |
return true; | |
} | |
function balanceOf(address _address) public view returns (uint256 balance) { | |
return balances[_address]; | |
} | |
function allowance(address _tokenOwner, address _spender) public view returns (uint) { | |
return allowed[_tokenOwner][_spender]; | |
} | |
function approve(address _spender, uint _value) public returns (bool) { | |
require(_spender != address(0)); | |
allowed[msg.sender][_spender] = _value; | |
emit Approval(msg.sender, _spender, _value); | |
return true; | |
} | |
} | |
contract CFDToken is StandardToken { | |
string public constant name = "CFDToken"; | |
uint public constant decimals = 18; | |
string public constant symbol = "CFDM"; | |
constructor() public { | |
totalSupply = 7000000 * (10**decimals); | |
owner = msg.sender; | |
balances[msg.sender] = 7000000 * (10**decimals); | |
} | |
function() external { | |
revert(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment