Vai al contenuto
buybitcoinsmart

Glossario / Nodi e software

Assumeutxo

Che cos'è Assumeutxo?
Assumeutxo consente a un nodo di Bitcoin Core di partire da un'istantanea dell'insieme degli output non spesi a un'altezza codificata nel codice, per poi verificare in background la cronologia saltata.

L'istantanea elenca ogni moneta spendibile a una certa altezza di blocco, e il suo hash è compilato nel software invece di essere scaricato con esso. Bitcoin Core 28.0 ha aggiunto i parametri della mainnet per l'altezza 840.000, la prima altezza alla quale un'istantanea può essere caricata sulla rete reale. Il tuo wallet diventa utilizzabile molto prima che l'intera cronologia sia stata verificata, mentre il nodo controlla in silenzio, alle spalle, i blocchi saltati.

Come funziona

Assumeutxo divide un nodo in due chainstate e li esegue contemporaneamente.

Consegni un file di istantanea al comando RPC loadtxoutset. Bitcoin Core crea un secondo chainstate in cui caricarlo, mantenendo attivo quello originale mentre il contenuto viene letto e verificato. Una volta che il chainstate dell'istantanea è caricato e validato diventa quello attivo, una directory chiamata chainstate_snapshot compare nella directory dei dati e il nodo inizia a sincronizzarsi dal blocco base dell'istantanea verso la punta della rete. Dentro quella directory c'è un piccolo file chiamato base_blockhash, che registra a quale blocco è stata scattata l'istantanea, così la configurazione sopravvive a un riavvio.

L'hash è tutta la questione della fiducia. La documentazione di Core stessa afferma che non esiste una fonte canonica per le istantanee e che ogni istantanea che scarichi viene confrontata con un valore scritto nel codice sorgente. Non ti affidi quindi a chi ha ospitato il file. Ti affidi alla stessa versione che hai già scelto di eseguire, e un file il cui hash non corrisponde al valore compilato viene rifiutato prima ancora di diventare il tuo chainstate.

Nel frattempo il chainstate originale continua ad avanzare dal blocco genesi con tutte le regole applicate. Quando raggiunge il blocco base dell'istantanea calcola l'hash del proprio insieme di output non spesi e confronta il risultato con il parametro compilato. La cache viene assegnata alla catena che ne ha più bisogno: la catena dell'istantanea ha la priorità mentre corre verso la punta, e la catena in background ne riceve la parte maggiore dopo. Il comando RPC getchainstates mostra entrambe.

La pulizia avviene al riavvio successivo, non subito. Core rinomina chainstate_snapshot in chainstate, elimina i dati in background e da quel momento il nodo è indistinguibile da uno costruito nel modo tradizionale. Il file base_blockhash resta come registrazione del punto di partenza.

Perché questo conta quando compri bitcoin

Assumeutxo affronta l'unico svantaggio che impedisce alla maggior parte degli acquirenti di validare i propri bitcoin.

Dei 41 wallet recensiti su questo sito, Bitcoin Core è l'unico che scarica e verifica da sé l'intera catena, ed è per questo che la nostra recensione gli assegna 4,7 e continua a elencare come suo primo svantaggio che la prima sincronizzazione scarica e verifica tutta la catena, costando ore e molto spazio su disco. Quella frase è il motivo per cui la maggior parte delle persone non ci prova mai. Un'istantanea non fa sparire il costo, lo sposta: le ore ci sono ancora, ma arrivano dopo che il tuo wallet già funziona invece che prima.

Il momento in cui questo ripaga è il prelievo. Compri su uno dei 63 exchange censiti qui, invii i bitcoin a chiavi che gestisci tu, e poi vuoi sapere che sono arrivati. Senza un nodo tuo, le due parti a cui puoi chiedere sono l'exchange che li ha appena inviati e un block explorer pubblico che ora conosce il tuo indirizzo. Con un nodo, la risposta viene da un calcolo che la tua macchina ha eseguito.

Cambia anche quanto costa avviare una configurazione seria. La nostra recensione di Sparrow, anch'essa valutata 4,7, descrive la connessione diretta a Bitcoin Core come backend, e quella combinazione prima significava aspettare una sincronizzazione completa prima che Sparrow avesse qualcosa con cui parlare. Un'istantanea comprime il giorno della configurazione in una serata utilizzabile, e la verifica che hai rinviato si completa da sola mentre dormi.

Esempio pratico: generare un'istantanea con dumptxoutset

Generare un'istantanea assumeutxo è un'operazione deliberata su un nodo di cui ti fidi già, non un file che vai a prendere.

La produce il comando RPC dumptxoutset, alla punta attuale usando il tipo "latest" oppure a un'altezza recente usando il tipo "rollback". Per la maggior parte del tempo in cui viene eseguito, il nodo si trova in uno stato temporaneo che non riflette la realtà, segnando come non validi blocchi che sa essere corretti, e a causa di quello stato l'attività di rete viene disattivata e ogni peer disconnesso. La documentazione di Core consiglia -rpcclienttimeout=0 perché il dump richiede un po' di tempo qualunque sia l'hardware e qualunque tipo tu abbia scelto, e sconsiglia di toccare il nodo per qualsiasi altra cosa nel frattempo.

