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
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 concurrency
Feature der Promise.map
Funktion 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).
Badr Bellaj
ohrizon
Richard Horrocks
ohrizon