2 mineros en sincronización lenta de red privada

Estoy ejecutando 2 mineros y 1 nodo no minero usando docker. Simplemente no puedo ver a los 2 mineros trabajar en conjunto. Cada uno puede ensamblar su DAG. Solo parece funcionar con un solo minero. Estoy usando Geth/peer1/v1.8.16-stable-477eb093/linux-amd64/go1.9.4ethereum/go-client:alpine.

Los nodos se configuran a través de static-nodes.json y puedo llegar a cada nodo en el puerto 30303 (probado con nc -zv)

[                                                                                                                                                               
"enode://b27ff3191f16c7de4c9037eaf419e8d3f25c847b551dd15100c5a375f02032ca5275af29cb29c64258e99c450e0d8825010a13d18c0d404b4c95fb8a1ee9e699@172.17.0.3:30303",    
"enode://29bd9b51c2b7f031bf5be15d4cb6028300d4d254ace507bfb5ce283121566f3cd3d96ba303c3ce5c857a7daa29522999cbe545ea64f66c639f4ec526ae3f7cb8@172.17.0.4:30303",    
"enode://dc014606c0ee47f9ce917c9497b1a1b2819dfdc4f2d574965b6aa38f447b3c5721f6a63e8942f97cef41f656cce2429a698a0690f48d2faa0019a0026c4cbca2@172.17.0.5:30303"     
]       

Génesis tiene dificultad baja

{
  "config": {
    "chainId"        : 11,
    "homesteadBlock" : 0,
    "eip150Block"    : 0,
    "eip150Hash"     : "0x0000000000000000000000000000000000000000000000000000000000000000",
    "eip155Block"    : 0,
    "eip158Block"    : 0,
    "byzantiumBlock" : 0,
    "ethash"         : {}
  },
  "coinbase"   : "0x0000000000000000000000000000000000000000",
  "difficulty" : "0x100",
  "extraData"  : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "gasLimit"   : "0xffffffff",
  "nonce"      : "0x0000000000000042",
  "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp"  : "0x00",
  "alloc"      : {}
}

Cuando inicio 2 mineros, ambos nodos de minería parecen bloquearse después de construir DAG. NOTA: vea las ediciones a continuación. Puedo activar la creación de bloques si detengo a un minero. A continuación se muestra la salida de peer1 (después de reiniciar y matar a peer2 para crear unos 11 bloques) Simplemente se cuelga allí y no sucede nada.

WARN [09-29|16:21:19.909] Sanitizing cache to Go's GC limits       provided=1024 updated=660
INFO [09-29|16:21:19.922] Maximum peer count                       ETH=25 LES=0 total=25
INFO [09-29|16:21:19.948] Starting peer-to-peer node               instance=Geth/peer1/v1.8.16-stable-477eb093/linux-amd64/go1.9.4
INFO [09-29|16:21:19.949] Allocated cache and file handles         database=/root/.ethereum/geth/chaindata cache=495 handles=1024
INFO [09-29|16:21:20.485] Initialised chain configuration          config="{ChainID: 11 Homestead: 0 DAO: <nil> DAOSupport: false EIP150: 0 EIP155: 0 EIP158: 0 Byzantium: 0 Constantinople: <nil> Engine: ethash}"
INFO [09-29|16:21:20.485] Disk storage enabled for ethash caches   dir=/root/.ethereum/geth/ethash count=3
INFO [09-29|16:21:20.486] Disk storage enabled for ethash DAGs     dir=/root/.ethash               count=2
INFO [09-29|16:21:20.486] Initialising Ethereum protocol           versions="[63 62]" network=11
INFO [09-29|16:21:20.497] Loaded most recent local header          number=11 hash=f506b2…e1a16f td=1444928 age=1h6m40s
INFO [09-29|16:21:20.498] Loaded most recent local full block      number=11 hash=f506b2…e1a16f td=1444928 age=1h6m40s
INFO [09-29|16:21:20.498] Loaded most recent local fast block      number=11 hash=f506b2…e1a16f td=1444928 age=1h6m40s
INFO [09-29|16:21:20.501] Loaded local transaction journal         transactions=0 dropped=0
INFO [09-29|16:21:20.513] Regenerated local transaction journal    transactions=0 accounts=0
INFO [09-29|16:21:20.513] Starting P2P networking
INFO [09-29|16:21:20.517] Stats daemon started
INFO [09-29|16:21:20.517] RLPx listener up                         self="enode://b27ff3191f16c7de4c9037eaf419e8d3f25c847b551dd15100c5a375f02032ca5275af29cb29c64258e99c450e0d8825010a13d18c0d404b4c95fb8a1ee9e699@[::]:30303?discport=0"
INFO [09-29|16:21:20.530] IPC endpoint opened                      url=/var/run/geth.ipc
INFO [09-29|16:21:20.530] Transaction pool price threshold updated price=1000000000
INFO [09-29|16:21:20.531] Updated mining threads                   threads=1
INFO [09-29|16:21:20.531] Transaction pool price threshold updated price=1000000000
INFO [09-29|16:21:20.531] Etherbase automatically configured       address=0xFDb60C5297aE226dd8B8813cd94995813eEaDd22
INFO [09-29|16:21:20.531] Commit new mining work                   number=12 sealhash=aeaead…9c6d63 uncles=0 txs=0 gas=0 fees=0 elapsed=176.2µs

