Glossario / Protocollo e aggiornamenti
OP_CAT
- Che cos'è OP_CAT?
- OP_CAT unisce in uno solo i due elementi in cima alla pila dello script, un'operazione che Satoshi disattivò nel 2010 e che il BIP-347 propone di ripristinare all'interno di tapscript.
Specificato nel BIP-347.
La concatenazione sembra banale e non lo è. Con essa, uno script può ricomporre l'hash della firma di una transazione a partire da parti inserite nella pila, in blocchi non superiori a 520 byte, e poi verificare quell'hash con un normale controllo di firma. È così che un opcode disattivato perché pericoloso è diventato l'elemento più discusso della lista dei covenant.
Come funziona
Stato: disattivato da agosto 2010, quando un gruppo di opcode per le stringhe e per l'aritmetica è stato disattivato in una bonifica difensiva del motore di script. Il BIP-347 propone di riattivarlo solo in tapscript. Non è attivo sulla mainnet.
L'operazione in sé è una riga: estrarre due elementi e inserire i loro byte uniti uno dopo l'altro. La ragione per cui nel 2010 era pericolosa è che nulla limitava quanto potesse crescere un elemento della pila. Concatenare un elemento con se stesso lo raddoppia, così un breve ciclo di inserimenti e unioni poteva gonfiare pochi byte fino a portarli a gigabyte e portarsi via la memoria del nodo. Il motore moderno ha un limite rigido di 520 byte su qualsiasi singolo elemento della pila, quindi il BIP-347 fa semplicemente fallire l'operazione quando il risultato lo supererebbe, e il vecchio attacco scompare.
C'è una particolarità nella numerazione che rende la rinascita insolitamente pulita. OP_CAT è l'opcode 126. Quando il BIP-342 ha definito tapscript ha dichiarato OP_SUCCESS, tra gli altri, gli opcode da 126 a 129: incontrarne uno fa riuscire lo script sul posto. I nodi vecchi accettano quindi già qualsiasi tapscript che contenga il byte 126 senza eseguirlo. Ridefinirlo perché esegua la concatenazione restringe soltanto ciò che quei nodi avrebbero permesso, il che rende la modifica un soft fork e non una divisione della catena.
Ciò che la concatenazione rende possibile è sproporzionato rispetto alla sua dimensione. Uno script che sa costruire stringhe di byte può verificare una prova di Merkle, controllare una firma Lamport o Winternitz costruita a partire da hash anziché da curve ellittiche e obbligare una firma a usare un nonce fisso, così che l'equazione della firma stessa esponga allo script la transazione di spesa. È quest'ultimo trucco a trasformare OP_CAT in uno strumento generale per i covenant senza alcun opcode dedicato ai covenant.
Dove lo vedi
OP_CAT non viene eseguito affatto su bitcoin. I luoghi in cui viene eseguito sono le sidechain e le reti di prova che hanno copiato il motore di script di bitcoin e poi hanno ribaltato la decisione del 2010.
Elements, e quindi Liquid, ha l'opcode attivo, ed è per questo che la maggior parte delle dimostrazioni di covenant pubblicate è scritta per Liquid anziché per bitcoin. Le signet personalizzate che applicano le regole del BIP-347 sono l'altro ambiente, ed esistono perché gli sviluppatori possano costruire la cosa prima di chiedere a qualcuno di cambiare il consenso.
Per chi compra o conserva bitcoin, il contenuto pratico è breve: nulla del tuo wallet, dei tuoi indirizzi o dei tuoi backup cambia se OP_CAT si attiva o se non si attiverà mai. Vale la pena conoscere il nome perché è al centro di un vero disaccordo su quanta programmabilità debba avere bitcoin e perché le proposte di aggiungere firme basate su hash in vista di un futuro con computer quantistici tendono a passare per esso.