Due dettagli colgono di sorpresa. Un'istantanea è utilizzabile solo se la sua altezza ha già un hash elencato nei parametri della catena, quindi scegliere qualsiasi altra altezza significa modificare quel codice e ricompilare, e il tipo "rollback" serve anche come modo per verificare un hash scritto nel codice rigenerando l'istantanea e confrontando. E Bitcoin Core 28.0 ha cambiato la serializzazione: i dump nel vecchio formato non sono più gestiti e devono essere ricreati su un nodo 28.0 o successivo prima che loadtxoutset li accetti.

Bitcoin Core 29.0 ha aggiunto uno strumento correlato, contrib/utxo-tools/utxo_to_sqlite.py, che converte un'istantanea serializzata in formato compatto in un database SQLite3. Non ha niente a che vedere con la sincronizzazione di un nodo e tutto a che vedere con ciò che un'istantanea è in realtà: un quadro completo e autosufficiente di chi possiede cosa a una certa altezza, che si rivela una cosa utile da interrogare.

Assumeutxo vs initial block download

Assumeutxo non sostituisce l'initial block download, cambia l'ordine in cui il lavoro viene svolto.

Un nodo che ha caricato un'istantanea esegue comunque un initial block download completo dal blocco genesi nel suo chainstate in background, che è il chainstate incaricato della validazione completa del tratto di catena che l'istantanea gli ha permesso di dare per assunto. Nulla viene saltato in modo permanente. Ciò che l'istantanea ottiene è che il wallet smetta di essere inutile durante l'attesa, perché il chainstate attivo conosce già lo stato attuale di ogni indirizzo che ti interessa. Il tratto tra il blocco genesi e l'altezza dell'istantanea viene tracciata come assunta valida invece di essere contata in silenzio come verificata, ed è per questo che Core mantiene due chainstate invece di un solo flag su uno solo. Un nodo che ha caricato un'istantanea e non ha mai completato la sincronizzazione in background si trova in uno stato reale e con un nome, non in uno nascosto.

Assumeutxo vs un nodo potato

Assumeutxo e la potatura riducono entrambi ciò che un nodo deve gestire, e riducono cose opposte.

La potatura riguarda il disco dopo la validazione: un nodo potato controlla ogni blocco, poi elimina i file grezzi di cui non ha più bisogno. Assumeutxo riguarda il tempo prima della validazione: rinvia controlli che eseguirà comunque. I due si combinano, e Core piega una delle proprie regole per permetterlo. Il minimo abituale per -prune è 550 MiB, e un nodo che carica un'istantanea ignora quel minimo e usa invece almeno 1100 MiB. Lo spazio non è l'unica voce: mentre la sincronizzazione in background è in corso ci sono temporaneamente due directory di chainstate, ciascuna di diversi gigabyte e probabilmente destinata a crescere oltre l'istantanea che hai scaricato.

Gli indici sono il punto in cui i due divergono di più. Un indice non guadagna nulla da un'istantanea, perché gli indici iniziano sempre a costruirsi dal blocco genesi e possono applicare i blocchi solo in ordine, quindi un indice raggiunge la punta solo quando la validazione in background ha portato il nodo oltre il blocco dell'istantanea. La potatura accentua questo: un indice che gestisca la potatura permette al nodo di eliminare solo i blocchi che ha già indicizzato, quindi un'istantanea vecchia lascia sul disco un mucchio di blocchi scaricati, non indicizzati e non eliminabili finché l'indicizzazione non si mette al passo.

Da non confondere con

Domande frequenti

Assumeutxo significa che il mio nodo si fida di chiunque abbia creato l'istantanea?

No. L'istantanea viene verificata rispetto a un hash compilato nella versione di Bitcoin Core che stai eseguendo, non rispetto a qualcosa distribuito insieme al file, quindi un'istantanea manomessa viene rifiutata prima di diventare il tuo chainstate. Ciò di cui ti fidi è la versione, della quale ti fidavi già.

Quale versione di Bitcoin Core serve per usare assumeutxo sulla mainnet?

La versione 28.0 o successiva. Ha aggiunto i parametri della mainnet per l'altezza 840.000, ed è questo che rende utilizzabile loadtxoutset sulla rete reale. La stessa versione ha cambiato la serializzazione delle istantanee, quindi i dump prodotti da nodi più vecchi devono essere rigenerati prima di poter essere caricati.

La cronologia saltata viene mai verificata davvero?

Sì, da un secondo chainstate che si sincronizza dal blocco genesi in background. Quando raggiunge il blocco base dell'istantanea calcola l'hash del proprio insieme di output non spesi e confronta il risultato con il valore compilato, e solo dopo il nodo elimina i dati di background al riavvio successivo.

Serve assumeutxo se compro bitcoin solo su un exchange?

Non per comprare, ma riduce il costo di verificare il tuo prelievo. Senza un nodo, le uniche parti che possono dirti che i bitcoin sono arrivati sono l'exchange che li ha inviati e un block explorer pubblico, e un'istantanea trasforma l'esecuzione dell'alternativa in un lavoro da fare nello stesso giorno.

Leggi anche

Termini correlati

Altro in Nodi e software

Leggi questa pagina in inglese