Solidity-Opcode-Fehler beim Senden von Coins an eine Adresse

Ich erhalte also den folgenden Fehler, wenn ich versuche, die Coins an eine andere Adresse zu senden, und mit dem Debugger kann ich nicht herausfinden, wo das Problem liegt. Was mache ich falsch? (Ich habe erst vor ein paar Tagen angefangen, Solidität zu lernen).

Pragma Solidität ^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;
    }
}

Fehler:

Geben Sie hier die Bildbeschreibung ein

Antworten (2)

Es gibt keinen Fehler mit Ihrem Vertrag von der auf testrpc bereitgestellten Frage, beispielsweise mit der letzten stabilen Version des Compilers:

Geben Sie hier die Bildbeschreibung ein

Ok, ich habe es behoben, indem ich msg.sender durch die im Konstruktor deklarierte Eigentümeradresse var ersetzt habe. Weiß jemand warum es jetzt funktioniert?

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;
    }
}
Das einzige, was ich sehen kann, ist, dass Sie wahrscheinlich die Solidity-Compiler-Version 0.4.0 verwenden, während @ViktorBaranov denselben Code mit Version 0.4.13 getestet hat. Obwohl dies ein sehr einfacher Code zu sein scheint, könnte es sein, dass der frühere Compiler einen Fehler hatte.