Können wir einen Modifikator auf ein Ereignis in Solidität anwenden, genau wie auf eine Funktion?

Nehmen wir an, ich möchte bestimmte Benutzer (Adressen) daran hindern, die Protokolle für einen Vertrag zu sehen. Ich weiß, dass es einen "Modifier" gibt, der so eingestellt werden kann, dass er funktioniert, um Zugriffsrechte zu gewähren, aber können wir ähnliches mit Ereignissen machen ( nur AllowedAddress unten)? oder was ist eine Alternative dazu?

contract MyData{
   address allowedAddress;
   string A;

   modifier onlyAllowedAddress(){
    require(allowedAddress == msg.sender);
    _;
   }
   event MyDataLogs(string _a) **onlyAllowedAddress**;

  function setA(string arg){
   A = arg;
   MyDataLogs(arg);
 }
}

Antworten (2)

Es gibt keine Möglichkeit zu tun, was Sie wollen. Wenn ein Ereignis gesendet wird, kann es von jedem jederzeit und von jedem Knoten aus gelesen werden (zumindest in der aktuellen Version von Ethereum).

AFAIK, Sie können kein Event werfen. Der Zweck eines Ereignisses besteht im Grunde darin, etwas auszuloggen, das gelesen werden kann (indem man es ansieht).

Sie sollten nur die Logik des Postens des Ereignisses (oder Nicht-Postens) in der Methode behandeln, die das Ereignis sendet.

function setA(string arg) { 
    A = arg; 
    if (msg.sender == allowedAddress)
        MyDataLogs(arg);
}
Vielen Dank für die Antwort, aber ich denke, das wird meinen Bedürfnissen nicht dienen. Ich habe einige der Schauspieler, die immer schreiben werden, und es gibt einige andere Mitglieder, denen ich das Lesen verbieten muss. Möglicherweise muss ich es auf Anwendungs-/Dienstebene behandeln, bevor ich Ereignishaken aufrufe.