Gegeben ist:
pragma solidity ^0.4.24;
contract changeSomVal{
address owner;
bool test;
event showBool(bool showBool);
constructor() public {
owner = msg.sender;
}
modifier onlyOwner() {
if(msg.sender == owner)
_;
}
function () public payable{
emit showBool(test);
}
function changeBoolTrue () public onlyOwner { // returns (bool)
test = true;
emit showBool(test);
}
function changeBoolFalse () public onlyOwner {
test = false;
emit showBool(test);
}
}
Auf Etherscan gibt es immer ein 64 Zeichen langes 0...0 eventLog zurück. Dabei spielt es keine Rolle, welche Funktion aufgerufen wurde. Ich habe es auch mit uint8 (1,2)
for changeBoolTrue() -> test = 1
und versucht changeBoolFalse() -> test = 2
. Ich habe es auch mit einer Rückkehr satt: function changeBoolTrue () public onlyOwner returns (bool)
. Das eventLog wirft immer das gleiche.
Beim Remix sieht es gut aus. Aber in der Realität funktioniert es nicht. Was ist falsch?
Ich kann an dem, was du geschrieben hast, nichts Falsches erkennen . Die Konvention schreibt jedoch vor, dass Sie Ereignisnamen mit Großbuchstaben beginnen sollten.
Ein weiterer Knackpunkt könnte sein, dass Sie den bool-Parameter genauso benannt haben wie das Ereignis. Da Sie nicht auf das Argument verweisen müssen, würde ich Ihr Ereignis so anpassen, dass es wie folgt aussieht:
event ShowBool(bool);
und passen Sie Ihre emit
Anrufe entsprechend an.
Bearbeiten0:
Ich habe Ihren Festvertrag auf Rinkeby eingesetzt, hier . Sie können sehen, dass EtherScan überprüft hat, ob die Quelle mit den Bytecodes hier übereinstimmt .
Der Grund für alle Transaktionen ist, dass ich den Fallback function ()
——zwischen den Aufrufen von changeBoolTrue()
und aufgerufen habe changeBoolFalse()
, was zeigt, dass der Zustand von test
im Vertrag zwischen den Aufrufen erhalten bleibt.
changeBoolTrue()
. Das gleiche nochmal (etherscan eventLog): 0000000000000000000000000000000000000000000000000000000000000Run
Registerkarte ist in Remix die Liste der aufrufbaren Funktionen unten rechts im Deployed Contracts
Bedienfeld sichtbar (Sie können auf das rote Kästchen klicken und die Transaktion überprüfen). Wenn Sie alternativ eine kleine Menge ETH an den Vertrag senden, wird die Fallback-Funktion aufgerufen.
Edmund Edgar
Soham Lawar
Daisy Duck