Solidity
事件處理令人困惑
給出的是:
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 = 1
和changeBoolFalse() -> test = 2
。我也厭倦了回報:function changeBoolTrue () public onlyOwner returns (bool)
。eventLog 總是拋出相同的。混音看起來不錯。但在現實中是行不通的。怎麼了?
我真的看不出你寫的有什麼問題。但是,約定要求您應該以大寫字元開頭的事件名稱。
另一個關鍵點可能是您將 bool 參數命名為與事件相同。鑑於您不需要引用參數,我會將您的事件調整為如下所示;
event ShowBool(bool);
並相應地調整您的
emit
通話。編輯0:
我在 Rinkeby 上部署了你的固定契約,這裡。您可以看到 EtherScan 已驗證源與此處的字節碼匹配。
所有交易的原因是我在呼叫和呼叫之間呼叫了回退,
function ()
這表明呼叫之間的合約中保留了的狀態。changeBoolTrue()``changeBoolFalse()``test