Protocollo · Tecnica
Bitcoin Script
Ogni output Bitcoin contiene uno script che definisce le condizioni per spenderlo. Bitcoin Script è un linguaggio stack-based deliberatamente non Turing-complete — progettato per sicurezza e prevedibilità, non per flessibilità arbitraria. Questa guida spiega come funziona.
Cos'è lo stack-based scripting
Bitcoin Script funziona come una pila (stack). Ogni operazione spinge o rimuove elementi dalla cima della pila:
Esecuzione semplice: OP_ADD
Uno script Bitcoin si esegue combinando il locking script (nell'output) e l'unlocking script (nell'input). Se la pila termina con TRUE, la spesa è valida.
Categorie di opcode
| Categoria | Opcode principali | Funzione |
|---|---|---|
| Dati | OP_PUSH, OP_0, OP_1...OP_16 | Inserire dati nello stack |
| Stack | OP_DUP, OP_DROP, OP_SWAP, OP_ROT | Manipolare elementi stack |
| Flusso | OP_IF, OP_ELSE, OP_ENDIF, OP_VERIFY | Controllo condizionale |
| Aritmetica | OP_ADD, OP_SUB, OP_EQUAL, OP_GREATERTHAN | Operazioni numeriche |
| Crittografia | OP_HASH160, OP_SHA256, OP_CHECKSIG, OP_CHECKMULTISIG | Hash e verifica firma |
| Timelock | OP_CHECKLOCKTIMEVERIFY (CLTV), OP_CHECKSEQUENCEVERIFY (CSV) | Condizioni temporali |
Tipi di script Bitcoin standard
P2PKH (Pay-to-Public-Key-Hash)
Indirizzo: 1... (legacy)
Lock: OP_DUP OP_HASH160 <hash_pubkey> OP_EQUALVERIFY OP_CHECKSIG
Unlock: <firma> <chiave_pubblica>
Script standard dal 2009. L'hash della chiave pubblica protegge la chiave fino alla spesa.
P2SH (Pay-to-Script-Hash)
Indirizzo: 3... (P2SH)
Lock: OP_HASH160 <hash_redeem_script> OP_EQUAL
Unlock: <dati> <redeem_script>
Introdotto nel 2012. Permette script complessi (multisig) — il destinatario fornisce lo script alla spesa.
P2WPKH (Pay-to-Witness-PK-Hash)
Indirizzo: bc1q... (bech32 SegWit v0)
Lock: OP_0 <hash_pubkey_20_byte>
Unlock: (witness: firma + pubkey)
SegWit 2017. Firma spostata fuori dalla struttura principale — elimina transaction malleability.
P2TR (Pay-to-Taproot)
Indirizzo: bc1p... (bech32m SegWit v1)
Lock: OP_1 <chiave_tweaked_32_byte>
Unlock: (keypath: firma Schnorr) oppure (scriptpath: Merkle proof + script)
Taproot 2021. MAST + Schnorr. Script nascosti nel Merkle tree. Massima privacy e flessibilità.
Timelock: OP_CLTV e OP_CSV
OP_CHECKLOCKTIMEVERIFY (CLTV): blocca un output fino a un certo blocco o timestamp Unix. Esempio: 'questo BTC non può essere speso prima del blocco 900.000'. Usato in payment channel aperture Lightning.
OP_CHECKSEQUENCEVERIFY (CSV): blocca un output per un certo numero di blocchi relativi alla transazione che lo ha creato. Esempio: 'spendibile solo dopo 144 blocchi dalla conferma'. Usato nei timelocked output Lightning per penalità.
HTLC (Hash Time-Locked Contract): combina CLTV + hash preimage. 'Spendibile da Bob se rivela il preimage di questo hash entro X blocchi, altrimenti ritorna ad Alice dopo X blocchi.' Meccanismo core di Lightning Network.
PTLC (Point Time-Locked Contract): versione Taproot di HTLC usando adattori di firma Schnorr invece di hash. Elimina la correlabilità tra hop in Lightning — privacy migliorata significativamente.
Perché Bitcoin Script non è Turing-complete
Bitcoin Script non ha loop. È una scelta deliberata di design, non una limitazione:
Prevedibilità: senza loop, ogni script termina in tempo finito e determinato. Il costo computazionale di validare qualsiasi script è calcolabile in anticipo.
Sicurezza: i programmi Turing-complete possono avere comportamenti imprevedibili. Smart contract Ethereum hanno perso centinaia di milioni per bug in codice complesso.
Semplicità del consensus: ogni nodo deve verificare ogni transazione. Script predicibili e semplici riducono la superficie di attacco del consensus.
Sufficiente per i casi d'uso: multisig, timelock, hash preimage — le primitive necessarie per pagamenti, canali Lightning e custodia avanzata sono tutte implementabili senza loop.
Opzione futura: i OP_SUCCESS di Tapscript permettono l'aggiunta di nuovi opcode senza hard fork. La strada verso maggiore espressività è aperta, ma controllata.
Protocollo Bitcoin ogni settimana
Il Report Fides Bitcoin copre fondamentali del protocollo, aggiornamenti tecnici e analisi on-chain — in italiano, ogni lunedì.
Iscriviti gratis →