Circle Internet Financial
Circle Internet Financial Logo

Oct 20, 2026

October 31, 2023

Introducción a Solidity y a los smart contracts de web3

lo que aprenderás

Los smart contracts son programas que residen y se ejecutan en una blockchain. Puedes verlos como acuerdos digitales autoejecutables con reglas escritas directamente en su código.

Introducción a Solidity y a los smart contracts de web3

Los smart contracts son programas que residen y se ejecutan en una blockchain. Puedes verlos como acuerdos digitales autoejecutables con reglas escritas directamente en su código

Las stablecoins (como USDC de Circle) son una evolución del dinero: te permiten mover fondos casi al instante, a un costo cercano a cero y en todo el mundo. Si quieres preparar tu infraestructura de pagos para el futuro, necesitas entender y admitir estos pagos digitales.

Entonces, ¿cómo integras monedas digitales como USDC en tu pila tecnológica? Afortunadamente, con un poco de conocimiento previo y las herramientas que ofrece Circle, no solo es posible, sino también sencillo.

En este artículo, te daremos la información necesaria para integrar monedas digitales. Analizaremos qué es la blockchain, cómo la blockchain de Ethereum dio inicio a la era de los smart contracts, cómo funcionan los smart contracts y Solidity, y cómo puedes usar stablecoins como USDC para impulsar tu tecnología de pagos.

Comencemos con un poco de contexto.

Blockchain, moneda digital y Web3

Todo comenzó con Bitcoin en 2008, el primer sistema que permitió la transferencia de dinero de igual a igual a través de Internet sin necesidad de un tercero de confianza, como un banco, una corporación o un gobierno.

Esto fue posible gracias al avance que hoy conocemos como blockchain. Las blockchains pueden considerarse almacenes de datos sin permisos donde ninguna persona o corporación posee o controla los datos. Incluso con esta descentralización, se garantiza que los datos sean veraces. (Para obtener más información, aquí tienes un buen tutorial).

Bitcoin sigue estando a la vanguardia de las blockchains públicas, pero solo sirve para transferir bitcoin. Debido a esta limitación, algunos desarrolladores decidieron crear una nueva blockchain con más capacidades: Ethereum. Piensa en Ethereum como una computadora descentralizada que puede transferir valor entre usuarios (como Bitcoin) y también ejecutar programas y almacenar datos.

Estos programas que se ejecutan en Ethereum se denominan smart contracts. Pueden parecerse a códigos que hayas visto en otros lugares, pero tienen algunas diferencias importantes que los hacen ideales para potenciar aplicaciones descentralizadas (dapps) y permitir las finanzas descentralizadas (DeFi).

¿Qué son los smart contracts?

Los smart contracts son programas que residen y se ejecutan en una blockchain. Puedes verlos como acuerdos digitales autoejecutables con reglas escritas directamente en su código. Estos contratos están programados para ejecutar y hacer cumplir automáticamente las acciones acordadas cuando se cumplen las condiciones predefinidas. Al hacerlo, los smart contracts eliminan la necesidad de intermediarios, como abogados o instituciones externas, para supervisar o hacer cumplir los acuerdos y las reglas.

La forma más sencilla de entender los smart contracts es mediante la analogía clásica de una máquina expendedora. Una máquina expendedora está programada para proporcionar ciertos productos a ciertos precios si un usuario interactúa con ella de una manera determinada (es decir, introduciendo dinero y seleccionando el artículo que desea). No necesitas un tercero, como un minorista, para actuar como intermediario entre los productos de la máquina y tú. En otras palabras, al usar la máquina expendedora, has eliminado la necesidad de un tercero.

La plataforma blockchain en la que reside el smart contract proporciona la infraestructura necesaria para la ejecución del contrato. En el caso de Ethereum (y blockchains como Polygon y Avalanche), esa infraestructura se conoce como Ethereum Virtual Machine (o EVM).

