Volver al índice
Modo oscuro
Chainlink

Chainlink 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 Chainlink. Es ideal para un nivel avanzado.

Chainlink es la red de oráculos descentralizados estándar de la industria Web3, que conecta contratos inteligentes de forma segura con datos del mundo real, APIs externas y sistemas de computación fuera de la cadena. Permite acceder a Data Feeds de precios a prueba de manipulaciones, streams de baja latencia para protocolos DeFi de alta frecuencia, computación verificable como Chainlink VRF (números aleatorios) y Automation (ejecución programada de contratos), así como el protocolo de interoperabilidad cross-chain CCIP. Esta guía aborda la implementación de feeds AggregatorV3 con validación de precios obsoletos, automatización y comunicación entre cadenas.

“Hola, mundo” en Chainlink

Contrato Solidity que consulta el precio de ETH/USD en tiempo real mediante AggregatorV3Interface de Chainlink con validación estricta de precios obsoletos o corruptos.

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

import {AggregatorV3Interface} from "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol";

contract ChainlinkPriceConsumer {
    AggregatorV3Interface internal immutable priceFeed;
    uint256 public constant MAX_STALENESS = 3600; // 1 hora máximo de tolerancia

    // Sepolia ETH/USD Feed: 0x694AA1769357215DE4FAC081bf1f309aDC325306
    constructor(address _priceFeed) {
        priceFeed = AggregatorV3Interface(_priceFeed);
    }

    /// @notice Obtiene el último precio validado del activo
    /// @return price Precio con los decimales correspondientes al feed
    function getLatestPrice() public view returns (int256 price) {
        (
            uint80 roundId,
            int256 answer,
            /* uint256 startedAt */,
            uint256 updatedAt,
            uint80 answeredInRound
        ) = priceFeed.latestRoundData();

        require(answer > 0, "Precio invalido");
        require(updatedAt > 0, "Ronda incompleta");
        require(answeredInRound >= roundId, "Dato obsoleto detectado");
        require(block.timestamp - updatedAt <= MAX_STALENESS, "Feed de precio caducado");

        return answer;
    }

    /// @notice Obtiene el número de decimales del feed (habitualmente 8 para USD)
    function getDecimals() public view returns (uint8) {
        return priceFeed.decimals();
    }
}

Resultado:

Output
Precio retornado: 325450000000 (8 decimales = $3,254.50 USD). La transacción valida en memoria la consistencia de roundId y updatedAt en menos de 5,000 gas.

Comandos básicos

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

Conceptos Clave

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

Casos de uso

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

Consejos para Principiantes

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

Herramientas relacionadas

Si te interesa Chainlink, 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: