DEV Community

Ahmed Castro
Ahmed Castro

Posted on

3

Cómo crear una Stablecoin: Curso completo desde cero

Las stablecoins son un caso de uso muy útil en crypto, ya son usadas hoy como un sistema de pagos mas flexible, además para algunos son usadas como un método de ahorros y para otros como un instrumento financiero avanzado. Espero que este artículo sea de ayuda a los usuarios que busquen entender cómo funcionan las stablecoins en la raiz, cual es su alcance y sus riesgos. También espero que este artículo inspire a desarrolladores a crear nuevos proyectos que aporten valor al ecosistema de Ethereum. Ya tenemos una idea clara del potencial de las stablecoins pero hay todavía mucho por construir.

En este artículo aprenderemos cómo crear Stablecoins con diferentes técnicas y mecanismos. Aprenderemos cómo crearlas, interactuar con ellas y también analizaremos stablecoins actualmente en funcionamiento en Ethereum Mainnet.

Tabla de contenido

  1. Módulo 0: Repaso de los Tokens ERC20
  2. Módulo 1: Stablecoins Centralizadas
  3. Módulo 2: Stablecoins Colateralizadas con Cripto
  4. Módulo 3: Otros casos reales de Stablecoins

Módulo 0: Repaso de los Tokens ERC20

En este primer módulo, repasaremos cómo construir un contrato ERC20, que es fundamental para el desarrollo de stablecoins.

Para asegurar la compatibilidad entre diferentes aplicaciones, se introdujo el estándar ERC20. Este estándar permite que los tokens interactúen y se conecten entre sí. Esto permitió aplicaciones DeFi como los intercambios descentralizados que soportan cualquier token compatible con ERC20.

En este tutorial experimentaremos con algúnos temas más avanzados de Solidity, el lenguaje de programación de Ethereum. Aunque no lo necesitas para iniciar, si deseas repasar Solidity te recomiendo el video a continación.


En este video puedes repasar los conceptos básicos de Solidity.

Ahora, vamos a comenzar con el estándar ERC20 y los conceptos básicos de Ethereum.

El estándar ERC20

Los tokens, o monedas, pueden representarse como un hashmap de balances (aprende más sobre los hashmaps aquí). Los hashmaps enlazan una llave a un valor de una manera fácil de programar y barata de ejecutar en Ethereum, recordemos que esto último es importante pues cada transacción realiza un pago en Ether dependiendo de la cantidad de ejecución que requerimos (gas). Es por eso que es importante optimizar.

En un hashmap de un token la llave representa el número de cuenta, en este caso el address de Ethereum, y el valor representa la cantidad de tokens que posee esa cuenta, es decir su balance.

Los tokens ERC20 pueden representarse como Hashmaps
Los contratos de tokens pueden representarse como mapas donde la clave es el dueño de la cuenta y el valor el balance de la cuenta.

En Solidity, podemos definirlo como:

mapping(address account => uint256 balance) public balanceOf;
Enter fullscreen mode Exit fullscreen mode

Cuando un usuario transfiere tokens, su balance se reduce y el balance del receptor aumenta. A partir de esta base, podemos introducir mecánicas adicionales como supply limitado (suministro limitado), yield (redimiento, intereses), vesting (adquisición gradual), fees (tarifas de transacción) y más.

Las funciones centrales de ERC20 que todos los tokens compatibles deben implementar incluyen:

  • totalSupply() – Devuelve el suministro total de tokens.
  • balanceOf(address account) – Devuelve el balance de tokens de una cuenta específica.
  • transfer(address to, uint256 value) – Transfiere tokens a otra cuenta.
  • approve(address spender, uint256 value) – Otorga permiso a un tercero para transferir tokens en nombre del propietario.
  • allowance(address owner, address spender) – Devuelve cuántos tokens puede usar un tercero en nombre del propietario.
  • transferFrom(address from, address to, uint256 value) – Transfiere tokens en nombre del propietario.

Lanza un token ERC20 en Sepolia

