Ereignisbehandlung verwirrend

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 = 1und 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?

Etherscan-Link?
Ich denke, es wird hilfreich sein, wenn Sie einen vollständigen Code für Smart Contracts angeben
Danke, jetzt ist der vollständige Code hinzugefügt. Im Moment kann ich keine Transaktion einreichen, die Sie sich ansehen könnten. In wenigen Stunden ist es möglich. Aber wie ich geschrieben habe, enthält jedes eventLog eine einfache Hex-Zeichenfolge mit 64 Längen und 0.

Antworten (1)

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 emitAnrufe 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 testim Vertrag zwischen den Aufrufen erhalten bleibt.

Ich habe den Code korrigiert. Der erste Aufruf zu diesem Vertrag war changeBoolTrue(). Das gleiche nochmal (etherscan eventLog): 0000000000000000000000000000000000000000000000000000000000000
Großartig! - Es scheint zu funktionieren. Und danke schon mal für deine Bemühungen. Aber ... ich kann es nicht verstehen, was ich getan habe, dass es funktioniert. Wie rufe ich die Fallback-Funktion auf?
In der RunRegisterkarte ist in Remix die Liste der aufrufbaren Funktionen unten rechts im Deployed ContractsBedienfeld 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.