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.
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.