12.3 Gestión de datos externos en contratos inteligentes

Punto del curso de Solidity: 12.3 Gestión de datos externos en contratos inteligentes

En el contexto de contratos inteligentes en Solidity, la gestión de datos externos plantea un reto significativo. Dado que los contratos en la blockchain no pueden directamente acceder a datos fuera de su entorno, existen varias estrategias y herramientas que facilitamos para interactuar con datos externos de manera segura y confiable.

1. Uso de Oráculos

Los oráculos son servicios que permiten a los contratos inteligentes interactuar con datos externos. Actúan como intermediarios que recuperan información del mundo real y la transfieren a la blockchain.

Ejemplo de integración con Chainlink

Chainlink es uno de los oráculos más populares y utilizados en el ecosistema Ethereum. Proporciona una manera confiable de obtener datos externos en la blockchain.

// 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
      Decentralized Oracle Address: 0x9326BFA02ADD2366b30bacB125260Af641031331
     /
    constructor() {
        priceFeed = AggregatorV3Interface(0x9326BFA02ADD2366b30bacB125260Af641031331)
    }

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

En este ejemplo, se utiliza Chainlink para obtener el precio más reciente de ETH en USD. Puedes desplegar este contrato en Kovan Testnet y llamar a la función getLatestPrice para obtener el precio actualizado.

2. API mediante servicios fuera de la cadena

Otra alternativa es utilizar servicios de terceros que proporcionen una API RESTful. Sin embargo, debido a las restricciones de acceso directo desde un contrato, normalmente se combina con un oráculo o un servicio tipo trusted relay. A continuación, presentamos un ejemplo de integración utilizando un oráculo externo controlado por un propietario de contrato inteligente.

Ejemplo de contrato consumidor y proveedor de oráculo

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

contract OracleConsumer {
    address public oracle
    uint256 public data

    event DataRequested()
    event DataUpdated(uint256 data)

    modifier onlyOracle() {
        require(msg.sender == oracle, Only oracle can call this function)
        _
    }

    constructor(address _oracle) {
        oracle = _oracle
    }

    function requestData() public {
        emit DataRequested()
    }

    function updateData(uint256 _data) public onlyOracle {
        data = _data
        emit DataUpdated(_data)
    }
}

El contrato OracleConsumer define métodos para solicitar datos y actualizar datos que sólo pueden ser modificados por el oráculo autorizado.

Proveedor de Oráculo

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

import ./OracleConsumer.sol

contract OracleProvider {
    OracleConsumer consumer

    constructor(address _consumer) {
        consumer = OracleConsumer(_consumer)
    }

    function fulfillDataRequest(uint256 _data) public {
        consumer.updateData(_data)
    }
}

El OracleProvider actúa como el proveedor de datos y llama a la función updateData del OracleConsumer para actualizar los datos en el contrato inteligente.

3. Consideraciones de Seguridad

  • Confianza en el proveedor: Es importante asegurarse de que los datos provenientes del oráculo sean confiables. El contrato debe considerar un oráculo distribuido y bien auditado.
  • Control de Acceso: Asegurarse de que solo oráculos autorizados puedan proporcionar datos, utilizando mecanismos como onlyOracle en el ejemplo anterior.
  • Costos de gas: Los datos externos pueden aumentar los costos de gas. Asegúrate de considerar esto al diseñar las interacciones con oráculos.

En resumen, la gestión de datos externos en contratos inteligentes se puede lograr mediante el uso de oráculos como Chainlink o mediante la implementación de soluciones personalizadas que involucren APIs externas y controladores de contratos inteligentes. Estas prácticas aseguran que los contratos puedan interactuar con información del mundo real de forma segura y fiable.

AnteriorSiguiente

[mwai_chat]

Deja una respuesta

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