WEB3DEV Español

Cover image for EVM: Ethereum Virtual Machine - Todo lo que necesitas saber
Juliana Cabeza
Juliana Cabeza

Posted on

EVM: Ethereum Virtual Machine - Todo lo que necesitas saber

Image description
Máquina Virtual de Blockchain conectada con la vida diaria del ser humano.

  • EVM (Ethereum Virtual Machine): una computadora descentralizada global es la parte de Ethereum que maneja el despliegue y la ejecución de contratos inteligentes. No se trata de una simple transferencia de moneda de usuario a usuario, sino de todo lo que implica una actualización de estado computada por la EVM. No se trata solo de transferencias de moneda entre usuarios, sino de cualquier actualización de estado calculada por la EVM.
  • El trabajo de EVM es actualizar el estado de Ethereum mediante el cálculo de transiciones de estado válidas como resultado de la ejecución del código de contrato inteligente, tal y como está definido por el protocolo de Ethereum.
  • La EVM es una máquina de estado casi Turing completa; "casi" porque todos los procesos de ejecución están limitados a un número finito de pasos computacionales determinados por la cantidad de gas disponible.
  • La EVM tiene una arquitectura basada en pila, almacenando todos los valores en memoria con un tamaño de palabra de 256 bits, y cuenta con componentes de programa, memoria y almacenamiento.
  • El conjunto de instrucciones de la EVM ofrece: operaciones aritméticas y lógicas, acceso a la pila, memoria y almacenamiento, operación del flujo de control, así como operadores de registro y llamada.
  • La EVM tiene acceso a la información de la cuenta, como la dirección, saldo, número de bloque y precio actual del gas.
  • Los códigos de operación disponibles son:

Image description

- Operaciones Aritméticas

Image description
Operaciones aritméticas de la máquina virtual Ethereum

- Operaciones de Pila
Image description

- Operaciones de Flujo de Proceso
Image description

- Operaciones del Sistema
Image description

- Operaciones Lógicas
Image description

- Operaciones de Ambiente
Image description

- Operaciones de Bloque
Image description

  • Cada dirección Ethereum representa una cuenta que contiene un saldo de ether (almacenado como el número de wei de propiedad de la cuenta).
  • Un nonce (que representa el número de transacciones enviadas con éxito desde esta cuenta, si es una Cuenta de Propiedad Externa (EOA), o el número de contratos creados por ella, si es una cuenta de contrato).
  • El almacenamiento de la cuenta (que es un almacenamiento de datos permanente utilizado únicamente por los contratos inteligentes) y
  • El código del programa de la cuenta (nuevamente, solo si la cuenta es una cuenta de contrato inteligente). Una cuenta de Propiedad Externa (EOA) nunca tendrá código y el almacenamiento estará vacío.
  • EVM se ejecuta en una copia de espacio aislado del sistema mundial Ethereum, y esta versión de espacio aislado se descarta por completo si la ejecución no se puede completar como OOG: Out of Gas (Sin Gas).

Bytecode

Para crear un nuevo contrato, se requiere una transacción especial en la que el campo "to" (destinatario) esté definido como la dirección especial 0x0 y el campo "data" (datos) esté definido como la dirección del código de inicio del contrato. Los contratos residen en la blockchain en un formato binario específico de Ethereum (bytecode EVM). Sin embargo, los contratos generalmente se escriben en algún lenguaje de alto nivel, como Solidity, y luego se compilan en un bytecode para cargarlos en la blockchain.

Programas Disponibles para Desmontar el Bytecode:

Desensamblador para bytecode de EVM en contratos de sintaxis Solidity legibles, lo que permite el análisis estático y dinámico de contratos compilados, así como la detección de vulnerabilidades.

Cuando envías una transacción a un contrato inteligente compatible con ABI (que se puede asumir que todos los contratos lo son), la transacción primero interactúa con el despachador (dispatcher) del contrato inteligente. El despachador lee el campo de datos de la transacción y envía la parte relevante a la función correspondiente.

