En la discusión de la máquina virtual de Ethereum (EVM)

Autor: Gimer Cervera, Ethereum Smart Contract Developer Traducción: Shan Ouba, Bittain Vision World

introducir

Este artículo explora en la profundidad de Ethereum Virtual Machines (EVM) y el ensamblaje de solidez para lograr la optimización y la seguridad del contrato inteligente.

Ethereum Virtual Machine (EVM) es el componente central de la red Ethereum.EVM es un software que permite la implementación y ejecución de contratos inteligentes escritos en lenguaje avanzado (como solidez).Después de escribir el contrato, compítelo en Bytecode e impleméntelo en EVM.EVM se ejecuta en cada nodo de la red Ethereum.

El ensamblaje de solidez es un lenguaje de programación de bajo nivel que permite a los desarrolladores escribir código en el nivel más cercano al propio EVM.Proporciona un control más detallado sobre la ejecución de contratos inteligentes, lo que permite la optimización y la personalización que no se puede lograr a través del código de solidez de mayor nivel.

El lenguaje utilizado en la solidez para la compilación conjunta interna se llama YUL.El lenguaje de programación se compila como un intermediario del Bytecode EVM.Está diseñado como un lenguaje de bajo nivel que permite a los desarrolladores controlar la ejecución de contratos inteligentes más finamente.Se puede usar en modo independiente o en solidezCompilación de sindicato internoEsenciaYUL está diseñado como un lenguaje de pila de bajo nivel, lo que permite a los desarrolladores escribir un código más optimizado y más eficiente.Antes de explicar el ensamblaje de solidez, necesitamos comprender cómo funcionan los componentes EVM.

EVM es un准 图 灵 灵 灵Máquina de estado.En este caso, el término«permitir»Significa que la ejecución del proceso se limita a los pasos de cálculo del número limitado, dependiendo de cualquiera de las cantidades de gas que puedan ser ejecutadas por un contrato inteligente dado.Esta es la forma de lidiar con la suspensión de la detención y la posibilidad de ejecución (maliciosa o accidental) para siempre.De esta manera, se evita la plataforma Ethereum.

El gas es un concepto de calcular el cálculo requerido para completar la transacción en Ethereum.Ethereum paga el costo de transacción y está relacionado con el precio del gas y el gas.Nuestro objetivo en este proceso es aprender a minimizar la cantidad total de gas consumido sin afectar la seguridad.

Problema de optimización de código

El conjunto de la junta interna es un método para acceder a EVM en un nivel inferior.Evita varias funciones de seguridad importantes e inspecciones de solidez.El uso correcto del ensamblaje de la junta interna puede reducir significativamente el costo de implementación.Sin embargo, solo debe usarlo para necesitar su tarea, y solo cuando sepa lo que está haciendo.El uso del código de optimización del Lianhui interno puede traer nuevos problemas de seguridad a su código.Para dominar el ensamblaje interno, necesitamos comprender los principios de trabajo de EVM y sus componentes.

En EVM, debe pagar cada vez que visite cualquier variable de almacenamiento por primera vez.«frío»Visitas, se necesitan 2100 gas.Se llama a los segundos o consecutivos tiempos«caliente»Acceso, se necesitan 100 gas.

El siguiente código es un ejemplo de cómo optimizamos el código con YUL.funciónSetData1Utilice la solidez de manera tradicional como variable globalEstablezca el nuevo valor.Necesitamos gastar 22,514 gas cuando primero asigna este nuevo valor.El segundo costo es mucho menor, es decir, 5414 gas.

>

funciónsetData2Realice el ensamblaje interno.El bloque de divisas internos está marcado por el ensamblaje {…}, donde el código en el soporte es el código del lenguaje YUL.No es necesario comprender el código fuente en este momento, solo recuerde que el software está accediendo al espacio de almacenamiento en un nivel más bajo.Por lo tanto, el costo de ejecución será más bajo.

En nuestro ejemplo, la primera modificación de este valor costará 22,484 gas.Varias veces seguidas, el costo es de 5384 gas.La diferencia puede no parecer significativa, pero debemos considerar que este código puede ejecutarse miles de veces.

>

¿Por qué es tan caro?Recuerde, estamos en un mundo descentralizado.Si se deben acceder o cambiar las transacciones futuras, también debe usarse fácilmente para cada nodo en la red.El costo total de los datos es igual al espacio de almacenamiento que consumió y la suma del cálculo de los datos en toda la red.