A continuación se muestran los comandos que uso de un archivo por lotes (incluido el contenedor netstats) Cada contenedor tiene su carpeta separada asignada a su contenedor.

docker run -d --rm -v /c/Users/P33/playground/p2p/shared/peer1:/root --name peer1 --link netstats ethereum/client-go:alpine --nodiscover --networkid 11 --mine --minerthreads 1 --ipcpath /var/run/geth.ipc --identity peer1 --syncmode "full" --ethstats "peer1:password@ws://netstats:3000"
docker run -d --rm -v /c/Users/P33/playground/p2p/shared/peer2:/root --name peer2 --link netstats ethereum/client-go:alpine --nodiscover --networkid 11 --mine --minerthreads 1 --ipcpath /var/run/geth.ipc --identity peer2 --syncmode "full" --ethstats "peer2:password@ws://netstats:3000"
docker run -d --rm -v /c/Users/P33/playground/p2p/shared/peer3:/root --name peer3 --link netstats -p 8545:8545 ethereum/client-go:alpine --nodiscover --networkid 11 --rpc --rpcapi eth,net,web3,personal --rpcaddr "0.0.0.0" --rpccorsdomain "*" --ipcpath /var/run/geth.ipc --identity peer3 --syncmode "full" --ethstats "peer3:password@ws://netstats:3000"

¿Alguna idea? ¡TIA!

EDITAR 1

Al agregar un retraso de 60 segundos entre el lanzamiento de miner1 y miner2, observo que el proceso DAG se completa con miner1 a la cabeza; inicio de la minería; entonces ambos cuelgan. Luego me detengo y vuelvo a lanzar con el mismo retraso de 60 s. El primer minero se mantiene a la cabeza, luego llega a "Minería demasiado lejos en el futuro" (alrededor de 80 bloques) y nuevamente ambos mineros permanecen allí.

Esperaba ver a ambos mineros competir y "ganar" aleatoriamente el siguiente bloque, ya que comparten recursos idénticos en la misma computadora portátil...

EDITAR 2

Logré que esta pequeña red de 2 mineros y un par durara un poco más haciendo lo siguiente:

  • inicie el primer minero y haga una pausa durante 60 segundos
  • edite static-nodes.json en el primer minero para apuntar a otro minero y compañero
  • el segundo minero solo apunta al par y deja solo al primer minero
  • puntos de pares a ambos mineros

Previamente tenía a cada miembro señalando a los otros dos (NOK). Tener el minero 2 apuntando al minero 1 (incluso después de la demora) eventualmente detendría la generación de bloques después de 20-30 bloques en esta computadora portátil.

Con esta configuración puedo llegar a más de 190 bloques... todavía no estoy seguro de por qué...

vmodule=buscador=6, descargador=6 registros a continuación

minero 1

