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:

OP_CODE de processadores Intel

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:

Agendando uma transação no Bitcoin

É 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

o 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_FALSE = 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_NEGATIVE = 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_TOALTSTACK = 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_LEFT = 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 = 0xaa- 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_CHECKSEQUENCEVERIFY = 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 Máquina Virtual Ethereum, 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 criptomonedas 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.

Quanto você sabe, cryptonuta?

Todas as criptomoedas usam OP_CODES para sua programação?

VERDADEIRO!

Se todas as criptomoedas usarem OP_CODES ou códigos de operação para gerenciar internamente transações ou operações em seu sistema. O que realmente muda é a maneira como ele é escrito, as linguagens e o escopo do referido sistema, uma vez que cada criptomoeda e blockchain tem suas próprias peculiaridades. Por exemplo, Bitcoin e Bitcoin Cash têm OP_CODES muito semelhantes, mas Ethereum e EOS são dois mundos diferentes em comparação, uma vez que sua operação é radicalmente diferente.

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.