Um OP_CODE ou código de operação é um código ou instrução primitiva que nos permite programar operações dentro de uma blockchain como o Bitcoin. De fato, graças ao conjunto desses códigos, podemos criar estruturas de programação avançadas ou contratos inteligentes que são lidos e executados pelos nós de uma rede blockchain.
LAs instruções e instruções usadas na computação para programar equipamentos de computador e máquinas virtuais são conhecidas como OP_CODE (código de operação) o códigos de operação.
Esses códigos indicam as operações ou funções que devem ser executadas e executadas pelo hardware ou software. No caso de hardware, a forma do OP_CODE será definida de acordo com o tipo de arquitetura do conjunto de operações (ISA) do computador. Ou seja, de acordo com as instruções que o dispositivo possui para a interpretação e execução dos códigos de operação. No caso de software, OP_CODE são criados com um tipo de ISA, ou arquitetura de operações, especialmente projetada para ser interpretada pelo máquina virtual ou o interpretador de bytes.
Os códigos de operação permitem que um programa de computador emita um pedido ao computador e que ele o interprete e execute.
Como um OP_CODE funciona?
Para que máquinas, equipamentos e computadores recebam e executem uma ordem específica, é necessário emitir instruções em um idioma que elas possam entender. Portanto, essas instruções são escritas em uma linguagem de programação que contém códigos de operação ou é finalmente traduzido em uma série de códigos de operação.
Esses códigos são escritos em um idioma que geralmente conhecemos, como o inglês, e são traduzidos por um programa compilador ou tradutor para que as máquinas o entendam em sua linguagem binária. Ou seja, as instruções mnemônicas escritas em nossa linguagem para a interpretação de nós humanos, têm seu equivalente na linguagem binária, para que as máquinas possam interpretá-las facilmente. E, assim, poder agir de acordo com as instruções recebidas e executá-las corretamente.
Exemplo de um OP_CODE
Um bom exemplo de OP_CODE pode ser visto na seguinte imagem:
Nele podemos ver alguns OP_CODES pertencentes às instruções capazes de executar um processador ou CPU computador (especificamente o x86 da Intel). Como você pode ver, é um tanto enigmático ler e dificilmente pode ser programado usando-o (embora alguns desenvolvimentos sejam feitos nesse tipo de linguagem devido à sua velocidade).
A situação no mundo criptográfico não é muito diferente e, em Bitcoin Por exemplo, podemos ver algo assim:
É certamente tão enigmático, mas essa declaração simples é equivalente a uma transação no Bitcoin. Se você quiser saber mais sobre isso, leia nosso artigo dedicado a Bitcoin Script onde explicamos em profundidade o que exatamente essas instruções fazem.
Tipos de opcodes no script Bitcoin
Os OP_CODES para o Bitcoin Script, eles podem ser classificados de acordo com a função e as indicações que serão executadas no sistema. Por exemplo, esses códigos podem ser usados para remover, adicionar, mover ou girar elementos na pilha, analisar e executar operações aritméticas, validar ou invalidar transações, entre muitas outras funções.
A seguir, apresentaremos uma lista dos códigos de operação classificados de acordo com seu tipo e funções. No entanto, é importante notar que esta lista não é conclusiva nem radical, pois há muitos códigos de código no script Bitcoin e apenas alguns deles são mencionados aqui.
Códigos incorporados
OP_0 = 0x00 y OP_FALSO = OP_0: ambos os códigos eles empurram ou adicione um elemento ou uma matriz de bytes vazia à pilha. Nenhum dos dois deve ser confundido com NO_OP
OP_PUSHDATA1 = 0x4c, OP_PUSHDATA2 = 0x4d y OP_PUSHDATA4=0x4e: No primeiro código, o próximo byte contém o número de bytes a serem inseridos na pilha. No segundo código, o próximos 2 bytes eles contêm o número de bytes que serão inseridos na pilha, enquanto no terceiro eles são próximos 4 bytes aqueles que contêm o número de bytes a serem adicionados à pilha. Nesses códigos, o processo de adição dos bytes será feito no formato endian.
OP_NEGATIVO = 0x4f y OP_TRUE = OP_1: Neste caso, o número negativo -1 é empurrado para a pilha, enquanto que em OP_TRUE número positivo 1 é enviado para a pilha.
Códigos de controle
OP_NOP=0x61: Este código não executa nenhuma operação, mas é usado nos casos em que algum espaço precisa ser preenchido dentro do programa.
OP_IF = 0x63 y OP_NOTIF=0x64: Ambos os códigos são usados para executar as declarações. No primeiro código, eles são executados se o valor da pilha superior não é falso; no segundo código, eles são executados se os valores da pilha superior si é falso. Assim, em ambos os casos, o valor da pilha superior é removido.
OP_ELSE = 0x67- Usado para afirmar ou negar declarações. Caso os dois códigos anteriores tenham sido executados (OP_IF e OP_NOTIF) as declarações são negadas. No caso de não executadas, as afirmações são afirmadas.
OP_ENDIF=0x68: usado para finalizar um bloco, pois sem isso, as transações não seriam válidas. Um código OP_ENDIF sem um código OP_IF acima também não será válido.
OP_RETURN = 0x6a- Usado para marcar uma saída de transação como inválida.
Códigos de aplicativo e operações de pilha
OP_TOALTSACK = 0x6b y OP_FROMALTSTACK = 0x6c- O primeiro código é usado para mover a entrada para o topo da pilha alternativa e removê-la da pilha principal. O segundo código executa o processo oposto; move a entrada para o topo da pilha principal e a remove da pilha alternativa.
OP_DROP = 0x75 y OP_DUP=0x76: são usados para remover um item da pilha superior e para duplicar um item na pilha superior, respectivamente.
Códigos de operação de emenda
OP_SIZE = 0x82- Esse código empurra o comprimento da string do item superior na pilha, sem quebrá-lo.
Os códigos OP_SUBSTR=0x7f, OP_ESQUERDA = 0X80 y OP_RIGHT = 0x81 foram desativados. Eles estavam acostumados a:
- Devolver uma seção em uma cadeia.
- Manter apenas os caracteres restantes de um ponto específico em uma sequência e
- Manter apenas os caracteres restantes no lado direito de um ponto específico em uma sequência, respectivamente.
Códigos para operações numéricas
OP_1ADD = 0x8b y OP_1SUB = 0x8c: são usados para adicionar (somar) ou excluir (subtrair) 1 na entrada, respectivamente.
OP_2MUL = 0x8d y OP_1DIV = 0x8e: foram usados para multiplicar o Dividir por 2 a entrada respectivamente, mas ambos foram desativados.
OP_ABS = 0x90 y OP_NEGATE = 0x8f: são usados para inverter o sinal da entrada, ou seja, para tornar a entrada positiva ou negativa, respectivamente.
OP_MIN = 0xa3 y OP_MAX = 0xa4: esses códigos são usados para retornar o menor valor de aebou, no seu caso, para retornar o maior valor de aeb respectivamente.
Códigos de codificação e criptografia
OP_RIPEMD160 = 0xa6: É usado para codificar a entrada com o algoritmo RIPEMD-160, a fim de obter hashes mais curtos, mas igualmente seguros, para a criação de endereços.
OP_SHA1=0xa7: é usado para codificar a entrada com o algoritmo SHA-1, que é usado para calcular e obter um único valor de verificação para todas as entradas não superiores a 264 - 1 bit.
OP_SHA256=0xa8: usado para codificar a entrada com o algoritmo SHA-256.
OP_HASH160=0xa9: usado para codificar a entrada 2 vezes. A primeira codificação através do algoritmo SHA-256 e a segunda com o algoritmo RIPEMD-160
OP_HASH256 = 0xay- Usado para codificar a entrada 2 vezes através do algoritmo SHA-256.
OP_CHECKMULTISIG = 0xae: usado para fazer uma comparação entre a primeira assinatura com cada chave pública até encontrar uma correspondência ECDSA. Em seguida, repita o processo com a segunda assinatura e as chaves públicas subsequentes e assim por diante até que todas as assinaturas tenham sido verificadas.
Códigos de bloqueio de tempo
OP_CHECKLOCKTIMEVERIFY = 0xb1: este código marca como não a entrada é válida se o elemento superior da pilha for maior que o campo definido como nLockTime, que representa a condição que deve ser atendida. Na aplicação deste código, existem várias implicações que também tornam a entrada inválida. Por exemplo, se a pilha estiver vazia ou seu elemento superior for negativo, entre outros.
OP_CHECKSEQUENCESSEVERIFY = 0xb2: também usado para marcar a entrada como não Válido se o tempo de bloqueio for diferente ou maior que o valor do elemento superior da pilha.
Cada um desses OP_CODE executa uma função bem definida, e o arranjo conjunto desses OP_CODE é o que permite que o Bitcoin funcione como ele faz. No entanto, OP_CODEs não são exclusivos do Bitcoin. O Ethereum, por exemplo, também possui seu próprio registro OP_CODE, que permite inserir instruções no seu Ethereum Virtual Machine, e a partir daí realizar todas as operações deste blockchain. Isso varia das transações mais simples às operações complexas de contratos inteligentes nessa plataforma. O mesmo vale para o resto criptomoedas que eles também têm seus OP_CODES ou ferramentas semelhantes para sua operação.
Daí a importância deles, não apenas conhecê-los, mas desenvolvê-los para expandir as funcionalidades das criptomoedas e os ecossistemas que eles contêm.
OP_CODES em outra blockchain
Quando ouvimos que as criptomoedas têm a capacidade de serem programadas, a verdade é que estamos dizendo que as cadeias de blocos e seus tokens podem ser manipulados graças ao OP_CODES. Certamente, o primeiro parece muito mais fácil, mas a realidade técnica é a seguinte: o OP_CODES está em todas as cadeias de blocos e são eles que nos permitem programar as transações e outras funcionalidades do mesmo.
Mas quão grandes e avançados esses OP_CODES podem estar em outras blockchains em comparação com o Bitcoin? A resposta para isso é simples: não há limites, apenas a imaginação dos desenvolvedores.
Para nos dar um bom e claro exemplo, vejamos o Ethereum. No Ethreum, vemos uma blockchain composta por três elementos, o token Ether, o conceito de gás ou custo de operação e a máquina virtual Ethereum. Visto individualmente, eles parecem não ter nenhum relacionamento, mas a verdade é que estão intimamente integrados, e essa integração depende do relacionamento criado pelo OP_CODES no Ethereum.
Portanto, toda vez que realizamos uma transação no Ethereum, o que fazemos é programar a operação com OP_CODES. Essa operação nos permitirá gerenciar o Ether e o pagamento da operação que faremos com o GAS, mas toda essa programação é lida e executada pela Ethereum Virtual Machine. Portanto, somos claros como esses três elementos se comunicam e como OP_CODES desempenha um papel importante na operação da rede.
O mesmo pode ser observado em redes como Litecoin (que usa um equivalente ao Bitcoin Script), Dash , EOS, Bitcoin Cash (Ele também usa um script Bitcoin equivalente, embora modificado) e o mesmo pode ser visto com o restante das criptomoedas. Em resumo, os OP_CODES não estão apenas no Bitcoin, eles são uma parte essencial das criptomoedas e da blockchain em que você está ganhando vida.