DEBUG[10-05|08:00:20.959] Recalculated downloader QoS values       rtt=20s confidence=1.000 ttl=1m0s
DEBUG[10-05|08:00:40.959] Recalculated downloader QoS values       rtt=20s confidence=1.000 ttl=1m0s
DEBUG[10-05|08:01:00.960] Recalculated downloader QoS values       rtt=20s confidence=1.000 ttl=1m0s
DEBUG[10-05|08:01:20.962] Recalculated downloader QoS values       rtt=20s confidence=1.000 ttl=1m0s
DEBUG[10-05|08:01:40.963] Recalculated downloader QoS values       rtt=20s confidence=1.000 ttl=1m0s
DEBUG[10-05|08:02:00.964] Recalculated downloader QoS values       rtt=20s confidence=1.000 ttl=1m0s
DEBUG[10-05|08:02:20.965] Recalculated downloader QoS values       rtt=20s confidence=1.000 ttl=1m0s
DEBUG[10-05|08:02:40.965] Recalculated downloader QoS values       rtt=20s confidence=1.000 ttl=1m0s
DEBUG[10-05|08:03:00.966] Recalculated downloader QoS values       rtt=20s confidence=1.000 ttl=1m0s
DEBUG[10-05|08:03:20.966] Recalculated downloader QoS values       rtt=20s confidence=1.000 ttl=1m0s

minero 2

DEBUG[10-05|07:56:36.651] Queued propagated block                  peer=36d0dbecc9bbf66d number=192 hash=4fda3f…90ff75 queued=1
DEBUG[10-05|07:56:36.651] Importing propagated block               peer=36d0dbecc9bbf66d number=192 hash=4fda3f…90ff75
DEBUG[10-05|07:56:36.758] Queued propagated block                  peer=36d0dbecc9bbf66d number=193 hash=3c3c32…c9e9b3 queued=1
DEBUG[10-05|07:56:36.758] Importing propagated block               peer=36d0dbecc9bbf66d number=193 hash=3c3c32…c9e9b3
DEBUG[10-05|07:56:44.029] Recalculated downloader QoS values       rtt=20s confidence=1.000 ttl=1m0s
DEBUG[10-05|07:57:04.029] Recalculated downloader QoS values       rtt=20s confidence=1.000 ttl=1m0s
DEBUG[10-05|07:57:24.030] Recalculated downloader QoS values       rtt=20s confidence=1.000 ttl=1m0s
DEBUG[10-05|07:57:44.030] Recalculated downloader QoS values       rtt=20s confidence=1.000 ttl=1m0s
DEBUG[10-05|07:58:04.030] Recalculated downloader QoS values       rtt=20s confidence=1.000 ttl=1m0s
DEBUG[10-05|07:58:24.031] Recalculated downloader QoS values       rtt=20s confidence=1.000 ttl=1m0s

peer 3 (no minería)

DEBUG[10-05|07:56:33.362] Inserted new block                       number=189 hash=b0209e…4edc82 uncles=0 txs=0 gas=0 elapsed=140.556ms
INFO [10-05|07:56:33.363] Imported new chain segment               blocks=1  txs=0 mgas=0.000 elapsed=143.084ms mgasps=0.000 number=189 hash=b0209e…4edc82 cache=27.26kB
DEBUG[10-05|07:56:33.371] Reinjecting stale transactions           count=0
DEBUG[10-05|07:56:35.048] Inserted new block                       number=190 hash=aecf0c…285ae1 uncles=0 txs=0 gas=0 elapsed=54.696ms
INFO [10-05|07:56:35.048] Imported new chain segment               blocks=1  txs=0 mgas=0.000 elapsed=54.858ms  mgasps=0.000 number=190 hash=aecf0c…285ae1 cache=27.26kB
DEBUG[10-05|07:56:35.048] Reinjecting stale transactions           count=0
DEBUG[10-05|07:56:36.434] Inserted new block                       number=191 hash=f33bf0…b82196 uncles=0 txs=0 gas=0 elapsed=54.571ms
INFO [10-05|07:56:36.434] Imported new chain segment               blocks=1  txs=0 mgas=0.000 elapsed=68.644ms  mgasps=0.000 number=191 hash=f33bf0…b82196 cache=27.26kB
DEBUG[10-05|07:56:36.435] Reinjecting stale transactions           count=0
DEBUG[10-05|07:56:36.703] Inserted new block                       number=192 hash=4fda3f…90ff75 uncles=0 txs=0 gas=0 elapsed=12.576ms
INFO [10-05|07:56:36.703] Imported new chain segment               blocks=1  txs=0 mgas=0.000 elapsed=12.688ms  mgasps=0.000 number=192 hash=4fda3f…90ff75 cache=27.26kB
DEBUG[10-05|07:56:36.703] Reinjecting stale transactions           count=0
DEBUG[10-05|07:56:36.802] Inserted new block                       number=193 hash=3c3c32…c9e9b3 uncles=0 txs=0 gas=0 elapsed=15.051ms
INFO [10-05|07:56:36.802] Imported new chain segment               blocks=1  txs=0 mgas=0.000 elapsed=16.326ms  mgasps=0.000 number=193 hash=3c3c32…c9e9b3 cache=27.26kB
DEBUG[10-05|07:56:36.802] Reinjecting stale transactions           count=0

