Wo kann ich mich über die technische Umsetzung des Transaktions-/Memory-Pools informieren?

Ich konnte in keinem der Ethereum White / Yellow Papers spezifische Details darüber finden, wie der Transaction / Memory Pool implementiert wurde.

Ich frage mich, ob ich irgendwo etwas über die spezifischen Implementierungsdetails dieser Mechanik lesen kann.

Antworten (1)

Es ist unwahrscheinlich, dass die Implementierungsdetails von so etwas wie dem Speicherpool Teil der Spezifikation sind. Es könnte erwähnen, dass „es einen Pool von Transaktionen gibt“, aber die Implementierung würde wahrscheinlich dem Implementierer als Übung überlassen bleiben.

Die wichtigen Teile der Geth-Implementierung sind in tx_pool.go(und für Parity sieht es aus wie die Dateien in parity/miner/src/pool/). Am besten lesen Sie den Code und, wenn Sie Glück haben, die zugehörigen Kommentare.

Nur zur Verdeutlichung, Sie sagen, dass es Sache des Ethereum-Kunden ist, zu bestimmen, wie er mit dem Txpool umgehen möchte? Wie in verschiedenen Ethereum-Clients kann es sein, dass mehr oder weniger TX für eine bestimmte Zeit im Pool leben?
Richtig. Es liegt am Implementierer. Das könnte jeder sein. Es steht Ihnen frei, Ihren eigenen Client zu schreiben, der den Pool anders handhabt.
In der Vergangenheit hat die unterschiedliche Behandlung von schwebenden Transaktionen in den Clients zu lustigen Fehlern geführt. Aus meinen Protokollen: „In Bezug auf Geth, selbst wenn Sie eine neue Transaktion durchführen und diese übertragen, müssen Sie, wenn ich mich richtig erinnere, den Gaspreis um mindestens 10% erhöhen. Es ist Teil des Spam-Schutzes. Der schwierige Teil ist, dass Parität hat eine andere Art, damit umzugehen. Ich habe also das Gefühl, dass in den letzten 1-2 Wochen einige dieser ausstehenden TXNs von einem Client verworfen, aber dann von dem anderen abgeholt und dann wie in einer Schleife erneut gesendet werden.
Ja, ich erinnere mich an etwas ähnliches. Vielleicht wäre es sinnvoll, das Verhalten der verschiedenen Clients irgendwo zu beschreiben, aber dann könnte jeder seine eigene Implementierung mit seinen eigenen Regeln schreiben und es niemandem sagen. Vielleicht bin ich ein Miner und möchte bestimmte Transaktionen nicht in die von mir geschürften Blöcke aufnehmen. In diesem Fall könnte ich sie entweder in meinen Pool zulassen, aber nicht zu meinen Blöcken hinzufügen, oder ich könnte sie überhaupt nicht zu meinem Pool hinzufügen, was möglicherweise zu Fehlern führen würde, die denen ähneln, die @MikkoOhtamaa erwähnt. Vielleicht gibt es keine einfache Lösung.