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.
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.
raw
bedeutet, dass sie bereits signiert sindWas 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.
Mikko Ohtamaa
Kaki Meister der Zeit