¿El minero con CPFP revisa todas las combinaciones posibles de descendientes para encontrar la que tiene la tarifa más alta?

Cuando hay una transacción con más descendientes, ¿la política de CPFP analiza todas las combinaciones posibles de descendientes para considerar "juntos", para encontrar cuál tiene la mejor tarifa?

Por ejemplo, cuando hay un gráfico de dependencia, luciendo así

gráfico de dependencia simple

hay 6 posibilidades a considerar para A - {A}, {A, B}, {A, B, C}, {A,C}, {A,C,D}, {A,B,C,D} . ¿El minero de CPFP los revisa todos?

En este gráfico, habrá 25 combinaciones de este tipo, si las cuento correctamente. ¿Bitcoin core revisaría todos ellos?

gráfico más complejo

Uno puede leer el código . Pero no hay forma de que considere literalmente todas las combinaciones. Un bloque con, digamos, 10000 transacciones tendría hasta 2^10000 combinaciones.
No entiendo el código lo suficiente. No hay tantas transacciones dependientes en mempool

Respuestas (1)

Si ejecutamos el getrawmempool trueRPC, podemos ver los datos que Bitcoin Core tiene para cada una de sus transacciones de mempool. Aquí hay un ejemplo:

"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" ] },

Observe los campos ancestorsizey . ancestorfeesEstos representan el tamaño total de bytes y las tarifas para esta transacción y todos sus ancestros. Entonces es simple dividir la tarifa por los bytes y producir una lista ordenada para encontrar qué transacción paga la mejor tarifa (tarifa por byte), incluidos sus antecesores.

Luego, se puede volver a calcular la tasa de tarifa de las transacciones restantes eliminando de la consideración las transacciones que se agregaron a la propuesta de bloque anterior, ordenar esas nuevas tasas de tarifa y encontrar la nueva transacción con la mejor tarifa de tarifa, incluidos sus ancestros. Repita este paso hasta que la propuesta de bloque tenga menos espacio restante que cualquiera de las transacciones en el mempool.

Calcular estos tamaños y tarifas de antepasados ​​es bastante rápido: no necesita calcular los valores para cada antepasado, solo toma los valores de sus antepasados ​​inmediatos (que ya tienen todos sus antepasados ​​incluidos) y luego agrega los valores de la transacción actual a ese.

Además, para mantener las cosas rápidas, Bitcoin Core solo analiza cadenas de transacciones de profundidad 25 o menos.

Para obtener más información, este es el parche que agregó CPFP a Bitcoin Core. Es relativamente corto y bastante bien comentado.

Gracias por la respuesta; Lo aceptaré cuando esté en casa y tenga tiempo para leer detenidamente, pero se ve bien. No he entendido el código ni en el código Luke-Jr original ni en el nuevo, ya que me parecen demasiado técnicos
¿No debería ser "incluidos los honorarios de sus descendientes" en lugar de antepasados? El niño paga por el padre, por lo que debería estar interesado en los descendientes, ¿no?
@KarelBílek son antepasados. Según las reglas de consenso, las transacciones secundarias solo se pueden agregar a un bloque si sus padres están en el mismo bloque o en un bloque anterior, por lo que CPFP significa que un niño paga una tarifa alta para que se confirmen sus ancestros de tarifa baja. Un antepasado de tarifa alta no hace nada para que se confirmen sus descendientes de tarifa baja.
Oh, está bien, lo tenía al revés. Pensé que para cada transacción, verificas a sus descendientes, si pagan por ella. Pero es al revés, para cada transacción, verifica sus antepasados, si paga por ellos. Enfriar