Minería y sincronización extremadamente lentas de geth para blockchain privado

Estoy construyendo una red Ethereum privada muy simple de 2 nodos para estudiar el comportamiento de la minería. El algoritmo de consenso es ethash. Para que los 2 nodos se descubran entre sí, también configuré un bootnode. Todos estos nodos se ejecutan en diferentes direcciones IP. Básicamente, creé una red docker y ejecuté 1 contenedor bootnode y 2 contenedores geth.

Inicialicé con éxito el bloque (a través de geth init...), creé 10 cuentas para cada nodo. Luego inicié las 2 instancias geth para comenzar a minar, pasó por la generación habitual de DAG. Mientras generaba DAG para la época 1, la minería también comenzó y puedo ver que el nodo 1 extrajo 2 bloques y el nodo 2 extrajo 1 bloque. Una vez que se completa la generación de DAG, la minería simplemente se detiene.

Aquí está mi archivo genesis.json, por cierto, había reducido la dificultad a 0x000010

{
  "config": {
    "chainId": 5493,
    "homesteadBlock": 1,
    "eip150Block": 2,
    "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "eip155Block": 3,
    "eip158Block": 3,
    "byzantiumBlock": 4,
    "ethash": {}
  },
  "nonce": "0x0",
  "timestamp": "0x5a9d2b4e",
  "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "gasLimit": "0x47b760",
  "difficulty": "0x000010",
  "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase": "0x0000000000000000000000000000000000000000",
  "alloc": {
    "0000000000000000000000000000000000000000": {
      "balance": "0x1"
    }
  },
  "number": "0x0",
  "gasUsed": "0x0",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}

Aquí están las capturas de pantalla de mi consola geth. La parte superior es el nodo1 y la parte inferior es el nodo2. Las instancias de geth todavía están ocupadas trabajando: mi uso de CPU está al máximo. Pero durante los últimos 15 minutos, no se ha informado de actividad en las consolas geth.

Capturas de pantalla de 2 consolas geth

De alguna manera las cosas empezaron a moverse de nuevo pero muy lentamente. Como puede ver en la siguiente captura de pantalla, el nodo 1 continúa extrayendo un bloque nuevo y también descartó un bloque mal propagado (del nodo 2). También tiene algunas líneas que decían "Diario de transacciones local regenerado"

Para el nodo2, también extrajo 1 bloque nuevo y sincronizó otros bloques del nodo1. Como se muestra en la captura de pantalla, la duración entre bloques es muy larga, de 7 a 20 minutos. También hay una bifurcación lateral en el nodo2.

Este experimento se realiza con un simple geth de vainilla, sin transferencias activadas externamente ni llamadas de contrato inteligente.

¿Hay algo que extraño aquí? Simplemente quiero que la red privada se comporte como la red principal de ethereum, es decir, extraiga un nuevo bloque aproximadamente cada 10 segundos.

Minería muy lentaLos comandos para lanzar los distintos nodos son

bootnode
file="/root/bootnode/enode"
if [ ! -f "$file" ]
  then
    echo "initialize bootnode"
    bootnode -genkey /root/bootnode/nodekeyfile
fi
bootnode -nodekey /root/bootnode/nodekeyfile

geth node
geth --networkid 5493 --bootnodes "$(echo -n 'enode://'; bootnode --writeaddress -nodekey /root/bootnode/nodekeyfile | tr -d '\n'; echo '@192.168.2.2:30301')" --mine --rpc --rpcport "8545" --port "30303" --rpccorsdomain "*" --nat "any" --rpcapi eth,web3,personal,net --etherbase 0 --unlock "$(cat /root/.ethereum/geth/security/coinbase)" --password /root/.ethereum/geth/security/password.sec

Básicamente, compartí el volumen donde se almacena el archivo de clave de nodo de bootnode entre los 3 contenedores, por lo que todos pueden construir la URL de bootnode. De todos modos, no creo que el nodo de arranque sea el problema, ya que los 2 nodos geth pueden comunicarse entre sí.

No puedo escribir un comentario, así que lo hago aquí. ¿Puede compartirnos la línea de comando que está utilizando para iniciar sus nodos?
Agregué el comando al final de la pregunta. También he añadido nuevas observaciones.
¿Cuál es su configuración de hardware? es decir, RAM, CPU. El DAG puede tardar un poco en generarse, pero más de 20 minutos es demasiado. Un Intel i5 de cuatro núcleos a 2,6 Ghz con 16 Gb de RAM tarda menos de 3 minutos en generarse.
la generación de DAG está bien, la lentitud viene después cuando 2 nodos comenzaron a minar. De todos modos, estoy ejecutando i7 Macbook Pro con 16GB. Incluso he bajado la dificultad de minado a 0x00010

Respuestas (1)

Encontré el tema del problema. No asigné suficiente memoria a mi proceso acoplable. Después de aumentar la asignación de memoria de la ventana acoplable a 6 GB, funciona bien. Debido a la dificultad reducida, incluso me extraían bloques cada 2 segundos.