🇧🇷
Ethereum Developer Pack - PT
  • Ethereum Developer Pack - PT
  • Módulo 1
    • Introdução a Smart Contracts
      • Fundamentos de Blockchain
        • Histórico
        • Bitcoin
        • O que é Blockchain
        • Conceitos-chave em Blockchain
        • Como funciona a Blockchain
        • Tipos de Blockchain
        • Modelos de Consenso
      • A nova Internet
        • Web 3
        • Elementos Fundamentais
        • Impacto do Ethereum em Diversos Setores
      • Wallets
        • Componentes de uma wallet
        • Tipos de Wallet
        • Códigos Mnemônicos
      • Ethereum 101
        • Smart Contracts
        • Contas
          • Tipos de contas
          • Conteúdo das contas
        • Transações
          • Componentes
          • Ciclo de vida
        • Gás
        • Solidity
        • EVM
          • A máquina de estados
          • Opcodes
          • Como funciona a EVM
          • Clientes de execução
          • DApps
      • Blockchain Explorer
        • Funções de um blockchain explorer
        • Beneficios de utilizar um blockchain explorer
      • Remix
        • Características do Remix
        • Workspaces ou espaços de trabalho
        • Carregar e compilar um contrato
        • Implantar na máquina virtual do Remix (Remix VM)
        • Interagindo com funções
        • Deployar em uma rede pública
      • Crie seu primeiro Smart Contract
  • Módulo 2
    • Fundamentos de Solidity
      • Hello World
      • Tipos de Dados
      • Funções
      • Variáveis
        • Exercício 1
      • Operadores
        • Ejercicio 2
      • Constructor
        • Exercício 3
      • Convenções de nomenclatura
      • Tipos de armazenamento para variáveis
      • Estruturas de Controle
        • Exercício 4
      • Modificadores
      • Eventos
        • Exercício 5
      • Tipos de Referencia
        • Arrays
          • Exercício 6
        • Mappings
          • Exercício 7
        • Structs
          • Exercício 8
      • Address Payable
      • Como os contratos e funções recebem Ether.
      • Transferências de Ether
      • Conceitos Avançados
        • Codificação de ABI
        • Hashing
        • This
        • Herança
        • Abstract
        • Interface
        • Chamada entre contratos
        • EVM
        • ABI
        • Bytecode
        • Opcodes
  • Módulo 3
    • ERCs, Bibliotecas e Padrões de Desenvolvimento
      • Boas Práticas de Desenvolvimento
      • Padrões de Desenvolvimento
      • EIP & ERC
      • ERC-20
      • ERC-721
      • Open Zeppelin
      • Crie um Token ERC-20
      • Almacenamiento Descentralizado: IPFS
      • Crea un Token ERC-721
      • DeFi
  • Módulo 4
    • Kit de ferramentas para desenvolvimento na Ethereum
      • Requisitos para o módulo 4
        • Terminal
        • Git e Github
        • Node.js e npm
        • Visual Studio Code para Solidity
      • Toolkit
        • JSON-RPC
        • Ethers.js
          • Exercício
        • Hardhat
          • Implantação de um contrato no Hardhat
          • Implantação de um contrato em uma rede pública
        • Scaffold-ETH
          • Características do Scaffold-ETHCaracterísticas
          • Como instalar o Scaffold-ETH
  • Módulo 5
    • Segurança, Testes e Auditorias
      • Testes
        • Importância de realizar testes
        • Métodos para testar contratos inteligentes
          • Testes automatizados
          • Testes manuais
        • Conceitos importantes em testes
        • Ferramentas para testes
        • Testes com Hardhat
        • Recursos adicionais
      • Segurança
        • Uma mentalidade diferente de design
        • Principais vulnerabilidades em contratos inteligentes
          • Reentrancy attack (ataque de reentrada)
          • Replay attack (ataque de repetición)
          • Price Oracle Manipulation (Manipulación de Oráculos de Precios)
          • Missing Access Control (Pérdida de Control de Acceso)
          • Reward Manipulation (Manipulación de Recompensas)
          • Failure to Initialize (Falla al Inicializar)
          • Front-running
          • Invariant Breaks (Quebra de Invariantes)
          • Mishandling of ETH (Má gestão de ETH)
          • Denial of Service (DoS - Negação de Serviço)
          • Integer overflow and underflow (Overflow e Underflow de inteiros)
          • Phishing y Typosquatting
        • Recursos adicionais
      • Auditoria de smart contracts
        • Processo de Auditoria
        • Ferramentas
        • Como se preparar para uma auditoria
        • O teste Rekt
        • Desafios
        • Recursos adicionais
  • Contribuye
    • Kipu Explorer
