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 }