Ich habe ein Skript, das Transaktionen automatisch mithilfe des JSON-RPC-API-Aufrufs eth_sendRawTransaction
an einen Knoten sendet, auf dem RPC aktiviert ist.
Meine Frage ist, was passiert, wenn ich diese Transaktionen (übrigens kann es viele davon geben) mehrmals sende, nachdem sie bereits verarbeitet wurden?
Nehmen wir an, mein Skript hat einen Fehler oder die Datenbank, in der ich den sent
Status der Transaktion speichere, wurde gelöscht, und irgendwie übertrage ich viele (bereits verarbeitete und in der Blockchain gespeicherte) Rohtransaktionen erneut? Ich bin grundsätzlich daran interessiert zu wissen, ob ich beim zweiten Mal, wenn ich diese Transaktionen einreiche, Geld verliere? Können Bergleute es verarbeiten und die Gebühr erheben, während sie Fehler melden?
Die Logik legt nahe, dass es mich nicht kosten sollte, Transaktionen mehrmals zu übermitteln, da die nonce
und transaction hash
eindeutige Werte sind, aber ich möchte sicher sein. Wenn die erneute Übermittlung bereits verarbeiteter Transaktionen kein Geld kostet, könnte dies auch ein potenzieller DDoS-Angriff für das Hauptnetz von Ethereum sein? Wie alle Transaktionen erneut einreichen, die die Blockchain bereits verarbeitet hat?
Für jede Absenderadresse kann eine Transaktion mit einer bestimmten Nonce nur einmal geschürft werden. Sie werden kein Geld verlieren, aber andere Knoten können sich von Ihnen trennen, weil sie denken könnten, dass Sie spammen.
Wenn ein Ethereum-Knoten eine Transaktion empfängt, sendet er sie nicht sofort erneut an alle seine Verbindungen. Mit dieser Methode können Sie das Netzwerk nicht per DDoS erreichen.
nonce too low
Folgendes erhalten Sie, wenn Sie eine Transaktion erneut übermitteln:
Error: nonce too low
Jedes Mal, wenn Sie eine Transaktion durchführen, wird Nonce um eins erhöht. So schützt Ethereum vor doppelten Ausgaben. Wenn Sie Ihre Transaktion erneut mit derselben Nonce übermitteln. Der erste RPC-Knoten überprüft Ihre Nonce-Nummer, wenn sie bereits verwendet wird. Der Knoten wird Ihre Transaktion einfach verwerfen und sie nicht an die verbundenen Peers senden.
Nikolaus Pipitone