Powered by GitBook
On this page
  1. Módulo 2
  2. Fundamentos de Solidity
  3. Conceitos Avançados

Opcodes

No contexto do Ethereum e Solidity, os opcodes (códigos de operação) são instruções de baixo nível que a Ethereum Virtual Machine (EVM) pode executar. Cada opcode representa uma operação específica, como realizar cálculos matemáticos, ler e escrever no armazenamento, manipular a pilha (stack), realizar saltos condicionais e incondicionais, gerenciar chamadas para outros contratos, e muito mais. Os opcodes são os elementos fundamentais do bytecode que é executado na EVM.

Os opcodes do Ethereum são codificados como um byte (2 caracteres hexadecimais). Cada opcode possui um significado específico. Por exemplo, o opcode ADD é utilizado para somar dois valores, o opcode SUB para subtrair dois valores, e o opcode EQ para comparar dois valores.

Se analisarmos o bytecode da seção anterior, encontraremos no início os seguintes opcodes:

  • 60 é o opcode para PUSH1, o que indica que o próximo byte (ou octeto) deve ser colocado na pilha (stack).

  • 80 é o dado empurrado pelo PUSH1.

  • 60 novamente indica outro PUSH1.

  • 40 é o dado para este segundo PUSH1.

  • 52 corresponde ao opcode MSTORE, que armazena a palavra na memória.

A EVM possui um conjunto de 144 opcodes. Os opcodes são divididos nas seguintes categorias:

  • Operações aritméticas: Utilizadas para realizar operações básicas, como soma, subtração, multiplicação e divisão.

  • Operações lógicas: Utilizadas para operações lógicas, como AND, OR e NOT.

  • Operações de comparação: Utilizadas para comparar dois valores.

  • Operações de atribuição: Utilizadas para atribuir um valor a uma variável.

  • Operações de controle de fluxo: Utilizadas para controlar o fluxo de execução de um contrato inteligente.

  • Operações de memória: Utilizadas para manipular a memória da EVM.

  • Operações de chamada: Utilizadas para chamar funções de contratos inteligentes.

  • Operações de criação de contratos: Utilizadas para criar novos contratos inteligentes.

Características dos Opcodes

  • Baixo nível: Os opcodes operam em um nível mais baixo do que o código Solidity. Enquanto os desenvolvedores escrevem contratos inteligentes em Solidity (ou outras linguagens de alto nível), esses contratos são compilados em bytecode que consiste em uma sequência de opcodes.

  • Determinismo: Cada opcode executa uma função específica e determinista, o que é crucial para garantir que todas as instâncias da EVM em diferentes nós da rede Ethereum executem o mesmo conjunto de instruções de forma idêntica, chegando ao mesmo estado final.

  • Consumo de Gas: A execução de opcodes na EVM consome uma quantidade específica de gas.

Exemplos de Opcodes

Aqui estão alguns exemplos de opcodes no Ethereum e suas funções:

  • ADD, SUB, MUL, DIV: Realizam operações aritméticas básicas como soma, subtração, multiplicação e divisão.

  • PUSH1, PUSH2, ..., PUSH32: Colocam uma constante de 1 a 32 bytes na pilha (stack).

  • CALL: Realiza uma chamada para outro contrato.

  • STORE, LOAD: Escrevem e leem dados do armazenamento persistente do contrato.

  • JUMP, JUMPI: Realizam saltos incondicionais e condicionais, respectivamente, permitindo a execução de loops e condicionais.

  • STOP, RETURN, REVERT: Controlam a finalização da execução, retornando dados ou revertendo a transação.

Embora os desenvolvedores de Solidity geralmente não trabalhem diretamente com opcodes (pois escrevem o código em um nível mais alto de abstração), entender como o código Solidity é compilado em opcodes pode ser útil para otimizar contratos inteligentes, especialmente em termos de consumo de gas. Além disso, a segurança dos contratos inteligentes pode depender da compreensão das implicações de baixo nível das operações da EVM.

Por fim, vejamos a relação entre ABI, bytecode e opcodes.

Através da compilação, obtém-se o ABI e o bytecode.

Quando se deseja executar alguma função do smart contract que está na blockchain sob a forma de bytecode, essa função é chamada utilizando o ABI.

Com as informações do ABI, a função será identificada dentro do bytecode, que será então decomposto em seus opcodes, os quais serão processados pela EVM.

PreviousBytecodeNextERCs, Bibliotecas e Padrões de Desenvolvimento

Last updated 5 months ago

Uma ótima referência para entender o funcionamento dos opcodes é a página , onde você pode visualizar a relação entre o código de um contrato inteligente e seus opcodes.

EVM Opcodes