Glossario / Indirizzi e chiavi
P2WSH
Noto anche come Pay-to-Witness-Script-Hash.
- Che cos'è P2WSH?
- P2WSH blocca i bitcoin su un impegno SHA-256 di 32 byte verso uno script witness, offrendo ai contratti molto più spazio rispetto a P2SH e uno sconto sullo script quando viene rivelato.
Specificato nel BIP-141.
Pay to witness script hash è l'output SegWit versione 0 per tutto ciò che è più complicato di una singola chiave, scritto come un indirizzo bc1q di 62 caratteri. Bitcoin Core trasmette una spesa il cui script witness arriva a 3.600 byte e il cui witness contiene fino a 100 elementi dello stack, mentre un redeem script P2SH si ferma a 520 byte. Lo spazio in più è il motivo per cui i contratti seri si sono spostati qui.
Come funziona
Un output P2WSH è il byte 0x00 per la versione witness 0 seguito da un push di 32 byte, 34 byte in totale. Quei 32 byte sono un semplice SHA-256 dello script witness serializzato, non il RIPEMD-160 di uno SHA-256 usato altrove in bitcoin.
La scelta è deliberata. Un impegno da 160 bit offre circa 80 bit di resistenza alle collisioni, il che è scomodo quando una controparte contribuisce a scegliere cosa finisce nello script e potrebbe cercare due script che condividono un hash. Un impegno da 256 bit elimina il problema. P2WPKH a chiave singola mantiene l'hash più corto perché solo una parte sceglie la chiave, e di conseguenza l'indirizzo resta 20 caratteri più corto.
Per spendere si inseriscono gli argomenti nello stack del witness e si termina con lo script serializzato. Un nodo calcola l'hash di quell'ultimo elemento, lo confronta con l'impegno e poi esegue lo script con ciò che resta. La policy di relay di Bitcoin Core fissa i limiti in policy.h: 3.600 byte per lo script, 100 elementi nello stack e 80 byte per elemento.
Le commissioni spiegano la migrazione. Una spesa 2 di 3 qui occupa circa 104,5 vbyte, perché sia le firme sia l'intero script da 105 byte viaggiano nel witness a un'unità di peso per byte. La stessa policy con P2SH costa circa 297 vbyte. È anche raggiungibile il limite di consenso di 20 chiavi su OP_CHECKMULTISIG, dato che venti chiavi occupano meno di 700 byte.
Dove lo vedi
Ogni canale Lightning è finanziato con un output P2WSH 2 di 2, il che rende questo uno dei tipi di script più comuni sulla catena anche se poche persone digitano mai l'indirizzo. Anche la custodia istituzionale, le policy miniscript e le clausole di eredità con blocco temporale lo usano.
Su un block explorer un output P2WSH non speso è una stringa bc1q di 62 caratteri e nulla più. Sembra uguale sia che protegga due chiavi sia che ne protegga venti, e le condizioni emergono solo quando i bitcoin si muovono.
I backup devono includere lo script. Una frase di recupero rigenera chiavi, non script arbitrari, quindi conserva il descriptor o i byte esatti dello script insieme alla frase di recupero e verifica di poter ripristinare da essi prima che l'indirizzo contenga denaro reale.
P2WSH vs script witness
P2WSH è l'output; lo script witness è il contenuto verso cui si impegna. L'output contiene 32 byte di hash e nulla più, quindi non trasmette alcuna informazione sulle condizioni associate, e nulla dello script appare on-chain finché una spesa non lo pubblica. Di conseguenza l'obbligo è sbilanciato. Un mittente ha bisogno solo dell'indirizzo e può pagare senza capire nulla. Il destinatario ha bisogno per sempre dei byte esatti dello script, perché perderli rende i bitcoin non spendibili, non importa quante chiavi private sopravvivano.