Fragen zum Bitcoin Mempool

Nachdem ich mir die sehr hübsch aufbereiteten Daten („Data is beautiful…“ :wink:) zum Bitcoin Mempool angesehen habe, z.B. hier (https://mempool.space/de/graphs#1m), stellen sich mir ein paar Fragen.

Es scheinen ja fast immer deutlich mehr Transaktionen im Mempool zu liegen, als die Blockgröße hergibt.
Die Miner nehmen sich immer das „oberste“ Häppchen aus dem Mempool - mit den Transaktionen, die die höchsten Fees haben, also somit den größten Profit.

Jetzt zu den Fragen:

  1. Der Mempool liegt auch auf den Full-Nodes? Oder ist dafür jemand anders im Netzwerk zuständig?

  2. Was erfolgt mit den Transaktionen, die eine sehr geringe Gebühr haben und deshalb - je nach Transaktionsaufkommen - sehr lange im Mempool rumgammeln? Gibt es eine maximale Haltezeit von Transaktionen und danach fliegen die wieder aus dem Mempool raus? Falls ja, was sind die Regeln?

  3. Alle paar Tage sieht es so aus, als ob sich der Mempool wieder bis auf den Boden leert. Ist das rein zufällig aufgrund eines sinkenden Transaktionsaufkommens? Oder ist das aufgrund eines - wie auch immer gearteten - Entrümpeln des Mempools?

  4. Wenn ich eine Transaktion mit geringen Fees vornehmen will, die nicht dringend ist und also auch ein paar Tage Zeit hätte, könnte ich
    a.) entweder den Mempool auf ein Absinken beobachten und dann meine Transaktion auslösen?
    b.) oder meine Transaktion mit einer geringen Fee losschicken und in Kauf nehmen, dass diese einige Tage braucht, bis sie in einen Block aufgenommen wird?

  5. Erfolgt die Sortierung der Transaktionen im Mempool (bzw. in dem oberen Häppchen, das sich die Miner rausholen) nach genau festgelegten Regeln, die z.B. im Bitcoin Core fest einprogrammiert sind?

  6. Falls Nein: Nach welchen Regeln wird das Häppchen sortiert bzw. ausgewählt? Entscheidet das der Miner oder der Mempool? Kann das jeder Miner selber entscheiden?

  7. Kann es sein, dass auf den zahlreichen Full-Nodes leicht unterschiedliche Mempools existieren? Entweder weil diese unterschiedlich sortiert werden oder weil nicht alle Transaktionen hundertprozentig zeitlich synchron bei allen Mempools ankommen?

  8. Aus welchem Mempool holt sich ein Miner sein Häppchen? Immer der selbe? Oder zufällig ausgewählt?

Fragen über Fragen… :grinning:

5 „Gefällt mir“

Wenn du eine Transaktion sendest, wird sie von deiner Node auf alle anderen Nodes übertragen, bis jede einzelne Node von deiner Transaktion Wind bekommen hat. Jede Node kann dann selbst entscheiden, ob sie einen Mempool hat der diese veröffentlichten Transaktionen speichert. Genau genommen kannst du auch selbst bestimmen welche Transaktionen du im Mempool speichern möchtest z.B. erst ab einer gewissen Fee etc.

Es gibt also nicht „den einen“ Mempool.

Wenn die Full-Node sich dazu entscheidet die Transaktionen zu speichern hat sie einen Mempool.

Entscheidet die Node selbst mit -mempoolexpiry (nach xy Stunden fliegt die Transaktion raus) und -maxmempool (nach xy mempool größe werden die Transaktionen mit der geringsten Gebühr aussortiert). Also grundsätzlich wird deine Transaktion nie von allen Mempools aussortiert worden sein. Es wird viel gemunkelt, dass Transaktionen standardmäßig nach 14 Tagen rausfliegen, mein aktueller Stand ist aber, dass es hier kein Limit gibt - außer man setzt es. Das sollte aber kein Problem sein, denn nur weil gewisse Nodes deine Transaktion „ablaufen“ lassen, heißt das nicht, dass das alle Nodes tun.

