Solidity

在 Solidity 上,從修飾符呼叫事件似乎失敗

  • June 21, 2017

合約上的兩個修飾符在執行期間拋出“異常。(無效的操作碼)。” 未按預期滿足時出錯。當他們檢查的條件不滿足時,他們倆都在呼叫一個事件。所以我猜這個異常來自於在修飾符上呼叫事件。那是對的嗎?

事件日誌是這樣的:

event Error(string error);

修飾符如下:

modifier onlyOwner() {
   if (msg.sender != owner) {
   Error('Mortal: onlyOwner function called by user that is not owner'); throw;
   }
   _;
}

modifier onlyIssuer() {
   if (!issuers[phoneNumbers[msg.sender]]) {
   Error('Mobile: onlyIssuer function called by user that is not an authorized issuer'); throw;
   }
   _;
}

合約的完整原始碼可在https://gist.github.com/computerphysicslab/f362383f9d3fed26becba48b934bbcfc獲得

那麼,如果修飾符不能呼叫事件,是否不可能以某種方式記錄由於未滿足其修飾符而失敗的函式?

謝謝!

您可以在修飾符中使用事件。在您的範例中,您有一個throwafter 呼叫事件。throw也是倒帶事件,因此您在throw. 只需刪除它,一切正常。

這是一個完整的最小範例:

contract c {
   address owner;

   event Error(string error);

   modifier onlyOwner() {
       if (msg.sender != owner) {
           Error('Mortal: onlyOwner function called by user that is not owner');
       }
       _;
   }

   function c() {
       // constructor sets owner
       owner = msg.sender;
   }

   function f() onlyOwner {

   }
}

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