Ошибка кода операции Solidity при отправке монеты на адрес

Итак, я получаю сообщение об ошибке ниже при попытке отправить монеты на другой адрес, и с помощью отладчика я не могу понять, в чем проблема. Что я делаю не так? (Я только начал изучать твердость несколько дней назад).

прочность прагмы ^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;
    }
}

Ошибка:

введите описание изображения здесь

Ответы (2)

Нет ошибки с вашим Контрактом из вопроса, развернутого на testrpc, например, с последней стабильной версией компилятора:

введите описание изображения здесь

Хорошо, я исправил это, заменив msg.sender адресом владельца var, объявленным в конструкторе. Кто-нибудь знает, почему теперь это работает?

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;
    }
}
Единственное, что я вижу, это то, что вы, вероятно, используете компилятор Solidity версии 0.4.0, тогда как @ViktorBaranov тестировал тот же код с версией 0.4.13. Хотя это кажется очень простым кодом, возможно, в предыдущем компиляторе была ошибка.