EDITAR 3

Probé diferentes topologías, reduciendo las conexiones entre pares. Incluso con { Miner 1 -> Miner 2 -> Peer 3 }, la configuración se bloquea después de un tiempo (con retraso después de iniciar el primer minero) o inmediatamente. No estoy seguro en este punto dónde más buscar...

EDITAR 4

Entonces, lo que puedo observar es que el minero 1 comienza a extraer bloques a medida que obtiene una ventaja inicial. Miner 2 comienza a sincronizarse. Una vez que ocurre la situación de "minar demasiado en el futuro", ambos se bloquean en el mensaje "esperar 2 segundos", como cuando comienzo inmediatamente a ambos mineros sin demora. He limitado cada minero a 1 hilo. Cuando detengo el minero 2 mientras genera bloques, el minero 2 se recupera. Pero cuando se detiene el minero 2, el primero no vuelve a levantarse....

EDITAR 5

Cambié el título de estancamiento a sincronización lenta... Dejé los 3 nodos ejecutándose y uno de los mineros produjo un nuevo bloque después de unos 30 minutos. En la captura de pantalla a continuación, 2 mineros están en la parte inferior y un nodo no minero en la parte superior. Cada minero apunta al compañero normal. Estoy en SSD 2th 16GB RAM: cada contenedor obtiene 2GB y configuré el caché Geth en 512KB.

dos mineros

probé con --verbosity 5 y noté algunas cosas extrañas con "conectado a mí mismo". Estoy usando el mismo static-nodes.json para todos los nodos, así que quizás tenga que adaptarlo para cada uno...
sin suerte: incluso cuando se excluyen a sí mismos de static-nodes.json, los dos mineros parecen colgarse
¿Tiene un registro cuando los mineros 'colgan'?
Acabo de conectar la salida de los registros de la ventana acoplable -f peer1 en una esencia ; tenga en cuenta que esto es con --nat "ninguno" y verbosidad 9 y los dos fragmentos inferiores siguen repitiéndose
La conexión de netstats parece fallar, pero no tengo nada relacionado con la falla de la minería. Parece conectarse correctamente con el otro par.
es tan raro ... ¿algo relacionado con la ventana acoplable para Windows, tal vez? Netstats se queja del bloque defectuoso porque se cuelga en el bloque 0... me está volviendo loco... Si mato a un compañero, el otro responde y comienza a minar
Acabo de intentar desbloquear cuentas en cada minero, pero tampoco tuve suerte...
acabo de probar una topología diferente: donde peer3 (no minero) está vinculado con cada minero pero los mineros no entre sí, tampoco ayudó
Para descartar cualquier problema no relacionado, lanzaría los dos mineros pero sin minar y vería si se conectan entre ellos (es decir, deshabilitaría ethstats hasta que todo funcione solo para evitar saturar los registros). Si eso está bien, comience a minar con el primer minero hasta que haya producido varios bloques y luego comience con el segundo minero. Puede ser que los mineros estén minando pero no crean bloques porque la dificultad es demasiado alta.
Noté que usar --verbosity 1 y --vmodule hace que sea más fácil concentrarse en aspectos específicos

Respuestas (1)

Cambiar la ventana acoplable predeterminada de 2 GB por contenedor a 3 GB resolvió mi problema. Ahora tengo una red privada rápida de 3 pares y 2 mineros.