Cuando un smart contract se despliega en una blockchain, se convierte en parte del historial de la misma. El código y los datos almacenados en el contrato también pasan a formar parte del estado global de la blockchain.

Para garantizar la transparencia, la seguridad y la resistencia a la manipulación, los smart contracts en la mayoría de las blockchains son inmutables. En otras palabras, es imposible alterar el código de un contrato una vez que se ha desplegado. (Ten en cuenta que todavía es posible alterar los datos almacenados en el contrato a través de funciones que permiten la modificación de dichos datos).

Aunque los smart contracts fueron introducidos por primera vez por el científico informático y criptógrafo Nick Szabo en la década de 1990, solo se generalizaron con el lanzamiento de Ethereum.

¿Cómo funcionan los smart contracts?

Así es como funcionan los smart contracts:

  • 1. Creación: Un desarrollador escribe el código de un smart contract, especificando las reglas, condiciones y acciones que el contrato debe llevar a cabo. 2. Despliegue: El código del smart contract se despliega en una red blockchain, convirtiéndose en una parte permanente del historial de la blockchain. Al contrato se le asigna una dirección única que sirve como su identificador en la red. En el caso de los contratos en Ethereum, se ejecuta un fragmento de código conocido como constructor. Esto ocurre solo una vez y nunca puede volver a invocarse. 3. Ejecución: Una vez que el contrato ha sido desplegado, cualquiera puede invocar funciones públicas dentro del contrato. Si se cumplen las condiciones especificadas, el código se ejecuta y se realizan los cambios de estado, si los hay.

Es importante enfatizar que cualquiera puede invocar funciones públicas en un smart contract y que los smart contracts son inmutables. Una vez que un smart contract se despliega, permanece allí para siempre (al menos mientras exista la blockchain) y está disponible para todos.

Aplicaciones de los smart contracts

La gran mayoría de Web3 funciona gracias a los smart contracts, incluyendo:

  • 1. Stablecoins: Monedas digitales creadas para mantener un valor estable (como el USDC de Circle). 2. DeFi: Exchanges descentralizados, protocolos de préstamo, mecanismos de staking e incluso loterías. 3. NFTs: Almacenan y verifican activos no fungibles o NFTs. 4. Cadena de suministro: Rastrea y verifica el movimiento de mercancías, reduciendo el fraude y aumentando la transparencia. 5. Bienes raíces: Automatiza transferencias de propiedades, contratos de alquiler y gestión de títulos. 6. Gaming: Implementa juegos donde es posible poseer e intercambiar activos de juego. 7. DAO: Crea organizaciones autónomas descentralizadas, o DAO, y a su vez, permite realizar votaciones, ejecutar decisiones y habilitar la gobernanza comunitaria.

Introducción a Solidity

La mayoría de las blockchains tienen un lenguaje de programación personalizado que se utiliza para crear smart contracts. En Ethereum y en blockchains basadas en EVM como Polygon, Avalanche y Arbitrum, ese lenguaje es Solidity.

Solidity es un lenguaje fuertemente tipado que se inspira en JavaScript, Python, C++ y Java. Si estás familiarizado con alguno de estos lenguajes, te resultará fácil aprender Solidity.

