Einschließlich einer auf der Eigentümeradresse basierenden automatisierten Routineausführung in einer React-Ethereum-DApp?

Soweit ich weiß, werden alle Front-End-Komponenten für eine reaktionsbasierte Ethereum-Dapp aus der Sicht des Metamask-Standardkontos des Benutzers gerendert. Alle Aufrufe von konstanten Funktionen in Solidität zum Abrufen von Zustandsvariablenwerten und Rendern der relevanten Komponenten zur Anzeige für Benutzer verwenden das Konto des Benutzers.

Was ich möchte, ist, ein bestimmtes Design hinzuzufügen:

  1. eine automatisierte Routine, die im Hintergrund läuft (ohne anzuzeigende Front-End-Komponenten), die den Zustandsvariablenwert bewertet und eine intelligente Vertragstransaktion ausführt, die nur vom Eigentümer ausgeführt werden soll.

  2. Diese eigentümerbasierte Transaktionsaufrufroutine muss ständig automatisiert im Hintergrund ausgeführt werden und nicht nur, wenn ein Benutzer Ihre Website-Seite in seinem/ihrem Browser geöffnet hat.

Als Beispiel möchte ich im Fall der Abstimmungs-Dapp eine Routine erstellen, bei der nach einer bestimmten Anzahl von Stimmen oder nach Ablauf einer bestimmten Frist die Routine zur Berechnung der Stimmen automatisch ausgeführt werden soll, und zwar auch vom Eigentümer Adresse (da nur der Eigentümer das Privileg hat, Stimmen zu zählen und den Gewinner zu erklären).

Könnten Sie bitte erläutern, wie eine solche Routine implementiert werden kann? Müsste ich dafür die Keystore-Datei des Besitzers serverseitig hinterlegen? Ist es eine sichere Strategie? Danke.

Antworten (2)

Sie könnten ein Programm auf demselben Server ausführen, der die Webseite Ihrer App bereitstellt. Dieses Programm liest den Status Ihrer Variablen und reagiert darauf, indem es Funktionen ausführt. Da dies auf Ihrem PC läuft, können Sie die Transaktionen mit den Eigentümerschlüsseln auf sichere Weise durchführen.

Wenn der Auslöser ausschließlich zeitbasiert ist, d. h. Sie möchten, dass eine Funktion nach Ablauf einer bestimmten Zeit oder allgemein zu einem bestimmten Datum ausgeführt wird, können Sie Dienste wie AION Scheduling System verwenden . Da Aion für jeden Benutzer ein unabhängiges Konto (Smart Contract) erstellt, können Sie sicher sein, dass die Funktion, wenn sie von dieser Adresse kommt, einer vom Eigentümer geplanten Funktion entspricht. AION kann jede von Ihnen angegebene Funktion aufrufen, wenn eine bestimmte Zeit oder ein bestimmter Block erreicht ist.

Hoffe das hilft

