Si un nodo tiene 100 conexiones con otros nodos y recibe una nueva transacción mediante una solicitud getData, envía un mensaje inv a sus 100 pares conectados, ¿correcto?
¿También envía el mensaje inv al par del que acaba de recibir la transacción, ya que todavía es uno de sus pares de conexión?
'Los mensajes, en general, se descargan periódicamente cada 100 ms. Sin embargo, la retransmisión de transacciones se lleva a cabo mediante el "goteo" de mensajes. Bitcoin selecciona aleatoriamente con una probabilidad de 1/4 de las transacciones para un mensaje inv y detiene las transacciones restantes. Cada vecino obtiene un conjunto diferente de transacciones elegidas al azar, cada una aproximadamente 1/4 del conjunto disponible actualmente. Solo el "nodo de goteo" seleccionado aleatoriamente (cf. retransmisión de mensajes addr) obtiene todas las transacciones de inmediato. Los otros vecinos lo obtienen más tarde o ya lo obtuvieron de otro vecino. El goteo reduce la sobrecarga y, al mismo tiempo, dificulta el análisis del tráfico, de manera similar a como lo hacen las mezclas en las redes mixtas.'
Tengo un poco de dificultad para entender cómo funciona el goteo en términos de transacciones. Creí que el proceso era cuando ocurre una transacción, el nodo responsable de la transacción enviaría mensajes INV a sus pares y enviaría el tx si los pares responden con getData.
Si un nodo tiene 100 conexiones con otros nodos y recibe una nueva transacción mediante una solicitud getData, envía un mensaje inv a sus 100 pares conectados, ¿correcto?
No. Depende de qué nodos hayan enviado un inv
mensaje indicando que tienen esa transacción. Cuando se inv
recibe un correo electrónico, el nodo recordará lo que inv
ese nodo les ha enviado para que no intente enviarle algo que ya tiene. Como máximo, se enviarán 99 inv
mensajes. Como ya sabemos que el par que nos envió la transacción ya la tiene, no le enviamos un inv
. Como mínimo, no se enviarán inv
mensajes porque todos los nodos ya podrían habernos enviado un mensaje inv
para la misma transacción.
¿También envía el mensaje inv al par del que acaba de recibir la transacción, ya que todavía es uno de sus pares de conexión?
Como se indicó anteriormente, no lo hace. Si bien no existe una regla que lo impida explícitamente, es sensato no enviar un correo electrónico inv
a alguien que ya inv
le haya enviado un correo electrónico por el mismo motivo. Esto ahorra costos de ancho de banda.
Tengo un poco de dificultad para entender cómo funciona el goteo en términos de transacciones.
Para cada par, el nodo mantiene una lista de transacciones a las que se dirige inv
. Envía inv
transacciones periódicamente con un retraso aleatorio entre cada una inv
. Las transacciones se seleccionan para que entren en el inv
mensaje de forma algo aleatoria y de acuerdo con algunas métricas relacionadas con la tarifa. Selecciona un número limitado de transacciones a inv
.
Creí que el proceso era cuando ocurre una transacción, el nodo responsable de la transacción enviaría mensajes INV a sus pares y enviaría el tx si los pares responden con getData.
El nodo que crea una transacción trata esa transacción como cualquier otra que recibió a través de la red. Para cada par al que está conectado el nodo, agrega esa transacción a la lista de transacciones que enviará eventualmente a ese nodo. Entonces todo lo demás es como siempre. La próxima vez que envíe un inv
mensaje para un par en particular, elige transacciones para inv
, y la transacción que creó puede o no ser una de esas. Una vez que se inv
envía, el otro nodo responderá con un getdata
para las cosas que quiere, que puede incluir o no la transacción que creó. Luego, su nodo responde con las getdata
transacciones mismas.
envía un mensaje inv a sus 100 pares conectados, ¿correcto?
a 99
¿También envía el mensaje inv al par del que acaba de recibir la transacción?
está permitido, pero no hay razón para hacerlo
el nodo responsable de la transacción enviaría mensajes INV
nadie es responsable de nada
herofire
andres chow
inv
debe contener múltiples txid. Sin embargo, es posible (y quizás probable) que para cuando envíe un correo electrónicoinv
, solo haya uno o dos txid para enviar.pieter wuille
Vicente Alex
andres chow