Un OP_CODE o Operation Code, è un codice o un'istruzione primitiva che ci consente di programmare operazioni all'interno di una blockchain come Bitcoin. Infatti, grazie all'insieme di questi codici, possiamo creare strutture di programmazione avanzate o smart contract che vengono poi letti ed eseguiti dai nodi di una rete blockchain.

LLe istruzioni e le indicazioni utilizzate nell'informatica per la programmazione di apparecchiature informatiche e macchine virtuali sono note come OP_CODE (codice operazione) o codici operativi.

Questi codici indicano le operazioni o le funzioni che devono essere eseguite ed eseguite dall'hardware o dal software. Nel caso di hardware, la forma dell'OP_CODE sarà definita in base al tipo di architettura del set di operazioni (ISA) del computer. Cioè, secondo le istruzioni che il dispositivo ha per l'interpretazione e l'esecuzione dei codici di operazione. Nel caso del software, gli OP_CODE vengono creati con un tipo di ISA, o architettura delle operazioni, appositamente progettata per essere interpretata dal macchina virtuale o l'interprete di byte.

I codici di operazione consentono a un programma per computer di inviare un comando al computer e al computer di interpretarlo ed eseguirlo.

Come funziona un OP_CODE?

Affinché macchine, apparecchiature e computer ricevano ed eseguano un ordine specifico, è necessario emettere istruzioni in una lingua comprensibile. Pertanto, queste istruzioni sono scritte in un linguaggio di programmazione che contiene codici operativi o alla fine viene tradotto in una serie di codici operativi.

Questi codici sono scritti in una lingua che generalmente conosciamo, come l'inglese, e quindi vengono tradotti da a programma di compilazione o traduttore affinché le macchine lo comprendano nel loro linguaggio binario. Cioè, le istruzioni mnemoniche scritte nella nostra lingua per l'interpretazione di noi umani, hanno il loro equivalente in linguaggio binario in modo che le macchine possano interpretarle facilmente. E così poter agire sull'istruzione ricevuta ed eseguirla correttamente.

Esempio di un OP_CODE

Un buon esempio di OP_CODE può essere visto nella seguente immagine:

OP_CODE dei processori Intel

In esso possiamo vedere alcuni OP_CODES appartenenti alle istruzioni in grado di eseguire un processore o CPU computer (in particolare x86 di Intel). Come puoi vedere, è un po 'criptico da leggere e difficilmente può essere programmato usandolo (sebbene alcuni sviluppi siano fatti in questo tipo di linguaggio a causa della sua velocità).

La situazione nel mondo delle criptovalute non è molto diversa e in Bitcoin ad esempio, possiamo vedere qualcosa del genere:

Pianificazione di una transazione in Bitcoin

È certamente altrettanto criptico, ma questa semplice affermazione equivale a una transazione in Bitcoin. Se vuoi saperne di più, puoi leggere il nostro articolo dedicato a Bitcoin Script dove spieghiamo in profondità cosa fanno esattamente queste istruzioni.

Tipi di codici operativi nello script Bitcoin

Gli OP_CODES per il Bitcoin Script possono essere classificati in base alla funzione e alle indicazioni che eseguiranno nel sistema. Ad esempio, questi codici possono essere utilizzati per eliminare, aggiungere, spostare o ruotare elementi sullo stack, analizzare ed eseguire operazioni aritmetiche, convalidare o invalidare transazioni, tra molte altre funzioni.

Di seguito presenteremo un elenco dei codici di funzionamento classificati in base al loro tipo e funzioni. Tuttavia, è importante notare che questo elenco non è né conclusivo né radicale, poiché ci sono molti codici operativi nello script Bitcoin e solo alcuni di essi sono menzionati qui.

Codici incorporati

OP_0 = 0x00 y OP_FALSE = OP_0: entrambi i codici spingere oppure aggiungono un elemento o un array vuoto di byte allo stack. Nessuno dei due dovrebbe essere confuso con NO_OP

OP_PUSHDATA1 = 0x4c, OP_PUSHDATA2 = 0x4d y OP_PUSHDATA4 = 0x4e: Nel primo codice, il file byte successivo contiene il numero di byte da inserire nello stack. Nel secondo codice il file prossimi 2 byte contengono il numero di byte che verranno inseriti nello stack, mentre nel terzo ci sono i prossimi 4 byte quelli che contengono il numero di byte da aggiungere allo stack. In questi codici il processo di aggiunta dei byte verrà eseguito nel formato endian.

