Created
November 13, 2018 12:02
-
-
Save amarilindra/304ca1bd440841a9aef2fa66e49193c5 to your computer and use it in GitHub Desktop.
Learn with the Smart Education Solution
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
//version 1.3 | |
import "browser/SafeMath.sol"; | |
import "browser/DateTime.sol"; | |
contract ERC20 { | |
function totalSupply() public constant returns (uint256); | |
function balanceOf(address _owner) public constant returns (uint); | |
function transfer(address _to, uint _value) public returns (bool); | |
function transferFrom(address _from, address _to, uint _value) public returns (bool); | |
function approve(address _spender, uint _value) public returns (bool); | |
function allowance(address _owner, address _spender) public constant returns (uint); | |
event Transfer(address indexed _from, address indexed _to, uint _value); | |
event Approval(address indexed _owner, address indexed _spender, uint _value); | |
} | |
contract EdgeSmartToken is ERC20, SafeMath, DateTime { | |
uint256 public constant _totalSupply = 100000000; | |
uint8 public constant _decimals = 18; | |
string public constant symbol = 'EST'; | |
string public constant name = 'Edge Smart Token'; | |
mapping(address => uint256) public balances; | |
mapping(address => mapping(address => uint256)) approved; | |
address EdgeSmartTokenOwner; | |
modifier onlyOwner() { | |
require(msg.sender == EdgeSmartTokenOwner); | |
_; | |
} | |
function EdgeSmartToken() public { | |
EdgeSmartTokenOwner = msg.sender; | |
balances[EdgeSmartTokenOwner] = _totalSupply; | |
} | |
/** | |
* @dev Allows the current owner to transfer control of the contract to a newOwner. | |
* @param newOwner The address to transfer ownership to. | |
*/ | |
function transferOwnership(address newOwner) public onlyOwner { | |
require(newOwner != EdgeSmartTokenOwner); | |
EdgeSmartTokenOwner = newOwner; | |
} | |
function decimals() public constant returns (uint8) { | |
return _decimals; | |
} | |
function totalSupply() public constant returns (uint256) { | |
return _totalSupply; | |
} | |
function balanceOf(address _owner) public constant returns (uint256) { | |
return balances[_owner]; | |
} | |
/** | |
* @dev Transfer self tokens to given address | |
* @param _to destination address | |
* @param _value amount of token values to send | |
* @notice `_value` tokens will be sended to `_to` | |
* @return `true` when transfer done | |
*/ | |
function transfer(address _to, uint256 _value) public returns (bool) { | |
require( | |
balances[msg.sender] >= _value && _value > 0 | |
); | |
balances[msg.sender] = safeSub(balances[msg.sender], _value); | |
balances[_to] = safeAdd(balances[_to], _value); | |
Transfer(msg.sender, _to, _value); | |
return true; | |
} | |
/** | |
* @dev Transfer with approvement mechainsm | |
* @param _from source address, `_value` tokens shold be approved for `sender` | |
* @param _to destination address | |
* @param _value amount of token values to send | |
* @notice from `_from` will be sended `_value` tokens to `_to` | |
* @return `true` when transfer is done | |
*/ | |
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { | |
require( | |
approved[_from][msg.sender] >= _value && balances[_from] >= _value && _value > 0 | |
); | |
balances[_from] = safeSub(balances[_from], _value); | |
balances[_to] = safeAdd(balances[_to], _value); | |
approved[_from][msg.sender] = safeSub(approved[_from][msg.sender], _value); | |
Transfer(_from, _to, _value); | |
return true; | |
} | |
/** | |
* @dev Give to target address ability for self token manipulation without sending | |
* @param _spender target address (future requester) | |
* @param _value amount of token values for approving | |
*/ | |
function approve(address _spender, uint256 _value) public returns (bool) { | |
approved[msg.sender][_spender] = _value; | |
Approval(msg.sender, _spender, _value); | |
return true; | |
} | |
/** | |
* @dev Reset count of tokens approved for given address | |
* @param _spender target address (future requester) | |
*/ | |
function unapprove(address _spender) public { | |
approved[msg.sender][_spender] = 0; | |
} | |
/** | |
* @dev Take allowed tokens | |
* @param _owner The address of the account owning tokens | |
* @param _spender The address of the account able to transfer the tokens | |
* @return Amount of remaining tokens allowed to spent | |
*/ | |
function allowance(address _owner, address _spender) public constant returns (uint256) { | |
return approved[_owner][_spender]; | |
} | |
event Transfer(address indexed _from, address indexed _to, uint256 _value); | |
event Approval(address indexed _owner, address indexed _spender, uint256 _value); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment