---
title: "¿Qué es un zkEVM?"
description: "Tipos de zkEVMs, cómo funcionan y por qué son importantes"
---

# ¿Qué es un zkEVM?

Un Ethereum Virtual Machine de conocimiento cero \(zkEVM\) es una máquina virtual que genera [pruebas de conocimiento cero](https://www.alchemy.com/overviews/snarks-vs-starks) para verificar la corrección de programas. Los zkEVM están diseñados para ejecutar contratos inteligentes de manera que soporten tecnología de conocimiento cero.

Los zkEVM forman parte de los [rollups de conocimiento cero \(ZK\)](https://www.alchemy.com/blog/zero-knowledge-rollups), soluciones de escalado de capa 2 de Ethereum que mejoran el rendimiento al transferir el cómputo y el almacenamiento de estado fuera de la cadena. Un ZK-rollup envía datos de transacciones a Ethereum junto con pruebas de conocimiento cero que verifican la validez de los lotes de transacciones fuera de la cadena.

Los primeros ZK-rollups carecían de la capacidad de ejecutar contratos inteligentes y estaban limitados a intercambios simples de tokens y pagos. Sin embargo, con la introducción de máquinas virtuales de conocimiento cero compatibles con EVM, los ZK-rollups están empezando a soportar [apps](https://www.alchemy.com/dapps/top/defi-dapps) de Ethereum.

En este artículo exploramos cómo funciona un zkEVM, por qué es importante y qué tipos de zkEVM existen.

## ¿Qué es un zkEVM?

Un zkEVM es una máquina virtual compatible con EVM que soporta el cómputo de pruebas de conocimiento cero. A diferencia de las máquinas virtuales regulares, un zkEVM prueba la corrección de la ejecución del programa, incluyendo la validez de las entradas y salidas usadas en la operación.

Vamos a desglosar esta definición para facilitar su comprensión:

### Compatibilidad con EVM

El [EVM \(Ethereum Virtual Machine\)](https://www.alchemy.com/overviews/what-is-the-ethereum-virtual-machine-evm) es el entorno de ejecución en el que se ejecutan los contratos inteligentes desplegados en la red de Ethereum. El EVM funciona como una "computadora mundial" que impulsa las aplicaciones descentralizadas que se ejecutan en la blockchain de Ethereum.

Una máquina virtual es "compatible con EVM" si puede ejecutar programas creados para funcionar en el entorno EVM. Estas VM pueden ejecutar contratos inteligentes escritos en Solidity u otros lenguajes de alto nivel usados en el desarrollo de Ethereum. Los zkEVM son compatibles con EVM porque pueden ejecutar contratos inteligentes de Ethereum sin modificaciones extensas de la lógica subyacente.

### Soporte para tecnología de conocimiento cero

El EVM nunca fue diseñado para soportar pruebas de conocimiento cero, lo que dificulta construir máquinas virtuales compatibles con EVM y aptas para conocimiento cero. Sin embargo, los avances en investigación han hecho posible—hasta cierto punto—envolver el cómputo del EVM en pruebas de conocimiento cero.

Distintos proyectos de zkEVM adoptan diferentes enfoques para combinar la ejecución de EVM con el cómputo de pruebas de conocimiento cero. Cada método tiene compensaciones particulares, que exploramos más adelante en esta guía.

## ¿Cómo funciona un zkEVM?

Al igual que el EVM, un zkEVM es una máquina virtual que transiciona entre estados como resultado de las operaciones del programa. Pero el zkEVM va más allá al producir una prueba que certifica la corrección de cada parte del cómputo. En esencia, un zkEVM utiliza un mecanismo para probar que los pasos de ejecución \(descritos anteriormente\) siguieron las reglas.

Para entender cómo funciona un zkEVM \(y por qué es diferente\), repasemos cómo funciona el EVM actualmente.

### Cómo funciona el EVM

El Ethereum Virtual Machine es una máquina de estados que pasa de un estado antiguo a un nuevo estado en respuesta a ciertas entradas. Cada ejecución de un contrato inteligente provoca un cambio en el estado del EVM \(llamado "transición de estado"\). Aquí hay una descripción general de alto nivel de lo que sucede durante una transacción de contrato inteligente:

1. El bytecode del contrato \(compilado a partir del código fuente\) se carga desde el almacenamiento del EVM y es ejecutado por nodos peer-to-peer en el EVM. Los nodos usan las mismas entradas de transacción, lo que garantiza que cada nodo llegue al mismo resultado \(de lo contrario no podrían alcanzar consenso\).

2. Los [opcodes de EVM](https://www.ethervm.io/) \(contenidos en el bytecode\) interactúan con distintas partes del estado del EVM \(memoria, almacenamiento y stack\). Los opcodes realizan operaciones de lectura-escritura—_leyendo_ \(obteniendo\) valores del almacenamiento de estado y _escribiendo_ \(enviando\) nuevos valores al almacenamiento del EVM.

3. Los opcodes del EVM realizan cómputo sobre los valores obtenidos del almacenamiento de estado antes de devolver los nuevos valores. Esta actualización resulta en que el EVM transicione a un nuevo estado \(por eso las transacciones se llaman "transiciones de estado"\). Este nuevo estado es replicado por otros nodos y permanece hasta que se ejecute otra transacción.

<ImageBlock
  src="https://media.alchemy.com/1704295117-evm-execution-model.png"
  alt="Un diagrama que muestra cómo se ejecutan los programas en la Ethereum Virtual Machine (EVM)."
  width={968}
  height={707}
  caption="Un diagrama que muestra cómo se ejecutan los programas en la Ethereum Virtual Machine (EVM)."
/>

### Cómo funciona el zkEVM

El zkEVM genera pruebas de conocimiento cero para verificar varios elementos en cada cómputo:

1. **Acceso al bytecode**: ¿Se cargó correctamente el código de programa apropiado, desde la dirección correcta?

2. **Operaciones de lectura-escritura**: a. ¿El programa obtuvo los valores correctos del stack/memoria/almacenamiento antes del cómputo? b. ¿El programa escribió los valores de salida correctos en el stack/memoria/almacenamiento después de completar la ejecución?

3. **Cómputo**: ¿Se ejecutaron los opcodes correctamente \(es decir, uno tras otro, sin saltarse pasos\)?

#### La arquitectura de un zkEVM

El zkEVM se divide en tres partes: un entorno de ejecución, un circuito de prueba y un contrato verificador. Cada componente contribuye a la ejecución de programas, la generación de pruebas y la verificación de pruebas del zkEVM.

##### 1. El entorno de ejecución

Como su nombre indica, el entorno de ejecución es donde se ejecutan los programas \(contratos inteligentes\) en el zkEVM. El entorno de ejecución del zkEVM funciona de manera muy similar al EVM: toma el estado inicial y la transacción actual para generar un nuevo estado \(final\).

##### 2. El circuito de prueba

El circuito de prueba produce pruebas de conocimiento cero que verifican la validez de las transacciones computadas en el entorno de ejecución. El proceso de generación de pruebas se completa usando como entradas el estado previo, las entradas de la transacción y la información del estado posterior. Después de eso, el prover obtiene una prueba sucinta de la validez de esa transición de estado en particular.

<ImageBlock
  src="https://media.alchemy.com/1704293216-zkevm-validity-proofs.png"
  alt="Un diagrama que muestra cómo el zkEVM genera pruebas de validez para los programas."
  width={902}
  height={517}
  caption="El zkEVM genera pruebas de validez para verificar la corrección de la ejecución de los programas."
/>

##### 3. El contrato verificador

Los ZK-rollups envían pruebas de validez a un contrato inteligente desplegado en la cadena L1 \(Ethereum\) para su verificación. La entrada \(estados previos e información de la transacción\) y la salida \(estados finales\) también se envían al contrato verificador. Luego el verificador ejecuta un cómputo sobre la prueba proporcionada y confirma que las salidas enviadas se calcularon correctamente a partir de las entradas.

## ¿Qué son los opcodes de zkEVM?

Los opcodes de zkEVM son instrucciones de máquina de bajo nivel usadas para ejecutar programas en un ZK-rollup compatible con EVM. Al igual que con el EVM, los contratos escritos en lenguajes de alto nivel deben compilarse a un lenguaje de bajo nivel que la VM pueda interpretar \(bytecode\). Este bytecode especifica los opcodes usados para ejecutar el programa cuando se despliega en la VM.

Necesitamos opcodes de zkEVM porque los opcodes regulares del EVM son ineficientes para usarse en circuitos de prueba de conocimiento cero. En general hay dos enfoques para crear opcodes para zkEVM:

1. Construir circuitos ZK para opcodes nativos de EVM
1. Crear nuevos lenguajes para el cómputo de pruebas ZK

#### Construir circuitos de conocimiento cero para opcodes nativos de EVM

Este enfoque requiere implementar todos los conjuntos de instrucciones de EVM en un circuito aritmético—una tarea compleja y que consume mucho tiempo. El beneficio es que los desarrolladores pueden crear contratos inteligentes usando [herramientas de desarrollo blockchain existentes](https://www.alchemy.com/overviews/20-blockchain-development-tools) o portar contratos de Ethereum existentes a ZK-rollups sin modificaciones extensas.

#### **Crear nuevos lenguajes para el cómputo de pruebas ZK**

Este enfoque requiere construir un nuevo lenguaje—diseñado para soportar pruebas de validez—y desarrollar opcodes personalizados. Los desarrolladores deberán escribir contratos directamente en el nuevo lenguaje o compilar código fuente de Solidity a opcodes personalizados de zkEVM.

Aunque este método suele ser más simple de implementar que el primer enfoque, tiene desventajas. Por ejemplo, los desarrolladores pueden no tener acceso a la infraestructura y los recursos existentes de Ethereum.

<ImageBlock
  src="https://media.alchemy.com/1704295202-zkevm-classification.png"
  alt="Una clasificación de las máquinas virtuales de conocimiento cero según su compatibilidad con la EVM."
  width={937}
  height={587}
  caption="Una clasificación de las máquinas virtuales de conocimiento cero según su compatibilidad con la EVM."
/>

## ¿Qué hace difícil construir un zkEVM?

Debido a que el EVM no fue construido pensando en el cómputo de pruebas ZK, tiene características que son desfavorables para los circuitos de prueba. Aquí un resumen breve de cuatro cosas que dificultan la construcción de zkEVM:

1. Opcodes especiales
1. Arquitectura basada en stack
1. Sobrecarga de almacenamiento
1. Costos de prueba

### 1. Opcodes especiales

A diferencia de una VM regular, el EVM usa opcodes especiales para la ejecución de programas \(CALL, DELEGATECALL\) y el manejo de errores \(REVERT, INVALID\), entre otras operaciones. Esto añade complejidad al proceso de diseñar el circuito de prueba para las operaciones del EVM.

### 2. Arquitectura basada en stack

El EVM usa una arquitectura basada en stack que, aunque más simple que una estructura basada en registros, aumenta la dificultad de probar el cómputo. Por eso VMs de conocimiento cero destacadas, como el zkEVM de [ZkSync](https://www.alchemy.com/overviews/what-is-zksync-era) y StarkNet de StarkWare, usan un modelo basado en registros.

### 3. Sobrecarga de almacenamiento

El diseño de almacenamiento del EVM depende de funciones de hashing Keccak y de un Merkle Patricia Trie, ambos con una alta sobrecarga de prueba. Algunas zkVM, como ZkSync, intentan evitar este problema reemplazando la función KECCAK256—pero esto puede romper la compatibilidad con las herramientas e infraestructura existentes de Ethereum.

### 4. Costos de prueba

Aun si se resuelven los problemas mencionados anteriormente, todavía queda lidiar con el proceso de generación de pruebas. Generar pruebas de conocimiento cero requiere hardware especializado junto con una inversión considerable de tiempo, dinero y esfuerzo.

Aunque no es exhaustiva, esta lista presenta algunos de los problemas que obstaculizan los esfuerzos por construir zkEVM compatibles con EVM. Sin embargo, [varios avances en tecnología de conocimiento cero](https://hackmd.io/@yezhang/S1_KMMbGt#Why-possible-now) han hecho posible mitigar esos problemas—lo que ha generado un renovado interés en las soluciones zkEVM.

## ¿Por qué es importante un zkEVM?

Construir un zkEVM completamente funcional fomentará el desarrollo de [proyectos de ZK-rollup](https://www.alchemy.com/overviews/zk-rollup-projects) compatibles con EVM. Esto presenta varias ventajas:

1. Escalabilidad segura
1. Costos más bajos
1. Finalidad más rápida y eficiencia de capital
1. Efectos de red

### **1. Escalabilidad segura**

Según las reglas del protocolo, todos los nodos validadores deben re-ejecutar todos los cómputos realizados en el Ethereum Virtual Machine. Este enfoque garantiza la seguridad, ya que los nodos de Ethereum pueden verificar de forma independiente la corrección de los programas, pero impone límites a la escalabilidad que la red de Ethereum puede manejar \(solo ~15-20 transacciones\).

Los ZK-rollups compatibles con EVM pueden solucionar los problemas de rendimiento de Ethereum sin comprometer la seguridad de la red. Al igual que otros protocolos de escalado, los ZK-rollups no están sujetos a las reglas del protocolo de consenso de Ethereum y pueden optimizarse para la velocidad de ejecución. Algunas estimaciones sugieren que [los ZK-rollups pueden procesar ~2000 transacciones por segundo](https://blog.matter-labs.io/optimistic-vs-zk-rollup-deep-dive-ea141e71e075) sin incurrir en las altas comisiones de Ethereum.

Sin embargo, los ZK-rollups tienen garantías de seguridad más altas en comparación con otros proyectos de escalado; verifican la corrección del cómputo fuera de la cadena con pruebas de validez. Esto significa que las transacciones realizadas por contratos inteligentes en L2 pueden verificarse de forma confiable en L1 \(Ethereum\) sin que los nodos tengan que re-ejecutar las operaciones. Esto puede aumentar significativamente la velocidad de procesamiento de Ethereum sin reducir la seguridad.

### **2. Costos más bajos**

Los Rollups obtienen su seguridad de [Ethereum Mainnet](https://www.alchemy.com/rpc/ethereum) al escribir datos de transacciones en Ethereum como CALLDATA. Sin embargo, los rollups optimistas y los ZK-rollups difieren en cuánta cantidad de datos deben publicar en Ethereum.

Debido a que los [rollups optimistas](https://www.alchemy.com/overviews/optimistic-rollups) no proporcionan prueba de validez para las transacciones fuera de la cadena, necesitan publicar todos los datos relacionados con la transacción en la cadena \(incluyendo firmas y parámetros de transacción\). Sin poner todos los datos en la cadena, los challengers no pueden construir pruebas de fraude usadas para disputar transacciones de rollup inválidas.

Por el contrario, los ZK-rollups pueden permitirse publicar una cantidad mínima de datos en Ethereum porque las pruebas de validez ya garantizan la confiabilidad de las transiciones de estado. El zkEVM incluso puede omitir las entradas de transacción y publicar solo los cambios de estado finales, reduciendo aún más los requerimientos de CALLDATA.

Esto es beneficioso para desarrolladores y usuarios porque [un gran porcentaje de los costos de rollup](https://forum.celestia.org/t/ethereum-rollup-call-data-pricing-analysis/141) proviene de publicar datos en la cadena. Al reducir CALLDATA al mínimo, los ZK-rollups pueden hacer más económico el uso de apps, como exchanges descentralizados, mercados de NFT, mercados de predicción, y muchas más.

### 3. Finalidad más rápida y eficiencia de capital

Además de una mejor seguridad, los ZK-rollups tienen otra ventaja sobre los rollups optimistas: finalidad más rápida. La finalidad en las blockchains es el tiempo que tarda una transacción en volverse irreversible; una transacción solo puede finalizarse si los participantes de la red tienen prueba objetiva de su validez.

Con los ZK-rollups, las transacciones ejecutadas en el zkEVM suelen finalizarse inmediatamente después de publicarse en Ethereum. Dado que cada lote de transacciones viene con una prueba de validez verificable al instante, la cadena principal de Ethereum puede aplicar rápidamente las actualizaciones de estado.

Dado que los rollups optimistas solo publican transacciones de la VM sin pruebas, debe transcurrir el período de impugnación antes de que las transacciones alcancen finalidad. El período de impugnación es un período de 1 a 2 semanas durante el cual cualquiera puede impugnar una transacción después de que se envíe a Ethereum.

La finalidad más lenta tiene muchas implicaciones para la experiencia del usuario. Por ejemplo, los usuarios no pueden retirar activos del rollup hasta que expire el período de espera. Los proveedores de liquidez pueden resolver el problema, pero pueden ser ineficaces si el retiro involucra activos de alto valor o incluso NFTs.

Un zkEVM no tiene ninguno de los problemas descritos anteriormente. La finalidad más rápida es excelente para usuarios avanzados, como traders de NFT, inversionistas de DeFi o arbitrajistas que necesitan mover activos sin fricciones \(especialmente entre L1 y L2\).

### 4. Efectos de red

La razón más importante para construir zkVM compatibles con EVM es aprovechar los efectos de red de Ethereum. Como la plataforma de contratos inteligentes más grande del mundo, Ethereum tiene un ecosistema amplio que aporta valor tanto a desarrolladores como a proyectos.

Por ejemplo, los desarrolladores pueden acceder a librerías de código probadas en batalla y auditadas, herramientas extensas, documentación, y demás. Crear una nueva zkVM incompatible con la infraestructura de Ethereum aislaría a los proyectos y equipos de desarrollo de aprovechar los efectos de red de Ethereum.

## ¿Qué tipos de zkEVM existen?

Los proyectos actuales de zkEVM se dividen en dos categorías principales: zkVMs que soportan opcodes nativos de EVM y zkVMs que usan opcodes de EVM personalizados. A continuación comparamos distintos protocolos de zkEVM y explicamos cómo funcionan:

### Polygon zkEVM

Polygon Hermez es un [ZK-rollup de Polygon](https://www.alchemy.com/overviews/polygon-zk-rollups) con una máquina virtual de conocimiento cero diseñada para soportar compatibilidad con EVM. Para lograrlo, el bytecode de EVM se compila en "micro opcodes" y se ejecuta en la uVM—una máquina virtual que usa pruebas SNARK y STARK para verificar la corrección de la ejecución del programa.

La decisión de combinar los dos tipos de prueba es estratégica. Las pruebas STARK \(Scalable Transparent ARgument of Knowledge\) son más rápidas de generar, pero las pruebas SNARK \(Succinct Non-Interactive Argument of Knowledge\) son más pequeñas y más económicas de verificar en Ethereum.

El zkEVM de Polygon Hermez usa un circuito de prueba STARK para generar pruebas de validez de las transiciones de estado. Una prueba STARK verifica la corrección de las pruebas STARK \(piénsalo como generar una "prueba de una prueba"\) y se envía a Ethereum para su verificación.

### zkEVM de zkSync

zkSync es un ZK-rollup compatible con EVM desarrollado por Matter Labs e impulsado por su propio zkEVM. zkSync logra la compatibilidad con Ethereum usando la siguiente estrategia:

1. Compilar el código del contrato escrito en Solidity a Yul, un lenguaje intermedio que se puede compilar a bytecode para diferentes máquinas virtuales.

2. Recompilar el bytecode de Yul \(usando el framework LLVM\) a un conjunto de bytecode personalizado y compatible con circuitos, diseñado especialmente para el zkEVM de zkSync.

Al igual que Polygon Hermez, el zkEVM de zkSync logra la compatibilidad con EVM a nivel de lenguaje, no a nivel de bytecode. Por ejemplo, los opcodes tradicionales de multiplicación y suma \(ADDMOD, SMOD, MULMOD\) no son soportados por el zkEVM de zkSync.

### Scroll zkEVM

[Scroll](https://scroll.io/blog/zkEVM) es una nueva implementación de EVM de conocimiento cero en desarrollo. El equipo de Scroll planea diseñar circuitos de conocimiento cero para cada opcode de EVM. Esto permitiría a los desarrolladores desplegar contratos inteligentes nativos de EVM de Ethereum en Scroll sin necesidad de modificar el bytecode subyacente de EVM.

Entre otras cosas, el zkEVM de Scroll usará un "acumulador criptográfico" para verificar la corrección del almacenamiento. Esto se usa para probar que el bytecode del contrato se cargó correctamente desde la dirección dada.

También proporciona un circuito para vincular el bytecode con el rastro de ejecución. El rastro de ejecución es una secuencia que especifica qué instrucciones de la VM se ejecutaron y en qué orden. Los provers enviarán el rastro de ejecución durante la generación de pruebas para verificar que el cómputo fue consistente con el bytecode original.

### AppliedZKP zkEVM

[Applied ZKP](https://github.com/privacy-scaling-explorations/zkevm-specs) es un proyecto financiado por la Ethereum Foundation para desarrollar un ZK-rollup compatible con EVM y un mecanismo para generar pruebas de validez para bloques de Ethereum. Esta última parte es crítica porque emparejar bloques con pruebas de validez eliminaría la necesidad de que los nodos re-ejecuten los bloques.

La innovación de Applied ZKP es la separación del cómputo del almacenamiento. Usa dos tipos de pruebas de validez—**pruebas de estado** y **pruebas de EVM**:

#### **Pruebas de estado**‍

Verifican que las operaciones que tocan el almacenamiento, la memoria y el stack ocurrieron correctamente. Las pruebas de estado esencialmente verifican la precisión de las operaciones de lectura-escritura.

#### **Pruebas de EVM**

Verifican que el cómputo llamó al opcode correcto en el momento adecuado. Las pruebas de EVM verifican el cómputo en sí y también confirman que la prueba de estado ejecutó la operación correcta para cada opcode.

El zkEVM de AppliedZKP usa un bus mapping para vincular la prueba de estado y la prueba de EVM. Además, ambas pruebas deben verificarse antes de que el bloque de Ethereum se considere válido.

## ¿En qué punto estamos del desarrollo de los zkEVM?

Salvo por zkSync, la mayoría de los EVM de conocimiento cero todavía están en producción. Sin embargo, el creciente desarrollo en tecnología de conocimiento cero significa que la posibilidad de contar con zkEVM completamente funcionales es mejor que nunca.

Mientras tanto, los desarrolladores pueden aprovechar los beneficios de las aplicaciones de conocimiento cero con la VM de conocimiento cero de StarkNet. StarkNet no es compatible con EVM, pero puede compilar código fuente de Solidity a bytecode personalizado y apto para ZK. También puedes optar por escribir contratos en Cairo \(el lenguaje de StarkNet\).

Regístrate gratis en Alchemy para empezar a [construir en StarkNet](https://www.alchemy.com/layer2/starknet) hoy mismo.

## Preguntas frecuentes

### ¿Qué significa zkEVM?

zkEVM significa Zero-Knowledge Ethereum Virtual Machine, una máquina virtual que ejecuta contratos inteligentes mientras genera pruebas de conocimiento cero para verificar su corrección.

### ¿En qué se diferencia un zkEVM del Ethereum Virtual Machine estándar?

Un zkEVM es compatible con EVM pero genera pruebas de conocimiento cero para verificar la validez de las transacciones, lo que permite la ejecución fuera de la cadena con verificación en la cadena para mejorar la escalabilidad.

### ¿Cuáles son los principales componentes de un zkEVM?

Un zkEVM consta de tres partes: un entorno de ejecución donde se ejecutan los contratos inteligentes, un circuito de prueba que genera pruebas de conocimiento cero, y un contrato verificador que revisa las pruebas en Ethereum Layer 1.

### ¿Para qué se usan los zkEVM?

Los zkEVM impulsan los ZK-rollups, que son soluciones de escalado de Ethereum Layer 2 que agrupan transacciones fuera de la cadena y envían pruebas de validez a Layer 1 para una ejecución más rápida y económica.

### ¿Por qué es difícil construir zkEVMs?

Construir zkEVMs es un desafío porque el EVM no fue diseñado para pruebas de conocimiento cero, y presenta opcodes especiales, una arquitectura basada en stack, sobrecarga de almacenamiento y altos costos de prueba que complican el diseño de circuitos.

### ¿Cómo mejoran los zkEVM la escalabilidad en comparación con los rollups optimistas?

Los zkEVM proporcionan finalidad inmediata mediante pruebas de validez, eliminando el período de impugnación de 1 a 2 semanas requerido por los rollups optimistas y permitiendo un procesamiento de transacciones más rápido.

### ¿Qué son los opcodes de zkEVM?

Los opcodes de zkEVM son instrucciones de máquina de bajo nivel para ejecutar programas en ZK-rollups, creadas ya sea construyendo circuitos ZK para opcodes nativos de EVM o desarrollando nuevos lenguajes aptos para ZK.

### ¿Cuáles son algunos ejemplos de implementaciones de zkEVM?

Algunos ejemplos incluyen Polygon zkEVM \(que usa micro opcodes y pruebas SNARK/STARK\), zkSync \(que compila Solidity a bytecode personalizado\), y Scroll \(que diseña circuitos para cada opcode de EVM\).