Das ist viel Hilfe, Jaime. Da ich eine Domain dafür gekauft habe und vielleicht einen Hosting-Bereich verwenden werde, wäre es möglich, den Keystore sicher in diesem Hosting-Bereich zu speichern und zu verhindern, dass der Keystore abgerufen wird? Wo genau auf dem Webserver (Hosting-Bereich) sollte ich den Keystore und die automatisierte Routine speichern und gibt es eine Möglichkeit, sie zu verschlüsseln? Danke.
Wenn der Server Ihrer Webseite nicht unter Ihrer Kontrolle steht, sollten Sie den Schlüssel nicht speichern, Sie können einfach Ihren eigenen Server (oder vielleicht eine Instanz bei Google oder Amazon) betreiben und dort Ihr Programm ausführen. Ich mache das gerade, ich habe ein Python-Skript, das auf 3 Servern läuft () und die Änderungen von Variablen in einem Smart Contract überwacht.
verstanden. Ich kontrolliere die Domain und die Anmeldeinformationen für einen gemeinsam genutzten Hosting-Bereich. Was ich wissen möchte, ist, müsste ich die besagte automatisierte Routine mit einem serverseitigen Skripting wie node.js mit express erstellen? Gibt es im Netz ein Beispiel, auf das ich verweisen und mir eine vollständige Vorstellung machen kann?
Jede Plattform wird funktionieren, Node, Python usw. Beachten Sie, dass dieses Programm, das den Smart Contract überwacht, nicht mit Ihrer Website zusammenhängen muss, die App ihre normale Funktion ausführt und Ihr Skript den Smart Contract liest, nicht den Webcode, der ausgeführt wird die App. Beispielsweise sollte jedes web3js- oder web3py-Tutorial ausreichen. Lassen Sie mich wissen, wenn ich etwas vermisse.
Jaime, verzeihen Sie mir, dass ich dieses Gespräch wieder aufnehme, aber könnten Sie mir bitte auch einige Details zum Ausführen des serverseitigen Skripts im Falle von Google- oder Amazon-Servern geben? Woher bekomme ich diese Instanzen von Google oder Amazon? irgendwelche Links?
Außerdem, wie genau verfolgen Sie die Variablen von Smart Contracts? Hören Sie Ereignisse oder gibt es eine Nieselregen-ähnliche Einrichtung, um Variablenänderungen zu verfolgen? wäre Ihnen sehr verbunden, wenn Sie mir dabei helfen könnten.
Beachten Sie, dass Sie dies auf Ihrem persönlichen Server oder in einem beliebigen Dienst in der Cloud ausführen können (z. B. (Google Cloud)[cloud.google.com/‎ ] oder (Amazon-Webdienste)[ aws.amazon.com/] ) oder irgendwelche anderen. Diese beiden geben Ihnen ein Jahr Service frei, sodass Sie viel Zeit zum Testen haben.
Protokolle sind wahrscheinlich die eleganteste Art, Änderungen nachzuverfolgen. Sie können die Variablen jedoch nur alle n Blöcke (vielleicht jeden neuen Block) lesen, was in Bezug auf Gas kostenlos ist, aber wenn Sie viele Benutzer mit vielen Variablen haben, kann dies ineffizient sein. Im Aion-Planungssystem (ich nehme an, Sie fragen danach) basiert das verwendete Skript vollständig auf Ereignissen.
lass mich wissen, ob dir das geholfen hat
das war recht hilfreich. Danke.

Sie müssen neu bewerten.

Hier ist die Einschränkung. Ein Client kann ohne Kenntnis des privaten Schlüssels nicht für eine Adresse signieren. Identitätsdiebstahl ist nicht möglich. msg.senderlügt nicht.

Sie müssen den Prozess berücksichtigen und beeinflussen möglicherweise die Vertragsgestaltung.

Wenn nur der Eigentümer einen Gewinner erklären kann, bedeutet dies, dass es einen Client oder Server gibt, der dies letztendlich tun wird. Dieser Stil impliziert die Wiedereinführung der Zentralisierung, die oft nicht notwendig ist.

Wenn die Abstimmungsfrist abgelaufen ist und die Stimmen ehrlich gezählt werden, gibt es für den Eigentümer keine subjektive Entscheidung. Ähnlich verhält es sich mit Auktionen und Spielen.

Nun, es könnte Code geben, der am Ende ausgeführt werden muss. Sie müssen darüber nachdenken, wer es ausführen wird oder was es auslöst. Es ist üblich, den Gewinner eine solche Funktion ausführen zu lassen, da er einen Anreiz hat, für Benzin zu bezahlen.

In Betracht ziehen

function claimPrize () public onlyWinner onlyIfClosed ... 

Ich hoffe es hilft.

Ich glaube nicht, dass Ethereum-Dapps in jedem Szenario zu 100 % dezentralisiert werden können. Es gibt bestimmte Aspekte, die manchmal nur von einem Eigentümerkonto kontrolliert werden müssen. Gibt es beispielsweise im Falle eines Abstimmungssystems mit zeitspezifischen Fenstern für Registrierung, Abstimmung und Abschluss derzeit eine andere Möglichkeit, dieses Design zu erstellen, als einen automatisierten Bot, der das Abstimmungsfenster nach einer bestimmten Zeit schließt und die Abstimmungsberechnung durchführt?