Was passiert, wenn eine bereits verarbeitete Transaktion erneut an das Netzwerk übermittelt wird?

Ich habe ein Skript, das Transaktionen automatisch mithilfe des JSON-RPC-API-Aufrufs eth_sendRawTransactionan 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 sentStatus 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 nonceund transaction hasheindeutige 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?

Ich meine, wenn Miner das tun könnten, brauchen sie Sie nicht, um "eth_sendRawTransaction" auszuführen. Sie könnten es einfach selbst erneut ausführen und die Gebühr übernehmen. Oder, einfacher verständlich, sie könnten ihr eigenes Skript für eth_sendRawTransaction schreiben und dieselben Daten verwenden, die Sie ihnen beim ersten Ausführen von eth_sendRawTransaction senden (Da zwei Skripts, die dasselbe tun, dasselbe Ergebnis haben, unabhängig davon, ob es Ihres oder das Miner kopieren dich.).

Antworten (3)

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.

ooh, übrigens, ich habe das gerade auf testnet gemacht, und Sie können eine bestehende Transaktion nicht erneut einreichen, Sie erhalten diesen Fehler: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.

Hm, „Double Spending“ ist ein sehr spezifischer Ausdruck in der Blockchain-Sicherheit, daher würde ich nicht empfehlen, ihn hier zu verwenden, da er nichts mit der traditionellen Bedeutung eines „Double Spend Attack“ zu tun hat (d.h. mit einem Guthaben von 5 $ etwas kaufen , dann Hard Forking, um Ihre 5 $ wieder auszugeben). Es wäre vielleicht besser zu sagen, dass die Nonce dazu da ist, "doppeltes Einreichen" zu verhindern, bei dem Ihre Transaktion von jemandem erneut eingereicht werden kann, damit Sie ihm zweimal ETH geben.