12. Oráculos y Datos Externos

html

Punto del curso de Solidity: 12. Oráculos y Datos Externos

En el contexto de los contratos inteligentes en Solidity, la interacción con datos externos es de suma importancia para casos de uso del mundo real. Los contratos inteligentes poseen una capacidad inherente para ejecutar código de manera autónoma y sin intervención humana, lo que les permite gestionar situaciones de mayor complejidad. Los oráculos son servicios que permiten a los contratos inteligentes interactuar con datos externos, los cuales son necesarios para muchas aplicaciones prácticas como predicciones de mercado, seguros descentralizados, y muchos otros.

Definición de Oráculos

Un oráculo es un tercero de confianza que proporciona datos del mundo exterior a la blockchain. Debido a que las blockchains no pueden acceder directamente a datos fuera de su propia red, se requiere un oráculo para introducir esa información. Los oráculos pueden ser utilizados para obtener datos como precios de criptomonedas, resultados de eventos deportivos, condiciones meteorológicas, etc.

Tipos de Oráculos

  • Oráculos de Software: Obtienen datos de fuentes en línea, como sitios web o APIs.
  • Oráculos de Hardware: Obtienen datos de dispositivos físicos mediante sensores y otros aparatos.
  • Oráculos Humanos: Individuos que verifican y suben datos a la blockchain manualmente.
  • Oráculos de Consenso: Datos que son validados por múltiples oráculos, utilizando mecanismos de consenso para asegurar la veracidad de los datos.

Uso de Oráculos en Solidity

Uno de los servicios de oráculo más utilizados es Chainlink. Chainlink permite que los contratos inteligentes en diferentes blockchains accedan a datos seguros fuera de la blockchain.

Ejemplo de Contrato con Oráculo de Chainlink

A continuación se muestra un ejemplo de cómo interactuar con un oráculo utilizando Chainlink para obtener el precio actual de ETH en USD.

    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.0

    import @chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol

    contract PriceConsumerV3 {
        AggregatorV3Interface internal priceFeed

        /
         Network: Kovan
         Aggregator: ETH/USD
         Address: 0x9326BFA02ADD2366b30bacB125260Af641031331
        /
        constructor() {
            priceFeed = AggregatorV3Interface(0x9326BFA02ADD2366b30bacB125260Af641031331)
        }

        /
         Returns the latest price
        /
        function getLatestPrice() public view returns (int) {
            (
                /uint80 roundID/,
                int price,
                /uint startedAt/,
                /uint timeStamp/,
                /uint80 answeredInRound/
            ) = priceFeed.latestRoundData()
            return price
        }
    }
    

En este contrato, inicialmente importamos la interfaz AggregatorV3Interface proporcionada por Chainlink. Esta interfaz nos permite interactuar con el oráculo de datos de precios.

En el constructor del contrato, instanciamos el oráculo pasando la dirección del oráculo ETH/USD en la red Kovan (una red de prueba de Ethereum).

El método getLatestPrice invoca el método latestRoundData del contrato del oráculo para obtener el precio más reciente de ETH en USD. Este método devuelve múltiples valores, pero en este caso solo estamos interesados en el precio, que es el segundo argumento de retorno.

Manejo de Datos de Oráculos

Es importante señalar que la consulta a un oráculo generalmente conlleva un coste de gas. Además, debido a la naturaleza distribuida de la blockchain, existe un pequeño retraso entre la solicitud y la recepción de datos.

Seguridad en el Uso de Oráculos

Al utilizar oráculos, es esencial considerar la seguridad y fiabilidad de estos. El uso de oráculos descentralizados como Chainlink ayuda a mitigar riesgos de manipulación y proporciona una mayor garantía sobre la precisión y disponibilidad de los datos.

El diseño de aplicaciones descentralizadas (dApps) que dependen de datos externos siempre debe incluir mecanismos para manejar la posible indisponibilidad o inconsistencia en los datos proporcionados por los oráculos. Estrategias como la reutilización de datos anteriores en caso de fallo o la incorporación de múltiples oráculos pueden mejorar la robustez de la aplicación.

AnteriorSiguiente

[mwai_chat]

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *