第3课

Creación de un contrato sencillo integrado en Oracle

Ahora que tenemos nuestro IDE Remix configurado y las bibliotecas Chainlink necesarias importadas, vamos a crear un contrato inteligente básico que se integra con un Oracle. Esto nos permitirá buscar y manejar datos externos.

Redacción del contrato: conceptos básicos de la integración de Oracle

  1. Comenzando con lo básico:
    Comencemos definiendo nuestro contrato, especificando la versión de Solidity e importando la biblioteca Chainlink que usaremos:
    ```
    Solidez
    // Identificador de licencia SPDX: MIT

solidez pragma ^0.8.21;

importar "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";

contrato OracleIntegratedContract {
AggregatorV3Precio interno de la interfazFeed;

// Se eliminó la visibilidad del constructor 
 constructor(dirección _priceFeed) {
    priceFeed = AggregatorV3Interface(_priceFeed);
}

1. 
En este segmento, hemos especificado que nuestro contrato utilizará un indicador de precios de Chainlink. El constructor toma una dirección para el contrato de alimentación de precios en la red Ethereum.

1. 
 Obteniendo datos del Oracle 

 1. 
 Extendamos nuestro contrato para obtener el último precio de Ethereum:

Solidez
función getLatestEthPrice() vista pública devuelve (int) {
(,int price,,,) = priceFeed.latestRoundData();
return price;
}


1. 
La función `latestRoundData()` de la interfaz Chainlink Aggregator nos brinda varios datos, incluido el precio más reciente.

## Manejo de respuestas de Oracle: administración de datos una vez recibidos 

 Los datos obtenidos de Oracle a menudo vienen en formatos sin procesar que podrían no ser inmediatamente adecuados para nuestras necesidades. Es vital procesar estos datos correctamente dentro de nuestros contratos inteligentes: 



 1. 
 Formatear datos 

 1. 
Digamos que Oracle devuelve el precio de Ethereum en USD pero multiplicado por 10^8 para garantizar que no haya decimales (común en configuraciones de Oracle). Para obtener el precio real, necesitarás formatear los datos:

Solidez
función getFormattedEthPrice() vista pública devuelve (int) {
int rawPrice = getLatestEthPrice();
return rawPrice / 10**8;
}


1. 
Esta función obtiene el precio bruto y luego lo divide por 10^8 para obtener el valor real.

1. 
 Manejo de errores 

 1. 
 Siempre tenga en cuenta la posibilidad de que Oracle no pueda recuperar los datos:

Solidez
función safeGetLatestEthPrice() devuelve la vista pública (int) {
(,int price,,uint256 timestamp,) = priceFeed.latestRoundData();
require(timestamp > 0, “Failed to fetch data from the oracle”);
return price;
}


1. 
 Aquí, la función `latestRoundData()` también proporciona una marca de tiempo. Si la marca de tiempo es 0, probablemente significa que Oracle no pudo recuperar datos y eso lo manejamos con una declaración "require".
Su código completo debería verse así:

Solidez
// Identificador de licencia SPDX: MIT

solidez pragma ^0.8.21;

importar "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";

contrato OracleIntegratedContract {
AggregatorV3Precio interno de la interfazFeed;

// Visibilidad para el constructor eliminada 
 constructor(dirección _priceFeed) {
    priceFeed = AggregatorV3Interface(_priceFeed);
}

función getLatestEthPrice() vista pública devuelve (int) {
    (,int price,,,) = priceFeed.latestRoundData();
    return price;
}

función getFormattedEthPrice() vista pública devuelve (int) {
    int rawPrice = getLatestEthPrice();
    return rawPrice / 10**8;
}

función safeGetLatestEthPrice() vista pública devuelve (int) {
    (,int price,,uint256 timestamp,) = priceFeed.latestRoundData();
    require(timestamp > 0, "Failed to fetch data from the oracle");
    return price;
}

}
```

Al final de esta lección, debería tener un contrato inteligente básico integrado en Oracle redactado en Remix. Este contrato obtiene el último precio de Ethereum y maneja los datos devueltos. En nuestras próximas lecciones, implementaremos este contrato y profundizaremos más en las mejores prácticas y matices.

免责声明
* 投资有风险,入市须谨慎。本课程不作为投资理财建议。
* 本课程由入驻Gate Learn的作者创作,观点仅代表作者本人,绝不代表Gate Learn赞同其观点或证实其描述。
目录
第3课

