No hay ningún problema con que los nodos muy nuevos no acepten algunos nuevos bloques. Sin ellos la propagación de la red no se fragiliza. De hecho tampoco aceptan nuevos bloques hasta que no han sincronizado la blockchain.
La mempool se sincroniza muy rápidamente, mucho más que la sincronización de la blockchain.
Dónde está el vector de ataque del que hablas?
El vector de ataque es que estás permitiendo un sybil attack hacia los nuevos nodos o hacia los que se reconectan de nuevo porque, para falsificar la información de la cadena de bloques, hace falta gastar un recurso escaso e irrecuperable, pero para falsificar transacciones no es necesario gastar nada.
Los nodos no pueden tomar decisiones sobre la veracidad o no de lo últimos bloques de la cadena en base a información fácilmente falsificable como son las transacciones.
Cuando a mediados de enero mi nodo se reconecte a la red Bitcoin, recibirá imnmediatamente dos tipos de información...información sobre la cadena de bloques e información sobre las transacciones que van pululando por la red en ese momento. Y ambos tipos de información me está llegando desde unos nodos que, sobre el papel, no cuestan apenas nada de poner en la red.
¿Cuál de los dos tipos de información me ofrece más garantías de que se encuentra en sincronía con el resto de información que comparte el resto de nodos legítimos del sistema?
Sin duda la información que me llega a través de la cadena de bloques y mi nodo sólo debería empezar a tomar decisiones a partir de ella.
¿Por qué? Pues porque inundar la red con nodos falsos es baratísimo. Porque, además de eso, los nodos legítimos pueden mostrar comportamiento maligno en determinadas circunstancias que los harían indetectables frente al resto de nodos legítimos, como por ejemplo únicamente actuar como nodos venenosos frente a un nodo cuando las 8 conexiones de éste hayan caído bajo el control de esta subred maligna.
Imagínate que yo controlase el 15% de todos los nodos de la red Bitcoin. Puedo decirles que se comporten de forma legítima con el resto de nodos y que sólamente se comporten de forma maligna cuando las 8 conexiones de un nodo hayan caído bajo mi control. ¿Qué me costaría a mi lanzarle entonces a ese nodo información falsa o sesgada sobre las transacciones de la mempool? No me costaría nada. Imagínate que, sabiendo que los mineros elegirán el meter en la blockchain aquellas transacciones en el rango superior de comisiones, decido únicamente pasar información maligna de transacciones de bajas comisiones. ¿Qué me ha costado atacar al nodo que ha caído bajo mi control? Nada de nada. Ni siquiera son transacciones construídas por mi.
Cuando un minero mine un bloque y, lógicamente, incluya en él las transacciones de la mempool con comisiones altas y yo le haga llegar ese bloque al nodo "bajo mi control", éste verá varias cosas a la vez:
1. Que el bloque es perfectamente válido porque está minado con la elevada dificultad de la red.
2. Que, de las transacciones incluidas en el bloque, ninguna se encontraba en la información de la mempool que mi comportamiento maligno le ha pasado.
Por lo tanto, el nodo descarta el bloque pensando que forma parte de un ataque "selfish" realizado por un minero y se queda esperando a que el resto de nodos se comporten igual que él y lo declaren huérfano también.
Sin embargo esto no va a ocurrir porque es él el que está extrayendo conclusiones erróneas a partir de información falsa y baratamente manipulable que yo le estoy haciendo llegar.
¿Qué costaría entonces inundar la red de nodos malignos que sólamente transmitiesen a través de sus conexiones aquellas transacciones que se encuentran en los percentiles inferiores de comisiones? No costaría nada y todos aquellos nodos que se conectasen a ellos estarían descartando bloques en base a información sesgada.
¿Se podría incorporar alguna modificación en el código de Bitcoin para detectar y banear las conexiones a nodos que se comportasen de esta forma? Pues no. Es imposible porque un nuevo nodo o uno que se reconecta, no tiene mempool y no puede deducir si los nodos a los que se ha conectado están enviándole únicamente transacciones en el percentil inferior de la mempool de los nodos legítimos de la red.
Los nodos sólo pueden tomar decisiones respecto a Bitcoin (incluyendo el incluir a otros nodos en una lista negra) con información que sea muy costosa de falsificar y, sobretodo, con información que sea áltamente probable que se encuentre compartida y en sincronía con el resto de nodos de la red, esto es, con la información que les llega a partir de la cadena de bloques.
El resto son ganas de meter ventanas de ataque susceptibles a sybil attacks.
Por último decirte que, si te fijas, todo esto de lo que estamos hablando se parece mucho a lo que estuvimos con Maidsafe y otras monedas PoS. La única forma de que tu nodo pueda tener la certidumbre de que las decisiones que él está tomando, van a ser compartidas y sincronizadas por el resto de nodos de la red, es cuando la información de la que partes para tomar dichas decisiones viene protegida por una prueba de trabajo encadenada.