Durante este curso estaremos lanzando Stablecoins en Sepolia testnet, la red de pruebas gratuita de Ethereum. Luego explicaremos todos los pasos detallados para lanzar en Ethereum Mainnet o cualquiera de sus Layer2 con dinero real. Estas son las plataformas ideales para lanzar este tipo de Tokens pues Ethereum es la plataforma programable, decentralizada y de confianza que existe y sus L2s heredan su seguridad.

1. Conectate a Sepolia

Primero, instala una billetera como MetaMask o Rabby como extensión de navegador. La mayoría de wallets te permiten conectarte a Sepolia de manera automática, en metamask solo debés habilitar la opción "Show test networks" desde la pestaña de selección de red.

Seleccionar Sepolia desde Metamask
Conéctate a la red de Sepolia desde tu wallet

En caso que tu wallet no tenga esta opción puedes hacerlo a través de Chainlist.org dándo clic en "Conectar a Metamask" o manualmente usando los siguientes detalles:

  • Nombre de la red: Sepolia Testnet
  • RPC URL: https://1rpc.io/sepolia (el nombre puede ir en blanco, y una URL es suficiente)
  • Chain ID: 11155111
  • Símbolo de moneda: Sepolia ETH
  • Explorador de bloques: Sepolia Scan

Sepolia Testnet Metamask agregar de manera manual
También puedes agregar la red de Sepolia de manera manual.

2. Obtén fondos de Testnet

Visita la Faucet de Alchemy, inicia sesión con una cuenta de Alchemy y coloca la address de tu wallet de ethereum (Metamask, Rabby, ...). Nota que debes tener al menos 0.001 ether reales (en Ethereum Mainnet) en esa billetera para obtener fondos de prueba.

Fondos de Sepolia gratis en la faucet de Alchemy
Inicia sesión o crea una cuenta de Alchemy, coloca tu address y recibe tokens de prueba gratis.

Alternativamente, puedes pedirme fondos directamente taggeando mi usuario @turupawn en Discord, puedes encontrar el link a mi server en mi video de youtube mas reciente. En caso de no estar vigente puedes pedirme un nuevo link a través de un comentario en el video.

Recuerda, los fondos de prueba en Testnet no tienen un valor monetario.

3. Crea el contrato ERC20

A continuación, se presenta una implementación simple de un token ERC20:

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

// ¡NO UTILICES ESTO EN PRODUCCIÓN! Este contrato inteligente no ha sido auditado y es solo para fines educativos

