El evento no funciona exactamente (OP sin experiencia)

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

Sé que esto no es un error, pero mi inexperiencia con Solidity es la causa de esto. De todos modos, quiero activar UpdateStatus ('¡Alguien llamó a un getter!'). Recibo este error en Solidity VM.

(navegador/Untitled.sol:38:14: Advertencia: función declarada como vista, pero esta expresión (potencialmente) modifica el estado y, por lo tanto, requiere que no se pague (el valor predeterminado) o que se pague).

Me gustaría una explicación que desglose este error y sugerencias sobre cómo hacer que se active el evento.

Respuestas (1)

El problema es que la función getFundsse define como constante pero contiene una emisión de eventos, simplemente cámbiela a public:

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

Espero que esto ayude

Definitivamente ayudó gracias! Tengo que preguntar, ¿establecer la función es una buena práctica pública o privada? Dado que solo eliminar la constante también permite que el evento se dispare
Sí, estas palabras claves definen la visibilidad de la función, si no dices nada pasa por defecto a público. Si esto respondió a su pregunta, acepte la respuesta.
Je, lo siento, me olvidé del botón.