Introducción a los contratos inteligentes en Solidity
Escrito por Daniel Idowu
Los contratos inteligentes de Solidity tienen diversos usos, desde carteras multifirma hasta exchanges descentralizados. Solidity es uno de los principales lenguajes de programación de web3 creado específicamente para desarrollar contratos inteligentes y, por lo tanto, ha experimentado un aumento constante en popularidad.
Este artículo te presentará los contratos inteligentes de Solidity, cómo funcionan y sus propiedades. También repasaremos la sintaxis y los tipos de datos de Solidity para que puedas empezar a interactuar con contratos inteligentes de Solidity en tu próximo proyecto. Para ampliar tus conocimientos de Solidity, completa el curso gratuito de sintaxis de Solidity de Alchemy University.
¿Qué es un contrato inteligente de Solidity?
Un contrato inteligente de Solidity es un programa escrito en Solidity, desplegado en la blockchain de Ethereum y ejecutado en la máquina virtual de Ethereum (EVM). Ethereum almacena el código y los datos del contrato inteligente (su estado) en una dirección designada.
Cuando se cumplen condiciones predeterminadas, el programa, o contrato inteligente, almacenado en la blockchain se ejecuta sin necesidad de un intermediario. Los contratos inteligentes son, en otras palabras, programas que rigen el comportamiento de las cuentas dentro del estado de Ethereum.
Puedes escribir contratos inteligentes en Solidity o en cualquier otro lenguaje de programación compatible con EVM. Primero deben compilarse a bytecode para ser compatibles con EVM.
Solidity es un lenguaje orientado a objetos y de alto nivel para escribir contratos inteligentes. Los contratos inteligentes escritos en Solidity pueden usarse para diversos propósitos, como votaciones, crowdfunding, subastas ciegas y carteras multifirma.
¿Cómo funcionan los contratos inteligentes?
Los contratos inteligentes son programas almacenados en la blockchain. Un contrato inteligente plasma acuerdos entre distintas partes en código y aplica reglas automáticamente cuando se cumplen las condiciones previas. Esto significa que todas las partes involucradas en el contrato inteligente conocen el resultado de inmediato, sin pérdida de tiempo ni intervención de un tercero. Los contratos inteligentes también pueden automatizar flujos de trabajo para desencadenar el siguiente evento tras su ejecución.
Los contratos inteligentes que siguen el estándar ERC20 se consideran tokens ERC20. Los tokens ERC20 permiten la transferencia de tokens entre poseedores.
¿Cuáles son las propiedades de los contratos inteligentes de Solidity?
Los contratos inteligentes son, por naturaleza, inmutables y deterministas. Esto significa que una vez que un contrato inteligente se despliega o construye en Ethereum, nunca dejará de existir, a menos que se hayan programado en él condiciones que activen una autodestrucción. El código siempre ejecutará las condiciones para las que ha sido programado.
Además, los contratos inteligentes son deterministas, ya que cada nodo de la red puede producir el mismo resultado cuando se le da la misma entrada para un método. Si distintos nodos llegan a resultados diferentes al ejecutar el contrato inteligente, se viola el protocolo de consenso y el contrato inteligente queda inutilizable.
Asimismo, los contratos inteligentes son sin permisos, lo que significa que cualquier persona que posea ETH y tenga acceso a internet puede desplegar un contrato inteligente en Ethereum.
Por último, los contratos inteligentes son componibles. Esto significa que puedes usar contratos inteligentes de otros proyectos como bloques de construcción para tu proyecto. Los contratos inteligentes pueden considerarse como APIs abiertas, donde los usuarios no necesitan escribir su propio contrato inteligente para convertirse en desarrolladores de dApps; solo necesitan saber cómo interactuar con ellos.
Sintaxis de los contratos inteligentes de Solidity
Si bien hay muchos recursos disponibles para ayudarte a comenzar a aprender Solidity, esta sección describirá la sintaxis usada para escribir contratos inteligentes de Solidity.
1. Contratos
Los contratos en Solidity son similares a las clases en los lenguajes orientados a objetos. Cada contrato puede contener declaraciones de variables de estado, funciones, modificadores de funciones, eventos, errores, tipos struct y tipos enum. En este artículo trataremos con más detalle los constructores, las variables de estado y las variables de tipo entero. Además, los contratos pueden heredar de otros contratos.
También existen contratos especiales llamados librerías e interfaces.
2. Versionado semántico
Solidity, como la mayoría de los softwares, usa versionado semántico. Esto significa que no hay cambios importantes a menos que actualices una versión mayor. Puedes consultar los principales cambios disruptivos introducidos en cada versión de Solidity en la documentación. La versión más reciente de Solidity es v0.8.16, a agosto de 2022.
3. Constructor
Un constructor se llama solo una vez durante el despliegue, o creación del contrato. Un constructor es una función opcional declarada con la palabra clave constructor y te permite ejecutar código de inicialización del contrato.
Antes de que se ejecute el código del constructor, las variables de estado se inicializan con el valor especificado si las inicializas en línea, o con su valor predeterminado si no lo haces.
Después de que el constructor se ha ejecutado, el código final del contrato se despliega en la blockchain.
Si no hay un constructor, el contrato asumirá el constructor predeterminado.
4. Variables de estado
Las variables de estado son variables cuyos valores se almacenan en el storage del contrato. Cada función tiene su propio ámbito, y las variables de estado siempre deben definirse fuera de ese ámbito.
Las variables de estado tienen visibilidad. Puedes hacer públicas las variables de estado con la palabra clave de visibilidad public, que proporciona una función getter a la que otros contratos inteligentes pueden acceder.
5. Modificación
En Solidity, un modificador cambia la semántica de una función de forma declarativa. En otras palabras, los modificadores cambian el comportamiento de la función a la que se adjuntan. Los modificadores son útiles para eliminar redundancia de código y pueden reutilizarse para verificar la misma condición en múltiples funciones dentro de un contrato inteligente.
6. Variables de tipo entero
Hay dos tipos de variables enteras en Solidity: enteros sin signo (uint), y enteros con signo (int). Un entero con signo es un tipo de dato de valor que puede almacenar valores negativos y positivos. Un entero sin signo, en cambio, no tiene signo y, por lo tanto, es un tipo de dato de valor que debe ser no negativo.
Tipos de datos en Solidity
Al igual que otros lenguajes de programación, Solidity tiene varias clasificaciones de tipos de datos. Sin embargo, Solidity es particular en que varios tipos de datos elementales pueden combinarse para formar tipos de datos más complejos. Esta sección describe los principales tipos de datos en Solidity.
1. Booleanos
Los posibles valores de los booleanos, denotados por bool en Solidity, son las constantes true y false.
2. Strings
Los literales de tipo string se escriben con comillas dobles o simples. Los strings también pueden dividirse en varias partes consecutivas, lo cual puede ser útil al trabajar con strings largos.
3. Números
Fixed y ufixed se refieren, respectivamente, a números de punto fijo con signo y sin signo de distintos tamaños.
4. Bytes
En Solidity, byte se refiere a enteros con signo de 8 bits. Los bits se almacenan en la memoria con valores binarios de 0 o 1. En Solidity, el tipo de dato byte representa una secuencia de bytes.
Hay dos tipos de tipos byte en Solidity: arreglos de bytes de tamaño fijo y arreglos de bytes de tamaño dinámico. La palabra clave bytesX se usa para definir variables donde X denota la secuencia de bytes, desde 1 hasta 32.
Bytes en Solidity representa un arreglo dinámico de bytes. Sin embargo, no es un tipo de valor.
5. Address
El address contiene un valor de 20 bytes, que es el tamaño de una dirección de Ethereum. Los literales hexadecimales que pasan la prueba de checksum de dirección son de tipo address. Los literales hexadecimales que tienen entre 39 y 41 dígitos de longitud y no pasan la prueba de checksum producen un error. Puedes anteponer (para tipos enteros) o añadir al final (para tipos bytesNN) ceros para eliminar el error.
6. Address payable
El address payable, denotado por address payable, es similar al address pero con miembros adicionales transfer y send. Esta distinción es necesaria porque una address simple puede ser un contrato inteligente que no está diseñado para aceptar Ether (ETH). Un address payable es una address a la que puedes enviar Ether.
7. Enums
Los enums, también conocidos como valores de enumeración en Solidity, son una forma de crear un tipo definido por el usuario, lo que permite crear valores constantes, como los nombres de constantes integrales. Los enums hacen que un contrato inteligente sea más fácil de leer y mantener en comparación con los tipos de valor elementales.
Los enums se pueden convertir explícitamente hacia y desde todos los tipos enteros, pero no se permite la conversión implícita. La conversión explícita desde un entero verifica en tiempo de ejecución que el valor se encuentre dentro del rango del enum y, de lo contrario, provoca un error de panic. Los enums, por lo tanto, reducen la incidencia de errores en tu código.
Los enums requieren al menos un miembro, y su valor predeterminado al declararlos es el primer miembro. Los enums no pueden tener más de 256 miembros.
8. Arreglos
Los arreglos son un grupo de variables del mismo tipo de dato, donde cada variable tiene un índice único. Los arreglos pueden tener un tamaño fijo en tiempo de compilación, lo que los convierte en arreglos fijos, o pueden tener un tamaño dinámico, lo que los convierte en arreglos dinámicos.
Los arreglos de tamaño fijo tienen un tamaño predefinido al declararse. La palabra clave new no puede usarse para agregar miembros adicionales al arreglo. En su lugar, las variables de datos deben inicializarse en línea.
Los arreglos de tamaño dinámico no tienen un tamaño predefinido cuando se declaran. En cambio, su tamaño se determina en tiempo de ejecución.
Los elementos de un arreglo pueden ser de cualquier tipo, incluyendo un mapping o un struct, una estructura de datos definida por el usuario.
9. Mappings
En Solidity, los mappings funcionan como tablas hash o diccionarios en otros lenguajes de programación. Los mappings funcionan como un tipo de referencia y almacenan datos en forma de pares clave-valor, donde la clave puede ser cualquiera de los tipos de datos incorporados excepto los tipos de referencia, y el valor puede ser de cualquier tipo.
Si las variables de estado de tipo mapping son públicas, Solidity crea una función getter para ti.
10. Structs (tipos definidos por el usuario)
Un struct, o estructura, te permite definir nuevos tipos de datos. Los tipos struct pueden usarse dentro de mappings y arreglos, y ellos mismos pueden contener mappings y arreglos anidados. Sin embargo, no es posible que un struct contenga un miembro de su propio tipo, ya que el tamaño del struct debe ser finito.
¿Qué es el contexto del contrato inteligente?
El contexto de un contrato inteligente proporciona información sobre el entorno en el que se ejecuta una transacción. Cuando se llama a una función de un contrato inteligente mediante una transacción, la función llamada recibe información adicional. Dentro de una función de un contrato inteligente tendrás acceso a estas variables de contexto.
Tienes acceso al remitente del mensaje, los precios del gas y las pruebas realizadas en la transacción. Por lo tanto, tienes acceso a una serie de variables de contexto que puedes usar indistintamente en la lógica de tu código.
Inscríbete en un bootcamp de desarrollador de Ethereum para aprender más
En este artículo, presentamos los conceptos básicos para comenzar con los contratos inteligentes de Solidity y describimos los principales tipos de datos y la sintaxis para ampliar tu comprensión. Inscríbete en el Bootcamp gratuito en línea de Desarrollador de Ethereum de Alchemy para aprender más sobre la creación de contratos inteligentes con Solidity. Si los desarrolladores son nuevos en el desarrollo en general, el curso intensivo de JavaScript para Ethereum de 3 semanas de Alchemy University es un excelente requisito previo.
Resúmenes relacionados
Solidity3 de diciembre de 2025
Los 6 mejores IDEs de Solidity para desarrolladores (2026)
Explora los mejores IDEs para el desarrollo en Solidity.
Solidity19 de noviembre de 2025
Optimización de gas en Solidity: 12 técnicas para hacer tus smart contracts más económicos y eficientes
¿Quieres escribir mejor código y reducir tus fees de gas?
Solidity13 de noviembre de 2025
12 mejores prácticas de seguridad para smart contracts en Solidity
Protege tus smart contracts con estos consejos y herramientas de seguridad de expertos.

Construye magia blockchain
Alchemy combina los productos y herramientas de desarrollo Web3 más potentes con recursos, comunidad y un soporte legendario.