Estas son algunas características destacadas de Solidity:

  • 1. Orientado a contratos: El diseño de Solidity gira en torno al concepto de contratos, que encapsulan el código y los datos de la aplicación. Los contratos pueden contener funciones, variables de estado y eventos. Lo más parecido a los contratos de Solidity son las clases de Java. 2. Tipos de datos: Solidity admite una variedad de tipos de datos, incluidos enteros (uint256), booleanos (bool), cadenas (string), matrices y estructuras definidas por el usuario (struct). Al igual que otros lenguajes fuertemente tipados como C++, cada dato debe estar etiquetado explícitamente con un tipo de dato. 3. Eventos: Los contratos de Solidity pueden emitir eventos, que sirven como mecanismo de comunicación entre el contrato y las aplicaciones externas. Los eventos proporcionan una forma de notificar a los sistemas externos sobre sucesos importantes dentro del contrato (como la transferencia de un NFT). 4. Herencia y modularidad: Solidity admite la herencia, lo que permite a los desarrolladores crear contratos modulares que heredan propiedades y métodos de contratos padres. Esto promueve la reutilización y la organización del código. 5. Composabilidad: Solidity también te permite interactuar con cualquier contrato ya desplegado en la blockchain. Esta es posiblemente su característica más potente, ya que te permite construir sobre lo que ya está disponible. 6. Medidas de seguridad: Solidity proporciona características como control de acceso, especificadores de visibilidad y modificadores para garantizar que los contratos se ejecuten de forma segura. 7. Ecosistema de desarrollo: Solidity está respaldado por un sólido ecosistema de herramientas de desarrollo. El compilador de Solidity convierte el código Solidity en bytecode que puede ejecutarse en la blockchain. Los entornos de desarrollo integrados (IDE) y los frameworks de prueba como Hardhat y Truffle facilitan la escritura, el despliegue y la prueba de los smart contracts. 8. Actualizaciones: Los contratos en la blockchain son inmutables una vez desplegados. Para gestionar cambios y mejoras, los desarrolladores utilizan versiones y patrones de contratos proxy para facilitar las actualizaciones de los contratos manteniendo la compatibilidad con los sistemas existentes.

A continuación, veamos algunos contratos de muestra para que puedas hacerte una idea de cómo funciona Solidity.

Ejemplo 1: Un contrato de votación simple

Ejemplo 1: Un contrato de votación simple

En este ejemplo, implementaremos un sistema de votación. Este es un caso de uso común para la blockchain (aunque este es un ejemplo extremadamente simplificado). Aquí permitiremos que el público vote por un candidato y luego les permitiremos verificar el número de votos por candidato.

// SPDX-License-Identifier: MIT
// Define the version of solidity we’re using
pragma solidity ^0.8.0;
// Core code goes into the Contract
contract VotingContract {
    // Mapping to store the vote count for each candidate
    mapping (string => uint256) public votes;

    // Function to vote for a candidate
    function voteForCandidate(string memory candidate) public {
        // Increment the vote count for the candidate
        votes[candidate] += 1;
    }

    // Function to retrieve the vote count for a candidate
    function getVotesForCandidate(string memory candidate) public view returns (uint256) {
        return votes[candidate];
    }
}

Analicemos este código paso a paso:

  • 1. Definimos la licencia de este contrato, lo cual es una práctica común en Ethereum. 2. Definimos la versión de Solidity que estamos utilizando. Recuerda que no podremos cambiar esto más adelante, ya que el contrato es inmutable. 3. Definimos un contrato, que es algo parecido a una clase de Java. Aquí es donde residen los datos y la lógica de nuestra aplicación. 4. Definimos una variable de estado llamada votes que es un mapping. Piensa en los mapping como diccionarios. Este mapping en particular tiene claves de tipo string y valores de tipo entero. Efectivamente, almacena una lista de candidatos y el número de votos que han obtenido. 5. La función voteForCandidate puede invocarse después de que el contrato haya sido desplegado. Si llamas a esta función con un candidato como parámetro, el número de votos para ese candidato aumenta en 1. 6. La función getVotesForCandidate también puede invocarse públicamente. Esta es una función de solo lectura, ya que no modifica el estado. Como resultado, la función está marcada como view. Simplemente devuelve el número de votos obtenidos por el candidato solicitado.

Ejemplo 2: Un token simple

