Saltar al contenido
0%

¿Qué es Solidity?

Alchemy team headshot

Escrito por Alchemy

Publicado el 22 de septiembre de 20238 min de lectura

A medida que la industria de web3 crece, los desarrolladores tienen más opciones de lenguajes de programación para web3. Cada lenguaje está diseñado con distintos beneficios y compensaciones para escribir contratos inteligentes. Los lenguajes pueden diferir al dar soporte a blockchains específicas, o tener características distintas como velocidad, legibilidad o seguridad.

Desarrollado como el lenguaje de contratos inteligentes para la blockchain de Ethereum, Solidity es un lenguaje de programación potente que se usa para crear aplicaciones descentralizadas para el ecosistema de desarrolladores más grande de la industria blockchain.

En este artículo, presentaremos una introducción a Solidity a través de su historia, sus influencias como lenguaje y sus usos. Al final, ofreceremos algunos de los mejores recursos para desarrolladores para seguir aprendiendo mediante cursos gratuitos de Solidity y recursos para aprender desarrollo web3.

¿Qué es Solidity?

Propuesto en 2014, Solidity es un lenguaje de programación de alto nivel y orientado a objetos para implementar contratos inteligentes que se ejecutan en la Ethereum Virtual Machine (EVM). Solidity está inspirado en lenguajes de programación conocidos como C++ y JavaScript. Como desarrollador de web3, trabajar con Solidity es útil para aprender desarrollo web3.

Esta sección te introduce a la historia de Solidity, establece similitudes entre Solidity y otros lenguajes de programación, y explica los principales casos de uso de Solidity.

¿Quién creó Solidity?

En 2014, el CTO de Ethereum, Gavin Wood, propuso Solidity como un lenguaje que satisficiera la necesidad de Ethereum de contar con un lenguaje de programación Turing-completo para escribir contratos inteligentes.

El fundador de Ethereum, Vitalik Buterin, propuso Ethereum como un protocolo que extendería la funcionalidad de blockchain iniciada por Bitcoin, con la funcionalidad adicional de contratos inteligentes. En su visión, Ethereum sería capaz de ejecutar una red elaborada de contratos inteligentes, que son fragmentos de código que se ejecutan de forma condicional en una red global y distribuida de computadoras. Los contratos inteligentes permiten a los desarrolladores crear nuevas criptomonedas, construir aplicaciones DeFi, y mucho más.

El equipo del proyecto Solidity fue liderado por Christian Reitwiessner, y lograron crear un lenguaje de programación Turing-completo y orientado a objetos para implementar contratos inteligentes. Ser un lenguaje de alto nivel significa que los desarrolladores crean contratos inteligentes sin tener que manipular información a nivel de sistema, como memoria o bytecode, para realizar cálculos.

La completitud de Turing se refiere a la capacidad de un sistema de manipulación de datos, en este caso un lenguaje de programación, para simular el comportamiento de una máquina de Turing. En teoría, Solidity debía ser capaz de realizar cualquier cálculo que los desarrolladores requirieran de él.

¿En qué lenguajes de programación se basa Solidity?

Solidity se basó y fue influenciado por múltiples lenguajes de programación existentes durante su desarrollo, incluyendo C++, Python y JavaScript.

Similitudes de Solidity con C++

Solidity usa una sintaxis idéntica a C++ para las declaraciones de variables y los bucles for. Además, hay soporte para la sobrecarga de funciones al estilo C++, que se necesita cuando dos funciones tienen el mismo nombre pero difieren en los parámetros que aceptan.

Por último, Solidity permite conversión de tipos tanto implícita como explícita. Esto significa que los tipos de variables pueden convertirse mediante código explícito del desarrollador o se convertirán automáticamente si un cálculo lo requiere.

Similitudes de Solidity con JavaScript

Solidity solía estar muy influenciado por JavaScript. Ahora, la principal similitud visible está en el uso que hace Solidity de la palabra clave 'function' para definir funciones.

Para los desarrolladores familiarizados con algunas de las mayores influencias de Solidity, conocer Solidity será bastante sencillo. Además, Solidity es de tipado estático, permite el uso de librerías así como la creación de tipos complejos.

Similitudes de Solidity con Python

La influencia de Python en Solidity es menos evidente en términos de sintaxis; sin embargo, al igual que Python, Solidity usa linealización C3, herencia múltiple, y mantiene la palabra clave 'super'.

Usando una sintaxis pythónica, Vyper es similar a Solidity, y está diseñado deliberadamente para aumentar la seguridad de los contratos inteligentes usados en blockchains compatibles con EVM.

¿Cómo se usa Solidity?

