Durchsucht der Bergmann mit CPFP alle möglichen Kombinationen von Nachkommen, um diejenige mit der höchsten Gebühr zu finden?

Wenn es eine Transaktion mit mehreren Nachkommen gibt, durchsucht die CPFP-Richtlinie alle möglichen Kombinationen von Nachkommen, um "zusammen" zu berücksichtigen, um herauszufinden, welche die beste Gebühr hat?

Zum Beispiel, wenn es ein Abhängigkeitsdiagramm gibt, das so aussieht

einfacher Abhängigkeitsgraph

Es gibt 6 Möglichkeiten für A - {A}, {A, B}, {A, B, C}, {A,C}, {A,C,D}, {A,B,C,D} . Durchsucht der CPFP-Miner sie alle?

In dieser Grafik gibt es 25 solcher Kombinationen, wenn ich richtig zähle. Würde Bitcoin Core sie alle durchsehen?

komplexere Grafik

Man kann den Code lesen . Aber auf keinen Fall berücksichtigt es buchstäblich alle Kombinationen. Ein Block mit beispielsweise 10000 Transaktionen hätte bis zu 2^10000 Kombinationen.
Ich verstehe den Code nicht genug. Es gibt nicht so viele abhängige Transaktionen in Mempool

Antworten (1)

Wenn wir den getrawmempool trueRPC ausführen, können wir uns die Daten ansehen, die Bitcoin Core für jede seiner Mempool-Transaktionen hat. Hier ist ein Beispiel:

"3a0af489e500322159db85ad95174ffa3dd9924dbd0b68b041364a8c8eac03cc": { "size": 226, "fee": 0.00001130, "modifiedfee": 0.00001130, "time": 1507465582, "height": 488876, "descendantcount": 24, "descendantsize": 5412, "descendantfees": 27120, "ancestorcount": 2, "ancestorsize": 451, "ancestorfees": 2260, "depends": [ "3da9c837b8560eadea2f8c48a050e9dd3f4d7637b5209bdf98c19175906529bb" ] },

Beachten Sie die Felder ancestorsizeund . ancestorfeesDiese stellen die gesamte Bytegröße und die Gebühren für diese Transaktion und alle ihre Vorfahren dar. Es ist dann einfach, die Gebühr durch die Bytes zu dividieren und eine sortierte Liste zu erstellen, um herauszufinden, welche Transaktion die beste Gebühr (Gebühr pro Byte) zahlt, einschließlich ihrer Vorfahren.

Dann kann der Vorfahren-Gebührensatz der verbleibenden Transaktionen neu berechnet werden, indem alle Transaktionen, die zu dem Blockvorschlag oben hinzugefügt wurden, aus der Berücksichtigung entfernt werden, diese neuen Gebührensätze sortiert werden und die neue Transaktion mit dem besten Gebührensatz einschließlich ihrer Vorfahren gefunden werden. Wiederholen Sie diesen Schritt, bis der Blockvorschlag weniger verbleibenden Speicherplatz hat als alle Transaktionen im Mempool.

Die Berechnung dieser Vorfahrengrößen und -gebühren geht ziemlich schnell: Sie müssen nicht die Werte für jeden Vorfahren berechnen, Sie nehmen einfach die Werte Ihrer unmittelbaren Vorfahren (bei denen bereits alle ihre Vorfahren berücksichtigt sind) und addieren dann die Werte der aktuellen Transaktion dazu.

Um die Dinge schnell zu halten, betrachtet Bitcoin Core nur Transaktionsketten mit einer Tiefe von 25 oder weniger.

Für weitere Informationen ist dies der Patch , der CPFP zu Bitcoin Core hinzugefügt hat. Es ist relativ kurz und recht gut kommentiert.

Danke für die Antwort; Ich werde akzeptieren, wenn ich zu Hause bin und Zeit habe, es gründlich durchzulesen, aber es sieht gut aus. Ich habe den Code weder im ursprünglichen Luke-Jr-Code noch im neuen verstanden, da sie mir zu technisch erscheinen
Sollte es nicht "einschließlich Gebühren seiner Nachkommen" anstelle von Vorfahren heißen? Kind zahlt für Eltern, also sollten Sie an den Nachkommen interessiert sein, oder?
@KarelBílek es sind Vorfahren. Gemäß den Konsensregeln können untergeordnete Transaktionen nur dann zu einem Block hinzugefügt werden, wenn sich ihre Eltern im selben Block oder in einem früheren Block befinden. CPFP bedeutet also, dass ein Kind eine hohe Gebühr zahlt, um seine Vorfahren mit niedriger Gebühr bestätigen zu lassen. Ein Vorfahre mit hoher Gebühr trägt nichts dazu bei, dass seine Nachkommen mit niedriger Gebühr bestätigt werden.
Oh OK, ich hatte es umgekehrt. Ich dachte, dass Sie für jede Transaktion ihre Nachkommen überprüfen, ob sie dafür bezahlen. Aber es ist der andere Weg, für jede Transaktion überprüfen Sie ihre Vorfahren, ob sie für sie bezahlt werden. Kühl