Glosario / Protocolo y actualizaciones
Speedy Trial
- ¿Qué es Speedy Trial?
- Speedy Trial es la configuración de activación que se usó para Taproot: una ventana corta de señalización de los mineros con un umbral reducido del 90 % y la entrada en vigor aplazada a una altura de bloque fija posterior.
Se especifica en el BIP-341.
Speedy Trial es un despliegue modificado de bits de versión de BIP-9, escrito dentro del mismo BIP-341 en lugar de en un BIP propio. Los mineros tuvieron 109 días, del 24 de abril al 11 de agosto de 2021, para activar el bit 2 en 1.815 de 2.016 bloques, con la entrada en vigor fijada en el bloque 709.632. Esa altura de entrada en vigor se estableció antes de que se abriera la señalización, así que los tenedores conocían el bloque exacto en el que cambiarían las reglas.
Cómo funciona
Speedy Trial conserva el método de recuento de BIP-9, cambia dos de sus números y añade un parámetro que BIP-9 nunca tuvo.
BIP-9 cuenta los bloques que señalizan a lo largo de cada período de ajuste de dificultad de 2.016 bloques y pasa un despliegue del estado STARTED al estado LOCKED_IN en cuanto un período contiene suficientes. Su umbral es de 1.916 bloques, el 95 % de un período, y su propia pauta para la ventana es de un año, 31.536.000 segundos después de la fecha de inicio. Tanto el inicio como el parámetro timeout (fecha de expiración) se leen del tiempo pasado mediano, la mediana de las marcas de tiempo de un bloque y sus diez predecesores, así que el reloj es el de la cadena y no el reloj de pulsera de nadie.
El despliegue de Taproot redujo el umbral a 1.815 bloques, el 90 %, y dio a la ventana 9.417.600 segundos, desde la marca de tiempo Unix 1619222400 hasta la 1628640000. La novedad fue el parámetro min_activation_height. Con BIP-9 sin modificar, un despliegue que ha quedado fijado pasa a ACTIVE al inicio del siguiente período de ajuste, así que quedar fijado solo acota la altura de entrada en vigor a los 2.016 bloques siguientes. Con Speedy Trial, el estado LOCKED_IN se repite hasta que la cadena alcanza la altura indicada, y solo entonces pasa a ACTIVE. La altura de la mainnet fue 709.632, que equivale exactamente a 352 períodos de ajuste y, por tanto, al inicio de un período. Y, en efecto, el despliegue se activó allí.
Toda la idea está en la separación. La señalización responde rápido a una pregunta, y el largo intervalo que sigue es tiempo para que todos los demás se actualicen, no tiempo dedicado a discutir.
Dónde aparece
Los parámetros de Speedy Trial se pueden leer en el campo de versión de cada bloque que se minó durante la ventana de señalización de 2021.
Un bloque que señaliza lleva los bits superiores 001 más el bit propio del despliegue, así que una señal de Taproot en el bit 2 se lee como la versión 0x20000004. Los mineros que solicitan trabajo encuentran el mismo despliegue a través de la llamada RPC getblocktemplate, cuya clave "rules" nombra las bifurcaciones blandas (soft forks) ya activas y cuya clave "vbavailable" asocia cada una de las pendientes con su bit. El nombre que BIP-341 da a este despliegue, y por tanto la cadena de caracteres que lee un minero, es simplemente "taproot".
La ejecución del mismo despliegue en la testnet3 muestra para qué servía el retraso. Usó marcas de tiempo de inicio y de timeout idénticas, un umbral de 1.512 bloques, el 75 %, y min_activation_height en 0, así que no se aplazó nada más allá del intervalo de un período del propio BIP-9, y se activó en la altura 2.011.968. La mainnet tuvo la espera adicional; la red de pruebas no tenía ninguna economía que proteger. En la signet las reglas estuvieron siempre activas, así que allí no hubo ningún ensayo.
Speedy Trial frente a UASF
Una bifurcación blanda activada por los usuarios fuerza el resultado desde el lado de los nodos, y Speedy Trial rechazó deliberadamente ese poder.
El mecanismo que lo fuerza está escrito en BIP-8 como el parámetro lockinontimeout. Si se establece en true, el despliegue recibe un período en el estado MUST_SIGNAL antes del timeout, en el que los bloques que no señalizan pasan a ser inválidos una vez agotada la cantidad de bloques sin señalización que admite el período, lo que garantiza que el despliegue quede fijado tanto si los mineros cooperan como si no. BIP-8 recomienda ese indicador para cualquier bifurcación blanda de la que se espere oposición política de una parte no despreciable de los mineros, y en el mismo documento advierte que los nodos que lo usen pueden seguir una cadena con menos trabajo acumulado durante un período prolongado y pueden necesitar conectarse preferentemente entre sí.
Speedy Trial no llevaba ningún indicador así. No alcanzar el umbral antes del timeout dejaba el despliegue en FAILED y no hacía nada más, y ese fue el trato que eligió: ninguna garantía de activación, ningún riesgo de división de la cadena y una respuesta barata en cualquier caso.