₿itcoinItaliaNetwork 

RBF

acronimo di: Replace-by-fee

Difficoltà: intermedio

Argomento: tecnologia


DEFINIZIONE

RBF o Replace-by-fee consente di velocizzare la conferma di una transazione aumentando le fee.

È una funzionalità introdotta nel protocollo Bitcoin nel 2015 tramite la proposta BIP 125 che consente ad una transazione di modificare le fee (le commissioni per confermare la transazione) se la transazione è ancora nella mempool e non è stata ancora inserita nella (blockchain.html) Bitcoin.

Capita spesso che ci siano dei periodi nei quali la quantità di transazioni in attesa di essere incluse nella blockchain è superiore alla disponibilità di spazio nei nuovi blocchi della blockchain[blockchain].

Poiché il miner che riesce a minare un nuovo blocco guadagna anche dalle fee delle transazioni, e poiché non tutte le transazioni in attesa potrebbero essere inserite nello spazio limitato di un blocco, il miner andrà a selezionare quelle transazioni che hanno delle fee che gli consentono di guadagnare di più.

Le transazioni competono per essere incluse nel blocco successivo risolto da un miner in base all'importo delle fee o commissione di transazione della rete Bitcoin che la transazione offre di pagare.

Le transazioni la cui fee non è sufficientemente competitiva rimarranno nella mempool, in attesa che i miner eliminino le transazioni che hanno pagato una fee più alta.

I diversi nodi gestiscono la mempool in modo diverso, e possono consentire che le transazioni che si trovano nella loro mempool possano essere modificate o meglio sostituite.

Le modalità RBF possono essere classificate in 2 categorie:

  • opt-in RBF, nel quale è l'utente che segnala quando crea la transazione che vuole poter modificare le fee nel caso la transazione
  • Full RBF, ovvero il nodo è impostato per consentire la sostituzione della transazione quando ci siano delle condizioni opportune anche se l'utente non ha esplicitamente impostata la transazione come RBF.

Generalmente quando non si esplicita se sia opt-in RBF o Full RBF, si intende opt-in RBF.

Ci sono diversi motivi per si può voler sostituire o meglio aggiornare le transazioni: per aumentare le loro fee, comprimere più transazioni in una sola, creare coinjoin in background (per migliorare la privacy) o eseguire una serie di altre azioni utili.

La possibilità di aumentare le fee di una transazione non ancora confermata è utile sia per fare in modo che venga confermata più velocemente quando ci sono troppe transazioni con fee più convenienti per i miner, che come strategia per pagare fee più basse: se il vostro wallet supporta RBF e tale supporto è abilitato per una transazione, potete scegliere tranquillamente la fascia più bassa della commissione di transazione. Se la transazione non viene confermata abbastanza presto per voi, potete semplicemente aumentare la commissione in un secondo momento utilizzando RBF.

In questo modo, se una transazione ha delle fee più basse rispetto a quelle delle altre transazioni nella mempool, ovvero in attesa di essere inserite dai miner nella blockchain, è possibile creare una transazione che sostituisce quella in attesa con una transazione analoga ma con delle fee più alte per poter essere confermata prima.

È una funzione implementata su molti wallet quali Bitcoin Core, Blockstream Green, Electrum, Samourai Wallet, Specter Wallet, SBW Simple Bitcoin Wallet, Moonshine, Coinb.in, ConIO, Nunchuk e alcuni di questi hanno l'opzione RBF abilitata di default.

RBF ha le seguenti caratteristiche:

  • Le transazioni originali non devono essere confermate. Devono indicare la loro sostituibilità in modo esplicito o attraverso l'ereditarietà. Ovvero, se una qualsiasi voce della transazione originale ha un numero di nSequence inferiore a (0xffffff - 1). Oppure, che le transazioni che l'hanno preceduta indichino la sostituibilità (ereditarietà).
  • La nuova transazione creata per la sostituzione può includere un input non confermato solo se era incluso nella transazione originale.
  • La commissione per la nuova transazione deve essere superiore a quella della transazione originale.
  • Quando il numero di transazioni da sostituire non supera le 100 unità.
  • La sostituzione delle transazioni è un processo opzionale, anche se alcuni wallet attivano di default RBF

Dalla versione 0.16.0 (febbraio 2018) di Bitcoin Core le transazioni RBF sono diventate un comportamento predefinito (da opt-in a opt-out) e la Transaction replacement, la sostituzione delle transazioni è diventata uno standard de facto sulla rete. Tale cambiamento è stato collegato al limite di 1Mb del blocco e si è reso necessario uno strumento per gli utenti per sostituire le transazioni bloccate. L'attributo più controverso di RBF è che permetteva di inviare fondi a indirizzi assolutamente diversi (full RBF), il che significa praticamente che gli utenti possono fare un double spending con un software standard.

Preserve payment vs Decrease payment

Il metodo "Preserve payment" e il metodo "Decrease payment" sono due strategie utilizzate per effettuare RBF.

  • Preserve payment: (conserva il pagamento) significa che l'importo destinato al destinatario della transazione rimane invariato. Quando utilizzi questa strategia per incrementare la commissione della transazione, il totale inviato al destinatario rimane lo stesso, mentre l'incremento della commissione viene sottratto dal resto che sarebbe tornato al mittente (ovvero, il change).

Esempio:

Transazione originale: invii 1 BTC con una commissione di 0.0001 BTC. Con "Preserve payment": invii sempre 1 BTC al destinatario, ma aumenti la commissione a 0.0005 BTC. La differenza di 0.0004 BTC viene sottratta dal change che tornerebbe al mittente. * Decrease payment: (riduci il pagamento) comporta una riduzione dell'importo inviato al destinatario per compensare l'aumento della commissione. In questo caso, l'incremento della commissione viene preso dall'importo destinato al destinatario piuttosto che dal change che tornerebbe al mittente.

Esempio:

Transazione originale: invii 1 BTC con una commissione di 0.0001 BTC. Con "Decrease payment": aumenti la commissione a 0.0005 BTC, quindi invii 0.9996 BTC al destinatario (diminuito di 0.0004 BTC) mantenendo invariato il change che ritorna al mittente.

Un metodo alternativo per velocizzare la conferma di una transazione è CPFP Child pays for parent, la cui differenza principale è data dal caso d'uso perché con RBF è chi effettua il pagamento che può accelerarne la conferma modificando le fee, mentre con CPFP è il ricevente che creando una transazione che spende i bitcoin della transazione non ancora confermata che può incentivare i miner.

La differenza con CPFP può quindi essere così riassunta:

  • RBF consente al mittente di incrementare le fee per ottenere la conferma della transazione più velocemente. Utilizzate RBF se siete il mittente che ha bisogno di velocizzare la transazione.
  • CPFP consente al destinatario creando una nuova transazione di pagare per ottenere la conferma della transazione più velocemente. Usate il CPFP se siete il destinatario che ha bisogno di velocizzare la transazione.

Un funzionamento alternativo al RBF è il FSS o First-Seen-Safe, secondo il quale i nodi della rete bitcoin quando ricevono nuove transazioni controllano se nella mempool c'è già un'altra transazione che spende lo stesso UTXO, e nel caso in cui tale transazione venga trovata, la nuova viene rifiutata e non viene inclusa nel mempool di questo nodo e non viene propagata ulteriormente alla rete.


aggiornato il 2021-10-21