103 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
contract owned {
 | 
						|
    address public owner;
 | 
						|
 | 
						|
    function owned() {
 | 
						|
        owner = msg.sender;
 | 
						|
    }
 | 
						|
 | 
						|
    modifier onlyOwner {
 | 
						|
        if (msg.sender != owner) throw;
 | 
						|
        _
 | 
						|
    }
 | 
						|
 | 
						|
    function transferOwnership(address newOwner) onlyOwner {
 | 
						|
        owner = newOwner;
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); }
 | 
						|
 | 
						|
contract MyToken is owned { 
 | 
						|
    /* Public variables of the token */
 | 
						|
    string public name;
 | 
						|
    string public symbol;
 | 
						|
    string public version;
 | 
						|
    uint8 public decimals;
 | 
						|
    uint256 public totalSupply;
 | 
						|
    address public minter;
 | 
						|
 | 
						|
    /* This creates an array with all balances */
 | 
						|
    mapping (address => uint256) public balanceOf;
 | 
						|
    mapping (address => mapping (address => uint256)) public allowance;
 | 
						|
    mapping (address => mapping (address => uint256)) public spentAllowance;
 | 
						|
 | 
						|
    /* This generates a public event on the blockchain that will notify clients */
 | 
						|
    event Transfer(address indexed from, address indexed to, uint256 value);
 | 
						|
 | 
						|
    /* Initializes contract with initial supply tokens to the creator of the contract */
 | 
						|
    function MyToken(
 | 
						|
        uint256 initialSupply, 
 | 
						|
        string tokenName, 
 | 
						|
        uint8 decimalUnits, 
 | 
						|
        string tokenSymbol, 
 | 
						|
        string versionOfTheCode, address initMinter
 | 
						|
        ) {
 | 
						|
        balanceOf[msg.sender] = initialSupply;              // Give the creator all initial tokens                    
 | 
						|
        totalSupply = initialSupply;                        // Update total supply
 | 
						|
        name = tokenName;                                   // Set the name for display purposes     
 | 
						|
        symbol = tokenSymbol;                               // Set the symbol for display purposes    
 | 
						|
        decimals = decimalUnits;                            // Amount of decimals for display purposes        
 | 
						|
        version = versionOfTheCode;
 | 
						|
        minter = initMinter;
 | 
						|
    }
 | 
						|
 | 
						|
    /* Send coins */
 | 
						|
    function transfer(address _to, uint256 _value) {
 | 
						|
        if (balanceOf[msg.sender] < _value) throw;           // Check if the sender has enough   
 | 
						|
        if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows
 | 
						|
        balanceOf[msg.sender] -= _value;                     // Subtract from the sender
 | 
						|
        balanceOf[_to] += _value;                            // Add the same to the recipient            
 | 
						|
        Transfer(msg.sender, _to, _value);                   // Notify anyone listening that this transfer took place
 | 
						|
    }
 | 
						|
 | 
						|
    /* Allow another contract to spend some tokens in your behalf */
 | 
						|
    function approveAndCall(address _spender, uint256 _value, bytes _extraData) 
 | 
						|
        returns (bool success) {
 | 
						|
        allowance[msg.sender][_spender] = _value;     
 | 
						|
        tokenRecipient spender = tokenRecipient(_spender);
 | 
						|
        spender.receiveApproval(msg.sender, _value, this, _extraData); 
 | 
						|
        return true; 
 | 
						|
    }
 | 
						|
 | 
						|
    /* A contract attempts to get the coins */
 | 
						|
    function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {
 | 
						|
        if (balanceOf[_from] < _value) throw;                 // Check if the sender has enough   
 | 
						|
        if (balanceOf[_to] + _value < balanceOf[_to]) throw;  // Check for overflows
 | 
						|
        if (spentAllowance[_from][msg.sender] + _value > allowance[_from][msg.sender]) throw;   // Check allowance
 | 
						|
        balanceOf[_from] -= _value;                          // Subtract from the sender
 | 
						|
        balanceOf[_to] += _value;                            // Add the same to the recipient            
 | 
						|
        spentAllowance[_from][msg.sender] += _value;
 | 
						|
        Transfer(_from, _to, _value); 
 | 
						|
        return true;
 | 
						|
    } 
 | 
						|
 | 
						|
    /* This unnamed function is called whenever someone tries to send ether to it */
 | 
						|
    function () {
 | 
						|
        throw;     // Prevents accidental sending of ether
 | 
						|
    }
 | 
						|
    
 | 
						|
    function changeMinter(address newMinter) onlyOwner
 | 
						|
    {
 | 
						|
        minter = newMinter;
 | 
						|
    }
 | 
						|
    
 | 
						|
    function mintToken(address target, uint256 mintedAmount)
 | 
						|
    {
 | 
						|
        if (msg.sender != minter) throw;
 | 
						|
        balanceOf[target] += mintedAmount;  
 | 
						|
        totalSupply += mintedAmount;
 | 
						|
        Transfer(0, owner, mintedAmount);
 | 
						|
        Transfer(owner, target, mintedAmount);
 | 
						|
    }
 | 
						|
}
 |