Solidity

事件不完全正常(沒有經驗的 OP)

  • June 10, 2018
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(‘Someone called a getter!’)。我在 Solidity VM 上收到此錯誤。

(瀏覽器/Untitled.sol:38:14:警告:函式聲明為視圖,但此表達式(可能)修改狀態,因此需要不可支付(預設)或應付。)

我想要分解此錯誤的解釋以及有關如何觸發事件的建議。

問題是該函式getFunds被定義為常量,但它包含一個事件發射,只需將其更改為public

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

希望這可以幫助

引用自:https://ethereum.stackexchange.com/questions/50897