¿Es posible disminuir la dificultad de la cadena de bloques Ethereum privada en curso?

Tenga en cuenta que mi pregunta se suma a la siguiente pregunta: ¿Cómo disminuyo la dificultad en una red de prueba privada? . Lo siento, estoy perdido en sus respuestas.

[P] ¿Es posible disminuir la dificultad de la cadena de bloques Ethereum privada en curso (por ejemplo: la cadena de bloques ya extrajo 491,312 bloques)? ¿O debería crear una nueva cadena de bloques de Ethereum privada a partir del bloque 0 para modificar la dificultad?

Apliqué la solución de @eth https://ethereum.stackexchange.com/a/7159/4575 en mi enodey lancé que la dificultad comenzó a disminuir, pero no pude extraer ninguna de mis próximas transacciones debido al siguiente error y así en:

Bad block #491231 (0x39e86646d54ad4a83ba41abc1192fb8e64bfcbf733aa2e5e94351fd168091068)
Difficulty check failed for header 914854

Además de eso, ¿no estaba seguro de aplicar esta solución en todos los nodos que están conectados a mi red privada de ethereum? o solo en el enodo al que se conectaron los pares?

Gracias por su valiosa ayuda y tiempo.

No estoy preguntando cómo funciona el algoritmo de ajuste de dificultad de Ethereum Homestead. Mi pregunta estaba relacionada si tengo una red privada en curso y, por ejemplo, la dificultad es de alrededor de 4000,00 KH, ¿es posible acercar la dificultad a 1 KH? Dado que la dificultad sigue aumentando y no puedo hacer que la dificultad sea constante, mis mineros con poca CPU (2 GB de RAM) no podrán mantenerlo. Pero gracias de todos modos. @nikmac.

Respuestas (2)

No, no podrás pasar del punto en el que cambiaste el algoritmo de dificultad. Tendrás que empezar de cero, me temo.


El error que está viendo proviene de la ValidateHeader()función que, sorprendentemente, intenta validar los valores contenidos en el encabezado del bloque actual que se está importando.

En resumen, la sección Validez del encabezado del bloque del Libro amarillo establece lo siguiente:

(51)H re = D (H )

Lo cual es una forma críptica de afirmar que la dificultad en el encabezado del bloque actual debe coincidir con la dificultad esperada calculada, dada la dificultad del padre del bloque y el número de bloque actual.

expd := CalcDifficulty(config, header.Time.Uint64(), parent.Time.Uint64(), parent.Number, parent.Difficulty)
if expd.Cmp(header.Difficulty) != 0 {
    return fmt.Errorf("Difficulty check failed for header (remote: %v local: %v)", header.Difficulty, expd)
}

Su CalcDifficulty()función, que ha modificado, ahora devuelve un valor que no coincide con el encabezado de bloque de un bloque que se creó antes de realizar el cambio.

Editar:

Por supuesto, podría editar el código nuevamente para eliminar o deshabilitar temporalmente esta verificación, pero siempre tendrá la discrepancia en su cadena. Depende de ti decidir si eso importa o no.

Puede reducir la tasa de aumento de la dificultad de los bloques haciendo algunos cambios en el código de consenso de go-ethereum. Abra consensus.goque reside en consensus/ethash/consensus.goy busque la línea de abajo.

return CalcDifficulty(chain.Config(), time, parent)

Ahora reemplace la línea de arriba con la de abajo.

return big.NewInt(1).

Ahora construye el go-ethereum usando el make gethcomando.

Le recomiendo encarecidamente que lea este artículo para una implementación más detallada del proceso anterior.

El OP ya había seguido esas instrucciones (que ya estaban descritas en la publicación a la que hacían referencia). La pregunta era cómo hacerlo en una cadena continua , es decir, sin empezar de cero y sin discrepancias en la cadena.