Rondas de prioridad, bloques vacíos y el productor anterior
Dos reglas deciden qué puede poner un productor sorteado en su bloque, y cuándo. Solo los productores de las diez primeras rondas pueden incluir transacciones; los productores posteriores solo pueden producir bloques vacíos. Y el nodo que produjo el bloque anterior queda degradado en el siguiente sorteo, de modo que solo produce el siguiente bloque como último recurso tardío. Ambas reglas mantienen la cadena en marcha pase lo que pase, a la vez que dejan las decisiones importantes en manos de los productores que el sorteo puso primero.
Rondas de prioridad
Cada productor tiene una posición: el índice, contado desde 0, del sorteo que lo designó. El parámetro max_priority_blocksmiths vale 10, así que:
- las posiciones 0 a 9, es decir, las rondas 1 a 10, pueden llevar transacciones;
- a partir de la posición 10 (la ronda 11 y siguientes), el bloque no debe llevar transacciones. Sí puede seguir llevando recibos.
La regla se comprueba cuando se produce el bloque, en el conjunto de bloques candidatos de cada nodo, y por cada validador. Un bloque tardío que incluye transacciones se rechaza.
La regla equilibra dos objetivos. La continuidad (liveness) nunca depende de que los primeros productores estén en línea: aunque muchos nodos sorteados estén caídos, alguien más abajo en la lista mantiene la cadena creciendo. Pero el derecho a elegir las transacciones se queda con los productores de mayor prioridad, de modo que un nodo mal situado no gana nada metiendo a toda prisa en la cadena un bloque lleno, o un bloque de transacciones escogidas a mano.
Un bloque vacío es un bloque completo
Un bloque vacío es perfectamente válido. Lleva los recibos que ganó su productor, así que el trabajo de retransmisión del productor sigue contando para su puntuación de participación. Además paga la coinbase programada para su momento como cualquier otro bloque: a partir de la versión 0.5.8 la coinbase de cada bloque debe coincidir exactamente con el calendario, así que la lotería coinbase nunca se salta un bloque (véase suministro y emisión).
Las transacciones pendientes no se pierden. Esperan en los conjuntos de espera de los nodos al siguiente bloque cuyo productor pueda incluirlas.
El productor anterior queda degradado
El productor del bloque N sigue en el sorteo del bloque N+1, pero sus sorteos no cuentan antes de la ronda 10, la última ronda que puede llevar transacciones. El peso de su bloque queda limitado de la misma forma: en la fórmula del peso, su número de sorteos k nunca es menor que 10, así que si llega a producir el bloque N+1 como recurso, el bloque suma como máximo una décima parte del peso de un bloque de la primera ronda (véase elección de bifurcación y dificultad acumulada). En la práctica, otro nodo sorteado produce el bloque N+1 siempre que alguno pueda hacerlo.
La degradación no es una penalización. Un sorteo degradado nunca cuenta como turno perdido, y el nodo conserva su plaza y su puntuación.
¿Por qué no dejar que produzca dos veces seguidas?
La semilla del bloque N+1 resuelve sorteos que dependen del bloque N, como los resultados de los juegos y las apuestas en la cadena (véanse semilla del bloque (VRF) y apps en ZooBC). Un nodo que produjera ambos bloques tendría el contenido de un bloque y la semilla que lo resuelve. La regla es que nadie debería tener a la vez una apuesta y la semilla que la resuelve, mientras otro nodo pueda responder.
¿Por qué no sacarlo del sorteo?
Sacar al productor anterior haría que una cadena de dos nodos alternara estrictamente entre ellos, y dejaría a una cadena con un solo nodo en funcionamiento sin poder producir en absoluto. Degradado en lugar de eliminado, el productor anterior sigue siendo el productor de último recurso: si nadie más entrega, todavía puede producir el bloque desde la ronda 10, cuyo objetivo está 150 segundos después del bloque anterior. La cadena nunca se detiene por esta regla.