Error de código de operación de solidez al enviar monedas a una dirección

Así que recibo el siguiente error cuando intento enviar las monedas a otra dirección, y con el depurador, no puedo averiguar dónde está el problema. ¿Qué estoy haciendo mal? (Acabo de empezar a aprender solidez hace unos días).

solidez de pragma ^0.4.0;

contract HelloWorld {

    mapping (address => uint) balances;
    address owner;

    event Transfer(address indexed _from, address indexed _to, uint256 _value);

    function HelloWorld() {
        balances[msg.sender] = 1500;
        owner = msg.sender;
    }

    function getBalances(address addr) returns(uint) {
        return balances[addr];
    }

    function getOwner() returns(address) {
        return owner;
    }

    function sendCoin(address receiver, uint amount) returns(bool success) {

        if(balances[msg.sender] < amount) return false; // Check amount of coins

        balances[msg.sender] -= amount;
        balances[receiver] += amount;

        Transfer(msg.sender, receiver, amount);
        return true;
    }
}

Error:

ingrese la descripción de la imagen aquí

Respuestas (2)

No hay ningún error con su contrato de la pregunta implementada en testrpc, por ejemplo, con la última versión estable del compilador:

ingrese la descripción de la imagen aquí

Ok, lo arreglé reemplazando msg.sender con la dirección del propietario var declarada en el constructor. ¿Alguien sabe por qué ahora funciona?

contract HelloWorld {

    mapping (address => uint) balances;
    address owner;

    event Transfer(address indexed _from, address indexed _to, uint256 _value);

    function HelloWorld() {
        balances[msg.sender] = 1500;
        owner = msg.sender;
    }

    function getBalance(address addr) returns(uint) {
        return balances[addr];
    }

    function getOwner() returns(address) {
        return owner;
    }

    function sendCoin(address receiver, uint amount) returns(bool success) {

        if(amount > balances[owner]) return false; // Check balance

        balances[owner] -= amount;
        balances[receiver] += amount;

        Transfer(owner, receiver, amount);
        return true;
    }
}
Lo único que puedo ver es que probablemente esté utilizando la versión 0.4.0 del compilador Solidity, mientras que @ViktorBaranov probó el mismo código con la versión 0.4.13. Aunque este parece ser un código muy simple, podría ser que el compilador anterior tuviera un error.