Debido a su naturaleza como lenguaje de programación para blockchain, Solidity fue creado expresamente para ser compilado en la Ethereum Virtual Machine (EVM). Como tal, Solidity puede escribir contratos inteligentes seguros y compatibles con Ethereum, para cualquier blockchain compatible con EVM.

Esta amplia compatibilidad, sumada a su fácil comprensión y funcionalidad flexible, ha llevado a que Solidity sea el lenguaje de desarrollo blockchain más usado en la industria.

¿Cómo funciona Solidity?

Los desarrolladores de Solidity escriben contratos inteligentes, que son programas que se ejecutan en la EVM. De forma similar a las clases en otros lenguajes, los contratos inteligentes pueden tener múltiples funciones, estados internos y declaraciones públicas.

Los contratos de Solidity se compilan a bytecode para que la EVM los pueda leer. Después de la compilación, los contratos de Solidity no se verán diferentes de los escritos en otros lenguajes de contratos inteligentes para EVM, como Vyper o Huff.

Como cualquier otra herramienta de desarrollo, Solidity pasa por actualizaciones regulares de versión. Ten en cuenta que, dado que los contratos inteligentes se despliegan una vez y son irreversibles después de unirse a la blockchain, las restricciones de versión de Solidity solo importan en el momento de la creación.

Aunque los desarrolladores de Solidity podrían, en teoría, escribir contratos inteligentes de Ethereum directamente en bytecode, los lenguajes de alto nivel como Solidity permiten a los ingenieros escribir contratos de forma más eficiente sin manipulación de bajo nivel.

¿Cómo interactúa Solidity con la EVM?

A continuación se resume cómo funciona Solidity para cambiar el estado de la EVM:

  1. Escribir contratos inteligentes en Solidity
  2. Los contratos inteligentes de Solidity se compilan a bytecode
  3. El bytecode se convierte en opcodes de la EVM
  4. Los opcodes de la EVM alteran el estado de la EVM

La EVM es una máquina de estados virtual y registro de la "computadora global" de Ethereum. En términos simples, la EVM mantiene el estado global de la red, que incluye direcciones, saldos de cuentas y tenencias de tokens.

Los contratos inteligentes de Solidity se escriben para hacer cambios al estado global de la EVM. El estado global de la EVM se cambia mediante acciones como acuñar tokens, enviar y recibir tokens, o liberar activos.

Una serie de operaciones de la EVM, codificadas en opcodes de EVM, provocan estos cambios en el estado global. Cada opcode de la EVM está diseñado para que la EVM realice un tipo específico de cambio de estado, como enviar tokens de una dirección a otra, acuñar tokens, o incluso destruir contratos inteligentes.

En el último paso, la EVM traduce el bytecode del contrato inteligente en opcodes de la EVM, que realizan los cambios necesarios en la blockchain.

Cada opcode conlleva una determinada tarifa de gas, cobrada en ETH para mitigar el riesgo de que un actor malicioso sature la red con una cantidad desmedida de solicitudes. El costo total de gas de una transacción se calcula, entonces, como el precio por unidad de gas multiplicado por el costo total de gas de los opcodes de una transacción.

¿Qué blockchains compatibles con EVM dan soporte a Solidity?

Solidity puede escribir contratos inteligentes para cualquier blockchain compatible con EVM, incluyendo L2s como Polygon, Arbitrum y Optimism. Dado que Solidity es flexible y fácil de usar, es soportado por una gran cantidad de otras blockchains. Estos son algunos de los proyectos más grandes que dan soporte a Solidity:

1. Polkadot

Polkadot es una chain enfocada en integrar múltiples blockchains (es decir, parachains) en una sola chain usando una relay chain. El objetivo de Polkadot es que las parachains sean interoperables para permitir escalabilidad y aumentar el ancho de banda. Un ejemplo de una parachain de Polkadot es Astar, que cuenta con soporte de Alchemy.

2. Avalanche

Avalanche es un competidor de Ethereum que da soporte al desarrollo con Solidity. La arquitectura de Avalanche se basa en una red de tres blockchains: una para emitir y comerciar activos (X Chain), una para coordinar los validadores de la red (P-Chain), y una que permite la creación de contratos inteligentes (C Chain).

3. BNB chain (anteriormente Binance Smart Chain)

Binance Smart Chain comenzó como un token ERC-20 en Ethereum, y para dar soporte a su creciente ecosistema de aplicaciones, se creó la red Binance Smart Chain (BSC). BSC y sus tokens usan Solidity en sus contratos inteligentes. Hoy, Binance Smart Chain se llama BNB Chain.

Solidity es el lenguaje de programación de contratos inteligentes más popular en la industria blockchain. Solidity es el lenguaje nativo para crear contratos inteligentes compatibles con EVM. Incluso fuera de la EVM, hay proyectos que tienen soporte integrado para la máquina virtual de Ethereum, como Solana EVM de Neon Labs.

