Último bloque de múltiples nodos de minería

Digamos que tengo una cadena privada con 3 nodos (todos mineros) A, B y C.

Quiero obtener el último bloque de mi cadena. Me conecto al nodo A y obtengo esta información con getBlock("latest").

Imaginemos que el nodo A extrajo el mismo bloque que B pero no se sincronizó. Cuando acaba de terminar la extracción, ¿el nodo ya considera el bloque extraído como el correcto (sin sincronizar con otros nodos)?

Además, si A y B sincronizaron y el bloque de B se considera el correcto, ¿qué sucede con el bloque extraído por A?

Para terminar, de una manera más general, ¿es posible tener dos bloques diferentes considerados como bloques válidos en dos nodos diferentes al mismo tiempo, o un bloque, para ser considerado como válido por un nodo (incluido el que extrajo este bloque), necesita sincronizar con éxito con otros nodos?

Respuestas (1)

Déjame tratar de desglosar esto:

Cuando acaba de terminar la extracción, ¿el nodo ya considera el bloque extraído como el correcto (sin sincronizar con otros nodos)?

Tan pronto como se extrajo un bloque, el nodo lo considera correcto (de lo contrario, no se habría extraído).

Además, si A y B sincronizaron y el bloque de B se considera el correcto, ¿qué sucede con el bloque extraído por A?

Si se extraen dos bloques exactamente al mismo tiempo por dos nodos diferentes, se aplica la "regla de la cadena más larga". En resumen, esto significa que el bloque en el que se basan los siguientes bloques se considera el real. El bloque extraído por A en este caso se convertiría en un "bloque tío" y todas las transacciones que están incluidas en ese bloque y que ya no están incluidas en la cadena vuelven al grupo de transacciones para ser retomadas en uno de los siguientes bloques.

¿es posible tener dos bloques diferentes considerados como bloques válidos en dos nodos diferentes al mismo tiempo, o un bloque, para ser considerado válido por un nodo (incluido el que extrajo este bloque), necesita sincronizarse con éxito con otros nodos?

Sí, eso es posible: los mineros que extrajeron esos bloques consideran que ambos bloques son válidos y también deberían ser accesibles a través del nodo en ese momento; sin embargo, solo uno de esos dos bloques permanecerá como parte de la cadena de bloques y el otro uno se convertirá en un "tío". Esta es también la razón por la cual una transacción no puede considerarse como encerrada tan pronto como fue minada en un bloque, aunque las posibilidades de que lo sea son altas, aún existe la posibilidad de que su bloque se convierta en un "tío". Entonces, para estar seguro, deberá esperar hasta que se extraigan nuevos bloques en el bloque en el que se encuentra su transacción. Es por eso que las transacciones en realidad solo pueden considerarse válidas tan pronto como algunos bloques sigan al bloque en el que se encuentran y las posibilidades aumentan con cada nuevo bloquear.

Sin embargo, de lo que no estoy muy seguro es si hay alguna lógica detrás getBlock("latest")que solo devuelva el último bloque si ya está confirmado por otros bloques o algo así...