Transaction replacement

Sostituzione della transazione

Difficoltà: avanzato

Argomento: tecnologia


DEFINIZIONE

Transaction Replacement, o sostituzione della transazione, a volte indicata più porecisamente come unconfirmed transaction replacement si riferisce alla possibilità di sostituzione di una transazione nella mempool, ovvero non ancora confermata nella blockchain, con una nuova transazione.

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.

Questa sostituzione attualmente può avvenire attraverso comportamenti ben definiti, quali RBF Replace-by-fee.

La sostituzione delle transazioni non confermate era una caratteristica della prima versione del client bitcoin scritto da Satoshi Nakamoto, si basava sul valore nSequence della transazione, il che significa che era possibile emettere una nuova transazione e i nodi l'accettavano se l'ID della sequenza era più alto sostituendo la transazione esistente nella mempool. Questa funzione è stata rimossa dal client nella versione 0.3.12 (settembre 2010). Satoshi Nakamoto ha commentato questa rimozione: "Disabilita la funzione di sostituzione per ora", perché era possibile per un aggressore utilizzare tutta la larghezza di banda tra i full node con un costo minimo per se stesso, creando una vulnerabilità denial-of-service.

Tale funzionalità è rimasta assente nel client principale per molti anni da allora.

La regola generalmente accettata dalla rete (miner, nodi non mining) per molti anni è stata la FSS First-Seen-Safe, ovvero che i nodi, quando ricevevano le transazioni, controllavano se nella mempool c'era già un'altra transazione che stava spendendo lo stesso UTXO, e nel caso in cui tale transazione fosse stata trovata, la nuova veniva rifiutata.

I miner possono usare versioni personalizzate del software Bitcoin, e quando un miner confeziona un nuovo blocco ha la libertà di selezionare quali transazioni inserire, e non erano incentivati a seguire questa convenzione e ad accettare una sostituzione, e potevano addirittura essere incentivati a violare questa convenzione se una versione precedente di una transazione pagava una fee più alta.

Questi due fattori hanno impedito per alcuni anni che la Transaction Replacement fosse ripristinata su Bitcoin Core, ma nel 2013 Peter Todd ha proposto di imporre alle Transaction Replacement di pagare fee rigorosamente maggiori e di richiedere che la sostituzione aumenti la fee almeno del minimo richiesto per trasmettere una nuova transazione. In questo modo si eliminavano i problemi di denial of service e di compatibilità degli incentivi.

Il lavoro originale di Peter Todd è andato oltre e ha portato la compatibilità degli incentivi alla sua logica conclusione, ragionando sul fatto che con miner anonimi, effimeri e autoselezionati l'unico comportamento su cui si può davvero contare è l'incentivo economico e quindi la sostituzione con fee più alte. La preferenza per fee più elevate può anche rendere possibile ai nodi di convergere su un insieme di transazioni nella mempool in base alle fee in modo che non sia possibile per i nodi accettare solo la prima versione che viene vista di una transazione.

Per questi motivi e poiché un sistema che si comporta in modi prevedibili è più sicuro e protetto di un sistema che si comporta in "modi imprevedibili ma mediamente migliori", ha proposto che la sostituzione avvenga per tutte le transazioni. Ha anche proposto un protocollo per rimuovere i guadagni economici derivanti dal Double Spend in un modo fortemente compatibile con gli incentivi, chiamato replacement scorched earth (terra bruciata), in cui se qualcuno tenta di spendere due volte, si spendono tutti i fondi per le fee in modo che l'attaccante non li ottenga. (Ma questo è il tipo di proposta che solo un teorico dei giochi potrebbe amare).

Dopo la proposta di Peter Todd, alcuni produttori di wallet hanno chiesto con forza un RBF opt-in, in quanto avevano bisogno di un modo ragionevole per gestire le fee e vedevano nell'RBF opt-in un buon modo per farlo, motivo per cui la proposta è stata cambiata in modo da corrispondere al comportamento opt-in originale di Satoshi.

A partire da Bitcoin Core 0.12.0 (rilasciata nel febbraio 2016), è diventato ampiamente disponibile il tipo di transaction replaceability RBF replace-by-fee.

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 tramite la modalità definità Full RBF, il che significa praticamente che gli utenti possono tentare un double spend tramite un Race Attack con un software standard.

E la polemica si è accesa ulteriormente con l'annuncio che la versione 24.0 di Bitcoin Core avrà Full-RBF abilitata di default.


aggiornato il 2022-11-05