Glossario / Transazioni e commissioni
Replace-by-fee
Noto anche come RBF, Replace by fee, Opt-in replace by fee, Full-RBF, sostituzione con commissione più alta.
- Che cos'è il replace-by-fee?
- Il replace-by-fee consente di sostituire una transazione non confermata con una versione di sé stessa che paga di più, e Bitcoin Core moderno inoltra questa sostituzione indipendentemente dal fatto che l'originale lo abbia segnalato o no.
Specificato nel BIP-125.
Le stime delle commissioni diventano obsolete, quindi bitcoin consente a chi invia di riscrivere un pagamento che non è ancora stato minato. La transazione sostitutiva deve pagare di nuovo l'intera commissione dell'originale più almeno un satoshi in più per byte virtuale, quindi aumentare la commissione non è mai gratuito. Per te la regola pratica è netta: nulla di non confermato è definitivo, e solo chi invia può aumentare la commissione.
Come funziona
La sostituzione è una policy di relay, non una regola di consenso, ed è per questo che il suo comportamento è cambiato due volte senza alcun fork.
Il BIP125 ha definito la versione opt-in e Bitcoin Core l'ha introdotta nella 0.12.0 il 23 febbraio 2016. Chi inviava segnalava la disponibilità a essere sostituito impostando il numero di sequenza di almeno un input a 0xfffffffd o inferiore, e i nodi inoltravano allora una transazione in conflitto che pagava di più. I wallet che non impostavano il flag producevano pagamenti che i loro stessi utenti non potevano riparare.
Quella distinzione non c'è più. Bitcoin Core 28.0, pubblicato a ottobre 2024, ha impostato su attivo il valore predefinito di -mempoolfullrbf, quindi un nodo ben connesso inoltra ora un conflitto che paga di più indipendentemente da ciò che ha segnalato la prima transazione. Qualsiasi schermata di un wallet che promette ancora che un pagamento senza flag "cannot be replaced" descrive una rete che non esiste più.
Quattro condizioni decidono se un nodo accetta lo scambio, ed esistono per impedire che la sostituzione venga usata per inondare la rete di riscritture gratuite:
- La transazione sostitutiva deve pagare una commissione assoluta più alta di ogni transazione che espelle, non solo una commissione per byte più alta.
- Deve anche pagare un importo aggiuntivo pari almeno alla commissione di relay incrementale, che per impostazione predefinita è 1 satoshi per byte virtuale moltiplicato per la dimensione della nuova transazione.
- Non può includere input non confermati che l'originale non spendeva già.
- Non può espellere più di 100 transazioni alla volta, contando i discendenti di tutto ciò con cui entra in conflitto.
La regola della commissione assoluta è quella che sorprende le persone. Una transazione sostitutiva che riduce una transazione grande a una più piccola con una commissione per byte migliore può comunque essere rifiutata, perché il totale della commissione è diminuito. Nota anche che paghi la nuova commissione, non entrambe: l'originale viene scartato e non viene mai minato, quindi la vecchia commissione non viene mai incassata.
Bitcoin Core espone questa funzione come RPC bumpfee, e la maggior parte dei wallet desktop la racchiude in un pulsante con l'etichetta "increase fee" o simile. Il meccanismo abituale consiste nel ridurre l'output di resto dell'importo della commissione aggiuntiva, ed è per questo che un pagamento che ha inviato un saldo intero senza resto non può essere aumentato senza aggiungere un altro input.
Perché questo conta quando compri bitcoin
Il momento in cui la sostituzione diventa un tuo problema è il momento in cui prelevi da un exchange verso il tuo wallet, oppure invii da quel wallet a qualcun altro.
Inviare dal tuo wallet è il caso favorevole. Se hai scelto una commissione per byte alle 2:00 e la mempool si è risvegliata, apri la transazione e aumentala. Scegli un wallet che offra il pulsante prima di averne bisogno: è una funzione normale in Bitcoin Core, Sparrow, Electrum e Trezor Suite, e una funzione assente in molti wallet per smartphone che scelgono la commissione per te e non ti danno alcun modo per tornare indietro.
Prelevare da un exchange è il caso sfavorevole. L'exchange ha costruito quella transazione, detiene le chiavi degli input, e solo lui può sostituirla. Gli uffici di assistenza in genere non lo fanno, perché i loro lotti di prelievi servono decine di clienti alla volta. La tua unica leva dal lato di chi riceve è il child pays for parent, che funziona perché il bitcoin che ti arriva è spendibile dal momento in cui esiste, anche se non confermato.
È nella ricezione che la sostituzione cambia il modo in cui dovresti comportarti. Un venditore su un marketplace peer-to-peer, una compravendita faccia a faccia o un gestore di ATM bitcoin che consegna la merce su un pagamento non confermato si affidano a una transazione che chiunque abbia una mempool può vedere mentre viene sostituita. Con la sostituzione completa come impostazione predefinita, il vecchio consiglio, secondo cui una transazione senza flag era sicura da accettare con zero conferme, è superato. Aspetta un blocco. Per importi che contano, aspetta diversi blocchi.
Aumentare la commissione di un prelievo da 3 sat/vB che si è bloccato
Supponi di inviare 0,05 BTC dal tuo wallet con un input SegWit nativo e due output, uno al destinatario e uno per il resto. Quella transazione occupa circa 141 byte virtuali e a 3 sat/vB porta una commissione di 423 satoshi.
La mattina dopo la commissione più bassa che si sta confermando è 20 sat/vB e il tuo pagamento non si è mosso. Aumenti la commissione. La transazione sostitutiva occupa gli stessi 141 byte virtuali, quindi 20 sat/vB significa una commissione di 2.820 satoshi, prelevata dall'output di resto e non dall'importo del destinatario. La soglia della policy per questa transazione sostitutiva è data dai 423 satoshi originali più 1 sat/vB su 141 byte, cioè 564 satoshi, quindi 2.820 la supera comodamente.
Non paghi 3.243 satoshi. Paghi 2.820, e la prima versione muore senza essere minata. Il destinatario riceve comunque esattamente 0,05 BTC, e l'id della transazione cambia, quindi se hai già dato a qualcuno il vecchio id devi inviargli quello nuovo.
Dove questo diventa costoso è quando non resta alcun output di resto da ridurre. Allora il wallet deve aggiungere un altro input, la transazione cresce fino a circa 209 byte virtuali, e gli stessi 20 sat/vB costano ora 4.180 satoshi.
Replace-by-fee vs doppia spesa
Replace-by-fee e un tentativo di doppia spesa usano lo stesso meccanismo e differiscono solo in dove finiscono i soldi. Una transazione sostitutiva di solito mantiene lo stesso destinatario e preleva la commissione aggiuntiva dal resto. Una doppia spesa riscrive gli output in modo che i bitcoin tornino a chi invia o vadano del tutto altrove, e il commerciante che ha consegnato la merce non riceve nulla.
Nessun nodo può distinguerle, perché entrambe sono semplicemente transazioni in conflitto e vince quella che paga di più. È tutta qui la ragione per aspettare le conferme invece di fidarti dell'etichetta che il tuo wallet mette su un pagamento in entrata. La protezione è la profondità nella catena, non l'intenzione dichiarata da chi invia.