Manejo de eventos confuso

dado es:

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);
    }
}

En etherscan, siempre devuelve un eventLog de 64 caracteres de longitud 0...0. No importa a qué función se haya llamado. También lo probé con uint8 (1,2)for changeBoolTrue() -> test = 1y changeBoolFalse() -> test = 2. Lo cansé con una vuelta también : function changeBoolTrue () public onlyOwner returns (bool). El eventLog arroja siempre lo mismo.

En remix se ve bien. Pero en la realidad no funciona. ¿Qué ocurre?

¿Enlace etherscan?
Creo que será útil si proporciona un código completo para el contrato inteligente
Gracias, ahora se agrega el código completo. Por el momento no puedo enviar una transacción para que puedas revisarla. En unas horas es posible. Pero, como escribí, cada eventLog contiene una simple cadena hexadecimal de 64 longitudes 0.

Respuestas (1)

Realmente no puedo ver nada malo en lo que has escrito. Pero, la convención dicta que debe comenzar los nombres de los eventos con caracteres en mayúsculas.

Otro punto de pellizco podría ser que haya nombrado el parámetro bool del mismo modo que el evento. Dado que no necesita hacer referencia al argumento, ajustaría su evento para que se vea como el siguiente;

event ShowBool(bool);

y ajuste sus emitllamadas en consecuencia.

Editar0:

Desplegué su contrato fijo en Rinkeby, aquí . Puede ver que EtherScan ha verificado que la fuente coincide con los códigos de bytes aquí .

El motivo de todas las transacciones es que he llamado al respaldo— function ()—entre llamadas a changeBoolTrue()y changeBoolFalse(), que muestran que el estado de testse conserva en el contrato entre llamadas.

He arreglado el código. La primera llamada a este contrato fue changeBoolTrue(). Lo mismo otra vez (etherscan eventLog): 00000000000000000000000000000000000000000000000000000000000000000
¡Excelente! - Parece funcionar. Y gracias hasta ahora por sus esfuerzos. Pero... no logro entender lo que he hecho para que funcione. ¿Cómo llamar a la función de respaldo?
En la Runpestaña, en Remix, la lista de funciones a las que se puede llamar es visible en la parte inferior derecha, en el Deployed Contractspanel (puede hacer clic en el cuadro rojo y verificar la transacción). Alternativamente, si envía una pequeña cantidad de ETH al contrato, se llamará a la función de reserva.