// Contrato inteligente que sigue el estándar ERC20
contract MinimalERC20 {
    // Nombre del token, símbolo, decimales (en formato wei) y suministro total
    string public name = "MyToken";
    string public symbol = "MTK";
    uint8 public decimals = 18;
    uint256 public totalSupply = 21_000_000 * 10**18;

    // Mapas para almacenar balances y asignaciones
    mapping(address => uint256) public balanceOf;
    mapping(address => mapping(address => uint256)) public allowance;

    // Eventos para registrar transferencias y aprobaciones
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

    // Cuando se lanza el contrato, asigna el suministro total al desplegador del contrato
    constructor() {
        balanceOf[msg.sender] = totalSupply;
        emit Transfer(address(0), msg.sender, totalSupply);
    }

    // Transfiere tokens del remitente al destinatario
    function transfer(address to, uint256 value) public returns (bool) {
        require(balanceOf[msg.sender] >= value, "Saldo insuficiente");

        balanceOf[msg.sender] -= value;
        balanceOf[to] += value;

        emit Transfer(msg.sender, to, value);
        return true;
    }

    // Autoriza al gastador para usar una cierta cantidad de tokens en nombre del remitente
    function approve(address spender, uint256 value) public returns (bool) {
        allowance[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }

    // Transfiere tokens en nombre del propietario usando una asignación
    function transferFrom(address from, address to, uint256 value) public returns (bool) {
        require(balanceOf[from] >= value, "Saldo insuficiente");
        require(allowance[from][msg.sender] >= value, "Asignación excedida");

        balanceOf[from] -= value;
        balanceOf[to] += value;
        allowance[from][msg.sender] -= value;

        emit Transfer(from, to, value);
        return true;
    }
}
Enter fullscreen mode Exit fullscreen mode

Alternativamente, puedes usar El Contract Wizard de OpenZeppelin para generar un contrato ERC20 con características adicionales como minteo (creación de tokens) y control de acceso (Ownable).

Wizard de contratos de OpenZeppelin
El Token Wizard de OpenZeppelin.

4. Lanza el contrato en Sepolia

Para desplegar tu contrato en Sepolia, utiliza herramientas como:

Lanzando con Remix:

  1. Abre Remix
  2. En la pestaña File Explorer, crea un nuevo archivo y pega el código de tu contrato.
  3. Compila el contrato en la sección Solidity Compiler.
  4. Ve a Deploy & Run Transactions, selecciona Injected Web3 como el entorno, conecta MetaMask y lanza el contrato.

Una vez desplegado, puedes interactuar con tu contrato a través del Explorador de Sepolia.

Si deseas conocer más a fondo sobre mecanismos más avanzados de lanzamiento de tokens ERC20 te invito a ver el video a continuación.


En este video puedes conocer sobre métodos avanzados de lanzar token ERC20


Has lanzado con éxito un token ERC20 en Sepolia. En el siguiente módulo, aprenderemos cómo construir una stablecoin con mecánicas similares a USDT o USDC.


Módulo 1: Stablecoins Centralizadas

¿Qué son las stablecoins centralizadas?

Las stablecoins centralizadas son activos digitales controlados por una única entidad que gestiona su emisión y canje, a esto le conocemos comúnmente como minteo y quema. Estos tokens están respaldados por activos del mundo real, como monedas fiat o bonos del tesorería del gobierno, que pueden liquidarse cuando sea necesario. Sin embargo, los usuarios deben confiar en el emisor, ya que no existe una forma 100% verificable on-chain de saber si las reservas son reales.

¿Por qué las stablecoins ligadas al dólar mantienen su paridad?

La gran mayoría de las stablecoins están vinculadas al dólar estadounidense. Esto permite a los usuarios usar una unidad de valor familiar y ampliamente aceptada. Aunque existen stablecoins ligadas a otros activos como el euro, el bitcoin o acciones, las stablecoins ligadas al dólar dominan el mercado.

Las stablecoins centralizadas ligadas al dólar pueden mantener un peg (una paridad) estrecha con su activo subyacente. Esto se debe a que los usuarios pueden canjear directamente las stablecoins por moneda fiduciaria en una proporción 1:1, lo que garantiza la estabilidad del precio.

estabilidad de precios de una stablecoin
Las stablecoins centralizadas como USDT mantienen una fuerte paridad con el USD en comparación con las alternativas descentralizadas y basadas en algoritmos. Esto se conoce como eficiencia del mercado. Fuente: stablecoins.wtf

Además, los emisores de stablecoins centralizadas deben cumplir con regulaciones estrictas. Esto a menudo resulta en funcionalidades que contradicen los principios de la descentralización, como la funcionalidad de congelar fondos (blacklist) y la pausa de todas las transacciones.

Desarrolla un contrato inteligente de stablecoin centralizada

Para garantizar que la oferta circulante refleje con precisión las reservas fuera de la cadena, las stablecoins centralizadas deben implementar funciones para la creación y destrucción de tokens:

Emisión (mint, issuance): El emisor genera nuevos tokens cuando las reservas aumentan.
Canje (burn, redeeem): El emisor destruye tokens cuando las reservas disminuyen.

Los emisores también introducen características regulatorias, como:

Congelamiento de fondos (blacklist): Impide que las direcciones sancionadas realicen transacciones.
Pausa (pause): Detiene temporalmente todas las transacciones.

Aquí hay un ejemplo de implementación usando Solidity:

// SPDX-License-Identifier: MIT
// Compatible with OpenZeppelin Contracts ^5.0.0
pragma solidity ^0.8.22;

// ¡NO USES ESTO EN PRODUCCIÓN! Este contrato inteligente no ha sido auditado y está destinado únicamente a fines educativos.

// Las librerías de OpenZeppelin proporcionan una implementación de tokens ERC-20, lo que nos permite construir sobre una base segura y auditada.
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import {ERC20Burnable} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
import {ERC20Pausable} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Pausable.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";

// Contrato inteligente ERC20 con características centralizadas como mint, burn, pause y blacklist
contract FiatBackedStablecoin is ERC20, ERC20Burnable, ERC20Pausable, Ownable {
    constructor()
        ERC20("Centralized Stablecoin", "CS")
        Ownable(msg.sender)
    {}

    // Todas las cuentas marcadas como en lista negra no pueden realizar transacciones
    mapping (address account => bool isBlacklisted) blacklist;

    // Cuando el contrato está en pausa, nadie puede realizar transacciones
    function pause() public onlyOwner {
        _pause();
    }

    function unpause() public onlyOwner {
        _unpause();
    }

    // Añade una cuenta a la lista negra, impidiendo que realice transacciones
    function addToBlackList(address account) public onlyOwner {
        blacklist[account] = true;
    }

    // El propietario del contrato puede controlar la oferta de tokens mediante la creación y destrucción
    function mint(address to, uint256 amount) public onlyOwner {
        _mint(to, amount);
    }

    function burn(uint256 amount) public override onlyOwner {
        _burn(owner(), amount);
    }

    // _update es una función interna que se llama en cada transacción, este es el lugar perfecto para verificar si una dirección está en la lista negra
    function _update(address from, address to, uint256 value)
        internal
        override(ERC20, ERC20Pausable)
    {
        // Si una cuenta está en la lista negra, se le impide realizar transacciones
        require(!blacklist[from], "El remitente está en la lista negra");
        super._update(from, to, value);
    }
}
Enter fullscreen mode Exit fullscreen mode

Caso real: USDC y USDT

Las dos stablecoins más grandes por capitalización de mercado son USDT y USDC. Vamos a explorar sus características.

Capitalización de mercado de stablecoins
USDT y USDC dominan el mercado de stablecoins. Fuente: DeFiLlama

USDT

USDT es emitida por Tether y tiene una capitalización de mercado que supera los $130 mil millones. Sigue un modelo estándar de stablecoin centralizada con funciones de minteo y quema:

Más detalles:

USDC (Circle)

USDC es emitido por Circle y es ampliamente utilizado en DeFi. Al igual que USDT, implementa la estructura más común en las stablecoins: minteo, quema, blacklist y pausa de transacciones.

Más detalles:


Las stablecoins vinculadas al dólar ocupan el primer lugar en el espacio de las stablecoins, al proporcionar estabilidad de precios y facilidad de uso. Sin embargo, existe una alternativa que elimina la dependencia de un emisor central, y son las stablecoins de deuda sobrecolateralizada. A continuación todo lo que ocupas saber sobre este tipo de monedas.


Módulo 2: Stablecoins Colateralizadas con Cripto

Cómo funcionan las stablecoins colateralizadas con cripto

Las stablecoins colateralizadas con cripto, a diferencia de las stablecoins respaldadas por monedas fiat, ofrecen un enfoque más descentralizado, alineándose más con los principios de descentralización de web3.

Nuevas monedas de este tipo se crean depositando un colateral que las respalda. Cada stablecoin creada está sobrecolateralizada, lo que significa que el valor del colateral siempre es mayor a la cantidad de stablecoins creadas. Si el colateral de un usuario se vuelve insuficiente para respaldar las stablecoins que creó, su posición se liquida, lo que resulta en la pérdida de su colateral.

Escenario hipotético de una stablecoin
Escenario hipotético en el que un usuario crea stablecoins respaldadas por ETH

¿Por qué funcionan?

Las stablecoins funcionan asegurando que el protocolo satisfaga las necesidades de diferentes participantes. Estos roles se pueden clasificar de la siguiente manera:

  • Minteadores de stablecoins: Depositan ETH como colateral para mintear (crear nuevas) stablecoins que representan una fracción del valor del colateral. Los minteadores especulan que el precio del colateral (ETH en este caso) aumentará y pueden usar las stablecoins para comprar más activos de garantía.
  • Usuarios de stablecoins: Utilizan las stablecoins en aplicaciones DeFi como AMMs, protocolos generadores de intereses, pagos, las usan para protegerse de la volatilidad y más.
  • Liquidadores: Eliminan la deuda indeseada del protocolo y obtienen recompensas por hacerlo.

Usuarios de stablecoins
Los tres tipos de usuarios que mantienen la estabilidad en un protocolo de stablecoin respaldada por cripto.

Crea una stablecoin respaldada por crypto

Las funciones principales de cualquier stablecoin basada en deuda incluyen:

  • Depositar y retirar el colateral: Los usuarios depositan colateral, lo que les permite mintear stablecoins.
  • Mintear y quemar stablecoins: Los usuarios pueden mintear y quemar stablecoins en función de la cantidad del colateral depositado.

A continuación una stablecoin funcional con la menor cantidad de mecanismos necesarios, únicamente con propósitos educativos.

// SPDX-License-Identifier: MIT

// ¡NO USES ESTO EN PRODUCCIÓN! Este contrato inteligente no ha sido auditado y está destinado únicamente a fines educativos.

pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";

// Contrato ERC20 de stablecoin que acuña nuevos tokens vinculados al dólar depositando ETH sobrecolateralizado
contract CryptoCollateralizedStablecoin is ERC20, ERC20Burnable {
    // Este contrato espera un 150% de colateralización, lo que significa que, por ejemplo, necesitarás al menos 150$ de ETH para mintear 100 stablecoins
    uint public constant MIN_COLLATERAL_DEBT_RATIO = 150;

    // Hashmaps que representan el ETH depositado como colateral y la deuda de stablecoins correspondiente a cada cuenta
    mapping(address => uint256) public ethCollateral;
    mapping(address => uint256) public stablecoinDebt;

    constructor() ERC20("Stablecoin", "STABLECOIN") {}

    // Devuelve la relación garantía-deuda usando la fórmula: (Valor de la garantía en USD) / Deuda
    function getCollateralDebtRatio(address account) public view returns (uint256) {
        if (stablecoinDebt[account] == 0) return type(uint256).max; // Si no hay deuda, realizamos una colateralización total
        uint256 collateralValue = (ethCollateral[account] * getEthPrice()) / 1e18; // Valor de la garantía en USD
        return (collateralValue * 100) / stablecoinDebt[account];
    }

    // Deposita ETH y aumenta la relación garantía-deuda
    function depositCollateral() public payable {
        ethCollateral[msg.sender] += msg.value;
    }

    // Retira el colateral siempre y cuando la relación garantía-deuda siga siendo >= 150%
    function withdrawCollateral(uint256 amount) public {
        require(ethCollateral[msg.sender] >= amount, "No hay suficiente garantía");

        // Asegura que la relación siga siendo válida aún despúes de la retirada del colateral
        uint256 newCollateral = ethCollateral[msg.sender] - amount;
        uint256 newRatio = stablecoinDebt[msg.sender] == 0
            ? type(uint256).max
            : (newCollateral * uint256(getEthPrice()) * 100) / (1e18 * stablecoinDebt[msg.sender]);

        require(newRatio >= MIN_COLLATERAL_DEBT_RATIO, "Garantía insuficiente después de la retirada");

        ethCollateral[msg.sender] -= amount;
        (bool sent, ) = payable(msg.sender).call{value: amount}("");
        require(sent, "Error al enviar Ether");
    }

    // Mintea nuevas stablecoins siempre y cuando la relación garantía-deuda siga siendo >= 150%
    function mintStablecoin(uint256 amount) public {
        stablecoinDebt[msg.sender] += amount;
        require(getCollateralDebtRatio(msg.sender) >= MIN_COLLATERAL_DEBT_RATIO, "Garantía insuficiente");
        _mint(msg.sender, amount);
    }

    // Si surge un riesgo sistémico, quemar stablecoins puede ayudar a mantener la sobre-colateralización
    function burn(uint256 amount) public override  {
        require(stablecoinDebt[msg.sender] >= amount, "La cantidad a quemar excede la deuda");
        stablecoinDebt[msg.sender] -= amount;
        _burn(msg.sender, amount);
    }

    // Si la relación garantía-deuda de una cuenta específica cae por debajo del 125%, cualquier persona en la cadena puede reclamar la garantía y eliminar la deuda
    function liquidate(address account) public {
        require(getCollateralDebtRatio(account) < MIN_COLLATERAL_DEBT_RATIO, "La cuenta está suficientemente colateralizada");

        uint256 liquidationReward = ethCollateral[account]; // El liquidador obtiene el todo el colateral, en la mayoría de protocolos un porcentaje se queda en el el protocolo como una comisión

        ethCollateral[account] = 0;
        stablecoinDebt[account] = 0;

        (bool sent, ) = payable(msg.sender).call{value: liquidationReward}("");
        require(sent, "Error: could not send ETH");
    }

    // El valor de la stablecoin a menudo se recupera usando oráculos, en este contrato en particular usamos oráculos de precios de Chainlink en la red de Sepolia
    function getEthPrice() public view returns (uint256) {
        (, int256 answer, , , ) = AggregatorV3Interface(0x694AA1769357215DE4FAC081bf1f309aDC325306).latestRoundData();
        return uint256(answer * 1e10); // Convertir a 18 decimales si Chainlink devuelve 8 decimales
    }
}
Enter fullscreen mode Exit fullscreen mode

Cómo mantener saludable una stablecoin

Una buena stablecoin necesita varias funcionalidades clave. Debe tener bastante liquidez, mantener un peg (paridad) cercano al dólar y ser resistente a fallas sistémicas. Para lograr estos objetivos, se implementan varias técnicas para mejorar la estabilidad y la confiabilidad. Los siguientes son algunos de los ejemplos más importantes.

Incentivos para el pago de la deuda: Implementar tarifas incentiva a los prestatarios a pagar su deuda a tiempo. Esto ayuda a mantener la solvencia del sistema y evita la emisión excesiva de stablecoins.

Fondo de seguridad: Un protocolo debe tener un fondo de reserva para cubrir escenarios críticos donde las liquidaciones no ocurren a tiempo. Esto actúa como un colchón financiero para absorber pérdidas inesperadas.

Oráculos de precios confiables: Las stablecoins dependen de valoraciones precisas del colateral depositado. El uso de oráculos descentralizados y seguros garantiza precios justos y evita la manipulación de precios.

Quema de liquidez excesiva: Un suministro excesivo de stablecoins puede llevar a la inestabilidad de precios. Implementar un mecanismo para quemar stablecoins excesivas ayuda a mantener la paridad y el equilibrio del sistema.

Riesgos

Los usuarios de stablecoins deben tener en cuenta cuáles son los principales riesgos de usar protocolos basados en deuda. Los siguientes son los tres principales riesgos al usar stablecoins respaldadas por crypto.

Centralización de los oráculos: La dependencia de un único oráculo de precios puede introducir riesgos de manipulación del mercado.

Vulnerabilidades de los contratos inteligentes: Errores y exploits en el código podrían llevar a la pérdida de fondos.

Mecanismos de liquidación defectuosos: Si las liquidaciones no ocurren a tiempo, el sistema puede volverse infracolateralizado. Es decir, en situaciones extremas de liquidación masiva, si no se ejecutan todas las liquidaciones a tiempo, el colateral podría llegar a ser menor a las stablecoins en circulación.

Caso Real: GHO la stablecoin de Aave

GHO puede ponerse en circulación mediante Módulos (también conocidos como Facilitadores) que controlan cómo se pone y se saca de circulación el GHO. Actualmente hay 3 módulos desplegados en Aave.

  • Módulo Aave Pool: Utiliza el motor Aave Pool de prestamos y liquidación para poner en circulación el GHO.
  • Módulo Flash Minter: Permite mintear y quemar GHO dentro de un solo bloque.
  • Módulo AMM: se especializa en mantener el peg de GHO al dólar.

Buckets de la Stablecoin GHO de Aave
La gobernanza de GHO puede mintear tokens en buckets seleccionados que luego se pueden poner en uso en su módulo asiciado.

GHO se mintea a través de una votación de gobernanza que autoriza su asignación en Buckets gestionados por varios Módulos. Esto permite múltiples métodos para interactuar con GHO.

El Módulo más utilizado es el Aave Pool, donde los usuarios pueden mintear GHO suministrando colateral dentro del contrato Pool existente. Esta integración hace uso de los mecanismos incorporados del Pool, incluido su motor de liquidación que ya ha sido probado en producción durante años.

Nota: El protocolo de stablecoin respaldada por cripto más grande es DAI de MakerDAO. Este artículo no lo cubre en profundidad debido a la complejidad de su base de código, aunque sigue siendo un sistema altamente estable y ampliamente adoptado.


Módulo 3: Otros casos reales de Stablecoins

En este módulo, exploraremos otros tipos de stablecoins que han ganado popularidad en el ecosistema DeFi. Estas incluyen stablecoins algorítmicas, híbridas, respaldadas por activos del mundo real (RWA) y basadas en derivados financieros. Aunque comparten ciertos principios con las stablecoins centralizadas y colateralizadas por cripto, cada una de estas implementa mecanismos únicos que a contunuación vamos a estudiar brevemente su arquitectura y también hecharemos un vistazo a su código público.

1. Stablecoins Algorítmicas (UST)

Las stablecoins algorítmicas no están respaldadas por colateral tradicional (como fiat o cripto), sino que dependen de algoritmos y mecanismos de oferta y demanda para mantener su paridad. Un ejemplo famoso es UST de Terra, aunque su colapso en 2022 demostró los riesgos asociados con este modelo.

Image description
Hasta el día de hoy, ninguna stablecoin algorítmica ha sido exitosa. El ejemplo más prominente fue UST de Terra donde se perdieron billones de dólares.

Arquitectura de Terra y UST
UST fue desarrollado en el ecosistema de Cosmos. Exponía una interfaz a los usuarios similar a la de un DEX, donde podía mintear UST o quemar para canjearlo por Terra.

Funciones principales de UST

UST mantenía su paridad mediante un sistema de arbitraje entre UST y LUNA (el token nativo de Terra). Cuando UST caía por debajo de $1, los usuarios podían quemar UST para mintear LUNA, y viceversa. Sin embargo, este mecanismo falló debido a la falta de confianza en el sistema y la presión de venta masiva.

Hasta hoy, ninguna stablecoin algorítmica ha tenido éxito a largo plazo. Este modelo, aunque escalable, carece de una base sólida pues la paridad con el dólar depende de elementos internos al protocolo, si se pierde la confianza en la moneda del protocolo este también hace que la stablecoin pierda su valor. Un ejemplo reciente es USDD, que comenzó como una stablecoin algorítmica basada en TRON, pero ante los riesgos de este tipo de sistema, ha forkeado DAI adoptando un modelo sobrecolateralizado respaldado por TRX. Esto refleja una tendencia: sin colateral o instutuciones reguladas y de confianza, las stablecoins algorítmicas tienden a fallar.

👍 Fortalezas: Es el tipo de stablecoin más escalable.
⚠️ Riesgos: Inestable, este sistema siempre ha fracasado.

2. Stablecoins Híbridas (Frax)

Las stablecoins híbridas combinan elementos de colateralización y algoritmos para mantener su paridad. Frax es el mayor ejemplo de este estilo de stablecoin. Frax está sobrecolateralizada por monedas más estables, con ETH por ejemplo al igual que stablecoins como DAI, pero además se puede usar FXS, su token interno de governanza, para mintear Frax.

Arquitectura de Frax
Se pueden usar ETH y otros assets de confianza para sobrecolateralizar la emisión de Frax. Alternativamente se puede usar una menor cantidad de FXS para estabilizar el precio.

Funciones principales de FRAX:

La cantidad de FXS que puede se puede usar para mintear y quemar Frax son muy límitadas y con el único propósito de mantener una moneda con un mercado eficiente, es decir mantener una paridad estrecha con el dólar. Solo es posible mintear o quemar grandes cantidades de Frax con activos externos al protocolo, como Ether, de esta manera no se corren los mismos riesgos de una stablecoin 100% algorítimica.

👍 Fortalezas: Mantiene paridad estrecha con el dólar.
⚠️ Riesgos: Usa una moneda interna para mintear stablecoins, existe la posibilidad de un riesgo sistémico.

3. Stablecoins Respaldadas por Activos del Mundo Real (RWA)

Estas stablecoins están respaldadas por activos tradicionales como oro, bienes raíces, bonos o stocks. Un ejemplo es Paxos Gold (PAXG), que está respaldada por oro físico y otro ejemplo es Frax CPI que representa el valor de la canasta básica.

Funciones principales de Paxos Gold (PAXG)

Arquitectura de PAXG
Los usuarios de PAXG puede elegir si quemar su PAXG a cambio de su valor en dólares (recomendado) o por oro físico (solo para clientes institucionales de Paxos)

PAXG opera tal y como una stablecoin centralizada, donde el los tokens pueden redimirse por su valor en dólares o también por oro físico, aunque claro, esta segunda opción no es la mas conviente a nivel logístico. Al igual que USDT y USDC, los usuarios de PAXG deben confiar en que Paxos tiene las reservas de oro pues no existe manera de probarlo on-chain.

Funciones principales Frax CPI

Arquitectura de Frax CPI
Frax CPI usa las funcionalidades de Chainlink Any API para traer el precio de la canasta básica (CPI) al blockchain.

Frax usa un sistema muy similar a cualquier stablecoin sobrecolateralizada por crypto. La única diferencia con una stablecoin tradicional es que usa Any API de Chainlink para traer el precio de la canasta básica (CPI) al blockchain. Al igual que Frax CPI, otras monedas pueden usar oráculos como Chainlink o API3 para traer el precio de otros activos como ser stocks, bienes raíces, índices, etc.. Como desarrolladores debemos tomar en cuenta que el púnto más fragil de estos sistemas son las fuentes de datos, al usar cualquier oráculo debemos proveerle de varios puntos de datos de entrada confiables pues si estos puntos de entrada fallan, son hackeados o colluden ponen en riesgo todo el protocolo.

👍 Fortalezas: Abre la puerta nuevos tipos de activos en Ethereum.
⚠️ Riesgos: Depende de oráculos seguros.

4. Stablecoins Basadas en Derivados

Estas stablecoins utilizan estrategias financieras avanzadas, como derivados, para mantener su paridad. El ejemplo más reciente es Ethena con su stablecoin USDe, que utiliza estrategias delta-neutral, es decir la ganancia de intereses por proveer liquidez para longs y shorts en mercados centralizados para generar gancias manteniendo estable el precio de su stablecoin.

Ethena (USDe)

Image description
Cabe mencionar que las estrategias de derivados ocurren offchain en exchanges centralizados, es decir, como usuarios de Ethena no tenemos manera de verificar que han ocurrido de una manera justa o correcta.

Ethena es un proyecto muy atractivo pues ofrece tasas de interés bastante altas denominadas en dólar. Esto es posible al combinar diferentes estrategias de productos derivados. Debemos tomar en consideración que este tipo de proyectos exponen al usuario en caso que exista un cambio abrupto en el mercado, además estas estrategias son ejecutadas de una manera centralizada, es decir que los usuarios deben confiar en que Ethena está manejando correctamente los activos. Es por eso que Ethena está apostando fuertemente a ser regulada para poder ofrecer un servicio centralizado y auditado similar al de USDC y USDT pero manteniendo ciertos componenetes de decentralización.

👍 Fortalezas: Nuevas oportunidades de retabilidad denominada en dólares.
⚠️ Riesgos: Los derivados ocurren off-chain.

¡Gracias por ver este artículo!

Sígueme en dev.to y en Youtube para todo lo relacionado al desarrollo en Blockchain en Español.

Hostinger image

Get n8n VPS hosting 3x cheaper than a cloud solution

Get fast, easy, secure n8n VPS hosting from $4.99/mo at Hostinger. Automate any workflow using a pre-installed n8n application and no-code customization.

Start now

Top comments (0)

Billboard image

Create up to 10 Postgres Databases on Neon's free plan.

If you're starting a new project, Neon has got your databases covered. No credit cards. No trials. No getting in your way.

Try Neon for Free →

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay