Solidity
在 Solidity 上,從修飾符呼叫事件似乎失敗
合約上的兩個修飾符在執行期間拋出“異常。(無效的操作碼)。” 未按預期滿足時出錯。當他們檢查的條件不滿足時,他們倆都在呼叫一個事件。所以我猜這個異常來自於在修飾符上呼叫事件。那是對的嗎?
事件日誌是這樣的:
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獲得
那麼,如果修飾符不能呼叫事件,是否不可能以某種方式記錄由於未滿足其修飾符而失敗的函式?
謝謝!
您可以在修飾符中使用事件。在您的範例中,您有一個
throw
after 呼叫事件。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 { } }