VM-Ausnahme: ungültiger JUMP, wenn ich eine zweite Funktion aufrufe

Ich experimentiere mit Solidity Browser

Hier ist mein Vertragscode:

Vertragstest {

    Mapping (Adresse => uint256) weismap;

    Funktion bet(uint vote) Zahlbare Renditen (uint256 weis) {
        if (msg.value==0) throw;
        weismap[msg.sender]= msg.value;
        return weismap[msg.sender];
    }

    Funktion test() gibt zurück (uint myVote) {
           Rückgabe 1;
    }
}

Wenn ich als Transaktionswert 1 einstelle

Als Transaktionswert habe ich 1 gesetzt

, erstelle den Kontrakt und rufe die Funktion Wette mit 1 als Parameter auf

Die Funktion wird erfolgreich ausgeführt.

Wenn ich danach die Funktion test() aufrufe, bekomme ich

VM-Ausnahme: ungültiger JUMP

Irgendeine Idee, was falsch ist?

Wenn Sie 1 in den Browser eingeben, wird dies als 1 Ether verstanden, nicht als 1 Wei.
Ja, das weiß ich, aber ich verstehe nicht, was das mit Fehlern zu tun hat. Außerdem ist msg.value in wei. Bist du sicher, dass das relevant ist?

Antworten (1)

Sie müssen das constantSchlüsselwort wie folgt zur test()Funktion hinzufügen:

pragma solidity ^0.4.0;
contract Test {
    mapping (address => uint256) weismap;

    function bet(uint vote) payable returns (uint256 weis) {
        if (msg.value==0) 
            throw;
        weismap[msg.sender]= msg.value;
        return  weismap[msg.sender];
    }

    function test() constant returns (uint myVote)  {
        return 1;
    }
}

Calling bet(...)mit dem Wert 2. Beachten Sie, dass ich mit der Transaktion auch 2 Ether sende:

Geben Sie hier die Bildbeschreibung ein

Jetzt rufe ich test() UND ich habe den Wert 2 gelassen . Dieser Aufruf test()schlägt fehl, da die konstante Funktion als Transaktion aufgerufen wird, nicht als Lesen der Werte aus der Blockchain:

Geben Sie hier die Bildbeschreibung ein

Wenn ich test() AND I've set value to blank aufrufe , ist dieser Aufruf erfolgreich, test()da die konstante Funktion zum Lesen der Werte aus der Blockchain aufgerufen wird:

Geben Sie hier die Bildbeschreibung ein

Entschuldigung, aber es schlägt fehl. Hast du es selbst ausprobiert? Funktioniert es?
Jawohl. Versuchte es in Browser-Solidity mit local geth 1.4.11-stable. Antwort mit weiteren Details aktualisiert.
Ja, aber Sie haben die Wette nicht gecallt. Könntest du das bitte versuchen? Zuerst legen Sie den Transaktionswert fest. Dann Call-Wette mit sagen wir 2. Dann testen. Funktioniert es? Vielen Dank