github.com/inklabsfoundation/inkchain@v0.17.1-0.20181025012015-c3cef8062f19/examples/xc/qtum/contracts/Token.sol (about)

     1  pragma solidity ^0.4.13;
     2  
     3  contract ERC20 {
     4  
     5      uint256 public totalSupply;
     6  
     7      mapping(address => uint256) public balanceOf;
     8  
     9      mapping(address => mapping(address => uint256)) public allowance;
    10  
    11      event Transfer(address indexed from, address indexed to, uint256 value);
    12  
    13      event Approval(address indexed owner, address indexed spender, uint256 value);
    14  
    15      function _transfer(address _from, address _to, uint _value) internal {
    16  
    17          require(balanceOf[_from] > _value);
    18  
    19          require(balanceOf[_to] + _value > balanceOf[_to]);
    20  
    21          balanceOf[_from] -= _value;
    22  
    23          balanceOf[_to] += _value;
    24  
    25          Transfer(_from, _to, _value);
    26      }
    27  
    28      function transfer(address _to, uint256 _value) {
    29  
    30          _transfer(msg.sender, _to, _value);
    31      }
    32  
    33      function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {
    34  
    35          require(_value < allowance[_from][msg.sender]);
    36  
    37          allowance[_from][msg.sender] -= _value;
    38  
    39          _transfer(_from, _to, _value);
    40  
    41          return true;
    42      }
    43  
    44      function approve(address _spender, uint256 _value) returns (bool success) {
    45  
    46          allowance[msg.sender][_spender] = _value;
    47  
    48          Approval(msg.sender, _spender, _value);
    49  
    50          return true;
    51      }
    52  }
    53  
    54  contract Token is ERC20 {
    55  
    56      uint8 public constant decimals = 9;
    57  
    58      uint256 public constant initialSupply = 10 * (10 ** 8) * (10 ** uint256(decimals));
    59  
    60      string public constant name = 'INK Coin';
    61  
    62      string public constant symbol = 'INK';
    63  
    64  
    65      function(){
    66  
    67          revert();
    68      }
    69  
    70      function Token() {
    71  
    72          balanceOf[msg.sender] = initialSupply;
    73  
    74          totalSupply = initialSupply;
    75      }
    76  
    77      function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) {
    78  
    79          if (approve(_spender, _value)) {
    80  
    81              if (!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) {
    82  
    83                  revert();
    84              }
    85  
    86              return true;
    87          }
    88      }
    89  
    90  }