¿Cuál es el criterio de prioridad minera, excepto la tarifa de transacción?

Estoy leyendo "Mastering Bitcoin escrito por Andreas" y encontré esta explicación de la minería.

Las transacciones se agregan al nuevo bloque, priorizadas por las transacciones con la tarifa más alta primero y algunos otros criterios.

Fuente: [ Mastering Bitcoins: Mining Transactions in Blocks ]

Quiero saber cuáles son algunos otros criterios. Y quiero ver el código fuente donde el sistema prioriza primero las transacciones con la tarifa más alta y algunos otros criterios.

Supongo que el código está en miner.cpp. Pero no entiendo la línea exacta.

https://github.com/bitcoin/bitcoin/blob/master/src/miner.cpp

Respuestas (1)

El código que estás buscando está en CreateNewBlock.

La forma habitual en que se agregan transacciones a un bloque es ordenándolas por prioridad. La prioridad de una entrada es el valor que se gasta en la entrada multiplicado por el número de confirmaciones que tiene. La prioridad de una transacción es la suma de todas las prioridades de las entradas. Ver esta línea :

dPriority += (double)nValueIn * nConf;

Las transacciones se agregan a un vector de prioridad de transacción :

vector<TxPriority> vecPriority;

Luego se ordenan según su prioridad :

TxPriorityCompare comparer(fSortedByFee);
std::make_heap(vecPriority.begin(), vecPriority.end(), comparer);

Y una por una, las transacciones se verifican para que sean válidas y luego se agregan al bloque , hecho por orden de prioridad, la prioridad más alta primero:

while (!vecPriority.empty())
...
// Added
pblock->vtx.push_back(tx);
♦ Por lo que leí en el código, si nBlockPrioritySize se establece en un valor superior a 1, la tarifa de transacción tiene mayor prioridad que la suma de todas las prioridades de las entradas. ¿Es correcto?