12 min de lectura

Smart Contracts en Solidity: Guía Completa para Desarrolladores Web3

Aprende a desarrollar smart contracts en Solidity desde cero. Conceptos fundamentales, mejores prácticas y deploy en Ethereum/Polygon.

smart contractssolidityweb3ethereumblockchaindesarrollo blockchain

¿Qué es un Smart Contract?

Un smart contract es un programa que se ejecuta en una blockchain. Una vez desplegado, su código es inmutable y se ejecuta exactamente como fue programado, sin intermediarios.

Características principales:

  • Inmutables: No se pueden modificar después del deploy
  • Transparentes: Cualquiera puede ver el código
  • Determinísticos: Misma entrada = misma salida, siempre
  • Autónomos: Se ejecutan solos cuando se cumplen condiciones

Empezando con Solidity

Solidity es el lenguaje más usado para smart contracts en Ethereum y blockchains compatibles (Polygon, BSC, Arbitrum, etc.).

Tu primer contrato

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

contract MiPrimerContrato { string public mensaje; address public owner;

constructor(string memory _mensajeInicial) { mensaje = _mensajeInicial; owner = msg.sender; }

function actualizarMensaje(string memory _nuevoMensaje) public { require(msg.sender == owner, "Solo el owner puede actualizar"); mensaje = _nuevoMensaje; } }

Desglose del código:

  • pragma solidity ^0.8.19: Versión del compilador
  • contract: Define el smart contract (similar a una clase)
  • public: Variables/funciones accesibles externamente
  • constructor: Se ejecuta una sola vez al deploy
  • msg.sender: Dirección que llama la función
  • require: Valida condiciones (revierte si falla)

Tipos de Datos en Solidity

Tipos de valor

uint256 numero = 100;        // Entero sin signo (0 a 2^256-1)
int256 numeroNegativo = -50; // Entero con signo
bool activo = true;          // Booleano
address wallet = 0x123...;   // Dirección Ethereum (20 bytes)
bytes32 hash = 0xabc...;     // Bytes fijos

Tipos de referencia

string nombre = "Kevin";           // Texto dinámico
uint[] numeros = [1, 2, 3];       // Array dinámico
mapping(address => uint) balances; // Key-value store

Patrones Comunes en Smart Contracts

1. Control de Acceso (Ownable)

modifier onlyOwner() {
    require(msg.sender == owner, "No autorizado");
    _;
}

function funcionAdmin() public onlyOwner { // Solo el owner puede ejecutar }

2. Pausable

bool public paused;

modifier whenNotPaused() { require(!paused, "Contrato pausado"); _; }

function pause() public onlyOwner { paused = true; }

3. Reentrancy Guard

bool private locked;

modifier noReentrant() { require(!locked, "Reentrancy detectado"); locked = true; _; locked = false; }


Herramientas de Desarrollo Web3

HerramientaUso
HardhatFramework de desarrollo y testing
FoundryTesting ultrarrápido en Rust
ThirdwebDeploy simplificado + SDKs
OpenZeppelinContratos auditados y seguros
RemixIDE online para prototipos

Deploy con Thirdweb

Thirdweb simplifica el deploy y la interacción con contratos:

import { ThirdwebSDK } from "thirdweb";

const sdk = ThirdwebSDK.fromPrivateKey(PRIVATE_KEY, "polygon");

// Deploy de un contrato const contractAddress = await sdk.deployer.deployNFTCollection({ name: "Mi Colección", primary_sale_recipient: "0x...", });

// Interactuar con el contrato const contract = await sdk.getContract(contractAddress); await contract.erc721.mint({ name: "NFT #1", image: "ipfs://..." });


Mejores Prácticas de Seguridad

1. Usa OpenZeppelin

No reinventes la rueda. Usa contratos auditados:
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

2. Valida todas las entradas

function transferir(address to, uint amount) public {
    require(to != address(0), "Direccion invalida");
    require(amount > 0, "Monto debe ser mayor a 0");
    require(balances[msg.sender] >= amount, "Saldo insuficiente");
}

3. Haz auditorías antes de mainnet

  • Slither (análisis estático)
  • Mythril (detección de vulnerabilidades)
  • Auditoría profesional para proyectos serios

4. Usa testnets primero

Siempre prueba en Sepolia, Mumbai o Goerli antes de mainnet.

Recursos para Seguir Aprendiendo

  • CryptoZombies: Curso interactivo gratuito
  • Solidity by Example: Patrones con código
  • Ethereum Yellow Paper: Para los más técnicos
  • OpenZeppelin Docs: Referencia de contratos seguros

Conclusión

El desarrollo Web3 abre oportunidades únicas: DeFi, NFTs, DAOs, gaming on-chain. Solidity es tu puerta de entrada a este ecosistema.

¿Necesitas ayuda con un proyecto blockchain? Hablemos sobre cómo implementar smart contracts para tu caso de uso.

Preguntas Frecuentes

¿Qué lenguaje se usa para programar smart contracts?
El lenguaje más popular es Solidity, usado en Ethereum y blockchains compatibles como Polygon, BSC y Arbitrum. También existe Vyper (similar a Python) y Rust para Solana. En Soluciones Web trabajamos principalmente con Solidity por su amplia adopción y herramientas maduras.
¿Cuánto cuesta desarrollar un smart contract?
Un smart contract simple (token ERC-20, NFT básico) puede costar entre $500-$1500 USD. Contratos más complejos como DEX, staking o marketplaces pueden superar los $5000 USD. El costo de deploy (gas) depende de la red elegida.
¿Es seguro usar smart contracts?
Los smart contracts son tan seguros como su código. Es crucial usar librerías auditadas como OpenZeppelin, realizar testing exhaustivo y considerar una auditoría profesional para proyectos con fondos significativos. Los errores en smart contracts pueden ser irreversibles.
¿Puedo modificar un smart contract después de desplegarlo?
Por defecto, los smart contracts son inmutables. Sin embargo, existen patrones como 'proxy contracts' que permiten actualizar la lógica manteniendo el estado. Esto debe planificarse desde el diseño inicial.
¿Qué blockchain es mejor para mi proyecto?
Ethereum tiene mayor seguridad y adopción pero fees más altos. Polygon ofrece fees muy bajos manteniendo compatibilidad con Ethereum. BSC es popular en Asia. La elección depende de tu audiencia, presupuesto y requerimientos de seguridad.

¿Necesitas ayuda con tu proyecto?

En Soluciones Web desarrollamos soluciones de IA, automatización y desarrollo web. Consultoría inicial gratuita.