Ha llegado el momento de embarcarse en la aventura de ser un desarrollador de blockchain, y no hay mejor ruta para ello que dominar Solidity, el idioma esencial de Ethereum. Este camino está abierto tanto para los veteranos de la programación como para los novatos.
Ser un creador en el mundo del blockchain significa entrar en un campo donde el promedio de ingresos ronda los 157 mil dólares (142 mil EUR más o menos). Aunque la competencia ha crecido recientemente, la recompensa por tu destreza sigue siendo considerable. Este manual que tienes en tus manos es tu pasaporte para ese mundo.
Prepárate para sumergirte en un manual extenso lleno de código. Vas a sumergirte en la programación de manera práctica. Te animo a que cada línea de código nazca de tu esfuerzo y entendimiento, sin atajos, para una comprensión más profunda.
Imagina el resultado: una aplicación descentralizada en web3, un sistema donde el préstamo y el intercambio de criptoactivos ocurren sin intermediarios.
La escritura manual de código no es solo una técnica, es la forma más sólida de aprender.
A continuación, te desvelaremos lo que vas a aprender. Lo estructuraremos en tres artículos distintos. En este primero, nos centraremos en los dos primeros puntos (1 y 2) y, al concluir, te proporcionaremos un enlace para que continúes descubriendo los siguientes temas.
- Configurar tu primer proyecto de Contrato Inteligente con Solidity y Hardhat.
- Dominar el arte de declarar variables y definir funciones en Solidity.
- Crear, desde 0, un contrato inteligente para operaciones de préstamo.
- Experimentar con pruebas y depuración de tus contratos inteligentes en Ethereum.
- Dar vida al aspecto visual de tu aplicación de préstamos descentralizada.
Pero recuerda, el verdadero aprendizaje surge de la práctica real. Por eso, nos centraremos en construir una aplicación de financiación descentralizada (DeFi) para préstamos, una de las aplicaciones más innovadoras y fundamentales en el ámbito de las finanzas descentralizadas.
Estamos a punto de comenzar este viaje juntos.
¿Te animas? Bien, empecemos con los dos primeros puntos…
Configurar tu primer proyecto de Contrato Inteligente con Solidity y Hardhat
Vamos a sumergirnos en el mundo de la programación con Solidity. El primer paso será organizar tu espacio de trabajo: crea una carpeta solidity-aventura
en tu escritorio. Aquí es donde la magia comienza, utilizando Hardhat, nuestro compañero en el desarrollo de aplicaciones descentralizadas.
Antes de continuar, asegúrate de que Node.js sea parte de tu conjunto de herramientas. Si aún no lo tienes, es un buen momento para visitar la página https://nodejs.org/en/ y seguir el proceso de instalación.
Una vez que tengas Node.js, abre tu consola de comandos (terminal) y con un simple npm init -y
, pondrás en marcha tu proyecto. Es como encender el motor de tu nave espacial.
Si Yarn aún no está en tu repertorio, puedes convocarlo también desde la misma terminal usando npm i -g yarn
. Luego, dentro de tu flamante carpeta, un comando mágico: yarn add hardhat
, invocará a Hardhat en tu entorno.
¡IMPORTANTE!
Si al ejecutar
yarn
obtienes un error de este tipo “yarn : No se puede cargar el archivo NombreArchivo porque la ejecución de scripts está deshabilitada en este sistema. Para obtener más información…“, esto indica que la política de ejecución de scripts de PowerShell en tu sistema está configurada para restringir la ejecución de scripts. Esto es una medida de seguridad en Windows para prevenir la ejecución no autorizada de scripts potencialmente dañinos.Para resolver este problema, puedes cambiar temporalmente la política de ejecución para permitir scripts. Esto se hace ejecutando PowerShell como administrador y cambiando la política de ejecución. Aquí te mostramos cómo hacerlo:
Set-ExecutionPolicy RemoteSigned
Con la invocación de npx hardhat
, aparecerán preguntas esenciales. Solo necesitas situarte sobre la opción “Create a JavaScript project” y presionar “Enter” en cada paso, dejando que el destino se encargue del resto:
Verás materializarse una serie de archivos esenciales.
Dentro del archivo hardhat.config.js
se esconden los secretos de la configuración de tu proyecto. Los contratos inteligentes Solidity cobrarán vida en la carpeta contracts/
, mientras que la carpeta test/
se llenará con los retos que pondrán a prueba tu ingenio y habilidades.
Con estos pasos, habrás preparado el terreno para lo que viene. Pronto, te guiaremos a través del proceso de dar vida a los contratos inteligentes y a desarrollar esa aplicación de préstamos descentralizada que tanto anhelas explorar.
Dominar el arte de declarar variables y definir funciones en Solidity
En las profundidades de tu directorio aprendizaje-solidity
, te toparás con una subcarpeta titulada contracts
. Allí yace un contrato conocido como Lock.sol
, que vamos a eliminar. En su lugar, daremos vida a uno nuevo: Lending.sol
.
Ahora, es tiempo de plasmar el siguiente código de programación:
pragma solidity 0.8.0;
contract Lending {
constructor() {}
}
La primera línea es una declaración de intenciones: nos decantamos por la versión 0.8.0 de Solidity. A continuación, proclamamos la existencia del contrato Lending, dotándolo de un constructor()
, el rito inicial que se ejecuta al nacer el contrato.
La primera línea es una declaración de intenciones: nos decantamos por la versión 0.8.0 de Solidity. A continuación, proclamamos la existencia del contrato Lending, dotándolo de un constructor()
, el rito inicial que se ejecuta al nacer el contrato.
Esta es la estructura principal básica de un contrato inteligente en Solidity. Al compilar tu contrato con npx hardhat compile
, se desvelarán los posibles errores.
Probablemente, el compilador te susurre algo así:
The Solidity version pragma statement in these files doesn’t match any of the configured compilers in your config.
Esto se traduce en que tu herramienta Hardhat está algo desorientada sobre qué versión de Solidity ejecutar. Sin embargo, esto tiene fácil arreglo en la configuración.
Dirígete al archivo hardhat.config.js
, que se halla en la raíz de tu proyecto, y modifica esta línea:
module.exports = {
solidity: "0.8.17",
};
Reemplázala por solidity: "0.8.0"
. Ahora sí, npx hardhat compile
debería funcionar sin contratiempos.
Avancemos al terreno de las variables.
Las variables en Solidity son simples y hay de varios tipos:
Numbers
Se presentan bajo formas como uint256, uint8, uint128, int128
y puedes definir un número así:
uint256 public miNumero;
Aquí, public
es la visibilidad y miNumero
, el nombre de la variable. Para actualizar un número, simplemente asignas un valor:
miNumero = 123;
Por lo general, optarás por uint256
debido a su amplia capacidad de almacenamiento.
Los otros tipos, como uint8
o uint128
, tienen su momento y lugar específicos.
Strings
Se manifiestan como string
o bytes
y te permiten albergar hasta 10,000 caracteres de esta manera:
string public miArticulo = "esto es una cadena de prueba";
Bytes
Se caracterizan como bytes32, byte, bytes
y son útiles para almacenar texto o datos binarios.
El bytes32
es el preferido por su eficiencia, permitiéndote guardar alrededor de 32 caracteres.
Addresses
Se reconocen como address y address payable
, que no son más que direcciones de Ethereum.
Las address payable
te permiten recibir fondos de transferencias en Ethereum.
Las direcciones en Solidity se anotan así:
address public cuentaUsuario = 0xdafea492d9c6733ae3d56b7ed1adb60692c98bc5;
Mappings and arrays
Se definen como mapping y uint256[]
y son ideales para almacenar voluminosas cantidades de información.
Un mapeo define una relación clave-valor así:
mapping (address => uint256) public misDirecciones;
Y le asignas valores de esta forma sencilla:
misDirecciones[0xdafea492d9c6733ae3d56b7ed1adb60692c98bc5] = 10;
Con los arrays, tomas un tipo existente, cómo puede ser uint256 y le añades corchetes:
uint256[] public misNumeros;
Luego le asignas un valor
misNumeros[1] = 20;
Los mappings requieren una comprensión más profunda que abordaremos más adelante.
Booleans
El booleano es la variable más simple, ya que solo puede ser: true o false
.
bool public usuarioValido;
usuarioValido = true;
Inicialmente, todos los booleanos son false
.
Exploraremos estas variables y funciones en la siguiente sección. Pero ahora, hablemos de funciones.
Functions
Las funciones son las celdas donde tu código cobra vida, cada una con un propósito definido. Veamos un ejemplo:
function estaEsMiFuncion(uint256 _miNumero) public onlyOwner returns(uint256) {}
El nombre de la función es estaEsMiFuncion
y recibe un parámetro denominado _miNumero
.
La función procesará el número recibido y, tras algunas operaciones, devolverá otro número.
El modificador public
indica que cualquier persona puede ejecutarla, y onlyOwner
asegura que solo el dueño del contrato tenga acceso.
Finalmente, returns(uint256)
nos adelanta que habrá un número de retorno del tipo uin256
.
💰📊 Gracias por llegar hasta aquí. Con estas bases, ya estamos listos para construir una Dapp de préstamos tan sencilla como potente, ¡tu puerta de entrada al mundo de DeFi!
¿Quieres saber más? Sigue leyendo… 👇👇
Crear, desde los cimientos, un contrato inteligente para operaciones de préstamo.
Y por cierto, ¡RECUERDA! Piensa en GRANDE, piensa en CRIPTO. 😉🦊