An diesem „Ablaufdatum“ wurde in der Vergangenheit schon mehrmals rumgeschraubt. Es gab schon einmal standardmäßige Time Limits.

Das ist aufgrund eines sinkenden Transaktionsaufkommens. Wenn wenig Transaktionen veröffentlicht werden, haben die Miner genug Zeit diese abzuarbeiten. Wenn du genau hinguckst (Johoe's Bitcoin Mempool Size Statistics) sind das meistens Wochenenden. Der heilige SATurday eben. :wink:

Wenn du echt 0 Stress hast: Einfach mit 1 sat/vB raushauen und warten.

Bin mir nicht sicher wie das zu verstehen ist. Die Charts die du auf mempool.space oder jochen.hoenicke.de siehst sind nur eine Darstellung des Mempools. Jeder Miner kann sich dann selbst aussuchen welche inkludiert werden sollen und das werden logischerweise immer die mit der hohen Fee sein (außer Tone Vays will eine Wette gewinnen :wink: )

Miner

Ja, siehe oben. Und ja, es kommen nicht alle Transaktionen bei allen Nodes zugleich an aber da handelt es sich wirklich nur um Sekunden.

Wie er möchte. Wenn er seine eigenen Transaktionen speichert wird das meistens einen Grund haben und er wird dann auf diesen Mempool zugreifen (und das tun auch die meisten).

10 „Gefällt mir“

@satoshi Vielen Dank für die ausführlichen Antworten, ich denke, das beantwortet die meisten meiner Fragen. Schön, dass sich hier der Erfinder selber zu Wort meldet :stuck_out_tongue_winking_eye:

Das erstaunt mich etwas, ich hätte erwartet, dass solche Regeln - sofern diese existieren - einheitlich im Netzwerk für alle Nodes gelten. :thinking:
Heißt also, der Betreiber der Node kann die „expiry“ Regeln selber konfigurieren.

Genau… das kann jede Node selbst entscheiden.

Hätte eine Frage: Warum genau haben viele Nodes eine maximale Mempoolgröße von 300MB eingestellt? Meine Umbrel Node hat eine 1TB SSD, also genügend Platz für einen großen Mempool :thinking:

So, irgendwie zeigt mempool.space bei mir komische Dinge an. „Hohe Priorität = 1sat“ und kaum Transaktionen in den Blöcken… und kaum UTX im Pool… streikt meine Anzeige oder ist da nix los im Netzwerk?

1 „Gefällt mir“

Deine Anzeige streikt nicht. Momentan ist da nicht viel los das sehen wir ja schon ein paar Tage.

300mb ist extrem viel für den Mempool. Deine 1TB müssen übrigens auch für die Blockchain reichen.

Hallo zusammen

Kann mir jemand erklären warum die Zeiten zwischen den Blöcken heute so unregelmässig sind? Ich dachte bis jetzt das es immer ca. 10 Minuten sind bis ein neuer Block kommt.

Nein, die 10 Minuten sind nur der Mittelwert, der angepeilt wird. Das ganze ist aber immer so unregelmäßig. Mal gehts schneller, mal langsamer :wink:

Nach ca. 2 Wochen (genau 2016 Blöcken) wird dann vom System geschaut, ob die 10 Minuten Durchschnitt in etwa zugetroffen sind und je nachdem passt es dann die Schwierigkeit, einen Block zu finden, nach oben oder unten an.

…um es mal salopp auszudrücken :smiley:

2 „Gefällt mir“

Die Unregelmäßigkeit ist regelmäßig. :grin:
Hab am 30.12. fast ne Stunde auf nen Block gewartet, wg. Tx, alles normal
Block 716392 :stuck_out_tongue_winking_eye:

Der Mempool ist wieder stark überlastet.
Was ist da los? Soviele Transaktionen?

Die Wallets sind besser geworden! Es wird viel weniger überzahlt. Viel mehr 1 sat Transaktionen. Bullish!

(Aus dem Kontext. Nur mal so angemerkt.)

2 „Gefällt mir“

Wenn man keine Not hat, das es schnell gehen soll würde ich auch mit 1 sat/vB rausgeben.
Zur Not (im Falle es gibt über mehrere Tage einen vollen Pool) gibt man die erste Transaktion
mit RBF-Flag (replace by fee) raus. Dann kann man immer noch die gleiche Transaktion (solange sie noch nicht in der Chain ist) mit einer höheren Fee rausgeben (bieten einige Wallets schon an).

Ich hätte zu dem Thema hier auch noch eine Frage. Wenn ich es richtig verstanden hab, stellt sich jeder Miner aus dem MemPool seinen eigenen Block zusammen, den er versucht zu lösen. D.h. jeder Miner hat seinen eigenen individuellen Block, an dem er arbeitet. Was passiert denn nun, wenn Miner A seinen Block gelöst hat. Dieser wird natürlich dann der Blockchain hinzugefügt, weil er der schnellste war. In die Blöcke aller anderen sind dann ntzlos? D.h. sobald ein Miner gelöst hat, müssen alle von neu einen für sich individuellen Block zusammen stellen, den sie selbst lösen? Oder ists so, dass alle Miner am selben Block arbeiten und diesen als erstes zu lösen versuchen?

Jeder Miner hat seinen eigenen Mempool, der sich aber nur wenig von den Mempools der anderen Miner unterscheiden wird.

Jeder Miner wird aus wirtschaftlichen Gründen sich ein Blocktemplate zusammenstellen, das ihm ein Maximum an Transaktionsgebühren gibt, wenn er damit einen Block gebacken bekommt. Das ist ein schlichtes Optimierungsproblem, das du lösen kannst, indem du dein Blocktemplate mit Transaktionen füllst, absteigend nach Fee/vB, wobei du 1000000 vB (genauer 4 Mio. Work Units) Gesamtgröße nicht überschreiten darfst (Konsensregeln!).

Hat ein Miner einen gültigen Blockhash gefunden und im Netzwerk propagiert, verwerfen alle anderen ehrlichen Miner ihre Blocktemplates, an denen sie geschürft haben, weil diese nun nutzlos geworden sind, sobald sie einen neuen validen Block über das Netzwerk erhalten haben. Der Blockhash des letzten Blockes muss ja in einem neuen Blockheader (und damit auch neuem Blocktemplate) referenziert werden, damit die Blockkette geknüpft wird.

Korrekt, es bleibt ihnen im Grunde genommen nichts anderes übrig (von Hash-Dominanz einmal abgesehen).

Nein, das ist schon deswegen nicht so, weil jeder Miner eine eigene Coinbase-Transaktion hat, die den Merkle-Tree aller Transaktionen eines Blocktemplates beeinflusst und letztlich dazu führt, daß jeder Miner auf seinem ganz eigenen Blockheader „rumkaut“, bis er einen validen Blockhash dafür gefunden hat. Bis auf die individuelle Coinbase-Transaktion könnten theoretisch die restlichen Transaktionen eines Blocktemplates für alle anderen Miner identisch sein. Wahrscheinlich ist dies allerdings nicht, da z.B. die Reihenfolge der Transaktionen in einem Blocktemplate unterschiedlich sein kann, je nachdem, wann ein Miner eine neue Transaktion im Bitcoin-Netzwerk „zur Kenntnis“ genommen hat.
Transaktionen werden ja von Node zu Node weitergereicht und nicht alle Nodes nehmen eine spezifische Transaktion zur selben Zeit wahr.

3 „Gefällt mir“

Wenn kaum Transaktionen im mempool auf Bearbeitung warten, dann kommen auch Transaktionen mit 1 sat/vB in den nächsten Block. Also das passt schon so.

Sie müssen von neu anfangen, da ja immer ein bestimmter Teil der Informationen vom vorherigen Block in den neuen Block miteingebaut werden muss (damit sind die Blöcke verbunden und chronologisch geordnet).

Jeder erfolglose Versuch, einen Hash zu finden wäre nach deiner Ansicht nutzlos. Da bleibt nichts übrig. Ein Block wird nicht etwa sukzessive aufgebaut. Entweder er ist gültig oder nicht.