Ahora veamos algo un poco más complicado. En este ejemplo, crearemos un token fungible simple desde cero. Parte de la lógica que ves aquí también se puede encontrar en el estándar ERC-20, que es el protocolo que impulsa todos los tokens fungibles en Ethereum y en blockchains basadas en EVM, incluido el USDC.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract SimpleToken {
    string public name = "Simple Token";
    string public symbol = "ST";
    uint8 public decimals = 18; // You can adjust the number of decimal places
    uint256 public totalSupply;
    mapping(address => uint256) public balances;

    // Create an initial supply of tokens
    constructor(uint256 initialSupply) {
        totalSupply = initialSupply * 10 ** uint256(decimals);
        balances[msg.sender] = totalSupply;
    }

    // Transfer tokens 
    function transfer(address recipient, uint256 amount) public {
        require(recipient != address(0), "Transfer to the zero address is not allowed");
        require(balances[msg.sender] >= amount, "Insufficient balance");

        balances[msg.sender] -= amount;
        balances[recipient] += amount;
    }

   // Check balance of tokens
     function balanceOf(address account) public view returns (uint256) {
        return balances[account];
    }
}

Código de ejemplo para crear una nueva billetera

Este código, aunque más complejo que su predecesor, debería ser bastante sencillo de entender. Algunos puntos a tener en cuenta:

  • 1. Inicializamos variables para almacenar el nombre, el símbolo, los decimales y el suministro total de nuestro token. Ten en cuenta que, a diferencia de la mayoría de los lenguajes de programación, Solidity no admite números de punto flotante. La solución es crear una unidad pequeña de tu token (normalmente 10^-18). Esto es similar al wei, que es 1/10^18 de un ETH. 2. Tenemos un mapeo que almacena los saldos de nuestro token disponibles en todas las direcciones. 3. Tenemos un constructor que crea un suministro inicial de monedas y las envía a quien despliega el contrato (es decir, tú). Ten en cuenta que esto solo se hace una vez: cuando se despliega el contrato. 4. La función transferTokens permite a un usuario transferir tokens de una billetera a otra. Observa el uso de sentencias require para aplicar ciertas reglas, como que el remitente tenga saldo suficiente para hacer posible la transferencia. 5. Finalmente, la función balanceOf nos indica la cantidad de tokens que pertenecen a una dirección en particular.

Circle y USDC

Ahora tienes una base sólida de lo que necesitas saber para integrar monedas digitales en tu pila tecnológica. Y cuando escuches que el USDC de Circle es una stablecoin (o token) implementada como un smart contract, ¡ahora sabrás lo que eso significa! USDC no solo es una stablecoin en Ethereum (y otras blockchains como Algorand, Arbitrum, Flow y Solana), sino que también es de código abierto, componible y accesible para que cualquiera pueda construir sobre ella. Puedes ver el código fuente en el Repositorio de GitHub.

Para obtener más información sobre cómo integrar USDC en tus aplicaciones, consulta la documentación y los casos de uso en el sitio web de Circle. También puedes

New call-to-action

*La interfaz de programación de aplicaciones (“API”) de Programmable Wallets es ofrecida por Circle Technology Services, LLC (“CTS”). CTS no es una empresa de servicios financieros regulada y la API no incluye asesoramiento financiero, de inversión, fiscal, legal, regulatorio, contable, empresarial ni de otro tipo. Para obtener detalles adicionales, haz clic aquí para ver los términos de servicio para desarrolladores de Circle.

Artículos relacionados

Circle presenta una carta de comentarios sobre la propuesta de Reglamento de Criptoactivos de la SEC

Circle presenta una carta de comentarios sobre la propuesta de Reglamento de Criptoactivos de la SEC

October 28, 2026
Circle Gateway ahora es compatible con cirBTC y EURC

Circle Gateway ahora es compatible con cirBTC y EURC

October 23, 2026
Circle Gateway: Nueva dirección de pre-mint para EURC en Solana

Circle Gateway: Nueva dirección de pre-mint para EURC en Solana

October 23, 2026
Blog
Introducción a Solidity y a los smart contracts de web3
introduction-to-solidity-and-web3-smart-contracts
October 31, 2023
Los smart contracts son programas que residen y se ejecutan en una blockchain. Puedes verlos como acuerdos digitales autoejecutables con reglas escritas directamente en su código.
Desarrollador
USDC
Circle Wallets
Plataforma de contratos inteligentes
Tutorial