So erstellen Sie Transaktionen und verzögern ihre Übertragung an andere Knoten

Ich erstelle ein Projekt, bei dem ich meinen Smart Contract verwenden muss, um Daten zum Speicher hinzuzufügen, jedoch auf programmatisch verzögerte Weise:

Ich verwende web3 in meinem nodejs-Server und möchte die Transaktion wie gewohnt erstellen, indem ich web3 verwende, aber die Übertragung der Transaktion verzögere oder anhalte, bis ich sie senden möchte.

Meine Idee ist, die Rohtransaktion abzurufen und sie als String in einer Off-Chain-Datenbank zu speichern. Wenn ich dann die Transaktion übertragen möchte, kann ich sie aus der Datenbank abrufen und mit web3 als Rohtransaktion senden.

Also möchte ich zuerst wissen, ob meine Idee realisierbar ist, und ob ich trotzdem Transaktionen in meinem Knoten speichern und sie dann programmgesteuert senden kann, weil die Idee, Transaktionen in relationalen Datenbanken zu speichern, nicht wirklich attraktiv ist und unsicher erscheint.

Bitte haben Sie Verständnis dafür, dass Ihr Knoten selbst eine interne Datenbank betreibt, die nicht weniger oder sicherer ist als jede andere Datenbank.
ok, das habe ich verstanden. Wie wird sich das auf die Art und Weise auswirken, wie ich die Transaktion speichere?

Antworten (2)

Ethereum unterstützt die von Ihnen beschriebene Funktion "Transaktionsverzögerung" nicht.

Aber ...

Es ist eine schlechte Idee, Transaktionen zu signieren und sie (im Rohformat) außerhalb der Kette zu lassen und auf die Übermittlung zu warten. Weil eine Transaktion ein Feld enthält nonce, bei dem es sich um eine fortlaufende Nummer handelt, die zu Ihrem Konto gehört. Aus diesem Grund blockiert Ihre erste Transaktion alle folgenden Transaktionen. Sie müssen ausstehende Transaktionen speichern, ohne sie zu signieren, und nur wenn Sie sie wirklich ausführen müssen, würden Sie sie signieren und an die Blockchain senden.

Rohtransaktionen können absolut sicher überall gespeichert werden, tatsächlich werden sie jetzt in der Blockchain-Datenbank gespeichert und jeder hat Zugriff darauf, es sind öffentliche Informationen.

Die beste Idee ist also, die Transaktion in Rohform zu erstellen und nicht zu signieren. dann signieren Sie später (das Signieren fügt der Transaktion also die Nonce hinzu)
rawbedeutet, dass sie bereits signiert sind
Kann ich also eine Transaktion erstellen und in meiner Datenbank speichern, dann signieren und an das Netzwerk senden?
@KakiMasterOfTime genau, Sie unterschreiben, bevor Sie es an das Netzwerk senden

Was du beschreibst ist machbar. Sie würden Software-Clients Transaktionen bilden, signieren lassen, und dann würde Ihr Server ihre signierten Aktionen in Ihrer Datenbank aufzeichnen, um sie möglicherweise zu einem späteren Zeitpunkt an das Netzwerk zu übermitteln.

Es fällt mir ein, dass Sie einige zusätzliche Überlegungen auf App-Ebene haben werden. Zum Beispiel würden sich Benutzer wahrscheinlich gegen die Idee wehren, wenn die Dinge nicht mit bestimmten Ablaufzeiten nach dem Motto „gut bis Blocknummer n“ geregelt sind. Dieser Ablauf sollte wahrscheinlich auf der Smart-Contract-Ebene erzwungen werden, um die Möglichkeiten des privilegierten Servers stark einzuschränken.

Es wird kein Problem mit doppelten Ausgaben geben, aber es besteht sicherlich die Möglichkeit einer Überdehnung, in welchem ​​​​Fall Transaktionen fehlschlagen.

Sehen Sie sich das 0x-Protokoll an, um etwas zu finden, das in diese Richtung funktioniert.

Wie würde eine nicht übertragene Transaktion überdehnen? Gibt es eine Zeit für die Gültigkeit einer Transaktion, bevor sie vom Netzwerk erkannt wird?
Nicht das, was ich meinte. Eine Person könnte Schecks für mehr Geld oder eine andere Ressource ausstellen, als sie wirklich hat. Die Prämisse hier ist, dass solche Transaktionen nicht an das Netzwerk übermittelt werden, um dies herauszufinden. Wenn die Vermutung besteht, dass der "Server" irgendwie überprüft, wird dies meiner Meinung nach sehr schwer durchzusetzen sein, ohne etwas in die Kette zu schreiben, was Sie eindeutig zu vermeiden versuchen.