El inv
mensaje se utiliza para transmitir el conocimiento de uno de los bloques y correos tx
electrónicos a otros clientes en la red. Cuando un nuevo Cliente se conecta a la Red, primero recibe información sobre todos los bloques en forma de inv
mensaje, como respuesta a los getblocks
mensajes. Como no hay gettx
mensaje, supongo que la información sobre las transacciones se transmite en la última inv
respuesta a getblocks
. ¿Es esa la forma en que opera el Cliente estándar, o simplemente transmite los tx
mensajes solo cuando llegan, lo que hace que los Clientes recién conectados esperen para ponerse al día con la información sobre los tx
s?
ThreadMessageHandler2() llama a SendMessages() cada 100 segundos, lo que hace inv
que se envíen mensajes a los compañeros del cliente.
Se elige un par al azar para recibir inv
mensajes que hacen referencia a todas las transacciones pendientes que conocemos y no, incluidas las que creamos nosotros mismos. El resto de los pares reciben inv
mensajes que solo hacen referencia a alrededor del 25% de las transacciones pendientes que conocemos y ellos no, sin incluir ninguna de las que creamos.
Un comentario en el código explica que este "goteo" del inventario de transacciones es para proteger la privacidad.
Editar: acabo de notar este hilo que también describe el proceso de transacciones publicitarias. Afortunadamente, está de acuerdo con mi descripción aquí.
El proceso de anunciar y enviar datos es el mismo tanto para transacciones como para bloques: inv
anuncia el hash de un objeto, getdata
se usa para solicitar el objeto en sí y tx
se block
usa para enviarlos.
getblocks
es un paso previo a este proceso: solicita los anuncios de bloques recientes vía inv
.
pieter wuille