He creado una red de prueba privada. En el genesis.json
archivo, he cambiado el difficulty
a 1
. Sin embargo, la extracción de un bloque aún lleva horas en mi CPU. Sospecho que se debe a alguna configuración relacionada con la adaptación de la red.
¿Cuál es el procedimiento correcto para disminuir la dificultad en una red de prueba privada, de modo que pueda extraer los primeros bloques en una CPU no muy potente?
Hay 2 formas de hacer esto:
Cambie el valor del parámetro de dificultad en genesis.json
el archivo a un número pequeño (preferiblemente configúrelo en 0). Puede consultar este archivo de génesis de ejemplo
{
"config": {
"chainId": 1994,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0
},
"difficulty": "0x0", //difficulty set to zero in hexadecimal format
"gasLimit": "0x8000000",
"alloc": {
"9a963d0eefeb62678d8efb48561c81e51c552797": {
"balance": "9606938044258990275541962092341162602522202993782792835301376"
},
"30f28686aef33adbfbc13797b1d9f5a2f2759f56": {
"balance": "9606938044258990275541962092341162602522202993782792835301376"
}
}
}
El problema con este método es que cuando aumenta el número de bloques, la dificultad también comienza a aumentar a un ritmo elevado. Entonces, para abordar ese problema, consulte la parte a continuación.
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.
Puede hacer que la dificultad sea estática modificando CalcDifficulty
Geth para que devuelva un número estático. Ejemplo:
func CalcDifficulty(config *ChainConfig, time, parentTime uint64, parentNumber, parentDiff *big.Int) *big.Int {
return big.NewInt(1)
}
Reconstruye Geth y usa tu versión modificada.
Fuente: Respuesta a ¿Es posible cambiar el tiempo objetivo del bloque?
enode
que me estoy conectando? En caso afirmativo, ¿afecta la dificultad en la red blockchain privada en curso (por ejemplo: ya se extrajeron 491 312 bloques)? @eth♦cpp-ethereum
? No encontré ningún archivo con un nombre similar, por ejemplo, Consensus.cppEthash::calculateDifficulty
.Como se ve en este blog.
dificultad Un valor escalar correspondiente al nivel de dificultad aplicado durante el descubrimiento de este bloque. Define el objetivo de minería, que se puede calcular a partir del nivel de dificultad del bloque anterior y la marca de tiempo. Cuanto mayor sea la dificultad, estadísticamente más cálculos debe realizar un minero para descubrir un bloque válido. Este valor se utiliza para controlar el tiempo de generación de bloques de una cadena de bloques, manteniendo la frecuencia de generación de bloques dentro de un rango objetivo. En la red de prueba, mantenemos este valor bajo para evitar esperas durante las pruebas, ya que se requiere el descubrimiento de un Bloque válido para ejecutar una transacción en Blockchain.
La dificultad se establece 0x4000
en el bloque de génesis, que me ayuda a extraer bloques cada ~5
segundo.
I0401 07:06:16.533385 4556 ethash.go:252] Generating DAG: 98%
I0401 07:06:16.533482 4556 ethash.go:252] Generating DAG: 99%
I0401 07:06:16.533586 4556 ethash.go:252] Generating DAG: 100%
I0401 07:06:16.533668 4556 ethash.go:237] Done generating DAG for epoch 0, it took 10.562412ms
y minería
I0401 07:06:26.062135 4556 worker.go:348] 🔨 Mined block (#219 / 9704b2d0). Wait 5 blocks for confirmation
I0401 07:06:26.062687 4556 worker.go:569] commit new work on block 220 with 0 txs & 0 uncles. Took 484.843µs
I0401 07:06:26.063166 4556 worker.go:569] commit new work on block 220 with 0 txs & 0 uncles. Took 375.001µs
I0401 07:06:32.221697 4556 worker.go:348] 🔨 Mined block (#220 / 77bb4f70). Wait 5 blocks for confirmation
I0401 07:06:32.222280 4556 worker.go:569] commit new work on block 221 with 0 txs & 0 uncles. Took 521.439µs
Puede seguir este tutorial con una explicación detallada: http://blog.coinfabrik.com/fast-smart-contracts-execution-ethereum-private-blockchain-development-environment/
niksmac
maiavictor
niksmac