Событие не совсем работает (неопытный ОП)

pragma solidity ^0.4.0;

contract CustodialContract{

    address client;
    bool public _switch = false;

    event UpdateStatus(string _msg);
    event UserStatus(string _msg, address user, uint amount);

    function CustodialContract(){
        client = msg.sender;
}

    modifier IfClient(){
        if(msg.sender !=client){
            revert();
    }
    _;
}

    function depositFunds() payable{
        emit UserStatus('User has deposited money!', msg.sender, msg.value);

}

    function withdrawFunds(uint amount) IfClient{
        if(client.send(amount)){
            emit UpdateStatus('User has transferred some money!');
            _switch=true;
    }
        else{
            _switch = false ;
    }
}

    function getFunds() constant returns(uint) {
        emit UpdateStatus('Someone called a getter!');
        return address(this).balance;
}

Я знаю, что это не ошибка, но причиной этого является моя неопытность в Solidity. В любом случае, я хочу запустить UpdateStatus('Кто-то вызвал геттера!'). Я получаю эту ошибку на виртуальной машине Solidity.

(browser/Untitled.sol:38:14: Предупреждение: функция объявлена ​​как представление, но это выражение (потенциально) изменяет состояние и, таким образом, требует неоплачиваемого (по умолчанию) или оплачиваемого.)

Я хотел бы получить объяснение, разбивающее эту ошибку, и предложения о том, как запустить событие.

Ответы (1)

Проблема в том, что функция getFundsопределена как константа, но она содержит эмиссию событий, просто измените ее на public:

 function getFunds() public returns(uint) {
        emit UpdateStatus('Someone called a getter!');
        return address(this).balance;
}

Надеюсь это поможет

Однозначно помогло спасибо! Я должен спросить, является ли установка функции общедоступной или частной хорошей практикой? Поскольку просто удаление константы также позволяет запустить событие
Да, эти ключевые слова определяют видимость функции, если вы ничего не говорите, она по умолчанию становится общедоступной. Если это ответило на ваш вопрос, пожалуйста, примите ответ.
Хех, извините, я забыл про кнопку.