Bitcoin ABC ha publicado la versión 0.16.0 que contiene el algoritmo de ajuste de dificultad (Difficulty Adjustment Algorithm) (DAA) actualizado.
Este es un cambio de las reglas de consenso de Bitcoin Cash. El cambio se activa el 13 de Noviembre. Este es un hardfork, por lo que los sitios de cambio, carteras y otros software necesitan actualizar antes del 13 de Noviembre. Se cuenta con un testnet disponible.
Hemos estado en comunicación con los mineros de Bitcoin Cash y ellos están esperando esta actualización.
El ’EDA’ (Emergency Difficulty Adjustment) original de Bitcoin Cash permitió que Bitcoin Cash sobreviviera como una cadena minoritaria, pero produce fluctuaciones descontroladas de hashrate. Esto es problemático porque evita rápidas confirmaciones consistentes para los usuarios y cambia radicalmente el programa de emisión de monedas.
Se presentaron varias propuestas para mejorar el DAA. Hemos revisado todas ellas y las agradecemos. Después de una cuidadosa consideración, tomamos la decisión de implementar la propuesta del desarrollador líder de Bitcoin ABC, Amaury Sechet (más detalles sobre esta propuesta a continuación).
Nuestra decisión de elegir una propuesta específica no fue fácil, porque Bitcoin Cash cuenta con varios equipos de desarrollo independientes, y hubo una gran deliberación entre los desarrolladores de estos grupos.
Tenemos el máximo respeto por todos los desarrolladores involucrados en las discusiones, pero dado que una decisión en tiempo era requerida solo se podía elegir un algoritmo.
Por lo tanto, decidimos adoptar un enfoque científico y utilizamos dos equipos de prueba imparciales y desconectados: Bitprim y nChain. Estos equipos realizaron sus pruebas por separado y llegaron a la misma conclusión de cuál algoritmo era el más apropiado.
En el futuro, los cambios a nivel de consenso deben tener mayor planificación, así como un proceso para facilitar la comunicación entre los equipos. Esperamos trabajar con otros equipos para definir y perfeccionar ese proceso en los próximos meses y años.
Los tres algoritmos principales que se probaron son ‘D578’ de Neil Booth, ‘D601’ de Amaury Sechet y ‘D622’ de Tom Harding.
En nuestras propias pruebas los 3 produjeron resultados similares y tiempos medios de bloque (mean block time) de aproximadamente 600 segundos, una mejora colosal con respecto al código actual.
Las sinopsis de Bitprim y nChain siguen a continuación:
BitPrim: ’Las propuestas de Tom y Amaury son muy similares en rendimiento. La propuesta de Amaury tiene mejores posibilidades de obtener consenso de red’
nChain: ‘D601 es la elección lógica. D622 es 3.1% (+/- 1.2% a 95% CI) mejor en la mayoría de los casos, pero presenta algunos casos límite (edge cases) en su contra. Por ejemplo, un gran minero puede establecer fluctuaciones en el tiempo’
Reconocemos que D601 (propuesta de Amaury Sechet) puede no tener necesariamente el rendimiento más alto, pero dado que los 3 tuvieron un rendimiento similar, se seleccionó D601 porque parece presentar el menor riesgo.
Algoritmo
El nuevo algoritmo DAA busca lograr los siguientes objetivos:
- Ajustar la dificultad del hashrate apuntando a un intervalo de bloque promedio de 600 segundos.
- Evitar cambios repentinos en la dificultad cuando el hashrate sea relativamente estable.
- Ajustar la dificultad rápidamente cuando el hashrate cambie rápidamente.
- Evitar las oscilaciones de respuesta entre el hashrate y la dificultad.
- Ser resistente a los ataques como la manipulación de marca-de-tiempo (timestamp).
Este algoritmo está basado en un promedio móvil simple de 144 períodos. La dificultad se ajusta a cada bloque, según la cantidad de trabajo realizado y el tiempo transcurrido entre los 144 bloques anteriores.
Para calcular la dificultad, comenzamos con los tres bloques recientes y elegimos el que tiene la marca-de-tiempo (timestamp) mediana a los tres. A continuación, el proceso se repite con los bloques 144, 145 y 146 (bloques con una altura de 144-146 menor al bloque actual) y se selecciona nuevamente una marca-de-tiempo (timestamp) de bloque mediana a esos 3.
A partir de estos 2 bloques elegidos separados aproximadamente 144 bloques, se define W como la cantidad de trabajo realizado entre los bloques, y T como el tiempo transcurrido entre los bloques. Se aplica un filtro de paso alto-bajo para que T tenga un valor máximo de 2 días y un valor mínimo de 0.5 días. Esto evita que la dificultad cambie abruptamente. (Normalmente 144 bloques toman aproximadamente 1 día).
Entonces podemos calcular:
Wn = W * Tiempo de Bloque Esperado / T.
G = (2^256 / Wn) - 1
Este es nuestro objetivo de dificultad. Por último, se aplica un filtro final para imponer un objetivo máximo.
La activación de las nuevas reglas de consenso se realizarán sobre la base de la marca-de-tiempo (timestamp) mediana en bloques que se produzcan después de la marca-de-tiempo (timestamp) 1510600000, que corresponde al 13 de Noviembre a las 7:06 PM GMT. Este código de activación ha sido consolidado.
La hora exacta de la actualización dependerá de la marca-de-tiempo (timestamp) de los bloques minados después de la marca-de-tiempo (timestamp) límite.
Actualizando la red
Bitcoin ABC tomará medidas para ponerse en contacto con los principales proveedores de cambio y carteras. Toda ayuda en este esfuerzo es bienvenida. Podés ayudar poniéndote en contacto con los sitios de cambio, los proveedores de carteras y otros participantes del ecosistema, y haciéndoles saber que deben actualizar su software o ejecutar una versión actualizada de Bitcoin ABC u otro software compatible.
Como nota final, Bitcoin ABC está comprometido con los valores del desarrollo descentralizado. Nos esforzamos por ser una implementación líder e impulsar la innovación y el progreso, pero no deseamos ser EL LÍDER, ya que creemos que nunca debería existir una autoridad única.
Aunque esta vez es la propuesta de Bitcoin ABC la que se presenta a los mineros, confiamos en que con el tiempo, otros equipos de desarrollo también verán sus ideas implementadas a medida que avancemos juntos como una comunidad unida.