Evm Stack, Storage and Memory

EVM es una máquina basada en pila que se ejecuta en la estructura de datos llamada Stack, que ahorra el valor y ejecuta la operación.EVM tiene su propio conjunto de instrucciones (denominadas códigos operativos) para realizar tareas como leer y escribir almacenamiento, llamar a otros contratos y realizar operaciones matemáticas.Pila segúnMás tarde, First Out (Lifo)Ejecute el camino, vea la Figura 1, lo que significa que el elemento insertado recientemente se almacena en la parte superior de la pila, y es el primer elemento que se eliminará.

>

Al ejecutar contratos inteligentes, EVM crea un contexto de ejecución que contiene varias estructuras de datos y variables de estado.Una vez completada la ejecución, el contexto se descartará y se preparará para el próximo contrato.Durante la ejecución, EVM mantendrá una memoria temporal, y no habrá existencia continua entre la existencia de transacciones.EVM ejecuta una máquina de pila con una profundidad de 1024 elementos.Cada proyecto es una palabra de 256 bits.

EVM tiene los siguientes componentes, como se muestra en la Figura 2:

  • Pila: la pila de EVM es una estructura de datos que se ejecuta (LIFO) que se ejecuta (LIFO) de la manera, que se utiliza para almacenar valores temporales durante la ejecución de contratos inteligentes.

  • Almacenamiento: el almacenamiento permanente es parte del estado de Ethereum, que solo se inicializa a cero por primera vez.

  • Memoria: la matriz de bytes de tamaño dinámico fácil de perder, se utiliza para almacenar datos intermedios durante la ejecución de contratos.Cada vez que crea un nuevo contexto de ejecución, la memoria se inicializa a cero.

  • CallData: este también es un área de almacenamiento de datos fácil de perder, similar a la memoria.Sin embargo, almacena datos variables incapaces.Su objetivo es guardar los datos enviados como parte de una transacción de contrato inteligente.

  • Contador del programa: el contador del programa (PC) apunta a las siguientes instrucciones que se ejecutarán por EVM.PC generalmente agrega un byte después de la ejecución de una instrucción.

  • ROM virtual: los contratos inteligentes se almacenan en el área como Bytecode.La ROM virtual se lee solamente.

>

Pila

En esta arquitectura, las instrucciones y los datos del programa se almacenan en la memoria, y la ejecución del programa esControl de puntero de pila.El seguimiento del puntero de la pila del siguiente valor o instrucción se guardará o recuperará en la pila.Cuando el programa se está ejecutando, agrega el valor a la pila y realiza el valor existente.Cuando el código quiere agregar los dos números, presiona el número en la pila y luego realiza los dos valores en la parte superior.Luego regrese a la pila.

>

Una de las características más importantes basadas en la arquitectura de pila es que permite una ejecución de operaciones altamente simple y eficiente.Debido a que la pila es una estructura de datos LIFO, los datos y las instrucciones pueden procesar fácilmente datos e instrucciones.

EVM tiene su propio conjunto de instrucciones, llamado código operativo.El código de operación se utiliza para realizar tareas como leer y escribir almacenamiento, llamar a otros contratos y ejecución de operaciones matemáticas.El conjunto de instrucciones EVM proporciona la mayoría de las operaciones que puede esperar, incluida:

  • Operación de pila: pop, empuje, dup, intercambio

  • Aritmética/comparación/prescripción: Agregar, Sub, GT, LT, y o

  • Medio ambiente: persona que llama, callValue, número

  • Operación de memoria: MLoad, MStore, MStore8, MSIZE

  • Operación de almacenamiento: Sload, Sstore

  • Código operativo de Counter Relacionado del programa: Jump, Jumpi, PC, JumpDest

  • Deje de operar el código: detener, devolver, revertir, inválido, selfDestruct

Almacenamiento EVM

El almacenamiento EVM es un espacio no propenso, ahorrando un par de valor de llave de 256 bits de 256 años;El número total de ranuras de almacenamiento en el contrato es 2, que es una gran cantidad de ranuras.Cada contrato inteligente en blockchain tiene su propio espacio de almacenamiento.

Durante la llamada de función, el almacenamiento se utiliza para datos que deben recordarse entre las llamadas de función.Se utiliza para almacenar variables disponibles y estructuras de datos que pueden estar disponibles incluso después de la ejecución de contratos inteligentes.