OP_NEGATIVE = 0x4f y OP_TRUE = OP_1: In questo caso, il numero negativo -1 viene messo in pila, mentre si è in OP_TRUE il numero positivo 1 viene inserito nella pila.

Codici di controllo

OP_NOP = 0x61: questo codice non esegue nessuna operazione, ma viene utilizzato nei casi in cui è necessario riempire dello spazio nel programma.

OP_IF = 0x63 y OP_NOTIF = 0x64: entrambi i codici vengono utilizzati per eseguire le dichiarazioni. Nel primo codice, vengono eseguiti se il valore dello stack superiore no è falso; nel secondo codice, vengono eseguiti se i valori dallo stack superiore si è falso. Quindi, in entrambi i casi, il valore dello stack superiore viene rimosso.

OP_ELSE = 0x67: usato per affermare o negare le affermazioni. Nel caso in cui siano stati eseguiti i due codici precedenti (OP_IF e OP_NOTIF) le dichiarazioni sono negate. In caso di no sono state eseguite, si affermano le dichiarazioni.

OP_ENDIF = 0x68: utilizzato per terminare un blocco, poiché senza di esso le transazioni non sarebbero valide. Un codice OP_ENDIF senza codice OP_IF neanche sopra non sarà valido.

OP_RETURN = 0x6a- Utilizzato per contrassegnare l'output di una transazione come non valido.

Codici dell'applicazione e operazioni sullo stack

OP_TOALTSTACK = 0x6b y OP_FROMALTSTACK = 0x6c: il primo codice viene utilizzato per spostare la voce in cima allo stack alternativo e rimuoverla dallo stack principale. Il secondo codice esegue il processo opposto; sposta la voce in cima allo stack principale e la rimuove dallo stack alternativo.

OP_DROP = 0x75 y OP_DUP = 0x76: sono abituati a rimuovere un elemento della pila superiore e a Doppio un elemento dello stack superiore, rispettivamente.

Codici delle funzioni di giunzione

OP_SIZE = 0x82: Questo codice spinge la lunghezza della stringa dall'elemento superiore dello stack, senza romperlo.

I codici OP_SUBSTR = 0x7f, OP_LEFT = 0X80 y OP_RIGHT = 0x81 sono stati disabilitati. Erano abituati a:

  • ritorno una sezione in una catena.
  • mantener solo i caratteri rimanenti da un punto specifico in una stringa e
  • mantener solo i caratteri rimanenti a destra di un punto specifico in una stringa, rispettivamente.

Codici per operazioni numeriche

OP_1ADD = 0x8b y OP_1SUB = 0x8c: sono usati per aggiungere (Sumar) o elimina (togliere) 1 rispettivamente all'ingresso.

OP_2MUL = 0x8d y OP_1DIV = 0x8e: erano abituati multiplicar o dividere rispettivamente di 2 ingressi, ma entrambi erano disabilitati.

OP_ABS = 0x90 y OP_NEGATE = 0x8f: servono per invertire il segno dell'ingresso, cioè per rendere rispettivamente positivo o negativo l'ingresso.

OP_MIN = 0xa3 y OP_MAX = 0xa4: questi codici vengono utilizzati per restituire il file valore inferiore di a e bo, se del caso, restituire il file valore maggiore di a e b rispettivamente.

Codici per la codifica e la crittografia

OP_RIPEMD160 = 0xa6: serve per codificare l'ingresso con l'algoritmo RIPEMD-160, in modo da ottenere hash più brevi ma ugualmente sicuri per la creazione degli indirizzi.

OP_SHA1 = 0xa7: serve per codificare l'ingresso con l'algoritmo SHA-1, che serve per calcolare e ottenere un unico valore di controllo per tutti gli ingressi non maggiore di 264 - 1 bit.

OP_SHA256 = 0xa8: utilizzato per codificare l'input con l'algoritmo SHA-256.

OP_HASH160 = 0xa9: utilizzato per codificare l'ingresso 2 volte. La prima codifica tramite l'algoritmo SHA-256 e la seconda con l'algoritmo RIPEMD-160

OP_HASH256 = 0xaa: utilizzato per codificare l'input 2 volte tramite l'algoritmo SHA-256.

