Wie viele Transaktionen pro Sekunde können wir sicher senden?

Wir arbeiten an einer groß angelegten Anwendung, die viele Transaktionen ausgibt, und wir sind uns nicht sicher, welche genauen Garantien Ethereum/Geth uns gibt.

Im Ropsten-Testnet versuchen wir, 100 Transaktionen auf einmal auszugeben, aber nur ein Bruchteil wird abgebaut. Es scheint, als würden einige Transaktionen vom Transaktionspool verworfen und daher nachfolgende Transaktionen aufgrund der Transaktions-Nonce durcheinander bringen.

Ich habe mir den Code hier angesehen: https://github.com/ethereum/go-ethereum/blob/master/core/tx_pool.go#L80-L83

  • Wie ist „nicht ausführbare Transaktion“ definiert? Ich gehe davon aus, dass dies Transaktionen definiert, die aufgrund einer zu hohen Nonce nicht ausgeführt werden können
  • Wenn AccountSlots auf 16 eingestellt ist (und ich nehme an, die Mehrheit im Netzwerk hat das eingestellt), bedeutet das, dass die 16 niedrigsten Transaktions-Nonces dorthin gehen?
  • Ist die Anzahl der möglichen Transaktionen pro Konto im tx-Pool AccountSlots + AccountQueue oder AccountQueue?
  • Was ist, wenn ich versuche, mehr als das zu senden? Wird Ethereum die Transaktion stillschweigend fallen lassen? (da ich annehme, dass dies im Moment passiert)?

Antworten (2)

So gehen Sie geübt und bewährt mit diesem Thema um.

Bevor Sie Ihre Organisation zu groß planen, machen Sie sich bitte zunächst mit den Eigenschaften der Ethereum-Blockchain vertraut. Transaktionen pro Sekunde sind ein schlechtes Maß, da der kritische Teil hier stattdessen der Block und die Zeit ist, die benötigt wird, um ihn abzubauen. Berücksichtigen Sie auch das Blockgaslimit, das derzeit bei etwa 4,7 Millionen Gas liegt. Abhängig von den Gaskosten Ihrer Transaktionen und sogar wenn Sie alle anderen Benutzer ignorieren, gibt es nur eine bestimmte Anzahl von Transaktionen, die Sie in einen Block passen - die anderen müssen warten. Und hier kommt die Technik der Nebenläufigkeit ins Spiel.

Da wir es hier mit asynchronem Computing zu tun haben, wird das einfache Auslösen von Hunderten von Transaktionen dazu führen, dass die meisten von ihnen einfach fehlschlagen, wie Sie richtig bemerkt haben. Daher legen Sie ein Limit für die Anzahl der generierten Transaktionsversprechen fest und erstellen kein weiteres, bis mindestens eines aufgelöst wurde. Vergleichen Sie es mit Jonglieren: Nicht mehr als X Bälle gleichzeitig in der Luft, sonst endet es im Chaos. Technisch geschieht dies mit dem concurrencyFeature der Promise.mapFunktion in der Bluebird Promise Library . Die Zahl, die Sie für das Parallelitätslimit festlegen, hängt von vielen Faktoren ab. Bereiten Sie sich darauf vor, es variabel zu machen, und passen Sie es an den Zustand des Netzwerks an.

Habe Spaß.

Ich nehme an, Sie möchten mit dem öffentlichen Ethereum-Netzwerk (Hauptnetz) arbeiten. Ich ignoriere die genaue Antwort, aber ich habe gelesen, dass es ungefähr 40 tx/s für das gesamte Netzwerk sind, einschließlich Ihrer Transaktionen und aller anderen Transaktionen. Und da die Anzahl von Benutzern, die das öffentliche Netzwerk verwenden, zunimmt, nimmt die Anzahl von tx/sec pro Benutzer ab. Gemäß dem CAP-Theorem/Problem ( https://en.wikipedia.org/wiki/CAP_theorem) Blockchain ist sehr gut in Konsistenz und Partitionstoleranz und sehr schlecht in Verfügbarkeit . Das heißt, nur niedrige Frequenz/hoher Wert ist für das öffentliche Ethereum-Netzwerk geeignet. Für andere Szenarien müssen "Side-Chains" oder andere Mechanismen verwendet werden. Für kontrollierte Netzwerke (z. B. Ethereum-Blockchain des Konsortiums) kann die Leistung nach Belieben angepasst werden, indem der Consesum-Algorithmus optimiert wird (Parität ist in diesem Sinne viel besser als Geth und ermöglicht verschiedene steckbare Consesus-Systeme mit unterschiedlichen Algorithmen).

Wie beantwortet dies die Fragen?
@BadrBellaj Ich glaube nicht, dass meine Antwort genau ist. Tatsächlich denke ich, dass es keine genaue Antwort gibt. Ich möchte, dass die Leute mit vernünftigen Argumenten antworten/antworten/argumentieren.
Hi. Hast du einen Link wo du die 40 tx/s gelesen hast?
@RichardHorrocks (40/Sek. Spreche aus dem Gedächtnis). Beachten Sie, dass diese Zahl orientierend ist, um eine Größenordnung bereitzustellen (Zehner vs. Tausend). Beachten Sie auch, dass Pow-Minen in pseudozufälliger Zeit ausgeführt werden und dass das Netzwerk nur eine durchschnittliche Zeit garantiert. Dieser Link ( reddit.com/r/ethereum/comments/3m7ley/… ) spricht von Zehntausenden für Kriegsgefangene im Vergleich zu Zehntausenden für POS. Das ist ein theoretisches Maximum, das für alle Benutzer zulässig ist. 10.000 verschiedene Benutzer, die gleichzeitig Transaktionen durchführen, sorgen für durchschnittlich 1 tx/Sek. pro Benutzer.