Completitud de Turing

  • Un sistema o lenguaje de programación es Turing completo si puede ejecutar cualquier programa.
  • Realmente debemos ejecutar el programa y esperar a que la ejecución termine para saber si tomará una eternidad o no para completarse. Esto se conoce como el problema de parada (halting problem).
  • Ethereum actúa como una máquina de un solo thread, sin ningún planificador, por lo que si queda atrapado en un loop infinito (problema de parada), esto significaría que se volvería inutilizable. La solución es el GAS.

GAS

  • El gas es la unidad de Ethereum para medir los recursos computacionales y de almacenamiento necesarios para realizar acciones en la blockchain de Ethereum.
  • Ethereum debe contabilizar cada etapa computacional realizada por transacciones y ejecución de código de contrato inteligente.
  • Cada operación realizada por una transacción o contrato cuesta una cantidad fija de gas.
  • Cuando se requiere que una EVM complete una transacción, inicialmente recibe un suministro de gas igual al valor especificado por el límite de gas en la transacción.
  • Antes de cada operación, la EVM verifica si hay suficiente gas para pagar la ejecución de la operación. Si no hay suficiente gas, la ejecución se interrumpe y la transacción se revierte.
  • Si la ejecución tiene éxito, el gas se paga al minero como una tarifa de transacción en éter. tarifa de minero = costo del gas * precio del gas.

Nota del traductor: A partir de "The Merge" de Ethereum (15/09/22), las transacciones en la red ya no son minadas por mineros (Mecanismo de Consenso de Prueba de Trabajo - PoW), sino validadas por validadores (Mecanismo de Consenso de Prueba de Participación - PoS).

  • El gas restante se devuelve al remitente en éter gas restante = limítede gas - costo del gas | éter devuelto = gas restante * precio del gas.
  • Si la transacción se queda sin gas durante la ejecución, la operación se detiene, lo que genera la excepción de gas, y la transacción y todos los cambios de estado se revierten, pero al remitente se le cobra una tarifa de transacción por el trabajo realizado.
  • Cada operación tiene un costo en Gas basado en su uso computacional. Por ejemplo, la función SHA3 cuesta 10 veces (30 Gas) más que la operación ADD (3 Gas). El uso de memoria en la EVM y el almacenamiento de datos en el almacenamiento del contrato en la cadena también tienen un costo en Gas.
  • Al construir un nuevo bloque, los mineros de la red Ethereum pueden elegir entre las transacciones pendientes, seleccionando aquellas que ofrecen pagar un precio de gas más alto, lo que resulta en transacciones con una confirmación más rápida.
  • Aunque el gas tiene un precio, no puede ser "poseído" ni "gastado". El gas solo existe dentro de la EVM como una medida de cuánto trabajo computacional se está ejecutando. Al remitente se le cobra una tarifa de transacción en ether, que luego se convierte en gas para contabilizar en la EVM y luego se convierte nuevamente en ether como una tarifa de transacción pagada a los mineros.
  • Costos de gas negativos: eliminación de variables y cuentas de almacenamiento utilizadas, reembolsando parte del gas; (i) Eliminación de un contrato (SELFDESTRUCT) (ii) Cambio de la dirección de almacenamiento de un valor distinto de cero a cero (SSTORE[x] = 0); el reembolso máximo para una transacción se define como la mitad de la cantidad total de gas utilizado.

Límite de Gas del Bloque:

  • El límite de gas del bloque es la cantidad máxima de gas que puede consumirse en todas las transacciones de un bloque, y limita la cantidad de transacciones que pueden caber en un bloque.
  • Los mineros en la red deciden colectivamente el límite de gas del bloque utilizando un programa de minería como Ethminer, que se conecta a un cliente Geth o Parity Ethereum.
  • El protocolo Ethereum tiene un mecanismo incorporado en el cual los mineros pueden votar por el límite de gas para que la capacidad pueda ser aumentada o disminuida en bloques subsecuentes.

“Mastering Ethereum by Andreas M. Antonopoulos and Dr. Gavin Wood (O’Reilly). Copyright 2019 The Ethereum Book LLC and Gavin Wood, 978–1–491–97194–9.”

Este artículo fue escrito por el Dr. Gupta y traducido por Juliana Cabeza. El artículo original se puede encontrar aquí.

Discussion (0)