Escuché que el cliente estándar prioriza qué transacción retransmitir según los Bitcoin Days Destroyed y la tarifa pagada por la transacción, pero ¿cuál es la fórmula exacta utilizada para determinar qué transacción tiene mayor prioridad? Es decir, ¿cómo prioriza el cliente estándar qué transacción enviar primero a otros nodos?
La prioridad de una transacción es (la suma de (edad de la moneda en bloques * valor de la moneda en satoshis) sobre todas las entradas en la transacción) dividida por el tamaño de la transacción en bytes.
Aquí hay una transacción de ejemplo aleatoria copiada de http://bitcoincharts.com/bitcoin/txlist/ :
Tiene 2 entradas (las cuales se han gastado desde entonces en otras transacciones (confirmadas) que hacen que esta transacción no sea confirmable):
Tiene una longitud de 439 bytes y una prioridad de 432.232.688.
Los bloques más recientes en la cadena de bloques son 175262 en el momento de escribir este artículo.
Sumo los (valores de edad *) para cada transacción y los divido por tamaño. Esto + 1
se debe a que se considera que las transacciones confirmadas en el bloque más reciente tienen una antigüedad de 1, no de 0:
>>> current_block = 175262
>>> ((current_block - 165774 + 1) * 0.1005e8 +
(current_block - 165777 + 1) * 0.0995e8) / 439
432232687.92710704
Como puede ver, la prioridad de una transacción aumentará a medida que se encuentren nuevos bloques.
Las reglas para el cliente de Bitcoin.org son mantener la primera transacción en la que se gasta una dirección de bitcoin y descartar sin retransmitir ninguna otra que pueda llegar.
Entonces, la prioridad se basa en el tiempo cronológico de llegada.
Se ha hablado de variaciones que permitirían una transacción de reemplazo con una tarifa más alta para reemplazar una transacción anterior que aún no ha sido confirmada.
Y hay un vector de ataque que describe cómo se puede modificar esta prioridad para facilitar el doble gasto .
Esteban Gornick
Mago binario
Stéphane Giménez