Created
May 4, 2018 02:12
-
-
Save vieyang/c1b3daa01bf1f663f3172b212c9188ca to your computer and use it in GitHub Desktop.
MySunshine
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
pragma solidity ^0.4.8; | |
contract ERC20Interface { | |
function totalSupply() public constant returns (uint256 supply); | |
function balance() public constant returns (uint256); | |
function balanceOf(address _owner) public constant returns (uint256); | |
function transfer(address _to, uint256 _value) public returns (bool success); | |
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); | |
function approve(address _spender, uint256 _value) public returns (bool success); | |
function allowance(address _owner, address _spender) public constant returns (uint256 remaining); | |
event Transfer(address indexed _from, address indexed _to, uint256 _value); | |
event Approval(address indexed _owner, address indexed _spender, uint256 _value); | |
} | |
contract MySunshine is ERC20Interface { | |
string public constant symbol = "MS"; | |
string public constant name = "MySunshine"; | |
uint8 public constant decimals = 0; | |
uint256 _totalSupply = 0; | |
uint256 _airdropAmount = 42; | |
mapping(address => uint256) balances; | |
// Owner of account approves the transfer of an amount to another account | |
mapping(address => mapping (address => uint256)) allowed; | |
function MySunshine() { | |
balances[msg.sender] = _airdropAmount * 1000; | |
_totalSupply = balances[msg.sender]; | |
} | |
function totalSupply() constant returns (uint256 supply) { | |
return _totalSupply; | |
} | |
// What's my balance? | |
function balance() constant returns (uint256) { | |
return getBalance(msg.sender); | |
} | |
// What is the balance of a particular account? | |
function balanceOf(address _address) constant returns (uint256) { | |
return getBalance(_address); | |
} | |
// Transfer the balance from owner's account to another account | |
function transfer(address _to, uint256 _amount) returns (bool success) { | |
initialize(msg.sender); | |
if (balances[msg.sender] >= _amount | |
&& _amount > 0) { | |
initialize(_to); | |
if (balances[_to] + _amount > balances[_to]) { | |
balances[msg.sender] -= _amount; | |
balances[_to] += _amount; | |
Transfer(msg.sender, _to, _amount); | |
return true; | |
} else { | |
return false; | |
} | |
} else { | |
return false; | |
} | |
} | |
// Send _value amount of tokens from address _from to address _to | |
// The transferFrom method is used for a withdraw workflow, allowing contracts to send | |
// tokens on your behalf, for example to "deposit" to a contract address and/or to charge | |
// fees in sub-currencies; the command should fail unless the _from account has | |
// deliberately authorized the sender of the message via some mechanism; we propose | |
// these standardized APIs for approval: | |
function transferFrom(address _from, address _to, uint256 _amount) returns (bool success) { | |
initialize(_from); | |
if (balances[_from] >= _amount | |
&& allowed[_from][msg.sender] >= _amount | |
&& _amount > 0) { | |
initialize(_to); | |
if (balances[_to] + _amount > balances[_to]) { | |
balances[_from] -= _amount; | |
allowed[_from][msg.sender] -= _amount; | |
balances[_to] += _amount; | |
Transfer(_from, _to, _amount); | |
return true; | |
} else { | |
return false; | |
} | |
} else { | |
return false; | |
} | |
} | |
// Allow _spender to withdraw from your account, multiple times, up to the _value amount. | |
// If this function is called again it overwrites the current allowance with _value. | |
function approve(address _spender, uint256 _amount) returns (bool success) { | |
allowed[msg.sender][_spender] = _amount; | |
Approval(msg.sender, _spender, _amount); | |
return true; | |
} | |
function allowance(address _owner, address _spender) constant returns (uint256 remaining) { | |
return allowed[_owner][_spender]; | |
} | |
// internal private functions | |
function initialize(address _address) internal returns (bool success) { | |
balances[_address] += _airdropAmount; | |
_totalSupply += _airdropAmount; | |
} | |
function getBalance(address _address) internal returns (uint256) { | |
return balances[_address] + _airdropAmount; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment