Hasta ahora Ethereum se parecía mucho a Bitcoin con un sombrero más elegante: cuentas, saldos, transacciones, una tarifa llamada gas. Esta es la lección en la que deja de ser «Bitcoin con pasos extra». Un contrato inteligente — un programa que vive en la cadena y se ejecuta por sí mismo — es lo que convierte a Ethereum de un libro de cuentas de pagos en un ordenador global al que cualquiera puede subir código.
Y casi todo lo que habéis oído — stablecoins, NFT, DeFi, tokens de gobernanza — no es más que contratos inteligentes llevando la contabilidad. Vamos a desmitificar toda la pila.
Un contrato inteligente es código en una dirección
Antes de explicarlo — ¿qué crees que es fundamentalmente un contrato inteligente?
Un contrato inteligente es un programa que ha sido desplegado en su propia cuenta de Ethereum. Recuerda de antes que hay dos tipos de cuentas: las controladas por una clave privada (tu monedero) y las controladas por código. Un contrato inteligente es el segundo tipo. Tiene su propia dirección, tiene código (las reglas que sigue) y tiene almacenamiento (su propia memoria persistente — los datos que conserva entre usos, como saldos o ajustes).
Dos palabras que verás constantemente:
- Desplegar — la transacción única que crea el contrato, subiendo su código a una dirección nueva. Después de eso, el código queda fijo.
- Llamar — invocar una de las funciones del contrato (sus operaciones con nombre). Una llamada puede ser una lectura (gratis, solo mira el almacenamiento) o una transacción (cuesta gas, cambia el almacenamiento).
La analogía más limpia es una máquina expendedora. No negocias con ella, no confías en un dependiente y no puedes engatusarla para que te dé un refresco gratis. Introduces la entrada correcta (monedas + botón) y la máquina garantiza la salida (tu bebida). La lógica está sellada dentro de la caja, visible a través del cristal, y funciona igual para todo el mundo. Un contrato inteligente es una máquina expendedora de valor digital: envía la entrada correcta, obtén la salida garantizada, sin humanos de por medio.
Rellena los huecos.
Pick the right option for each blank, then check.
Un contrato inteligente es desplegado en su propia , y haces que se ejecute realizando una .
Como el código es público, cualquiera puede leer exactamente lo que hará un contrato antes de usarlo. Y como se ejecuta de forma idéntica en cada nodo, ninguna parte puede cambiar las reglas a mitad de partida sin que se note.
Determinista, sin confianza e imparable — y errores permanentes
La propiedad de máquina expendedora tiene una ventaja gloriosa:
- Sin confianza — no necesitas confiar en una contraparte (el otro lado del acuerdo). El código hace cumplir el acuerdo a ambos. Sin agente de depósito que se lleve una comisión, sin «el cheque va de camino».
- Siempre activo — un contrato funciona 24/7, festivos incluidos, mientras Ethereum exista. Sin horario comercial, sin «nuestros servidores están caídos».
- Resistente a la censura — ninguna empresa puede pulsar un interruptor y prohibirte llamar a una función pública.
Pero «se ejecuta exactamente como está escrito, para siempre» corta también por el otro lado. Si el código tiene un error, ese error es también permanente y también se ejecuta exactamente como está escrito. No hay un encargado al que llamar, ni «deshacer», ni departamento de fraude. El lema «el código es la ley» suena empoderador hasta que tu ley tiene una errata.
La historia de Ethereum está salpicada de contratos que hicieron exactamente lo que decía su código (defectuoso). Una familia clásica de errores es la reentrada, donde un contrato paga antes de actualizar sus propias cuentas, permitiendo a un atacante volver a llamar y vaciarlo repetidamente — el mecanismo detrás del incidente de The DAO en los primeros días de Ethereum. La lección no es «las cadenas de bloques están rotas»; es «el código inmutable eleva lo que está en juego al acertar a la primera».
No editas el código desplegado — diseñas en torno a la inmutabilidad. El patrón habitual es un contrato proxy (actualizable): un contrato fino y permanente que hace de puerta de entrada guarda la dirección de un contrato «de lógica» separado y le reenvía las llamadas. Para lanzar una corrección, despliegas nueva lógica y apuntas el proxy hacia ella — la dirección con la que interactúan los usuarios nunca cambia. La otra opción es la migración: desplegar un contrato nuevo y mover usuarios/estado allí. Ambas cuestan esfuerzo real y añaden sus propios riesgos (una actualización maliciosa es una amenaza real), por lo que las auditorías y la inmutabilidad se toman tan en serio.
Un equipo despliega un contrato de préstamos con un error sutil. Dos días después lo explotan. ¿Qué implica aquí «el código es la ley»?
Tokens: por qué no son más que contabilidad
Aquí está el modelo mental más importante de esta lección, y el que casi todos los principiantes entienden mal.
Un token no es una moneda que vuela por la cadena. No hay pequeños objetos-token zumbando de monedero en monedero. Un token es solo una fila en una tabla dentro de un contrato. El contrato mantiene un mapeo — piénsalo como una hoja de cálculo — de address => balance: quién posee cuánto. Tus «1.000 USDC» son literalmente un número guardado junto a tu dirección en el almacenamiento del contrato de USDC.
Una transferencia no es, por tanto, una entrega. Es una edición de la hoja de cálculo: el contrato resta de la fila del emisor e incrementa la fila del receptor en la misma cantidad. Nada se mueve; cambian dos números. Y como el contrato solo desplaza valor entre filas, el suministro total (la suma de todos los saldos) permanece exactamente igual.
Juega con ello. Transfiere algunos tokens entre titulares abajo y observa cómo el suministro total se niega a moverse:
| Titular | Saldo |
|---|---|
| Alice | 600 DEMO |
| Bob | 300 DEMO |
| Carol | 100 DEMO |
Suministro total sin cambios — solo se movieron dos filas
Un token = un mapping(address => balance) dentro de un contrato. Una transferencia solo resta de una fila e incrementa otra — el suministro total se conserva.
Esa propiedad de conservación es la razón entera por la que una transferencia no puede crear ni destruir dinero: lo único que la función transfer puede hacer es mover valor entre filas existentes.
Tu amigo dice: «cuando te envío un token, el token sale de mi monedero y viaja al tuyo por la red». ¿Cuál es la corrección precisa?
ERC-20: el estándar de token fungible
La mayoría de los tokens — stablecoins, tokens de gobernanza, tokens de exchange — son fungibles. Fungible significa que cada unidad es idéntica e intercambiable, exactamente como los euros: tu billete de 5 $ y el mío son perfectamente intercambiables; a nadie le importa cuál tiene. Una unidad de un token fungible vale y se comporta igual que cualquier otra unidad.
Para que todos estos tokens funcionen juntos, Ethereum tiene ERC-20, un estándar. Un estándar (o interfaz) es solo un conjunto acordado de funciones y eventos que un contrato promete implementar. ERC-20 no dicta cómo funciona un token por dentro — dicta la forma del enchufe. Mientras un token implemente las funciones ERC-20, cada monedero, exchange y contrato sabe cómo hablar con él sin código a medida.
La analogía es el USB: nadie se coordina con el fabricante de tu teclado. Todos acordaron la forma del enchufe, así que cualquier dispositivo USB funciona en cualquier puerto USB. ERC-20 es el puerto USB del dinero — acuerda la interfaz una vez y miles de tokens interoperan gratis.
Las funciones principales de ERC-20:
| Función | Qué hace |
|---|---|
totalSupply | Devuelve el número total de tokens existentes (la suma de todas las filas). |
balanceOf | Devuelve cuántos tokens posee una dirección dada (lee una fila). |
transfer | Mueve tokens de tu saldo al de otra persona (edita dos filas). |
approve | Concede a otra dirección permiso para gastar hasta cierta cantidad de tus tokens. |
allowance | Devuelve cuánto puede gastar todavía un gastador aprobado en tu nombre. |
transferFrom | Permite a un gastador aprobado mover tokens de tu saldo (dentro de su límite). |
El par que hay que entender es approve / allowance. A veces quieres que un contrato (digamos, un exchange descentralizado) saque tokens de tu saldo cuando operas. No puedes entregarle tu clave privada, así que en su lugar llamas a approve para fijar un límite (allowance) — un tope de gasto que puede usar mediante transferFrom. Cómodo, pero aquí está la trampa: muchas aplicaciones piden una aprobación ilimitada (un límite máximo) para ahorrarte transacciones repetidas. Si ese contrato se ve comprometido después, el atacante puede vaciar todo lo que aprobaste. Aprobar solo lo que necesitas, y revocar aprobaciones obsoletas, es higiene básica.
Empareja cada término con su significado.
Pick a term, then click its definition.
ERC-721: tokens no fungibles (NFT)
Ahora invierte la propiedad. No fungible significa que cada token tiene un identificador único y no es intercambiable. Un billete de 5 $ es fungible; una entrada de concierto numerada o una escritura de propiedad no lo son — el asiento 3A no es el asiento 22F, y te importa mucho cuál tienes.
ERC-721 es el estándar para estos NFT (tokens no fungibles). En lugar de una tabla address => balance, el mapeo principal es tokenId => owner: cada tokenId único apunta a exactamente una dirección propietaria. balanceOf aquí cuenta cuántos artículos distintos posees, no una cantidad de una cosa fungible.
Un matiz crucial: la parte interesante de un NFT — la imagen, la descripción JSON, los rasgos — normalmente vive fuera de la cadena. Fuera de la cadena significa almacenado fuera de Ethereum, normalmente en IPFS (una red de archivos direccionada por contenido) o una URL web normal. El contrato solo guarda un puntero (un token URI) a esos datos. Así que cuando la gente dice «poseo el NFT», lo que poseen en la cadena es el tokenId y un puntero a la obra de arte — no los píxeles en sí. Si el archivo fuera de la cadena desaparece, el puntero puede quedar colgando. «Posees un recibo que apunta al arte» es el encuadre honesto.
| ERC-20 (fungible) | ERC-721 (no fungible) | |
|---|---|---|
| ¿Intercambiable? | Sí — cada unidad es idéntica | No — cada artículo es único |
| Mapeo principal | address => balance (una cantidad) | tokenId => owner (un id único) |
| Posees | Una cantidad de una cosa | Artículos específicos e individuales |
| Uso típico | Monedas, stablecoins, gobernanza | Arte, coleccionables, entradas, escrituras |
También existe ERC-1155 (el estándar multitoken), que permite a un solo contrato gestionar tanto tokens fungibles como no fungibles a la vez — útil para artículos de juego donde podrías tener 500 pociones idénticas y 1 espada única.
Clasifica cada ejemplo según qué tipo de token lo modela mejor.
Place each item in the right group.
- Una obra de arte digital única
- Una entrada de concierto numerada
- Una stablecoin anclada al dólar
- Un token de gobernanza (1 voto = 1 token)
- Una escritura de propiedad
- Puntos de recompensa anclados a ETH
Por qué importan los estándares
Los estándares son el superpoder silencioso de Ethereum. Como ERC-20 fija la interfaz, un token recién creado funciona al instante en cada monedero y exchange descentralizado (DEX) existente — el día que se despliega, sin integración requerida. El exchange escribió su código contra el estándar, no contra tu token específico.
Esto desbloquea la componibilidad, a menudo llamada «legos del dinero». Cada contrato conforme es un ladrillo con tacos estándar arriba: una aplicación de préstamos puede aceptar cualquier ERC-20, un DEX puede operar cualquier ERC-20, y una tercera aplicación puede apilarse sobre ambas — sin que ninguna se haya conocido. La interoperabilidad y la componibilidad son por qué Ethereum se convirtió en un ecosistema de desarrolladores en lugar de un montón de proyectos aislados incompatibles.
Una startup lanza un nuevo token ERC-20 el lunes. ¿Por qué puede un DEX importante listarlo y operarlo casi de inmediato?
La imagen completa
Big picture
Contratos y tokens
- Contratos y tokens
- Contrato inteligente = código en una dirección
- Tiene código + almacenamiento
- Despliega una vez, luego llama funciones
- Público y determinista
- Compensaciones
- Sin confianza, 24/7, resistente a la censura
- Los errores son permanentes (el código es la ley)
- Actualiza vía proxy / migración
- ERC-20 = fungible
- mapping(address => balance)
- transfer / approve / allowance
- ERC-721 = NFT
- mapping(tokenId => owner)
- Metadatos a menudo fuera de la cadena
- Estándares = interoperabilidad
- Componibilidad / legos del dinero
- Contrato inteligente = código en una dirección
¿Qué describe mejor un contrato inteligente?
Comprueba tu respuesta para continuar.
Puntos clave
Qué recordar
- Un contrato inteligente es código desplegado en su propia dirección, con almacenamiento, que se ejecuta de forma determinista cuando llamas a sus funciones — una máquina expendedora de valor digital.
- Los contratos son sin confianza, siempre activos y resistentes a la censura — pero los errores son permanentes. «El código es la ley» corta por ambos lados; las correcciones se lanzan mediante patrones actualizables/proxy o migraciones, no ediciones.
- Un token es contabilidad, no una moneda: una fila en la tabla
address => balancede un contrato. Una transferencia edita dos filas; el suministro total permanece constante. - ERC-20 es el estándar fungible (unidades idénticas e intercambiables); ERC-721 es el estándar no fungible (
tokenId => ownerúnico, metadatos a menudo fuera de la cadena). ERC-1155 hace ambas cosas. - Estándares = interoperabilidad + componibilidad («legos del dinero»): cualquier token conforme funciona en todas partes, al instante.
Los contratos pueden guardar valor y hacer cumplir reglas — pero ¿quién opera la red que los ejecuta, y qué les impide hacer trampas? A continuación: prueba de participación y staking — cómo Ethereum se asegura a sí mismo poniendo dinero real en juego.