>

El código operativo para acceder al almacenamiento es: Sload y Sstore

Este almacenamiento de cuenta es almacenamiento de datos permanente, que solo es utilizado por contratos inteligentes.La cuenta (EOA) no tiene código y el espacio de almacenamiento está vacío.

Memoria EVM

La memoria es una memoria fácil de perder en la arquitectura, y sus datos no son duraderos en la cadena de bloques.La memoria es una estructura de datos de acceso aleatorio que almacena datos temporales durante la ejecución de contratos inteligentes.

>

La memoria se divide en cuatro partes: se usan 2 ranuras para el espacio de almacenamiento temporal, se usa 1 ranura para punteros de memoria libre, 0 ranuras y 1 punto de ranura para la memoria libre disponible.El primer espacio de los 64 bytes será utilizado por el método de relacional.

El puntero de memoria libre es solo un puntero al inicio de la memoria libre.Asegura qué posiciones de memoria se rastrean en contratos inteligentes y cuáles aún están disponibles.Esto evita la cobertura del contrato de cierta memoria que se ha asignado a otra variable.La Figura 6 muestra cómo se divide la memoria:

>

La memoria se utiliza para almacenar variables y estructuras de datos que no necesitan almacenarse en la memoria.El tamaño de la memoria se puede ajustar durante la ejecución del contrato inteligente, pero la velocidad de acceso es más lenta y el costo es más alto que la pila.

Teniendo en cuenta que la memoria es initialización cero, el código operativo para el acceso a la memoria es: MLoad, MStore, MStore8

Resumir

En este artículo, revisamos algunos conceptos básicos relacionados con la máquina virtual Ethereum (EVM).Para realizar el código de ensamblaje interno, debe comprender EVM en profundidad.Esto se debe a que estamos interactuando con algunos componentes de EVM.En cursos futuros, analizaremos otros elementos EVM en detalle, como: almacenamiento, memoria y calldata.Además, revisaremos los conceptos importantes como el código bytecodo, el gas y la interfaz binaria de la aplicación (ABI).Finalmente, discutiremos el principio de funcionamiento del código operativo y más ejemplos internos y de divisas para optimizar de forma segura la ejecución de contratos inteligentes.

  • Related Posts

    Vista rápida de la última red de partículas del proyecto Airdrop Binance Hodler

    Fuente: Sitio web oficial de Binance, sitio web oficial de la red de partículas, Libro Blanco; El 24 de marzo de 2025, según el anuncio oficial de Binance, Binance Hodler…

    Ethereum disminuye, prevalece el PvP, se pierde el verano de 2020

    Jessy (@Susanliu33), Visión de Bittain Vitalik desapareció en X durante más de 20 días. Durante estos 20 días, el precio de Ethereum ha caído repetidamente por debajo de la defensa…

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    You Missed

    Tendencia histórica: Bitcoin está siendo un activo de sabor seguro

    • Por jakiro
    • abril 19, 2025
    • 0 views
    Tendencia histórica: Bitcoin está siendo un activo de sabor seguro

    ¿Qué hace que los eventos de la alfombra de criptomonedas ocurran con frecuencia?

    • Por jakiro
    • abril 18, 2025
    • 1 views
    ¿Qué hace que los eventos de la alfombra de criptomonedas ocurran con frecuencia?

    Wintermute Ventures: ¿Por qué invertimos en Euler?

    • Por jakiro
    • abril 18, 2025
    • 3 views
    Wintermute Ventures: ¿Por qué invertimos en Euler?

    ¿Puede Trump disparar Powell? ¿Qué riesgos económicos traerán?

    • Por jakiro
    • abril 18, 2025
    • 2 views
    ¿Puede Trump disparar Powell? ¿Qué riesgos económicos traerán?

    Glassnode: ¿Estamos experimentando una transición de toro?

    • Por jakiro
    • abril 18, 2025
    • 4 views
    Glassnode: ¿Estamos experimentando una transición de toro?

    El primer lote de 8 proyectos seleccionados del acelerador web de los 8 proyectos seleccionados

    • Por jakiro
    • abril 17, 2025
    • 3 views
    El primer lote de 8 proyectos seleccionados del acelerador web de los 8 proyectos seleccionados
    Home
    News
    School
    Search