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.
El problema es que la función getFunds
se 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
Durián Jaykin
Jaime
Durián Jaykin