Ich versuche, eine Benachrichtigung an einen Benutzer über eine Aktivität zu senden. Ich habe versucht, Ereignisse zu verwenden, aber wenn ein Ereignis ausgelöst wird, geht es an alle Benutzerkonten, die derzeit im Netzwerk aktiv sind. Gibt es eine andere Möglichkeit, dasselbe in Ethereum zu tun?
Nein, da ist kein. Ethereum ist ein öffentliches Hauptbuch. Das bedeutet a) alles, was Sie tun, ist öffentlich, jeder sieht alles, was Sie tun. b) Alles ist ziehen. Wenn ein Benutzer etwas sehen möchte, kann er die Blockchain abfragen, Sie können etwas nicht an eine bestimmte Adresse pushen.
Natürlich könnten Sie etwas Ähnliches erstellen. Aber solche Lösungen wären immer noch öffentlich und würden von der Client-Implementierung abhängen. Die ganze Idee der Blockchain ist jedoch die Unabhängigkeit von zentralen Zwischenhändlern und Client-Implementierung
Wenn Sie so etwas implementieren möchten: Erstellen Sie ein Mapping, das Adresse -> Ihre Nachricht im Vertrag abbildet. Der Client kann dann regelmäßig nach Aktualisierungen in diesem Mapping suchen.
Sie können Themen in Ihren Protokollen erstellen, indem Sie bestimmte Felder in Ihrem Ereignis indizieren
event BidPlaced(address indexed bidder, uint amount);
Sie können dann nach diesen Ereignissen anhand der indizierten Felder in Ihrem Frontend filtern und nur relevante Benachrichtigungen für den Benutzer anzeigen
var contract = web3.eth.contract(abi).at(contractAddress);
contract.BidPlaced({ bidder: "0x0000..." }).get(console.log);
Jo