ich habe Verständnisfragen zum BTC Mempool.
Ich habe dazu bisher in verschiedenen Erklär-Videos und Foren-Diskussionen keine Antwort gefunden.
Ich habe gelesen, dass es nicht den einen Mempool gibt. Vielmehr gibt es auf jeder Node einen Mempool, der sich von denen auf anderen Nodes unterscheiden kann.
Was ist das für ein Mempool, der auf mempool.space abgebildet wird?
Welche Aussagekraft haben die da dargestellten Daten, wenn es doch bloß einer von vielen ist?
Insbesondere verstehe ich folgendes in Bezug auf die Mempool-Blöcke (also die unfertigen Blöcke) nicht:
Wie werden die Transaktionen ausgewählt, die in Mempool-Block 1, 2, 3 usw. eingehen? Wer wählt die aus? Ich bin davon ausgegangen, dass der einzelne Miner auswählt, welche Transaktionen er in den Block nimmt. Aber dann gäbe es doch x Kandidaten für den nächsten Block?
Also wie kann mempool-space wissen, welche Transaktionen im Nächsten Block drin sein werden? Dazu müsste man ja wissen, wer den nächsten Block mined, also die richtige Nonce findet, oder?
Mir fällt auch auf, dass der Nächste Block sich in der Zusammenstellung der Transaktionen verändert. Wie kann das sein? Während ich an einem Block rechne sollte der sich doch nicht ändern, oder? Nach einer Änderung müsste ich ja die bereits ausprobierten Noncen nochmal testen bzw. würden die Berechnungen auf dem alten Umfang ja ungültig.
Für eine Erklärung oder einen Link zu einer Erklärung wäre ich Euch sehr dankbar.
Dann habe ich ein weiteres Puzzelstück auf meinem Weg zur Erleuchtung.
Bitcoin ist eben ein dezentrales Netzwerk, also gibt es auch keinen zentralen Mempool, genauso wenig wie es eine zentrale Blockchain gibt.
Wenn du eine Bitcoin Transaktion „ins Netzwerk“ schickst, landet sie erst einmal bei einer Node (bzw. den Nodes mit denen deine Wallet verbunden ist). Dort wird sie validiert und anschließend an alle Nodes weiter geschickt mit denen die jeweilige Node verbunden ist. Die machen dann genau das selbe: Validieren und weiter sagen.
Das nennt man Flood propagation, irgendwann ist deine Transaktion einmal durchs komplette Netzwerk gewandert. Das Netzwerk wird mit deiner Transaktion „geflutet“. Erst dann ist sie auch in jedem Mempool und damit auch in den Mempools der Miner (das sind schließlich auch nur Nodes) enthalten. Der Empfänger deiner Transaktion sieht diese auch erst wenn die Node mit der seine Wallet verbunden ist sie im Mempool liegen hat.
Weil das Timing und die Verbreitung nicht unendlich schnell ablaufen kann wird niemals jeder Mempool auf jeder Node exakt gleich sein. Das sind natürlich minimale Unterscheide die sich innerhalb von Sekunden immer ausgleichen. Alle Mempools stimmen wahrscheinlich zu über 99% immer miteinander überein, weswegen man trotzdem Umgangssprachlich von dem Mempool sprechen kann.
Genau das selbe gilt für die Blockchain selbst. Wenn ein neuer Block gefunden wird kann das Netzwerk das erstmal gar nicht wissen. Die Node des Miners muss den Block, ähnlich wie eine Transaktion, ins Netzwerk schicken, wo der Block wieder sorgfältig validiert wird und weiter geschickt wird. Wenn der Block dann bei anderen Minern landet und diese ihn validiert haben wissen sie dass sie mit dem nächsten Block weiter machen können. Auch das läuft natürlich sehr schnell ab, trotzdem ist kurzeitig die Blockchain bei manchen Teilnehmern im Netzwerk länger (in dem Fall um einen Block) als bei anderen.
Wie du schon richtig sagst: Der Miner.
Theoretisch könnte dieser auch einfach gar keine Transaktion auswählen und einen leeren Block minen. Das ist völlig legitim, ergibt aber für den Miner nicht wirklich Sinn da er auf die Netzwerkgebühren der Transaktionen im Block verzichten würde.
Deshalb wird eigentlich immer so ausgewählt, dass der Block die höchstmögliche Belohnung für den Miner abwirft. Daher wird ein Block, noch während ein gültiges Proof of Work gesucht wird, auch andauernd verändert, z.B. kommen Transaktionen mit höherer Gebühr rein und andere werden wieder raus geschmissen.
Die Visualisierung mit den Mempool Blöcken die du auf mempool.space siehst versucht diese Auswahl halt möglichst akkurat abzubilden. Das ist aber nicht in Stein gemeißelt, sondern nur eine Vermutung der Webseite welche Transaktionen die Miner wahrscheinlich zuerst dran nehmen werden.
Das kannst du auch beobachten wenn du eine Transaktion mal auf der Seite im Mempool verfolgst, es kann sein dass sie durch mehrere Blöcke „nach hinten“ durchwandert. Das soll einfach nur eine Warteschlange veranschaulichen.
Natürlich, genau so funktioniert doch Mining. Wenn du nichts am Block änderst, ändert sich auch der Hashwert nicht. Nicht nur die Nonce wird angepasst, sondern auch z.B. die Reihenfolge der Transaktionen im Block, bzw. neue Transaktionen die in den Block reinkommen - alles beinflusst auch den Hashwert. Das ist logischerweise extrem wichtig da durch das verändern einer Transaktion im Block dieser ungültig werden muss! (d.h. der Hashwert verändert sich und das Proof of Work geht verloren)
Vielen lieben Dank für die ausführliche Erklärung.
Jetzt ist mir einiges klarer geworden.
Mir war auch nicht bewusst, dass die Reihenfolge der Transaktionen beim Mining einen Unterschied macht. Ich habe es mir so vorgestellt, dass einfach solange zufällige Noncen (oder einfach von 0 bis max) ausprobiert werden, bis sich ein Hash ergibt, der entsprechend viele Nullen hat.