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
, 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?
Sie müssen das constant
Schlü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:
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:
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:
geth 1.4.11-stable
. Antwort mit weiteren Details aktualisiert.
Xavier Leprêtre B9lab
Gyonder