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.
Deja una respuesta