mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			77 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
pragma solidity >=0.0;
 | 
						|
 | 
						|
 | 
						|
/// @title Test token contract - Allows testing of token transfers with multisig wallet.
 | 
						|
contract TestToken {
 | 
						|
 | 
						|
    event Transfer(address indexed from, address indexed to, uint256 value);
 | 
						|
    event Approval(address indexed owner, address indexed spender, uint256 value);
 | 
						|
 | 
						|
    mapping (address => uint256) balances;
 | 
						|
    mapping (address => mapping (address => uint256)) allowed;
 | 
						|
    uint256 public totalSupply;
 | 
						|
 | 
						|
    string constant public name = "Test Token";
 | 
						|
    string constant public symbol = "TT";
 | 
						|
    uint8 constant public decimals = 1;
 | 
						|
 | 
						|
    function issueTokens(address _to, uint256 _value)
 | 
						|
        public
 | 
						|
    {
 | 
						|
        balances[_to] += _value;
 | 
						|
        totalSupply += _value;
 | 
						|
    }
 | 
						|
 | 
						|
    function transfer(address _to, uint256 _value)
 | 
						|
        public
 | 
						|
        returns (bool success)
 | 
						|
    {
 | 
						|
        if (balances[msg.sender] < _value) {
 | 
						|
            revert();
 | 
						|
        }
 | 
						|
        balances[msg.sender] -= _value;
 | 
						|
        balances[_to] += _value;
 | 
						|
        emit Transfer(msg.sender, _to, _value);
 | 
						|
        return true;
 | 
						|
    }
 | 
						|
 | 
						|
    function transferFrom(address _from, address _to, uint256 _value)
 | 
						|
        public
 | 
						|
        returns (bool success)
 | 
						|
    {
 | 
						|
        if (balances[_from] < _value || allowed[_from][msg.sender] < _value) {
 | 
						|
            revert();
 | 
						|
        }
 | 
						|
        balances[_to] += _value;
 | 
						|
        balances[_from] -= _value;
 | 
						|
        allowed[_from][msg.sender] -= _value;
 | 
						|
        emit Transfer(_from, _to, _value);
 | 
						|
        return true;
 | 
						|
    }
 | 
						|
 | 
						|
    function approve(address _spender, uint256 _value)
 | 
						|
        public
 | 
						|
        returns (bool success)
 | 
						|
    {
 | 
						|
        allowed[msg.sender][_spender] = _value;
 | 
						|
        emit Approval(msg.sender, _spender, _value);
 | 
						|
        return true;
 | 
						|
    }
 | 
						|
 | 
						|
    function allowance(address _owner, address _spender)
 | 
						|
        view
 | 
						|
        public
 | 
						|
        returns (uint256 remaining)
 | 
						|
    {
 | 
						|
        return allowed[_owner][_spender];
 | 
						|
    }
 | 
						|
 | 
						|
    function balanceOf(address _owner)
 | 
						|
        view
 | 
						|
        public
 | 
						|
        returns (uint256 balance)
 | 
						|
    {
 | 
						|
        return balances[_owner];
 | 
						|
    }
 | 
						|
}
 |