Vai al contenuto
buybitcoinsmart

Glossario / Indirizzi e chiavi

Indirizzo di resto

Noto anche come Change address.

Che cos'è un indirizzo di resto?
Un indirizzo di resto riceve la parte di un input che il wallet non ha speso, perché gli output in bitcoin si consumano per intero e qualsiasi resto deve pur finire da qualche parte.

Specificato nel BIP-32.

Bitcoin non prevede la spesa parziale. Se detieni una moneta da 0,05 BTC e ne paghi 0,012 BTC, la transazione distrugge quella moneta e ne crea due nuove: il pagamento e circa 0,038 BTC di resto bloccati su un indirizzo che solo tu controlli. Su un block explorer il secondo output sembra un pagamento a uno sconosciuto, e non lo è.

Come funziona

Ogni pagamento in bitcoin inizia scegliendo monete intere da usare come input. Una moneta, propriamente un output di transazione non speso, non può essere divisa sul posto: la transazione la consuma per intero e scrive nuovi output. Il tuo wallet somma quello che ha selezionato, sottrae quello che stai pagando e quello che prenderà il miner, e invia il resto a una destinazione che ha generato per sé. Quella destinazione è l'indirizzo di resto.

I wallet moderni tengono queste destinazioni su un ramo separato del loro albero delle chiavi. Il BIP-44 ha fissato la struttura come m / purpose' / coin_type' / account' / change / address_index, dove il penultimo livello è 0 per gli indirizzi che consegni e 1 per gli indirizzi che il wallet tiene per sé. Il primo indirizzo di resto di un wallet SegWit nativo è quindi m/84'/0'/0'/1/0, derivato dalla stessa frase di recupero di tutto il resto, quindi non serve eseguire alcun backup aggiuntivo.

Non è sempre stato così, e la storia spiega perché quel ramo esista. I primi client Bitcoin prendevano il resto da una riserva di chiavi casuali pregenerate, 100 per impostazione predefinita. Se spendevi oltre la fine della riserva, un backup di wallet.dat fatto prima non conteneva più la chiave del tuo resto, ed è così che alcune persone hanno ripristinato un backup e trovato denaro mancante. Bitcoin Core crea solo wallet deterministici gerarchici dalla versione 0.16.0, e la riserva di chiavi generate in anticipo ora è impostata per impostazione predefinita su 1.000 chiavi.

L'importo del resto è aritmetica: input meno pagamenti meno commissione. Nulla nella transazione contrassegna un output come resto. Un nodo vede due output e li tratta allo stesso modo, ed è proprio per questo che il resto è un problema di privacy e non di contabilità.

Perché questo conta quando compri bitcoin

Il tuo primo output di resto di solito compare la prima volta che spendi bitcoin prelevati da un exchange, ed eredita tutto ciò che quel prelievo sa di te.

Un exchange che ha verificato il tuo passaporto ha registrato l'indirizzo a cui ha pagato. Quando in seguito spendi da quell'indirizzo, il resto è creato dalla stessa transazione, quindi chiunque segua l'output originale segue anche il resto, compreso qualsiasi fornitore di analisi pagato dall'exchange. Dividere un prelievo tra due wallet non serve a nulla se poi spendi da entrambi in una sola transazione. Tenere i bitcoin prelevati dall'exchange in un wallet dedicato e pagare da lì in modo deliberato è ciò che limita fin dove si diffonde l'identità.

I wallet hardware difendono da un secondo rischio, più insidioso. Un computer compromesso può costruire una transazione il cui output di resto va a un attaccante invece che a te, con un totale che sembra comunque corretto, così nulla sullo schermo sembra sbagliato. Un dispositivo Trezor o Ledger verifica che ogni output di resto derivi dalla frase di recupero che custodisce e segnala qualsiasi output che non lo faccia. Il controllo funziona solo se confermi gli importi sul display del dispositivo e non nel browser.

C'è anche un costo su cui puoi influire. Due output costano più di uno: un output di resto SegWit nativo aggiunge 31 byte alla transazione, circa 465 satoshi a 15 sat/vB, e crea una moneta che costerà circa 68 byte virtuali da spendere in seguito. I wallet che applicano una selezione delle monete con il metodo branch and bound cercano input che corrispondano al pagamento abbastanza da evitare del tutto il resto, e ci riescono più spesso quando le tue monete hanno dimensioni varie che quando sono tutte prelievi di importi tondi.

