solidez do pragma ^0.8.21;
importar “@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol”;
contrato OracleIntegratedContract {
AggregatorV3Interface priceFeed interno;
// Visibilidade para construtor removido
construtor(address _priceFeed) {
priceFeed = AggregatorV3Interface(_priceFeed);
}
1.
Neste segmento, especificamos que nosso contrato usará um Chainlink Price Feed. O construtor obtém um endereço para o contrato de alimentação de preços na rede Ethereum.
1.
Buscando dados do Oracle
1.
Vamos estender nosso contrato para buscar o preço mais recente do Ethereum:
Solidez
função getLatestEthPrice() retornos de visualização pública (int) {
(,int price,,,) = priceFeed.latestRoundData();
return price;
}
1.
A função `latestRoundData()` da interface Chainlink Aggregator nos fornece vários dados, incluindo o preço mais recente.
## Lidando com respostas do Oracle: Gerenciando dados assim que são recebidos
Os dados obtidos de oráculos geralmente vêm em formatos brutos que podem não ser imediatamente adequados às nossas necessidades. É vital processar esses dados corretamente em nossos contratos inteligentes:
1.
Formatando dados
1.
Digamos que o oráculo retorne o preço do Ethereum em dólares americanos, mas multiplicado por 10 ^ 8 para garantir que não haja decimais (comum em configurações do oráculo). Para obter o preço real, você precisa formatar os dados:
Solidez
função getFormattedEthPrice() retornos de visualização pública (int) {
int rawPrice = getLatestEthPrice();
return rawPrice / 10**8;
}
1.
Esta função busca o preço bruto e depois o divide por 10 ^ 8 para obter o valor do mundo real.
1.
Tratamento de Erros
1.
Sempre considere a possibilidade de o oráculo falhar ao buscar dados:
Solidez
função safeGetLatestEthPrice() retornos de visualização pública (int) {
(,int price,,uint256 timestamp,) = priceFeed.latestRoundData();
require(timestamp > 0, “Failed to fetch data from the oracle”);
return price;
}
Aqui, a função `latestRoundData()` também fornece um carimbo de data/hora. Se o carimbo de data/hora for 0, provavelmente significa que o oráculo falhou ao recuperar os dados, e tratamos disso com uma instrução `require`.
Seu código completo deve ficar assim:
Solidez
// Identificador de licença SPDX: MIT
solidez do pragma ^0.8.21;
importar “@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol”;
contrato OracleIntegratedContract {
AggregatorV3Interface priceFeed interno;
// Visibilidade para o construtor removido
construtor (address _priceFeed) {
priceFeed = AggregatorV3Interface(_priceFeed);
}
funções getLatestEthPrice() retornos de visualização pública (int) {
(,int price,,,) = priceFeed.latestRoundData();
return price;
}
funções getFormattedEthPrice() retornos de visualização pública (int) {
int rawPrice = getLatestEthPrice();
return rawPrice / 10**8;
}
funções safeGetLatestEthPrice() visualização pública retorna (int) {
(,int price,,uint256 timestamp,) = priceFeed.latestRoundData();
require(timestamp > 0, "Failed to fetch data from the oracle");
return price;
}
}
```
Ao final desta lição, você deverá ter um contrato inteligente básico integrado ao oráculo elaborado no Remix. Este contrato busca o preço mais recente do Ethereum e trata os dados retornados. Nas próximas lições, implantaremos esse contrato e nos aprofundaremos nas melhores práticas e nuances.
solidez do pragma ^0.8.21;
importar “@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol”;
contrato OracleIntegratedContract {
AggregatorV3Interface priceFeed interno;
// Visibilidade para construtor removido
construtor(address _priceFeed) {
priceFeed = AggregatorV3Interface(_priceFeed);
}
1.
Neste segmento, especificamos que nosso contrato usará um Chainlink Price Feed. O construtor obtém um endereço para o contrato de alimentação de preços na rede Ethereum.
1.
Buscando dados do Oracle
1.
Vamos estender nosso contrato para buscar o preço mais recente do Ethereum:
Solidez
função getLatestEthPrice() retornos de visualização pública (int) {
(,int price,,,) = priceFeed.latestRoundData();
return price;
}
1.
A função `latestRoundData()` da interface Chainlink Aggregator nos fornece vários dados, incluindo o preço mais recente.
## Lidando com respostas do Oracle: Gerenciando dados assim que são recebidos
Os dados obtidos de oráculos geralmente vêm em formatos brutos que podem não ser imediatamente adequados às nossas necessidades. É vital processar esses dados corretamente em nossos contratos inteligentes:
1.
Formatando dados
1.
Digamos que o oráculo retorne o preço do Ethereum em dólares americanos, mas multiplicado por 10 ^ 8 para garantir que não haja decimais (comum em configurações do oráculo). Para obter o preço real, você precisa formatar os dados:
Solidez
função getFormattedEthPrice() retornos de visualização pública (int) {
int rawPrice = getLatestEthPrice();
return rawPrice / 10**8;
}
1.
Esta função busca o preço bruto e depois o divide por 10 ^ 8 para obter o valor do mundo real.
1.
Tratamento de Erros
1.
Sempre considere a possibilidade de o oráculo falhar ao buscar dados:
Solidez
função safeGetLatestEthPrice() retornos de visualização pública (int) {
(,int price,,uint256 timestamp,) = priceFeed.latestRoundData();
require(timestamp > 0, “Failed to fetch data from the oracle”);
return price;
}
Aqui, a função `latestRoundData()` também fornece um carimbo de data/hora. Se o carimbo de data/hora for 0, provavelmente significa que o oráculo falhou ao recuperar os dados, e tratamos disso com uma instrução `require`.
Seu código completo deve ficar assim:
Solidez
// Identificador de licença SPDX: MIT
solidez do pragma ^0.8.21;
importar “@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol”;
contrato OracleIntegratedContract {
AggregatorV3Interface priceFeed interno;
// Visibilidade para o construtor removido
construtor (address _priceFeed) {
priceFeed = AggregatorV3Interface(_priceFeed);
}
funções getLatestEthPrice() retornos de visualização pública (int) {
(,int price,,,) = priceFeed.latestRoundData();
return price;
}
funções getFormattedEthPrice() retornos de visualização pública (int) {
int rawPrice = getLatestEthPrice();
return rawPrice / 10**8;
}
funções safeGetLatestEthPrice() visualização pública retorna (int) {
(,int price,,uint256 timestamp,) = priceFeed.latestRoundData();
require(timestamp > 0, "Failed to fetch data from the oracle");
return price;
}
}
```
Ao final desta lição, você deverá ter um contrato inteligente básico integrado ao oráculo elaborado no Remix. Este contrato busca o preço mais recente do Ethereum e trata os dados retornados. Nas próximas lições, implantaremos esse contrato e nos aprofundaremos nas melhores práticas e nuances.