Volver al índice
Modo oscuro
Uniswap

Uniswap por Santiago Soñora

star star star star star (5.0 de 5 estrellas, basado en 1 reseña)

Este tutorial está diseñado para guiar a quienes desean aprender más acerca de Uniswap. Es ideal para un nivel avanzado.

Uniswap es el protocolo de intercambio descentralizado (DEX) pionero y de mayor volumen en Web3, basado en creadores de mercado automatizados (AMM). Uniswap V3 introdujo la liquidez concentrada, permitiendo a los proveedores de liquidez asignar capital en rangos de precios específicos delimitados por ticks discretos, logrando una eficiencia de capital hasta 4,000 veces superior a V2. Además, ofrece múltiples niveles de comisiones (0.01%, 0.05%, 0.3%, 1%), oráculos de precio ponderado en el tiempo (TWAP) integrados y Flash Swaps atómicos sin costo de prima de préstamo. Esta guía cubre la integración de contratos con ISwapRouter, cálculos matemáticos con Q64.96 y ejecución de arbitrajes de alta velocidad.

“Hola, mundo” en Uniswap

Contrato Solidity para ejecutar un intercambio exactInputSingle en Uniswap V3 utilizando el contrato oficial ISwapRouter.

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

import {ISwapRouter} from "@uniswap/v3-periphery/contracts/interfaces/ISwapRouter.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";

contract UniswapV3SingleSwap {
    ISwapRouter public immutable router;

    // Uniswap V3 SwapRouter en Ethereum / L2: 0xE592427A0AEce92De3Edee1F18E0157C05861564
    constructor(address _router) {
        router = ISwapRouter(_router);
    }

    /// @notice Intercambia una cantidad exacta de tokenIn por el máximo tokenOut posible
    function swapExactInputSingle(
        address tokenIn,
        address tokenOut,
        uint24 feeTier, // ej. 3000 para 0.3% o 500 para 0.05%
        uint256 amountIn,
        uint256 amountOutMinimum
    ) external returns (uint256 amountOut) {
        IERC20(tokenIn).transferFrom(msg.sender, address(this), amountIn);
        IERC20(tokenIn).approve(address(router), amountIn);

        ISwapRouter.ExactInputSingleParams memory params = ISwapRouter.ExactInputSingleParams({
            tokenIn: tokenIn,
            tokenOut: tokenOut,
            fee: feeTier,
            recipient: msg.sender,
            deadline: block.timestamp,
            amountIn: amountIn,
            amountOutMinimum: amountOutMinimum,
            sqrtPriceLimitX96: 0
        });

        amountOut = router.exactInputSingle(params);
    }
}

Resultado:

Output
Transacción completada: Se transfieren 1,000 USDC, se aprueba el SwapRouter V3, se ejecuta el swap en el pool de fee 0.05% y el usuario recibe 0.307 ETH con protección estricta contra slippage.

Comandos básicos

Familiarizarse con estos comandos es esencial para interactuar eficientemente con Uniswap:

Conceptos Clave

Comprender estos conceptos fundamentales te ayudará a dominar Uniswap de forma más organizada y eficiente:

Casos de uso

Algunos ejemplos de aplicaciones prácticas donde se utiliza Uniswap:

Consejos para Principiantes

Aquí tienes algunas recomendaciones para facilitar tus inicios en Uniswap:

Herramientas relacionadas

Si te interesa Uniswap, también podrías explorar estas herramientas:

Recursos útiles

Amplía tus conocimientos con estos enlaces y materiales:

También te puede interesar

Continúa aprendiendo con estos contenidos relacionados: