¿Cómo se calcula la dificultad de minería en Ethereum?

Después de leer varios documentos, todavía no me queda completamente claro qué determina el aumento de la dificultad y cómo los niveles de dificultad de Ethereum difieren de los de Bitcoin.

En la última semana, la dificultad saltó de alrededor de 11 a más de 17, mientras que GH/s fluctuó entre 800,00 y 1400,00, pero sin una correlación clara entre los dos.

¿Se ha introducido ahora la "bomba de dificultad"? Y si es así, ¿hay alguna forma de aproximar o calcular cuánta dificultad probablemente aumentará en los próximos 6 a 12 meses?

Relacionado: si es poco probable que Serenity / PoS se presente hasta principios del próximo año, ¿ha habido alguna sugerencia del equipo de desarrollo de que los efectos de esta "bomba de dificultad" se reducirán en los lanzamientos de Homestead o Metropolis?

Respuestas (1)

Desde https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2.md :

La dificultad de la minería se calcula a partir de la diferencia de tiempo entre bloques. La fórmula exacta cambiará en Homestead. El símbolo //a continuación denota división entera.

  • Frontera:

block_diff = parent_diff + parent_diff // 2048 * (1 if block_timestamp - parent_timestamp < 13 else -1) + int(2**((block.number // 100000) - 2))

  • Granja:

block_diff = parent_diff + parent_diff // 2048 * max(1 - (block_timestamp - parent_timestamp) // 10, -99) + int(2**((block.number // 100000) - 2))

EDITAR:

El problema con la fórmula de la frontera y la razón del cambio fue que la versión de la frontera no tiene en cuenta qué tan lejos de 13 segundos estaba el tiempo de bloqueo. Un bloque extraído 1 segundo después del anterior tiene el mismo efecto en la dificultad que uno extraído después de 12 segundos. Esto hace que la dificultad de los bloques se ajuste a un tiempo de bloque medio en lugar de a una media .

Una vez más, consulte el EIP para obtener más detalles.

Disculpas por la falta de conocimiento, pero ¿cómo exactamente usaría esto para calcular? Al ver la diferencia "< 13 else -1" vs "// 10, -99" no me queda claro cuál será la diferencia. Si tiene un momento para explicar con más profundidad, ¡se lo agradecería mucho!
En la fórmula se evalúa el tiempo entre el último bloque y el bloque anterior. Si la diferencia de tiempo es menor a 13, la dificultad sube: block_diff = parent_diff + parent_diff // 2048 + int(2**((block.number // 100000) - 2))Si el tiempo entre los dos últimos bloques fue mayor a 13 segundos, la dificultad baja:block_diff = parent_diff - parent_diff // 2048 + int(2**((block.number // 100000) - 2))
Eslabón perdido en la respuesta