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
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?
Wenn wir den getrawmempool true
RPC 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 ancestorsize
und . ancestorfees
Diese 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.
Nate Eldredge
Karel Bilek