Creación de un contrato sencillo integrado en Oracle

Ahora que tenemos nuestro IDE Remix configurado y las bibliotecas Chainlink necesarias importadas, vamos a crear un contrato inteligente básico que se integra con un Oracle. Esto nos permitirá buscar y manejar datos externos.

Redacción del contrato: conceptos básicos de la integración de Oracle

  1. Comenzando con lo básico:
    Comencemos definiendo nuestro contrato, especificando la versión de Solidity e importando la biblioteca Chainlink que usaremos:
    ```
    Solidez
    // Identificador de licencia SPDX: MIT

solidez pragma ^0.8.21;

importar "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";

contrato OracleIntegratedContract {
AggregatorV3Precio interno de la interfazFeed;

// Se eliminó la visibilidad del constructor 
 constructor(dirección _priceFeed) {
    priceFeed = AggregatorV3Interface(_priceFeed);
}

1. 
En este segmento, hemos especificado que nuestro contrato utilizará un indicador de precios de Chainlink. El constructor toma una dirección para el contrato de alimentación de precios en la red Ethereum.

1. 
 Obteniendo datos del Oracle 

 1. 
 Extendamos nuestro contrato para obtener el último precio de Ethereum:

Solidez
función getLatestEthPrice() vista pública devuelve (int) {
(,int price,,,) = priceFeed.latestRoundData();
return price;
}


1. 
La función `latestRoundData()` de la interfaz Chainlink Aggregator nos brinda varios datos, incluido el precio más reciente.

## Manejo de respuestas de Oracle: administración de datos una vez recibidos 

 Los datos obtenidos de Oracle a menudo vienen en formatos sin procesar que podrían no ser inmediatamente adecuados para nuestras necesidades. Es vital procesar estos datos correctamente dentro de nuestros contratos inteligentes: 



 1. 
 Formatear datos 

 1. 
Digamos que Oracle devuelve el precio de Ethereum en USD pero multiplicado por 10^8 para garantizar que no haya decimales (común en configuraciones de Oracle). Para obtener el precio real, necesitarás formatear los datos:

Solidez
función getFormattedEthPrice() vista pública devuelve (int) {
int rawPrice = getLatestEthPrice();
return rawPrice / 10**8;
}


1. 
Esta función obtiene el precio bruto y luego lo divide por 10^8 para obtener el valor real.

1. 
 Manejo de errores 

 1. 
 Siempre tenga en cuenta la posibilidad de que Oracle no pueda recuperar los datos:

Solidez
función safeGetLatestEthPrice() devuelve la vista pública (int) {
(,int price,,uint256 timestamp,) = priceFeed.latestRoundData();
require(timestamp > 0, “Failed to fetch data from the oracle”);
return price;
}


1. 
 Aquí, la función `latestRoundData()` también proporciona una marca de tiempo. Si la marca de tiempo es 0, probablemente significa que Oracle no pudo recuperar datos y eso lo manejamos con una declaración "require".
Su código completo debería verse así:

Solidez
// Identificador de licencia SPDX: MIT

solidez pragma ^0.8.21;

importar "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";

contrato OracleIntegratedContract {
AggregatorV3Precio interno de la interfazFeed;

// Visibilidad para el constructor eliminada 
 constructor(dirección _priceFeed) {
    priceFeed = AggregatorV3Interface(_priceFeed);
}

función getLatestEthPrice() vista pública devuelve (int) {
    (,int price,,,) = priceFeed.latestRoundData();
    return price;
}

función getFormattedEthPrice() vista pública devuelve (int) {
    int rawPrice = getLatestEthPrice();
    return rawPrice / 10**8;
}

función safeGetLatestEthPrice() vista pública devuelve (int) {
    (,int price,,uint256 timestamp,) = priceFeed.latestRoundData();
    require(timestamp > 0, "Failed to fetch data from the oracle");
    return price;
}

}
```

Al final de esta lección, debería tener un contrato inteligente básico integrado en Oracle redactado en Remix. Este contrato obtiene el último precio de Ethereum y maneja los datos devueltos. En nuestras próximas lecciones, implementaremos este contrato y profundizaremos más en las mejores prácticas y matices.

免责声明
* 投资有风险,入市须谨慎。本课程不作为投资理财建议。
* 本课程由入驻Gate Learn的作者创作,观点仅代表作者本人,绝不代表Gate Learn赞同其观点或证实其描述。