¿Cómo determinan los exploradores de bloques la propagación a través de nodos/protocolo P2P?

En varios exploradores de cadenas de bloques de Bitcoin, he visto transacciones no confirmadas con un valor de "propagación" dedicado que le dice al usuario cuánto de la red de Bitcoin se ha dado cuenta de esta transacción.

Por ejemplo, BlockCypher proporciona un valor de "confianza" para transacciones no confirmadas:

ingrese la descripción de la imagen aquí

Esto siempre me ha llevado a preguntarme cómo exactamente pueden calcular esto. ¿Tienen personalmente una gran red distribuida de nodos de los que se realiza un seguimiento constante? Seguramente esto sería rentable y menos descentralizado.

Su documentación dice:

Al monitorear la propagación de la transacción, la cantidad de nodos que la recibieron y la rapidez con la que la recibieron, podemos calcular su probabilidad de ser la transacción "ganadora" en cualquier momento dado, si se intentó un doble gasto.

He tenido bastante dificultad para encontrar documentación sobre qué es exactamente lo que los nodos pueden solicitarse entre sí directamente. ¿Puede un nodo simplemente preguntar a sus pares si la transacción existe en su mempool con una solicitud getData ?

Respuestas (2)

Los exploradores de blockchain ejecutan nodos que tienen conexiones con otros nodos. Pueden tener cientos de conexiones. Es probable que también ejecuten varios nodos tanto para la redundancia (en caso de que un nodo falle, todavía están en línea) como para asegurarse de que están recibiendo transacciones de tantas fuentes como sea posible. Entonces estarán conectados a cientos, tal vez miles de nodos.

Con estas conexiones, pueden escuchar lo que transmiten todos esos nodos. En el protocolo de retransmisión P2P actual, un nodo anuncia a sus pares que tiene una transacción (el invmensaje). Luego espera una solicitud ( getdata) antes de enviar la transacción ( tx). Entonces, alguien que escuche muchos nodos podría saber qué nodos tienen una transacción en función de si han anunciado la transacción. Esta es probablemente la forma en que Blockcypher calcula el "número de grupos de memoria con tx".

Sin embargo, debe tener cuidado con tales medidas. No son muy precisos porque no están conectados a todos los nodos de la red. Además, la confianza que asocian con él carece en gran medida de sentido. La probabilidad de que una transacción ingrese en un bloque depende de muchas otras cosas, y la cantidad de nodos que la han visto no afecta mucho esa cantidad.

No lo hacen, esencialmente, los números dados para este tipo de cosas generalmente no tienen sentido.

Muchos de estos servicios intentan conectarse a una gran parte de la red de escucha y obtener información sobre la posibilidad de que se confirme una transacción; sin embargo, esto no es una medida de seguridad para las transacciones. Una transacción que ha sido anunciada por muchos nodos no significa que un minero no gastará el doble, como ha sucedido muchas veces en el pasado . Para BlockCypher en particular, el número de confianza no utiliza un nodo Bitcoin Core para la validación, por lo que mostrará una confianza muy alta para las transacciones que no son válidas, pero tienen una tarifa aparentemente alta.

En el caso relacionado con betcoin dice y ghash.io, habrían mostrado absoluta confianza en la confirmación, sin embargo, el grupo de minería simplemente incluía transacciones alternativas que no gastaban en el servicio cada vez que su apuesta era negativa. Para un sitio de apuestas con una ventaja de la casa del 1%, solo necesitan poder hacer esto más del 1% del tiempo para que el ataque sea financieramente rentable para ellos. Esto sucedió durante un período de meses sin que nadie se diera cuenta, ningún usuario dejó de usar la piscina o cualquier otra medida punitiva. La "confianza de transacción" u otras herramientas solo funcionan en un entorno no adverso, que no es Bitcoin.

¿Puede un nodo simplemente preguntar a sus pares si la transacción existe en su mempool con una solicitud getData?

Hasta cierto punto, puede preguntarle a un nodo al que está conectado si tiene una transacción en su mempool. Los nodos implementan una lógica llamada filtrado de transacciones que intencionalmente agrupa y retrasa la retransmisión de transacciones en un intento de evitar un comportamiento adverso a la privacidad como este. Tenga en cuenta que la mayoría de los nodos de la red no tienen conectores de escucha abiertos, por lo que no puede realizar conexiones salientes en ellos. Los comerciantes y los mineros en particular no tendrán conexiones entrantes para evitar ataques triviales de denegación de servicio contra ellos.