Ungültiger Opcode für this.balance wenn Vertragssaldo > 0

Ich erhalte eine Ausnahme, wenn ich getBalance in Remix aufrufe und der Vertragssaldo größer als 0 ist (d. h. ich habe etwas Ether mit der Fallback-Funktion gesendet):

Ausnahme während der Ausführung. (ungültiger Opcode). Bitte debuggen Sie die Transaktion für weitere Informationen.

Wenn der Vertragssaldo 0 ist, gibt getBalance korrekterweise 0 zurück.

pragma solidity ^0.4.0;

contract Test {

    function() payable {}

    function getBalance() public constant returns(uint bal) {
        bal = this.balance;
        return bal;
    }

} 

Antworten (2)

Es gibt keinen Fehler in Ihrem Code, denke ich, nachdem Sie eine Transaktion an Ihren Vertrag gesendet haben, indem Sie die Funktion verwenden, die Sie mit einem Nicht-Null-Wert fallbackaufrufen . getbalanceWährend getbalance keine kostenpflichtige Funktion ist, erhalten Sie den erwähnten Fehler. Stellen Sie also nach dem Aufrufen von getbalance sicher, dass der Wert im Remix-Transaktionswert 0 ist:

Geben Sie hier die Bildbeschreibung ein

Tatsächlich habe ich den Wert für jeden Versuch dort gelassen. Wie peinlich :)

Ich hatte ähnliche Probleme. Ich denke, es ist ein Browser-Cache-Problem. Versuchen Sie, die Seite zu aktualisieren, aber kopieren Sie zuerst die Vertragsadresse, damit Sie sie später ansehen können, indem Sie auf die Schaltfläche "An Adresse" klicken.