Glossario / Indirizzi e chiavi
Nested SegWit
Noto anche come Wrapped SegWit, P2SH-P2WPKH, indirizzo 3.
- Che cos'è il Nested SegWit?
- Il Nested SegWit racchiude l'hash di una chiave SegWit nativa in un indirizzo P2SH: si guadagna la compatibilità con il software che non sapeva leggere le stringhe bc1, al costo di circa 23 vbyte in più per input.
Specificato nel BIP-49.
Nel 2017 quasi nessun exchange era in grado di leggere un indirizzo bech32, così il BIP-141 consentì di collocare un programma witness dentro un normale output pay to script hash. Per un mittente il risultato è identico a qualsiasi altro indirizzo 3, e spenderlo costa circa 91 vbyte, contro 148 di un input legacy e 68 di un input bc1q semplice. Era un ponte, e il passaggio è aperto da anni.
Come funziona
Un output Nested SegWit è un output P2SH del tutto ordinario: OP_HASH160, un hash di 20 byte, OP_EQUAL. È insolito ciò che sta dietro l'hash. Il redeem script non è davvero uno script, ma il programma witness di 22 byte stesso: il byte di versione 0x00 seguito da una push dell'HASH160 di 20 byte della tua chiave pubblica compressa.
Spendere quindi coinvolge entrambi i mondi. Lo scriptSig contiene esattamente un elemento, quel programma di 22 byte, che soddisfa il controllo P2SH. La firma e la chiave pubblica finiscono nel witness, dove ottengono lo sconto. Aggiungendo l'opcode di push, lo scriptSig contribuisce con 23 byte non witness che pesano 92 unità, e 92 diviso quattro è l'intera penalità di 23 vbyte rispetto al SegWit nativo.
I wallet tengono questi indirizzi su un ramo separato. Il BIP-49 assegna il percorso di derivazione m/49'/0'/0', e lo SLIP-132 ha dato a quel ramo il prefisso di chiave estesa ypub: è per questo che ripristinando un backup si ottengono indirizzi 3 invece di indirizzi bc1q. Se durante un ripristino il prefisso è sbagliato, il wallet appare vuoto anche se il seed è corretto.
Dove lo vedi
Qualsiasi schermata di deposito o di prelievo che offra "SegWit" e "Native SegWit" come opzioni distinte sta offrendo nested e native, in quest'ordine. Le schermate di configurazione dell'account di Ledger e Trezor fanno lo stesso. Gli exchange che hanno adottato SegWit presto hanno scelto come standard la forma nested e molti non l'hanno mai cambiata, perciò una grande quantità di cold storage in custodia si trova ancora dietro indirizzi 3.
Passare al SegWit nativo è una transazione on-chain, non una modifica delle impostazioni, perché i due formati provengono da rami diversi dello stesso seed. Fallo quando le commissioni sono basse, invia prima un piccolo importo di prova e controlla dopo che il wallet mostri l'account m/84'/0'/0'. Non c'è alcuna differenza di sicurezza tra i due, quindi nulla è urgente. Il compromesso riguarda solo le commissioni rispetto alla compatibilità, e la compatibilità ha smesso di essere scarsa.
Nested SegWit vs indirizzo P2SH
Il Nested SegWit è un tipo di indirizzo P2SH, e on-chain i due sono indistinguibili fino a una spesa. Una stringa che inizia con 3 può impegnare un programma witness di 22 byte, un redeem script multisig 2 di 3 o una clausola di recupero con timelock, e l'output non speso non rivela nulla. Questa opacità un tempo contava come un vantaggio per la privacy. In pratica oggi significa che un block explorer non può dirti cosa stai detenendo, e che un mittente non può avvertirti che svuotare quell'indirizzo costerà più che svuotare un indirizzo bc1q.