Es un programa
Un contrato inteligente contiene funciones y reglas programadas. Cuando recibe una llamada válida, la EVM ejecuta las instrucciones correspondientes.
Programas que viven en Ethereum y ejecutan reglas definidas por su código. Son una de las piezas fundamentales de las aplicaciones descentralizadas.
Un smart contract es un programa que se ejecuta en la blockchain de Ethereum y que contiene código y datos asociados a una dirección.
Un contrato inteligente contiene funciones y reglas programadas. Cuando recibe una llamada válida, la EVM ejecuta las instrucciones correspondientes.
Después de ser desplegado, el contrato tiene una dirección en la red y su código forma parte del estado que mantienen los nodos de Ethereum.
Un contrato puede almacenar datos persistentes, como saldos, contadores, permisos o información utilizada por sus funciones.
Ethereum distingue entre cuentas controladas por usuarios y cuentas cuyo comportamiento está definido por código.
Una EOA está controlada mediante claves privadas y puede iniciar transacciones.
Está controlada por su código y puede responder a llamadas y modificar su estado siguiendo las reglas programadas.
Aunque los contratos pueden ser muy complejos, podemos entenderlos a partir de unas piezas básicas.
Define qué operaciones puede realizar el contrato y bajo qué condiciones.
Contiene los datos persistentes del contrato. Por ejemplo, variables de estado o saldos.
Son las operaciones que permiten consultar información o solicitar cambios en el estado.
La EVM dispone de diferentes zonas para trabajar con datos durante la ejecución de un contrato.
Es el almacenamiento persistente del contrato. Los valores pueden mantenerse entre diferentes ejecuciones.
Se utiliza durante la ejecución de una llamada. No funciona como almacenamiento persistente del estado del contrato.
Contiene datos enviados junto con una llamada, como los argumentos necesarios para ejecutar una función.
Este ejemplo muestra un contrato básico escrito en Solidity que mantiene un contador.
count representa un dato que forma
parte del estado persistente del contrato.
increment() modifica ese estado
cuando una cuenta realiza una llamada válida.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract Counter {
uint256 public count;
function increment() external {
count += 1;
}
}
La EVM no ejecuta directamente el código Solidity que escribe un desarrollador. Antes es necesario compilarlo a bytecode.
El desarrollador escribe el contrato en un lenguaje como Solidity o Vyper.
El código se transforma en una representación que la EVM puede interpretar.
El resultado contiene las instrucciones que posteriormente ejecutará la EVM.
El despliegue convierte el código compilado en una cuenta de contrato disponible en la red.
El código fuente se convierte en bytecode que puede ejecutar la EVM.
El bytecode compilado se incluye en una transacción de creación de contrato.
Una vez incluido y ejecutado, el contrato queda disponible mediante una dirección de Ethereum.
Las aplicaciones pueden consultar información de un contrato o solicitar operaciones que cambien su estado.
Una consulta que no modifica el estado puede obtener información del contrato sin crear una transacción que cambie la blockchain.
Una operación que modifica el estado necesita una transacción y consume recursos de ejecución, por lo que requiere gas.
Cada operación ejecutada por la EVM requiere recursos computacionales. El gas permite medir y pagar ese trabajo.
Un contrato que realiza más trabajo computacional normalmente necesita consumir más gas.
Una transacción establece cuánto gas puede utilizar su ejecución.
El sistema de gas ayuda a evitar que una ejecución consuma recursos de manera ilimitada.
Una de las características más importantes de Ethereum es que un contrato puede interactuar con otros contratos.
Puede realizar una llamada a otro contrato para solicitar una operación o consultar información.
Puede ejecutar su propia lógica y devolver información o producir cambios en el estado.
La combinación de contratos permite construir sistemas más complejos a partir de componentes que interactúan entre sí.
Que un contrato se ejecute automáticamente no significa que su código sea necesariamente seguro.
Un fallo en la lógica puede producir comportamientos diferentes de los esperados.
Las funciones sensibles deben contar con controles de acceso adecuados.
Antes de utilizar un contrato conviene entender qué funciones ofrece, qué permisos solicita y qué efectos puede producir una operación.
Un smart contract es código desplegado en Ethereum que puede recibir llamadas, ejecutar instrucciones y mantener un estado siguiendo las reglas definidas por su programa.
Define las reglas y operaciones.
Ejecuta el bytecode del contrato.
Guarda los datos persistentes.
Mide y limita los recursos de ejecución.
Ya sabemos qué es un contrato y cómo interactúa con Ethereum. El siguiente paso es entender la máquina que ejecuta su código.
Documentación utilizada como referencia para esta explicación.
El siguiente concepto explica dónde se ejecutan: la Máquina Virtual de Ethereum.