Dado que la industria blockchain aún está creciendo, puede parecer que Solidity se usa menos en comparación con todos los demás lenguajes de programación. Sin embargo, dentro de la industria, Solidity es el lenguaje de contratos inteligentes con mayor aplicabilidad. Solidity tiene casos de uso sólidos en muchas chains y en los ecosistemas de dApps de web3 de más rápido crecimiento.

Según un informe de Hard Fork de The Next Web, Solidity aparece en el doble de preguntas etiquetadas como blockchain que su competidor más cercano. JavaScript tiene apenas el 4.8% del volumen en comparación con el 9.5% de Solidity.

¿Cómo se usa Solidity en Ethereum?

Ver algunos ejemplos del uso de Solidity en Ethereum te dará una buena idea de la simplicidad del código de Solidity para crear contratos inteligentes flexibles. Los ejemplos de código que se encuentran en la documentación oficial de Solidity son una excelente introducción al lenguaje.

Contratos inteligentes

El siguiente es un ejemplo de código sencillo de la documentación de Solidity que crea una moneda simple en Ethereum.

Ejemplo de código Solidity de un smart contract de moneda simple en Ethereum
Este código crea una moneda.

Observa las declaraciones de funciones, y las variables privadas y públicas del contrato. Las funciones permiten que el contrato realice distintas acciones on-chain, en este caso enviar tokens de una dirección a otra, y acuñar tokens.

Las variables públicas son accesibles desde fuera del contrato y generan automáticamente funciones getter para obtener el valor de esas variables. La palabra clave event permite que las aplicaciones cliente escuchen los cambios provocados por el contrato.

En este ejemplo, un cliente vería el evento sent, que indica a un listener que la dirección msg.sender envió una amount de tokens a la dirección receiver.

¿Qué son los estándares ERC de Solidity?

En la base del diseño de los contratos inteligentes de Solidity están los estándares ERC (Ethereum Request for Comment), que son lineamientos creados para mejorar y estandarizar las implementaciones de distintos tipos de tokens de Ethereum.

Los estándares ERC son propuestos mediante EIPs (Ethereum Improvement Proposals). Una vez que los estándares ERC son aprobados y finalizados, se convierten en un estándar para escribir contratos en Solidity. Esto permite una plantilla común de interfaz de Solidity para construir contratos inteligentes. Cuando los desarrolladores de Solidity construyen tokens que se ajustan a los estándares ERC existentes, saben cómo se comportarán sus tokens de manera adecuada en la blockchain.

Algunos de los estándares ERC más utilizados son:

  • ERC-20 - estándar de tokens fungibles
  • ERC-721 - estándar de tokens no fungibles
  • ERC-1155 - estándar de tokens semi-fungibles
  • ERC-4626 - estándar de vaults con rendimiento

Cómo aprender programación en Solidity

Ya sabes qué es Solidity, pero ¿cómo empiezas a aprenderlo? Al ser el lenguaje de contratos inteligentes más popular, hay una gran cantidad de recursos disponibles en línea para comenzar a aprender desarrollo en Solidity.

Una de las mejores formas de aprender Solidity es con el bootcamp de Solidity de 7 semanas de Alchemy University, creado originalmente por ChainShot, un equipo líder de ingenieros de web3, y rediseñado por Alchemy después de adquirir ChainShot en agosto de 2022.

El bootcamp para desarrolladores de Ethereum originalmente era un curso de certificación de $3,000, y ahora es GRATIS. Asegura tu lugar en la fila para unirte a Alchemy University.

Recursos de Solidity

Esta sección te ofrece algunos de los mejores recursos en línea para aprender desarrollo en Solidity.

  1. ‍Documentación oficial de Solidity - usa la documentación como tu recurso principal para aprender desarrollo en Solidity.
  2. Solidity by Example - una recopilación de ejemplos de Solidity que van desde un programa "Hello World" hasta aplicaciones de wallet y DeFi.
  3. Clean Contracts - una guía sobre cómo escribir contratos inteligentes seguros y predecibles con ejemplos de código en Solidity.‍
  4. Ethernaut de OpenZeppelin - un juego de guerra basado en contratos inteligentes donde cada nivel consiste en hackear un contrato inteligente.

Comienza a construir con Solidity

Este artículo te presentó Solidity y te proporcionó recursos para comenzar a aprender desarrollo en Solidity. Solidity es un lenguaje extremadamente flexible y potente para desarrollar aplicaciones descentralizadas en Ethereum y en blockchains compatibles con EVM.

Una vez que te sientas cómodo con tus conocimientos, no dudes en desplegar una aplicación en la testnet de Goerli, asistir a un hackathon de web3, ¡y empezar a intentar construir una startup de web3!

Background gradient

Construye magia blockchain

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