Vai al contenuto
buybitcoinsmart

Glossario / Nodi e software

Invio non richiesto di un blocco

Che cos'è un invio non richiesto di un blocco?
Un invio non richiesto di un blocco è un peer che ti manda un blocco che non hai mai chiesto, saltando il consueto scambio di annuncio e richiesta per risparmiare un viaggio di andata e ritorno su dati urgenti.

Spingere senza invito è scortese nella maggior parte dei protocolli ed è corretto in questo. Ogni viaggio di andata e ritorno che un blocco trascorre in transito è tempo che un miner dedica a lavorare su una punta della catena che non esiste più, perciò il BIP152 ha formalizzato la scorciatoia: fino a tre peer scelti possono lanciarti un blocco nel momento in cui lo hanno. Il tuo nodo lo valida comunque da zero e non deve nulla al mittente.

Come funziona

Sotto il nome di invio non richiesto di un blocco viaggiano due cose diverse, una vecchia e informale, una specificata.

La forma vecchia è semplicemente un messaggio block che arriva senza un getdata corrispondente. Il protocollo non lo ha mai vietato e i destinatari hanno sempre elaborato questi blocchi, anche se con condizioni. Bitcoin Core verifica la proof of work nell'intestazione prima di fare qualsiasi cosa costosa, non inoltra il blocco finché non è stato validato del tutto e non si collega alla catena migliore, e tratta un blocco che non si collega a nulla che conosca come qualcosa da scartare e non come un rompicapo da risolvere. Queste regole esistono perché i dati non richiesti sono gratuiti per il mittente e costosi per il destinatario, ed è la forma di ogni attacco di negazione del servizio nel protocollo.

La forma specificata è la modalità ad alta larghezza di banda del BIP152. Un nodo invia al suo peer un messaggio sendcmpct il cui primo byte è 1, che significa: non annunciare, invia e basta. Quel peer può quindi trasmettere un cmpctblock nell'istante in cui sente parlare di un nuovo blocco, possibilmente prima di aver finito di validarlo. Il BIP152 fissa un tetto rigido di tre peer di questo tipo e Bitcoin Core applica esattamente questo, tenendo un elenco di al massimo tre nodi scelti per aver consegnato per primi i blocchi recenti. Tre è un compromesso: ridondanza sufficiente perché un solo peer lento non possa farti aspettare, e abbastanza pochi perché tu non riceva lo stesso blocco su ogni connessione che hai.

Poiché un annuncio ad alta larghezza di banda può precedere la validazione, il nodo che lo riceve lo tratta come un'affermazione e non come un fatto. La proof of work viene verificata per prima, essendo l'unica parte di un blocco che non si può falsificare a basso costo, e tutto il resto segue il percorso normale. La versione del protocollo 70015 esiste proprio perché un nodo possa segnalare che non penalizzerà un peer per aver annunciato un blocco che poi risulti non essere stato verificato del tutto.

Dove lo vedi

Gli invii non richiesti si concentrano dove i secondi valgono denaro.

I pool di mining mantengono connessioni dirette tra loro e con reti di relay come FIBRE, costruite per spostare blocchi tra continenti con il minor scambio di annuncio e richiesta che la fisica consenta. Su una macchina comune, la chiamata getpeerinfo riporta due flag per peer, bip152_hb_to e bip152_hb_from, che mostrano a quali peer hai chiesto di inviarti blocchi e quali hanno chiesto lo stesso a te. Vederne tre del primo tipo è normale, e tre è il limite.

Invio non richiesto di un blocco vs relay standard dei blocchi

Il relay standard dei blocchi e un invio non richiesto differiscono su chi decide che i byte si muovano. Con il relay standard è il destinatario a chiedere, quindi governa la propria larghezza di banda e può rifiutare qualsiasi cosa abbia già. Con un invio decide il mittente, il che risparmia un viaggio di andata e ritorno ma mette in mano a un estraneo una leva sulle tue risorse. La risposta di Bitcoin è non scegliere tra i due: consentire l'invio, limitarlo a tre peer che hai selezionato tu, verificare la proof of work prima di spendere qualsiasi cosa e validare il blocco per intero, indipendentemente da quanto cortesemente sia arrivato.

Da non confondere con

Domande frequenti

Un peer può costringere il mio nodo ad accettare un blocco non valido inviandoglielo?

No. Un blocco non richiesto viene validato esattamente come uno richiesto. Bitcoin Core verifica la proof of work dell'intestazione prima di impiegare sforzi reali, rifiuta di inoltrare il blocco finché non è validato e non si collega alla catena migliore, e scarta tutto ciò che non si collega a nulla.

Quanti peer possono inviare blocchi al mio nodo?

Tre. Il BIP152 limita la modalità ad alta larghezza di banda a tre peer e Bitcoin Core applica quel limite, scegliendo i peer che hanno consegnato più rapidamente i blocchi recenti. La chiamata getpeerinfo li mostra tramite i flag bip152_hb_to e bip152_hb_from.

Termini correlati

Altro in Nodi e software

Leggi questa pagina in inglese