Contenido del curso
Entendiendo la EVM
Herramientas de Solidity
Retiros y control de permisos
Interactuando con la Blockchain de Celo
Interactuando con Smart Contracts
- 16

Conectando React con Celo usando ContractKit
09:34 min - 17

Conectar Valora a contratos inteligentes con Wallet Connect
05:16 min - 18

Despliegue de Contratos Inteligentes en Testnet Alfajores con Remix
03:07 min - 19

Liberación arbitral con Celo ContractKit
04:30 min - 20

Firma de transacciones con WalletConnect y Valora
03:06 min
Sigue practicando
address en Solidity y msg.sender
Resumen
El tipo de dato address es una de las particularidades más distintivas de Solidity y no lo vas a encontrar en otros lenguajes de programación tradicionales. Si estás aprendiendo desarrollo de contratos inteligentes, entender cómo funciona este tipo de dato es clave para identificar quién interactúa con tu contrato y para mover valor dentro de la blockchain.
¿Qué representa el tipo de dato address en Solidity?
Un address representa un número de cuenta dentro de la blockchain. Hablamos de esas direcciones largas que comienzan con 0x seguidas de una cadena de caracteres. Cada cuenta en redes como Ethereum o Celo tiene una dirección única, y Solidity la trata como un tipo de dato propio para que puedas guardarla, leerla y usarla dentro de tus contratos.
¿Qué es address en Solidity? Es un tipo de dato que almacena la dirección de una cuenta en la blockchain, expresada como un valor hexadecimal que empieza con
0x. Sirve para identificar usuarios o contratos.
¿Por qué address es tan especial?
Tiene dos particularidades que lo hacen distinto al resto de los tipos de datos:
- Viene representado en el programa a través del parámetro
message.sender, que indica qué dirección está ejecutando un contrato o una función. - Permite hacer transferencias de valor, ya sea Ether en la red Ethereum o Celo en la red Celo.
El primer punto te permite saber quién interactúa con tu contrato. El segundo abre la puerta a mover dinero programáticamente, algo que vas a ver con más detalle en las próximas clases.
¿Cómo funciona message.sender al desplegar un contrato?
Cuando alguien ejecuta una función o despliega un contrato, Solidity rellena automáticamente la variable message.sender con la dirección que originó esa acción. Eso significa que dentro del código tienes acceso directo a quién está interactuando, sin necesidad de pedirlo como parámetro.
En el ejemplo trabajado en Remix, el contrato declara una variable de tipo address llamada creador. En el constructor, toma el valor de message.sender y lo guarda en esa variable. Así, queda registrado para siempre quién desplegó el contrato.
solidity address creador;
constructor() { creador = msg.sender; }
¿Cómo se prueba esto en Remix?
El flujo dentro del entorno del navegador es directo:
- Compilar el contrato desde la pestaña compile.
- Ir al ambiente de prueba y ejecución, y hacer deploy.
- Consultar la función
creadorpara ver la dirección almacenada.
Al pinchar la función, Remix devuelve una dirección como 0x5B..., que coincide exactamente con la cuenta seleccionada arriba en el panel, la misma que hizo el despliegue. Si cambias a otra cuenta, por ejemplo una que empieza por 0x3C..., y vuelves a desplegar, el nuevo contrato guarda esa segunda dirección como creador.
¿Qué guarda message.sender? Guarda la dirección de la cuenta que está ejecutando la función o desplegando el contrato en ese momento. Cambia según quién llame al contrato.
¿Para qué sirve guardar la dirección del creador?
Registrar al creador es un patrón muy común en contratos inteligentes. Te permite definir permisos, restringir funciones administrativas o llevar trazabilidad de quién originó el contrato. Más adelante vas a ver cómo este mismo principio se aplica para validar quién puede ejecutar ciertas funciones, y cómo el address habilita transferencias de valor entre cuentas.
Si ya probaste el ejemplo en Remix, cuéntame en los comentarios qué dirección apareció como creador en tu primer despliegue.