OP_CHECKMULTISIG = 0xae: viene utilizzato per confrontare la prima firma con ciascuna chiave pubblica fino a quando non viene trovata una corrispondenza ECDSA. Quindi ripete il processo con la seconda firma e le successive chiavi pubbliche e così via fino a quando tutte le firme non sono state verificate.

Codici di blocco temporale

OP_CHECKLOCKTIMEVERIFY = 0xb1: questo codice contrassegna come no Input valido se l'elemento in cima allo stack è maggiore del campo impostato come nLockTime, che rappresenta la condizione da soddisfare. Nell'applicazione di questo codice ci sono diverse implicazioni che rendono anche l'input non valido. Ad esempio, se la pila è vuota o il suo elemento superiore è negativo, tra gli altri.

OP_CHECKSEQUENCEVERIFY = 0xb2: utilizzato anche per contrassegnare la voce come no valido se il tempo di blocco è diverso o maggiore del valore dell'elemento superiore dello stack.

Ciascuno di questi OP_CODE svolge una funzione ben definita e la disposizione congiunta di questi OP_CODE è ciò che consente a Bitcoin di funzionare come fa. Tuttavia, gli OP_CODE non sono esclusivi di Bitcoin. Ethereum, ad esempio, ha anche il proprio record OP_CODE che ti consente di inserire istruzioni al tuo Ethereum Virtual Machine, e da lì eseguire tutte le operazioni di questo blockchain. Ciò va dalle transazioni più semplici alle operazioni complesse di contratti intelligenti di quella piattaforma. Lo stesso vale per il resto criptovalute Hanno anche i loro OP_CODES o strumenti simili per il loro funzionamento.

Da qui l'importanza di loro, non solo conoscendole ma sviluppandole per espandere le funzionalità delle criptovalute e degli ecosistemi che contengono.

Quanto sai, Cryptonuta?

Tutte le criptovalute usano OP_CODES per la loro programmazione?

Certo!

Se tutte le criptovalute fanno uso di OP_CODES o codici di operazione per gestire internamente transazioni o operazioni all'interno del loro sistema. Ciò che cambia davvero è il modo in cui è scritto, le lingue e lo scopo di detto sistema, poiché ogni criptovaluta e blockchain ha le sue peculiarità. Così, ad esempio, Bitcoin e Bitcoin Cash hanno OP_CODES molto simili, ma Ethereum ed EOS sono due mondi diversi a confronto, poiché il loro funzionamento è radicalmente diverso.

OP_CODES su altri blockchain

Quando sentiamo che le criptovalute hanno la capacità di essere programmate, la verità è che stiamo dicendo che le blockchain ei loro token possono essere manipolati grazie a OP_CODES. Certamente, la prima cosa si sente molto più semplice, ma la realtà tecnica è che: OP_CODES è in tutte le blockchain e sono ciò che ci permette di programmare transazioni e altre funzionalità delle stesse.

Ma quanto possono essere grandi e avanzati questi OP_CODES su altri blockchain rispetto a Bitcoin? La risposta a questa domanda è semplice: non ci sono limiti, solo l'immaginazione degli sviluppatori.

Per darci un buon e chiaro esempio, diamo un'occhiata a Ethereum. In Ethreum vediamo una blockchain composta da tre elementi, il token Ether, il concetto di Gas o costo di esercizio e la macchina virtuale di Ethereum. Visti individualmente, sembrano non essere correlati, ma la verità è che sono strettamente integrati e tale integrazione dipende dalla relazione creata da OP_CODES all'interno di Ethereum.

Quindi ogni volta che effettuiamo una transazione in Ethereum, ciò che facciamo è programmare l'operazione con OP_CODES. Questa operazione ci permetterà di gestire Ether e il pagamento dell'operazione verrà effettuato con GAS, ma tutta questa programmazione viene letta ed eseguita dalla Ethereum Virtual Machine. Quindi siamo chiari su come questi tre elementi comunicano e su come gli OP_CODES giocano un ruolo importante nel funzionamento della rete.

Lo stesso può essere osservato in reti come Litecoin (che utilizza un equivalente di Bitcoin Script), Dash, EOS, Bitcoin Cash (Utilizza anche un equivalente modificato di Bitcoin Script) e lo stesso può essere visto con il resto delle criptovalute. In breve, gli OP_CODES non sono solo in Bitcoin, sono una parte essenziale delle criptovalute e delle blockchain in cui ti trovi, fanno la vita.