Solidity

事件處理令人困惑

  • September 11, 2018

給出的是:

pragma solidity ^0.4.24;

contract changeSomVal{
   address owner;
   bool test;    
   event showBool(bool showBool);

   constructor() public {
       owner = msg.sender;
   }

   modifier onlyOwner() {
       if(msg.sender == owner)
           _;
   }

   function () public payable{
       emit showBool(test);
   }

   function changeBoolTrue () public onlyOwner { // returns (bool)
           test = true;
           emit showBool(test);
   }

   function changeBoolFalse () public onlyOwner {
           test = false;
           emit showBool(test);
   }
}

在 etherscan 上,它總是返回一個 64 字元長度為 0…0 的事件日誌。呼叫哪個函式並不重要。我也試過uint8 (1,2)forchangeBoolTrue() -> test = 1changeBoolFalse() -> test = 2。我也厭倦了回報:function changeBoolTrue () public onlyOwner returns (bool)。eventLog 總是拋出相同的。

混音看起來不錯。但在現實中是行不通的。怎麼了?

真的看不出你寫的有什麼問題。但是,約定要求您應該以大寫字元開頭的事件名稱。

另一個關鍵點可能是您將 bool 參數命名為與事件相同。鑑於您不需要引用參數,我會將您的事件調整為如下所示;

event ShowBool(bool);

並相應地調整您的emit通話。

編輯0:

我在 Rinkeby 上部署了你的固定契約,這裡。您可以看到 EtherScan 已驗證源與此處的字節碼匹配。

所有交易的原因是我在呼叫和呼叫之間呼叫了回退,function ()這表明呼叫之間的合約中保留了的狀態。changeBoolTrue()``changeBoolFalse()``test

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