Solidity
El lenguaje principal para contratos inteligentes en Ethereum y las blockchains compatibles.
28 pasos en 1 tours, desde lo básico hasta programas completos.
Los tours
- Primera versión
- 2015
- Creado por
- Gavin Wood, Christian Reitwiessner, and the Ethereum team
- Tipado
- Estático y dimensionado; el entorno adversarial moldea cada idioma
- Los fragmentos siguen
- 0.8
- Extensiones de archivo
- .sol
Para qué sirve
Solidity es el lenguaje dominante de la Ethereum Virtual Machine y sus muchas cadenas compatibles: el código de tokens, exchanges, pools de préstamo, DAOs y registros de NFT. Lo inusual no es la sintaxis — se lee como un JavaScript compacto con tipos — sino la consecuencia: los contratos desplegados son inmutables y guardan fondos reales, así que un bug es una pérdida, a veces de nueve cifras, y cada operación cuesta gas que quien llama paga. El lenguaje es chico; la disciplina alrededor no.
Ese entorno produjo idiomas que no existen en otra parte. Pagos por retiro en vez de envío, porque mandar dinero a una dirección desconocida le entrega el control. El orden checks-effects-interactions, porque la reentrada vació la DAO original. Errores tipados sobre strings de mensaje, topics indexados en los eventos, bloques unchecked y palabras de ubicación de datos, todo porque los bytes y el cómputo van con taxímetro. Las revisiones de seguridad son un oficio propio, y mucho código de producción ensambla componentes auditados de OpenZeppelin en vez de reinventarlos.
La cadena de herramientas es su propio mundo: Foundry y Hardhat para pruebas (a menudo con fuzzing), solc compilando a bytecode de la EVM, y testnets haciendo de staging. En lo profesional es un lenguaje de especialistas — una comunidad chica frente a las mayores, inusualmente bien paga, donde leer importa tanto como escribir porque buena parte del trabajo es auditar contratos ajenos.
De dónde viene
Solidity fue propuesto por Gavin Wood en 2014 y desarrollado bajo Christian Reitwiessner en el proyecto Ethereum, saliendo en 2015 junto a la red para la que se construyó. Las inspiraciones tempranas fueron la accesibilidad de JavaScript y la disciplina de tipos de C++; el modelo orientado a contratos — código más almacenamiento viviendo en una dirección — vino del diseño mismo de Ethereum.
El hackeo de la DAO en 2016, un exploit de reentrada que vació un tesoro entonces enorme y partió Ethereum en dos cadenas, le enseñó al ecosistema su lección definitoria: los usuarios del lenguaje son adversarios. Los años siguientes trajeron endurecimiento constante — ubicaciones de datos explícitas y visibilidad más estricta en 0.5, ABIEncoderV2, y la aritmética verificada por defecto de 0.8, que retiró la biblioteca SafeMath de la que dependió una generación entera de contratos.
Desde 0.8 el lenguaje evoluciona con cuidado — errores tipados, tipos de valor definidos por el usuario, soporte de almacenamiento transitorio — mientras el centro de gravedad se movió a las cadenas de capa 2 que conservan la EVM y por lo tanto Solidity. Existen Vyper y otros lenguajes de EVM, pero los efectos de red, la familiaridad de los auditores y el ecosistema OpenZeppelin mantienen a Solidity como el defecto.
Cómo se siente teclearlo
Solidity se escribe como una lista de verificación de seguridad: palabras largas y exactas — uint256, external, immutable, calldata — repetidas hasta el reflejo, con constantes en SCREAMING_CASE y funciones en camelCase. La ceremonia es constante (línea SPDX, pragma, llaves de contract) y el vocabulario es compacto pero denso: require y revert y emit abren líneas, msg.sender aparece en todas partes, y mapping(address => uint256) es prácticamente una palabra. Los identificadores largos rinden menos tokens por pulsación que la mayoría de los lenguajes, así que la métrica de ritmo corre más baja aquí — tipeo deliberado para un lenguaje deliberado.
28 pasos en 1 tours, desde lo básico hasta programas completos.
Documentación oficial
- soliditylang.org
- La documentación del lenguaje
- Solidity by Example
- OpenZeppelin Contracts
- El portal de desarrollo de Ethereum