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í
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?
Si ejecutamos el getrawmempool true
RPC, 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 ancestorsize
y . ancestorfees
Estos 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.
Nate Eldredge
Karel Bilek