Vai al contenuto
buybitcoinsmart

Glossario / Indirizzi e chiavi

Indirizzo P2SH

Noto anche come P2SH address, Pay-to-Script-Hash, Pay to script hash.

Che cos'è un indirizzo P2SH?
Un indirizzo P2SH inizia con 3 e impegna l'hash di un redeem script, così le condizioni di spesa restano segrete finché qualcuno non rivela lo script.

Specificato nel BIP-16.

Pay to script hash è arrivato con il BIP-16, applicato dal blocco 173.805 il 1º aprile 2012, e ha cambiato chi sopporta il costo della complessità. Prima, un mittente doveva scrivere l'intero contratto nell'output. Dopo, il mittente scrive 23 byte e il destinatario paga per rivelare lo script in seguito, ed è per questo che un indirizzo che inizia con 3 può nascondere una cassaforte a cinque chiavi o un semplice wallet a chiave singola.

Come funziona

Lo script di output è breve e identico per ogni indirizzo P2SH: OP_HASH160 seguito da un hash di 20 byte e OP_EQUAL, 23 byte in totale. L'hash impegna un redeem script che solo il destinatario conosce.

La spesa avviene in due passaggi. Lo scriptSig fornisce gli argomenti che servono al redeem script, poi il redeem script stesso serializzato come ultimo elemento. Un nodo calcola l'hash di quest'ultimo elemento, lo confronta con il valore impegnato e, se coincidono, deserializza lo script e lo esegue su tutto ciò che resta nello stack. Entrambe le fasi devono riuscire.

Due limiti determinano cosa ci sta. Un redeem script è un singolo elemento dello stack, quindi non può superare il limite di 520 byte per push che Bitcoin Core definisce come MAX_SCRIPT_ELEMENT_SIZE. La policy di relay aggiunge un secondo tetto di 15 operazioni di firma per input P2SH. Insieme limitano la configurazione molto al di sotto di quanto il linguaggio di script consente in generale, dove il limite è uno script di 10.000 byte.

L'indirizzo stesso è Base58Check con un byte di versione 0x05, che produce il 3 iniziale e una stringa di 34 caratteri. Il BIP-13 ha definito quel formato, separatamente dalla regola di consenso del BIP-16.

Dove lo vedi

I moduli di prelievo degli exchange che descrivono un'opzione come "SegWit" senza dire "native" di solito indicano un indirizzo che inizia con 3. Le casseforti multisig costruite prima del 2018 li usano. Li usano anche gli atomic swap e i contratti hashed timelock che hanno bisogno di uno script ma vogliono un indirizzo a cui un wallet semplice possa pagare.

La conseguenza del progetto è l'ambiguità, ed è totale. Un output non speso di un indirizzo che inizia con 3 rivela solo un hash, quindi un block explorer non può dirti se contiene una chiave singola incapsulata o un quorum aziendale, e nemmeno il mittente può. L'informazione compare solo nella transazione di spesa.

Quell'ambiguità comporta un reale modo di perdere fondi. Recuperare bitcoin da un output P2SH richiede il redeem script, non solo le chiavi private. Una frase di recupero da sola non ricostruisce uno script arbitrario, quindi qualsiasi configurazione P2SH più elaborata di una derivazione standard del wallet va salvata come descriptor o come i byte stessi dello script. Alcune persone hanno perso bitcoin pur avendo tutte le chiavi e nessuno script.

Indirizzo P2SH vs multisig P2SH

Il multisig P2SH è una delle cose che puoi mettere dentro un indirizzo P2SH, non un sinonimo del formato. L'indirizzo è un contenitore e il redeem script nascosto al suo interno può essere un multisig m-of-n, un key hash SegWit annidato, una clausola di recupero con timelock o uno script che nessun altro ha mai scritto. Leggere un indirizzo che inizia con 3 come «un indirizzo multisig» è una supposizione che spesso si rivela sbagliata, perché il SegWit annidato ha reso il 3 il formato predefinito a chiave singola per diversi anni dopo il 2017 e ha lasciato milioni di wallet comuni dietro quel prefisso.

Da non confondere con

Domande frequenti

Cosa c'è davvero dentro un indirizzo che inizia con 3?

Non c'è modo di saperlo dall'indirizzo. L'output contiene un hash di 20 byte di un redeem script, e quello script potrebbe essere un quorum multisig, una chiave SegWit annidata o un contratto con timelock. Diventa visibile solo quando i bitcoin vengono spesi.

Serve il redeem script per recuperare bitcoin P2SH?

Sì, a meno che lo script non provenga da una derivazione standard del wallet che il tuo software può ricostruire. Le sole chiavi private non spendono un output P2SH arbitrario, quindi salva il descriptor o i byte dello script insieme alla tua frase di recupero.

Termini correlati

Altro in Indirizzi e chiavi

Leggi questa pagina in inglese