Glossario / Riferimento per sviluppatori
OP_DUP
- Che cos'è OP_DUP?
- OP_DUP copia l'elemento in cima alla pila così da poterlo usare due volte, ed è per questo che lo script standard pay-to-public-key-hash può sia calcolare l'hash della tua chiave pubblica sia usarla per la verifica.
Un byte, 0x76, e un solo compito. Bitcoin Script non ha variabili, solo una pila, quindi un elemento consumato da un'istruzione sparisce prima che venga eseguita la successiva, e la duplicazione è l'unico modo per riutilizzarlo. È il primo dei quattro opcode operativi nello script da 25 byte che proteggeva quasi tutti gli indirizzi bitcoin che iniziano con 1.
Come funziona
La duplicazione è necessaria perché la verifica richiede la stessa chiave pubblica per due scopi incompatibili. L'output impegnava solo un hash, quindi la chiave va trasformata in hash e confrontata per dimostrare che è quella giusta. La verifica della firma richiede poi la chiave stessa, che il confronto avrebbe consumato.
Segui passo per passo una spesa legacy. I dati di chi spende finiscono sulla pila come una firma con sopra una chiave pubblica. OP_DUP crea una seconda copia della chiave. OP_HASH160 sostituisce la copia con il suo digest da 20 byte. L'output inserisce i 20 byte impegnati, OP_EQUALVERIFY consuma entrambi e interrompe l'intero script a qualsiasi discrepanza, e OP_CHECKSIG resta davanti alla chiave originale e alla firma, esattamente ciò di cui ha bisogno. Cinque passaggi, nessuna ramificazione, nessun ciclo e un costo fisso ogni volta.
L'opcode rientra in due tetti senza fare nulla di costoso. È una delle 201 istruzioni operative che uno script precedente a Taproot può contenere, e la copia che crea rientra nel limite di 1.000 elementi tra le pile. Nessuno dei due conta per una spesa a chiave singola, ed entrambi contano in uno script che duplica all'interno di una catena di condizioni senza cicli.
Dove lo vedi
Guarda qualsiasi transazione che spende da un indirizzo che inizia con 1: lo script di output inizia con OP_DUP. Gli explorer lo mostrano come primo elemento dell'assembly.
Più interessante è dove viene eseguito senza comparire. Un output SegWit nativo a chiave singola non contiene alcuna logica, solo un byte di versione e un hash da 20 byte, ma il BIP-141 indica al nodo di costruire da quell'hash il modello classico ed eseguirlo comunque. Così l'opcode scatta ancora su ogni spesa P2WPKH della rete e non compare da nessuna parte nel blocco. Ottieni il comportamento senza pagare le quattro unità di peso che il byte costava prima.
Gli output di hash di script e le spese per percorso di chiave di Taproot lo saltano del tutto. Un output P2SH confronta un hash direttamente, e una spesa per chiave di Taproot verifica una firma rispetto alla chiave di output senza alcuno script. È la più piccola illustrazione possibile di ciò che SegWit e Taproot hanno davvero fatto: non tanto nuove capacità quanto gli stessi controlli disposti in modo che la catena debba trasportare meno byte per ottenerli.