Fundamentos del lenguaje
28 pasos en 9 series de Solidity.
Solidity es el lenguaje de la Ethereum Virtual Machine: contratos que guardan fondos y hacen cumplir reglas una vez desplegados, donde un bug no es un ticket sino una pérdida, y cada línea cuesta gas que alguien paga. Esa disciplina moldea el dialecto entero — enteros dimensionados, ubicaciones de datos explícitas, aritmética verificada desde 0.8, errores tipados sobre strings, y patrones como el pago por retiro que existen puramente porque el entorno adversarial los exige.
Este tour teclea el lenguaje de trabajo a través de una cooperativa de huerto comunitario: forma de contrato y tipos de valor, view contra pure, constant e immutable, mappings y structs y enums, require y errores tipados, modificadores, eventos con topics indexados, payable y el patrón de retiro, ubicaciones de datos, bucles conscientes del gas, herencia e interfaces y contratos abstractos, bibliotecas con using-for, try/catch en llamadas externas, huellas keccak256, el contexto de bloque, aritmética unchecked y el par de catch-alls. El Bis despliega tres contratos completos: el padrón de membresía, un reparto de cosecha por horas y una votación de un miembro un voto.
Contratos
- La forma del contratoUn contrato es estado más funciones, desplegado en una dirección.
- Tipos de valorEnteros dimensionados, address, bool, bytes32: los primitivos.
- view y pureview lee estado, pure no toca nada; fuera de cadena ambas son gratis.
- constant e immutableHorneado al compilar, o fijado una vez al desplegar.
Almacenamiento
- MappingsEl almacén clave-valor; las claves ausentes se leen como cero.
- Structs y arreglosAgrupa campos y empújalos a una lista que crece.
- EnumsNombra las fases; camínalas en orden con un cast.
Guardas
- require y revertGuardas con mensaje, o errores tipados propios.
- ModificadoresEnvuelven una función; _ marca dónde corre el cuerpo.
- Errores tipadosContexto con tipos, más barato que los strings de revert.
Ether y eventos
- EventosLa bitácora: los campos indexed se vuelven topics buscables.
- payable y receiveAceptar ether es opcional; receive atrapa los envíos planos.
- El patrón de retiroRetira, no envíes: pon el saldo en cero antes de mandar.
Datos y gas
- Ubicación de datosstorage persiste, memory es borrador, calldata es la llamada.
- Bucles y gasCada pasada cuesta gas; los arreglos acotados mantienen el bucle honesto.
- unchecked0.8 verifica la aritmética; unchecked renuncia donde es seguro.
Composición
- Herenciavirtual invita a sobreescribir; super alcanza al padre.
- InterfacesLa forma de un contrato que solo conoces por dirección.
- Contratos abstractosDejan un hueco que el hijo debe llenar.
- BibliotecasAyudantes puros, injertados a un tipo con using-for.
El entorno
- El contexto globalmsg.sender, block.timestamp, block.number: el entorno.
- keccak256La huella de lo que sea, vía abi.encodePacked.
- try/catchProtege llamadas externas que pueden revertir.
Superficies
- Getters y tuplasEl estado public escribe su getter; las funciones devuelven tuplas.
- fallbackLos catch-alls: fallback para llamadas desconocidas, receive para ether.
Bis
- coop_membership.solEl padrón de la cooperativa: entrar, pagar cuotas, postularse.
- harvest_split.solReparte lo cosechado por horas, pagado por el patrón de retiro.
- orchard_votes.solUn miembro un voto: proponer, votar al plazo, contar.