Saltar al contenido
buybitcoinsmart

Glosario / Referencia para desarrolladores

MSG_TX

¿Qué es MSG_TX?
MSG_TX marca un elemento de inventario como transacción, con el código de tipo 1, y es la forma en que su pago sin confirmar se anuncia a los pares antes de que ninguno de ellos haya visto su contenido.

Un solo número separa un pago de un bloque en el protocolo de anuncios de bitcoin, y ese número es el 1. Viaja junto con el identificador de 32 bytes de la transacción, 36 bytes en total, y no obliga al remitente a nada: los bytes solo se mueven cuando un par responde con un mensaje getdata. Desde Bitcoin Core 0.21.0, la mayoría de los pares anuncian con un código completamente distinto.

Cómo funciona

MSG_TX nombra una transacción por su txid, el identificador que se calcula dejando fuera los datos de testigo.

Un nodo que ha aceptado su pago en la mempool avisa a sus pares de que el hash existe. Cualquier par que no lo tenga lo solicita, y solo entonces se envía el contenido, en un mensaje tx. Un par que solicita algo que el nodo ya no tiene recibe un mensaje notfound, algo que ocurre de forma habitual: las mempools expulsan transacciones cuando están bajo presión, y un nodo no le debe a nadie una copia de una transacción que ya ha descartado.

El servicio es reticente a propósito. Bitcoin Core no entrega una transacción a un par al que nunca se la anunció hasta que esa transacción lleva unos dos minutos en la mempool. Sin ese retraso, un desconocido podría conectarse y usar el mensaje getdata para comprobar si su nodo conoce determinados pagos, lo que convertiría cada nodo en una interfaz de consulta de su propia mempool y haría mucho más fácil averiguar dónde apareció primero un pago.

El tipo 1 arrastra además la antigua regla de serialización. Una transacción servida en respuesta a él se escribe sin datos de testigo, el formato que existía antes de 2017, que en un gasto SegWit omite las firmas. Por eso los pares compatibles con SegWit solicitan la variante con testigo, y desde que BIP339 llegó con Bitcoin Core 0.21.0, en enero de 2021, normalmente anuncian con el tipo 5 en su lugar, nombrando las transacciones por su hash de testigo para que un testigo alterado ya no parezca una transacción desconocida.

Dónde aparece

MSG_TX es el mecanismo que hay detrás de la frase "la transacción se ha difundido", y detrás de las ocasiones en que resulta que no ha sido así.

Una billetera conectada a un solo nodo le entrega una transacción firmada, ese nodo anuncia el hash y no ocurre nada más hasta que algún par la solicita. Si ninguno lo hace nunca, el pago se queda en una sola máquina y ningún minero lo verá. Bitcoin Core lleva la cuenta de las transacciones de su propia billetera que ningún par ha solicitado todavía y vuelve a anunciarlas hasta que alguno lo hace. Por eso, un nodo sin conexiones salientes, en una red doméstica detrás de un cortafuegos, puede dar un pago por enviado sin que haya salido absolutamente nada del edificio.

El procesamiento por lotes de los retiros de los exchanges también aparece aquí. El exchange anuncia un solo hash, una sola solicitud entrega una transacción que paga a decenas de clientes a la vez, y por eso el txid de su retiro contiene salidas que pertenecen a desconocidos.

MSG_TX frente al mensaje P2P tx

MSG_TX nombra una transacción, y el mensaje tx contiene una. Confundirlos vuelve ilegibles los registros del protocolo, porque las líneas inv y getdata no son más que códigos de tipo y hash, mientras que los bytes reales solo aparecen en las líneas tx. La distinción importa sobre todo cuando se depura la propagación. Ver que su hash sale en un mensaje inv demuestra que su nodo se lo dijo a alguien. Ver que lo sigue un mensaje tx demuestra que alguien lo quería de verdad.

No confundir con

Preguntas frecuentes

¿Cómo sé si mi transacción llegó realmente a la red?

Anunciar el hash no basta por sí solo. Búsquela en dos exploradores de bloques independientes un minuto después de difundirla, ya que verla en un nodo que usted no controla demuestra que algún par la solicitó y la aceptó.

¿Por qué los nodos modernos anuncian las transacciones con el tipo 5 en su lugar?

Porque la retransmisión de BIP339 identifica las transacciones por su hash de testigo en lugar de por su txid. Ese hash fija también los bytes del testigo, así que un par ya no confunde una transacción cuyo testigo se alteró en tránsito con algo que nunca ha visto.

Términos relacionados

Más en la sección Referencia para desarrolladores

Leer esta página en inglés