Ereignis funktioniert nicht genau (Unerfahrenes OP)

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

Ich weiß, dass dies kein Fehler ist, aber meine Unerfahrenheit mit Solidity ist die Ursache dafür. Wie auch immer, ich möchte den UpdateStatus abfeuern ("Jemand hat einen Getter angerufen!"). Ich erhalte diesen Fehler auf der Solidity-VM.

(browser/Untitled.sol:38:14: Warnung: Funktion als Ansicht deklariert, aber dieser Ausdruck ändert (möglicherweise) den Status und erfordert daher nicht zahlbar (Standard) oder zahlbar.)

Ich hätte gerne eine Erklärung, die diesen Fehler aufschlüsselt, und Vorschläge, wie das Ereignis ausgelöst werden kann.

Antworten (1)

Das Problem ist, dass die Funktion getFundsals konstant definiert ist, aber eine Ereignisemission enthält, ändern Sie sie einfach in public:

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

Hoffe das hilft

Hat auf jeden Fall geholfen danke! Ich muss fragen, ist das Festlegen der Funktion öffentlich oder privat eine gute Praxis? Da das Löschen der Konstante auch das Auslösen des Ereignisses ermöglicht
Ja, diese Schlüsselwörter definieren die Sichtbarkeit der Funktion, wenn Sie nichts sagen, geht sie standardmäßig auf öffentlich. Wenn dies Ihre Frage beantwortet hat, akzeptieren Sie bitte die Antwort.
Heh Entschuldigung, ich habe den Knopf vergessen.