Il resto inoltre non è una cessione. Pagare a te stesso il resto della tua stessa moneta non è una vendita, ma i tracker di portafoglio importano abitualmente gli output di resto come acquisti in entrata o vendite in uscita, il che altera il costo di acquisto. Se il tuo tracker mostra una transazione che non riconosci il giorno in cui hai pagato una fattura, di solito è questa la causa.

Seguire il resto in un prelievo di 0,05 BTC

Segui una moneta da un exchange a un esercente e ogni cifra è visibile on-chain. Prelevi 0,05 BTC su un indirizzo bech32 del tuo wallet, e arriva come un unico output del valore di 5.000.000 satoshi.

Settimane dopo devi a un esercente 1.200.000 satoshi. Il tuo wallet contiene esattamente una moneta, quindi deve spendere tutti i 5.000.000. La transazione ha un input e due output, circa 141 byte virtuali, e a 15 sat/vB la commissione è di 2.115 satoshi. L'esercente riceve 1.200.000. L'output di resto riceve 5.000.000 meno 1.200.000 meno 2.115, cioè 3.797.885 satoshi, e finisce su m/84'/0'/0'/1/0.

Nulla in quella transazione annuncia quale output è quale. Di solito due euristiche lo rivelano: il resto è l'output con l'importo non arrotondato, e il resto è spesso l'output il cui tipo di script coincide con quello dell'input. I wallet che arrotondano il resto, o che copiano il tipo di script del destinatario, esistono proprio per smentire questi indizi.

Indirizzo di resto vs indirizzo unico

Un indirizzo di resto e un nuovo indirizzo di ricezione si usano entrambi una sola volta, e la differenza sta in chi deve vederli. Un indirizzo di ricezione proviene dal ramo esterno con indice di catena 0 ed esiste per essere copiato nel wallet di qualcun altro. Un indirizzo di resto proviene dal ramo interno con indice di catena 1 e non viene mai mostrato a chi paga; la maggior parte delle interfacce non lo mostra a meno che tu non apra una schermata di coin control. Entrambi ruotano per lo stesso motivo di privacy, ed entrambi si ripristinano dalle stesse dodici o ventiquattro parole.

Indirizzo di resto vs dust

Il resto è ciò che avanza; il dust è un avanzo troppo piccolo perché valga la pena crearlo. Bitcoin Core rifiuta di trasmettere un output il cui valore è inferiore a 3 satoshi per byte virtuale della sua spesa finale, che equivale a 546 satoshi per un output legacy e 294 per SegWit nativo. Quando un wallet calcola un resto sotto quella soglia, non crea affatto l'output e il valore va al miner come commissione aggiuntiva. È per questo che pagare un importo appena inferiore al tuo intero saldo può costare molto più della commissione che ti era stata indicata.

Da non confondere con

Domande frequenti

Perché il mio wallet ha inviato bitcoin a un indirizzo che non riconosco?

Quell'output è quasi certamente il tuo resto. Bitcoin spende monete intere, quindi il resto va a un indirizzo nuovo del ramo interno del tuo wallet. Apri una schermata di coin control o di dettaglio della transazione e il wallet segnalerà quell'output come tuo.

Il mio resto è al sicuro se ho fatto il backup solo della frase di recupero?

Sì. Gli indirizzi di resto sono derivati dalla stessa frase di recupero secondo il BIP-32, sul ramo numero 1, quindi ripristinare la frase li recupera insieme a tutto il resto. Non era così per i wallet precedenti al 2016, che prendevano il resto da un insieme fisso di chiavi casuali.

Posso impedire al mio wallet di creare resto?

Solo indirettamente. Invia l'intero saldo, cosa che non produce alcun output di resto, oppure usa il coin control per scegliere input che corrispondano al pagamento abbastanza da vicino perché il wallet rinunci al resto. La maggior parte dei wallet prova già la seconda opzione in automatico.

Dove è finito il mio resto quando l'importo era minuscolo?

Sotto la soglia del dust, 546 satoshi per un output legacy e 294 per SegWit nativo, i wallet eliminano l'output di resto e danno quel valore al miner come commissione aggiuntiva. I bitcoin non sono persi in alcun senso recuperabile, sono stati spesi nella transazione.

Leggi anche

Termini correlati

Altro in Indirizzi e chiavi

Leggi questa pagina in inglese