Fides BitcoinIscriviti gratis

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

PUSH 3[3]Spinge 3 sulla pila
PUSH 4[3, 4]Spinge 4 sulla pila
OP_ADD[7]Rimuove 3 e 4, spinge la somma 7
PUSH 7[7, 7]Spinge il valore atteso
OP_EQUAL[1 (TRUE)]Confronta: uguale → script valido

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

CategoriaOpcode principaliFunzione
DatiOP_PUSH, OP_0, OP_1...OP_16Inserire dati nello stack
StackOP_DUP, OP_DROP, OP_SWAP, OP_ROTManipolare elementi stack
FlussoOP_IF, OP_ELSE, OP_ENDIF, OP_VERIFYControllo condizionale
AritmeticaOP_ADD, OP_SUB, OP_EQUAL, OP_GREATERTHANOperazioni numeriche
CrittografiaOP_HASH160, OP_SHA256, OP_CHECKSIG, OP_CHECKMULTISIGHash e verifica firma
TimelockOP_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 →