Glossario / Protocollo e aggiornamenti
Miniscript
- Che cos'è Miniscript?
- Miniscript è un modo strutturato di scrivere il sottoinsieme utile di Bitcoin Script, così che il software possa analizzare una politica di spesa, calcolarne i costi e firmare per essa automaticamente.
Il Bitcoin Script semplice è facile da scrivere e quasi impossibile ragionarci sopra: nulla ti dice se uno script è spendibile, quanto sarà grande il suo witness o se un ramo è morto. Miniscript restringe la grammatica a un insieme di frammenti componibili che portano con sé quelle risposte. Bitcoin Core lo comprende nei descrittori dalla versione 24.0 e può firmare per esso dalla versione 25.0.
Come funziona
Miniscript è costruito con frammenti che corrispondono ciascuno a un modello noto di opcode, e con combinatori che incollano i frammenti senza romperne le garanzie.
Il vocabolario è ridotto. I frammenti nominano condizioni: pk(key) per una firma, older(4320) per un timelock relativo, after(800000) per uno assoluto, sha256(h) per una preimmagine di hash. I combinatori nominano la struttura: and_v, or_d, thresh e andor coprono quasi tutto ciò che chiunque costruisce. Un wallet di recupero si legge come or_d(pk(daily_key),and_v(v:pk(backup_key),older(52560))), che è una politica che una persona può verificare e che un compilatore può trasformare in script.
Ogni frammento porta un tipo e un insieme di proprietà, e il sistema dei tipi è ciò che fa funzionare tutto. La composizione è consentita solo dove le proprietà coincidono, così una politica che produrrebbe uno script che nessuno può soddisfare, o uno che un terzo potrebbe alterare in transito, non si compila affatto invece di fallire on-chain con dentro i tuoi soldi.
Poiché la struttura è nota, tre domande ottengono risposte esatte prima che tu metta fondi in qualcosa. Quanto è grande il witness nel caso peggiore, in unità di peso. Quali combinazioni di chiavi, preimmagini e tempo trascorso possono davvero spendere questo script. Lo script rientra nei limiti, cioè 10.000 byte per consenso e un tetto di standardità più stretto di 3.600 byte su uno script witness P2WSH, che decide se i nodi rilanceranno affatto la tua spesa.
L'ultimo pezzo è la soddisfazione. Dato uno script e il materiale che un firmatario detiene, un'implementazione di Miniscript può costruire da sola il witness valido più economico. È per questo che un wallet può gestire politiche arbitrarie senza includere codice di firma su misura per ciascuna.
Dove lo vedi
Miniscript è invisibile finché non vuoi un wallet che faccia qualcosa di diverso da una chiave, una firma.
Bitcoin Core lo ha raggiunto per tappe: la versione 24.0 interpretava Miniscript all'interno dei descrittori P2WSH per l'osservazione, e la versione 25.0 ha aggiunto la capacità di firmare per essi, ed è la versione che ha reso utilizzabili i wallet basati su politiche dal client di riferimento. L'app Bitcoin di Ledger registra le politiche tramite il formato wallet policy definito nel BIP-388, così un dispositivo hardware può mostrare e approvare uno script che non ha mai visto prima.
Il prodotto per consumatori più chiaro è Liana, un wallet la cui intera premessa è una politica Miniscript: spendere oggi con la tua chiave normale, oppure dopo un numero determinato di blocchi con una chiave di recupero detenuta da qualcun altro. La pianificazione successoria e i conti aziendali con un percorso di approvazione progressivo hanno la stessa forma.
Se hai un wallet a firma singola, nulla di tutto questo ti riguarda. Inizia a contare quando vuoi un percorso di backup che non dipenda da un'azienda che resta in attività, e conta soprattutto nel punto in cui, altrimenti, uno script fatto in casa sarebbe l'unica opzione.
Miniscript vs descrittore di output
Un descrittore dice quali chiavi e quale tipo di script; Miniscript dice cosa fa lo script al suo interno. Sono livelli, non alternative, e si annidano: wsh(or_d(pk(A),and_v(v:pk(B),older(52560)))) è un descrittore la cui espressione interna è Miniscript.
Prima di Miniscript, i descrittori potevano solo nominare un menu fisso di modelli come wpkh, sortedmulti e tr. Tutto ciò che stava fuori da quel menu significava esadecimale scritto a mano e un wallet che poteva osservare l'indirizzo ma non spendere mai da esso. Miniscript apre lo slot interno a politiche arbitrarie mantenendo il checksum del descrittore, le origini delle chiavi e i percorsi di derivazione esattamente come erano, ed è per questo che un backup Miniscript resta una singola riga di testo che puoi stampare.