Запутанная обработка событий

Дано:

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

На etherscan он всегда возвращает 64 символа длиной 0...0 eventLog. Неважно, какая функция была вызвана. Я также пробовал это с uint8 (1,2)for changeBoolTrue() -> test = 1и changeBoolFalse() -> test = 2. Меня это тоже утомило с возвратом : function changeBoolTrue () public onlyOwner returns (bool). EventLog всегда выдает одно и то же.

В ремиксе выглядит нормально. Но в реальности это не работает. В чем дело?

Ссылка на Этерскан?
Я думаю, будет полезно, если вы предоставите полный код смарт-контракта.
Спасибо, теперь полный код добавлен. На данный момент я не могу отправить транзакцию, чтобы вы могли ее просмотреть. Через несколько часов это возможно. Но, как я уже писал, каждый журнал событий содержит простую шестнадцатеричную строку длиной 64 0.

Ответы (1)

Я не вижу ничего плохого в том, что вы написали. Но по соглашению вы должны начинать имена событий с символов верхнего регистра.

Еще одним недостатком может быть то, что вы назвали параметр bool так же, как и событие. Учитывая, что вам не нужно ссылаться на аргумент, я бы изменил ваше событие, чтобы оно выглядело следующим образом:

event ShowBool(bool);

и корректируйте свои emitзвонки соответствующим образом.

Редактировать0:

Я развернул ваш фиксированный контракт на Ринкеби, здесь . Вы можете видеть, что EtherScan проверил, что источник соответствует байт-кодам здесь .

Причина всех транзакций в том, что я вызвал резервную копию function ()— между вызовами changeBoolTrue()и changeBoolFalse(), которые показывают, что состояние testсохраняется в контракте между вызовами.

Я исправил код. Первый звонок к этому контракту был changeBoolTrue(). То же самое снова (etherscan eventLog): 000000000000000000000000000000000000000000000000000000000000000000
Большой! - Кажется, работает. И пока спасибо за ваши усилия. Но ... я не могу понять, что сделал, чтобы это работало. Как вызвать fallback-функцию?
Во Runвкладке, в Ремиксе, список вызываемых функций виден справа внизу, в панели Deployed Contracts(можно нажать на красное поле и проверить транзакцию). В качестве альтернативы, если вы отправите небольшое количество ETH в контракт, будет вызвана резервная функция.