Vai al contenuto
buybitcoinsmart

Glossario / Riferimento per sviluppatori

MSG_TX

Che cos'è MSG_TX?
MSG_TX contrassegna una voce dell'inventario come transazione, con codice di tipo 1, ed è il modo in cui il tuo pagamento non confermato viene annunciato ai peer prima che nessuno di loro ne abbia visto il contenuto.

Un solo numero separa un pagamento da un blocco nel protocollo di annuncio del bitcoin, e quel numero è 1. Viaggia insieme all'identificatore di 32 byte della transazione, 36 byte in totale, e non impegna il mittente a nulla: i byte si muovono solo quando un peer risponde con getdata. Da Bitcoin Core 0.21.0, la maggior parte dei peer annuncia con un codice del tutto diverso.

Come funziona

MSG_TX identifica una transazione tramite il suo txid, l'identificatore calcolato escludendo i dati witness.

Un nodo che ha accettato il tuo pagamento nella sua mempool avvisa i peer che l'hash esiste. Qualsiasi peer che non lo ha lo richiede, e solo allora il contenuto viene inviato, in un messaggio tx. Un peer che chiede qualcosa che il nodo non ha più riceve notfound, cosa che accade regolarmente: le mempool espellono transazioni sotto pressione, e un nodo non deve a nessuno una copia di una transazione che ha già scartato.

La fornitura è volutamente restia. Bitcoin Core non consegna una transazione a un peer a cui non l'ha mai annunciata finché quella transazione non è rimasta nella mempool per un paio di minuti. Senza quel ritardo, uno sconosciuto potrebbe connettersi e usare getdata per verificare se il tuo nodo conosce determinati pagamenti, cosa che trasformerebbe ogni nodo in un'interfaccia di interrogazione della propria mempool e renderebbe molto più facile risalire a dove è comparso per la prima volta un pagamento.

Il tipo 1 porta con sé anche la vecchia regola di serializzazione. Una transazione servita in risposta ad esso è scritta senza dati witness, il formato esistente prima del 2017, che per una spesa segwit omette le firme. I peer compatibili con segwit richiedono quindi la variante con witness, e da quando BIP339 è arrivato con Bitcoin Core 0.21.0 a gennaio 2021 di norma annunciano con il tipo 5, identificando le transazioni tramite l'hash del witness, così che un witness alterato non sembri più una transazione sconosciuta.

Dove lo vedi

MSG_TX è il meccanismo dietro la frase «la transazione è stata trasmessa», e dietro le occasioni in cui si scopre che non lo è stata.

Un wallet connesso a un solo nodo consegna una transazione firmata, quel nodo annuncia l'hash, e non succede altro finché qualche peer non la richiede. Se nessuno lo fa mai, il pagamento resta su una sola macchina e nessun miner lo vedrà. Bitcoin Core tiene traccia delle transazioni del proprio wallet che nessun peer ha ancora richiesto e le riannuncia finché uno non lo fa. Un nodo senza connessioni in uscita, su una rete domestica protetta da firewall, può quindi segnalare un pagamento come inviato mentre non è uscito nulla dall'edificio.

Anche il raggruppamento dei prelievi degli exchange compare qui. L'exchange annuncia un solo hash, una sola richiesta consegna una transazione che paga decine di clienti in una volta, ed è per questo che il txid del tuo prelievo contiene output appartenenti a sconosciuti.

MSG_TX vs il messaggio P2P tx

MSG_TX identifica una transazione, e il messaggio tx ne contiene una. Confonderli rende illeggibili i log del protocollo, perché le righe inv e getdata non sono altro che codici di tipo e hash, mentre i byte reali compaiono solo nelle righe tx. La distinzione conta soprattutto quando esamini la propagazione. Vedere il tuo hash uscire in un inv prova che il tuo nodo l'ha detto a qualcuno. Vedere un messaggio tx seguirlo prova che qualcuno lo voleva davvero.

Da non confondere con

Domande frequenti

Come faccio a sapere che la mia transazione ha davvero raggiunto la rete?

Annunciare l'hash non basta da solo. Cerca la transazione su due block explorer indipendenti un minuto dopo la trasmissione: vederla su un nodo che non gestisci prova che qualche peer l'ha richiesta e accettata.

Perché i nodi moderni annunciano le transazioni con il tipo 5?

Perché la trasmissione BIP339 identifica le transazioni tramite l'hash del witness anziché il txid. Questo copre anche i byte del witness, quindi un peer non scambia più per qualcosa che non ha mai visto una transazione il cui witness è stato alterato in transito.

Termini correlati

Altro in Riferimento per sviluppatori

Leggi questa pagina in inglese