Il Bitcoin Script è il linguaggio che Bitcoin utilizza per fare tutto ciò che può fare, dall'invio di fondi da un portafoglio alla creazione di account multiutente. Tutte queste funzionalità sono contenute in un semplice strumento estensibile e potente che conosceremo di seguito.
Cquando parliamo bitcoinscript, Stiamo parlando di un semplice linguaggio di programmazione utilizzato in Bitcoin per l'elaborazione delle transazioni che viene letto da sinistra a destra. Questo si basa su una serie di strutture lineari, note come pila, che contengono dati esistenti in ordine LIFO (Last In – First Out). Ogni istruzione in questo linguaggio viene eseguita consecutivamente una dopo l'altra.
Questa lingua non è Turing Completo perché la sua funzionalità è limitata e non può essere ripetuta ciclicamente, di conseguenza, non è in grado di risolvere nessun tipo di problema come le macchine Turing. Tuttavia, questa limitazione è intenzionale in quanto impedisce di commettere errori e di entrare in un ciclo infinito, in cui le parti dannose del programma possono essere libere di creare operazioni complicate per consumare il tasso hash e rallenta il sistema Bitcoin attraverso cicli senza fine.
Un linguaggio di programmazione è necessario perché ci permette di scrivere programmi e fa sì che i computer eseguano i nostri desideri. Nel Bitcoin, per comunicare i nostri desideri, sono necessari i codici operativi (OPCODE), che svolgono varie funzioni: la manipolazione della memoria, la matematica, i cicli, le chiamate di funzione, fra le altre.
A tal fine, Bitcoin Script è essenzialmente un insieme di istruzioni programmate che vengono registrate con ogni transazione effettuata. Queste istruzioni descrivono come gli utenti possono accedere e utilizzare i bitcoin disponibili sulla rete.
Cos'è un OPCODE o codice operativo?
In informatica, un OPCODE (Operation Code, in inglese) o codice operativo, è una parte di un'istruzione del linguaggio macchina che specifica l'operazione da eseguire. Le sue caratteristiche e il formato saranno determinati dall'architettura del set di istruzioni (ISA) del componente che elabora l'istruzione. Generalmente questa elaborazione viene eseguita dall'hardware del computer (solitamente una CPU).
Ma può anche essere un software appositamente preparato per emulare il funzionamento di una CPU ed elaborare queste istruzioni. In generale, un'istruzione completa in linguaggio macchina contiene un OPCODE e, opzionalmente, la specifica di uno o più operandi, su cui deve agire il codice operativo. Alcune operazioni hanno operandi impliciti o nessuno.
In Bitcoin e in tante altre criptovalute, gli OPCODES sono la spina dorsale del sistema che permette di programmare le istruzioni delle transazioni. Ricorda che i Bitcoin (e le altre criptovalute da esso derivate) sono denaro programmabile. Ecco, qui la parola chiave è "programmabile", poiché Bitcoin Script è in realtà un linguaggio di programmazione in cui le istruzioni sono fornite in OPCODES che la rete Bitcoin ha definito in anticipo per il suo funzionamento. Infatti, data la struttura in cui è stato creato BItcoin, c'è la possibilità di definire 256 OPCODES diversi che partono dal numero 0 fino al 255. Di questi 256 OPCODES, un totale di 116 sono attualmente attivi.
Questi OPCODES sono quelli che consentono di eseguire le diverse operazioni in Bitcoin e la sua programmazione delle transazioni, come il controllo del flusso di dati, la gestione costante, la gestione dello stack, la gestione logica, aritmetica, timelock, pseudo-parole, operazioni crittografiche e parole riservate. Puoi vedere un elenco completo e aggiornato dei diversi OPCODES direttamente nel codice bitcoin.
scritpSig e scriptPubKey, le parti essenziali di tutto il Bitcoin Script
Nella rete Bitcoin, ogni Bitcoin Script è diviso in due tipi di script, scriptSig e scriptPubKey.Il primo, lo scriptSig è lo script di sblocco, che richiede una chiave pubblica e una firma digitale. Infatti, dopo aver rilevato vari problemi nelle prime versioni del software Bitcoin, sono state incluse le verifiche della firma; pertanto, il sistema accetta transazioni solo se le firme e la loro verifica rispettano una serie di regole stabilite che garantiscono un comportamento adeguato in rete.
Il secondo, lo scriptPubKey, è lo script di blocco, che contiene un hash della chiave pubblica, chiamato anche indirizzo Bitcoin. Alcuni script Bitcoin richiedono la multi-firma, ovvero l'autorizzazione di più utenti per eseguire la transazione. In questo caso, lo script è più complicato perché è un'operazione molto più ampia rispetto all'operazione peer-to-peer standard; infatti, la programmazione effettiva delle transazioni Bitcoin è memorizzata in questa parte dello script.
Scopo della sua creazione
Lo scopo della creazione di un linguaggio di script in Bitcoin è fornire una serie di parametri facili e flessibili per abilitare una transazione. Dunque Satoshi Nakamoto sviluppò Bitcoin, disabilitò diverse funzionalità, inclusa la moltiplicazione. Di conseguenza, lo script è mantenuto semplice in termini di programmazione. Questo linguaggio di programmazione è ciò che determina se un'operazione può essere eseguita o meno, vale a dire, se detta operazione è autorizzata al trasferimento di fondi.
In poche parole, la creazione di Bitcoin Script è ciò che conferisce la natura programmabile di Bitcoin, consentendo, ad esempio, di inviare una transazione che viene convalidata solo se vengono soddisfatte determinate condizioni. Questa proprietà è qualcosa di esclusivo di Bitcoin e delle criptovalute, qualcosa che l'attuale denaro digitale non può ottenere, tanto l'arcaico denaro fisico. L'evoluzione del denaro che ha raggiunto un punto tale in cui anche esso può agire in modo indipendente e decentrato, semplicemente occupandosi della programmazione incorporata in esso.
Inoltre, lo script Bitcoin impedisce inoltre la creazione di errori nel sistema e l'utilizzo non necessario di transazioni molto complesse. In effetti, lo script rende le transazioni relativamente facili da calcolare. Inoltre, i loop infiniti richiedono molta più potenza di calcolo e rallentano le reti, come accennato all'inizio.
Esempio di uno script Bitcoin
Prima di continuare ad approfondire che cos'è un Bitcoin Script e i diversi elementi che lo compongono, vediamo un piccolo esempio di esso. Successivamente vedremo un piccolo Bitcoin Script ampiamente utilizzato oggi per le transazioni Bitcoin. Spiegheremo il suo comportamento e il suo funzionamento, nonché le diverse parti di esso, e poi approfondiremo le sue proprietà.
Esempio di uno script Bitcoin: transazioni in Bitcoin utilizzando lo script P2PKH
Bitcoin Script è presente in tutte le azioni Bitcoin. La verità è che ogni operazione in Bitcoin viene eseguita da uno script specifico che definisce cosa verrà fatto. Non può accadere nulla che non sia scritto nello script.
Ad esempio, se vogliamo effettuare una transazione, uno script per essa sarebbe il seguente:
Tutto il contenuto sopracitato è una semplice transazione Bitcoin del tipo P2PKH (paga all'hash della chiave pubblica). Questo tipo di script è uno script standard ed è infatti il modo più utilizzato per inviare bitcoin. A prima vista appare come qualcosa di molto criptico e difficile da capire. La verità è che dietro una tale complessità, c'è un sistema semplice che spiegheremo ora.
Spiegazione approfondita della transazione
Lo script Bitcoin sopra è delimitato in due parti: scriptPubKey e scriptSig. Nella prima ci sono le azioni da compiere, mentre la seconda contiene la firma e la chiave pubblica per verificare l'autenticità di tali azioni.In questo modo si garantisce che solo chi ha accesso ai fondi possa effettuare un'operazione con essi. Sono presenti invece gli OP_CODES, che in questa operazione sono i seguenti:
- OP_DUP: Duplica l'elemento nello stack superiore
- OP_HASH160: l'ingresso è codificato due volte: prima con SHA-256 e poi con RIPEMD-160.
- OP_EQUALVERIFY: verifica che i dati inseriti siano corretti e validi.
- OP_CHECKSIG: Gli output, gli input e lo script dell'intera transazione sono riassunti in un hash. La firma utilizzata deve essere una firma valida per questo hash e deve essere accanto alla chiave pubblica.
Allora, ecco cosa accade durante l'esecuzione dello script:
- Innanzitutto, la chiave pubblica originale del proprietario (che è nello scriptSig) dei fondi viene duplicata.
- La chiave pubblica duplicata passa quindi attraverso un processo di hashing. In questo processo viene applicato prima un hash SHA-256 e quindi un hash RIPEMD-160 viene applicato al risultato.
- Il risultato degli hash viene confrontato con l'hash della chiave pubblica che si trova in scriptPubKey per garantire che sia EQUALVERIFY (ovvero, è la stessa chiave e viene verificata come valida).
- Se corrisponde, lo script continua a essere eseguito e il CHECKSIG viene eseguito per verificare la firma rispetto alla chiave pubblica.
In questo modo, tutto quanto indicato nella script viene eseguito in modo sicuro e programmato. Se vuoi saperne di più su come funziona Bitcoin Script, puoi visitare il nostro servizio TV Bit2Me, dove puoi vedere alcuni video che spiegano molto di più su questo interessante linguaggio.
Bitcoin Script, il linguaggio dei contratti intelligenti di Bitcoin
Sono tante le persone che pensano e sostengo che che Bitcoin non sia in grado di eseguire smart contract. La verità è che questo non è così, poiché con Bitcoin Script in quanto tale crei smart contract. Certamente le sue capacità sono limitate rispetto a quello che può fare ad esempio Ethereum, ma ciò non esclude che Bitcoin Script abbia la capacità di creare contratti intelligenti. Ma spieghiamolo in modo più semplice e dettagliato.
Prima di tutto, come abbiamo detto, Bitcoin Script non è un linguaggio di Turing completo. Questo perché non richiede una maggiore complessità per eseguire le funzioni previste. Ma uno dei motivi principali è che non avendo loop, puoi sapere con certezza quando e come finirà un determinato programma. Non è possibile eseguire errori, il che ti dà maggiore sicurezza. Allo stesso modo, non c'è possibilità che i programmi si blocchino o blocchino il loro esecutore, che in questo caso è Bitcoin.
Un buon esempio dell'importanza di queste protezioni sarebbe che con Bitcoin Script è impossibile creare script che funzionino per sempre. In effetti, il rischio di uno script che viene eseguito per sempre è che aprirebbe le porte per attaccare la rete con un Denial of Service (DoS).
Il fatto che Bitcoin Script limiti questo tipo di operazioni protegge la rete da tali attacchi. Quindi non c'è alcuna possibilità che un programma Script con un ciclo continuo possa impedire a Bitcoin di funzionare correttamente. In poche parole, Bitcoin Script è molto più sicuro delle sue controparti più complesse come quelle presentate da Ethereum o NEO.
Evoluzione di Bitcoin Script
Il linguaggio Script è presente in Bitcoin sin dalla sua prima versione. Satoshi Nakamoto, lo sviluppatore di Bitcoin, analizzando la struttura dei pagamenti digitali, ha stabilito che fosse necessario un modello che consentisse alla macchina di determinare se le transazioni fossero state effettuate e spesi gli output con successo o meno. In altre parole, verrà verificato se le firme erano corrette e se corrispondevano alla chiave pubblica.
Questo è uno dei problemi più studiati nell'informatica, che determina se la spesa ha successo o meno per evitare la doppia spesa; e la soluzione a questo era utilizzare una macchina che soddisfacesse determinati criteri stabiliti. In Bitcoin, deve sempre fermarsi, quindi l'implementazione di un linguaggio di Turing incompleto basato su un sistema di stack è l'ideale. Pertanto, il meccanismo che gestisce gli script in Bitcoin è molto semplice e sicuro.
All'inizio, lo script conteneva diversi errori gravi e alcuni di essi esistono ancora. Un esempio è il Bug di OP_LSHIFT, che era noto come il bug che potrebbe uccidere Bitcoin. O anche il noto Errore di verifica dello script che Gavin Andressen e Satoshi Nakamoto hanno risolto nel 2010.
L'esistenza di questi tipi di errori porterà molti a pensare che Nakamoto non abbia testato a sufficienza lo Script prima del lancio di Bitcoin. In effetti, molti ipotizzano che lo script sia stata un ripensamento. Forse l'idea originale di Nakamoto era quella di inviare bitcoin direttamente alle chiavi pubbliche, ma aggiungendo il supporto per gli indirizzi Bitcoin, si rese conto che un linguaggio di scripting sarebbe stato davvero utile per la compatibilità che guardava avanti.
Caratteristiche
Il linguaggio Bitcoin Script ha diverse caratteristiche e qualità, tra le quali possiamo citare:
- È semplice e richiede un'elaborazione minima.
- La sua funzionalità è limitata, il che fornisce una maggiore sicurezza al sistema.
- Essendo un linguaggio di Turing incompleto, non ha loop, quindi assicura che il programma smetta di ripetersi e termini. Pertanto, viene evitata la possibilità di errori e codici dannosi che si verificano sulla rete Bitcoin.
- La sua semplicità ne consente l'implementazione in un'ampia gamma di dispositivi.
- Non esiste uno stato di pre o post esecuzione dello script. In esso devono essere contenute tutte le informazioni necessarie per eseguire lo script.
- Si basa su uno stack e può utilizzarne due tipi. Uno principale e uno alternativo; dove quest'ultimo viene utilizzato per memorizzare i dati per i calcoli delle fasi intermedie, proprio come la chiave di memoria sulle calcolatrici.
- Il linguaggio di scripting Bitcoin è piuttosto piccolo. Può contenere solo 256 istruzioni, poiché ciascuna istruzione è espressa in un byte.