BIP 141

Layer: Consensus (soft fork)

Title: Segregated Witness (Consensus layer)

Author:

Eric Lombrozo

Johnson Lau

Pieter Wuille

Comments-URI:

https://github.com/bitcoin/bips/wiki/Comments:BIP-0141

Status: Final

Type: Standards Track

Created: 2015-12-21

License: PD

Segwit



Segregated Witness, o SegWit, è il nome utilizzato per una proposta presentata dal team di Bitcoin Core consistente nel cambiamento del formato di transazione, implementato in un soft fork di bitcoin.

Viene identificato anche come la proposta di miglioramento di bitcoin nr. BIP141 (Bitcoin Improvement Proposal).

È stato rilasciato nella versione 0.13.1 del client Bitcoin Core.


Abstract


Questo BIP definisce una nuova struttura denominata "testimone" impegnata verso i blocchi separatamente dall'albero merkle. Questa struttura contiene i dati necessari per verificare la validità della transazione ma non è necessaria per determinare gli effetti della transazione. In particolare, gli script e le firme vengono spostati in questa nuova struttura.

Il testimone è committato in un albero che è annidato nella radice merkle esistente del blocco tramite la transazione coinbase allo scopo di rendere questo BIP soft fork compatibile.


Motivazione


L'insieme degli effetti della transazione è determinato dal consumo in uscita e dalla creazione di nuovi output. Altri dati sulle transazioni, e le firme in particolare, sono richiesti solo per convalidare lo stato blockchain, non per determinarlo.

Rimuovendo questi dati dalla struttura delle transazioni impegnata nell'albero di transazione merkle, sono stati risolti diversi problemi:


La malleabilità non intenzionale diventa impossibile. Poiché i dati della firma non fanno più parte dell'hash della transazione, le modifiche su come la transazione è stata firmata non sono più rilevanti per l'identificazione della transazione. Come soluzione di malleabilità delle transazioni, questo è superiore all'approccio della firma canonica (BIP62):


Impedisce la malleabilità involontaria delle transazioni per qualsiasi tipo di script, purché tutti gli input siano firmati (con almeno un'operazione CHECKSIG o CHECKMULTISIG)

Nel caso di uno script CHECKMULTISIG m-of-n, una transazione è malleabile solo con l'accordo di m titolari di chiavi private (al contrario di solo 1 titolare di chiave privata con BIP62)

Previene la malleabilità involontaria delle transazioni a causa della sconosciuta malleabilità della firma ECDSA.

Permette la creazione di unconfirmed transaction dependency chains senza rischio di controparte, una caratteristica importante per i protocolli offchain come la rete Lightning.


La trasmissione dei dati delle firme diventa facoltativa. È necessario solo se un peer sta cercando di convalidare una transazione invece di controllarne l'esistenza. Ciò riduce la dimensione delle prove SPV e potenzialmente migliora la privacy dei client SPV poiché possono scaricare più transazioni utilizzando la stessa larghezza di banda.


Alcuni vincoli potrebbero essere bypassati con un fork morbido spostando parte dei dati della transazione in una struttura sconosciuta al protocollo corrente, ad esempio:


La dimensione del testimone potrebbe essere ignorata / scontata quando si calcola la dimensione del blocco, aumentando in qualche modo la dimensione del blocco

Costanti “hard coded”(implementate by design), come il limite massimo di dimensioni dei dati (520 byte) o il limite di sigops potrebbero essere rivalutate o rimosse

È possibile introdurre un nuovo sistema di script senza alcuna limitazione dalla semantica dello script esistente. Ad esempio, un nuovo algoritmo di digest di transazione per la verifica della firma della transazione è descritto in BIP143


Il vantaggio più evidente di SegWit è una capacità aumentata introdotta sotto forma di un diverso formato di transazione. Tuttavia, ci sono anche altri vantaggi a SegWit, che sono descritti qui. Ciò include una maggiore sicurezza per le transazioni multi firma, il ridimensionamento lineare delle operazioni sighash, il controllo delle versioni degli script e altro.


Tuttavia, risolvere i problemi di malleabilità delle transazioni è il più importante di questi. La malleabilità delle transazioni esiste perché le firme che proteggono il resto della transazione dalla modifica non possono proteggersi. Ciò significa che il modo in cui viene calcolato l'ID della transazione (txid) consente a chiunque di apportare modifiche allo stesso ID transazione.


SegWit risolve questo rimuovendo le firme dai dati di identificazione delle transazioni, rendendo impossibile per chiunque modificare i dati delle firme (che erano precedentemente nel txid). Con SegWit, il txid viene quindi calcolato da dati che non possono essere modificati.

La correzione della malleabilità delle transazioni apre anche la strada a canali di pagamento come Lightning Network (LN). Sebbene questi possano già essere implementati in Bitcoin, sono rischiosi perché le transazioni possono essere modificate (a causa del problema di malleabilità sopra menzionato). Questo può rendere le transazioni bloccate. Questo perché questi canali di pagamento come LN si basano sulla spesa di transazioni precedenti a cui fa riferimento il loro txid.


Inoltre, altre correzioni di bug sono utili anche per LN come le transazioni multisig incrementate e un limite di dimensioni di blocco maggiore.


Questo è uno dei motivi per cui alcuni minatori non amano SegWit. Le transazioni che attraversano questi canali di pagamento non fanno parte della rete Bitcoin, il che significa che le loro commissioni non andranno ai minatori.