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 enode
y 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, 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.go
que reside en consensus/ethash/consensus.go
y 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 geth
comando.
Le recomiendo encarecidamente que lea este artículo para una implementación más detallada del proceso anterior.
niksmac
alper