Lição 3

Construir um Contrato Simples Integrado com a Oracle

Agora que temos o nosso Remix IDE configurado e as bibliotecas Chainlink necessárias importadas, vamos criar um contrato inteligente básico que se integra a um oráculo. Isto permitir-nos-á buscar e lidar com dados externos.

Elaboração do Contrato: Noções básicas de integração Oracle




  1. Começando com o básico:
    Vamos começar definindo o nosso contrato, especificando a versão Solidity e importando a biblioteca Chainlink que usaremos: ```Solidity//SPDX-License-identificador: MIT

solidez do pragma ^0.8.21;

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


contrato OracleIntegratedContract {AggregatorV3Interface interno PriceFeed;

//Visibilidade do construtor removida
construtor (endereço _PriceFeed) {
    priceFeed = AggregatorV3Interface(_priceFeed);
}

1. 
Neste segmento, especificamos que o nosso contrato usará um Feed de Preços Chainlink. O construtor pega um endereço para o contrato de alimentação de preços na rede Ethereum.

1. 
Obtendo Dados do Oracle

1. 
Vamos estender o nosso contrato para buscar o preço mais recente do Ethereum:


Função de solidez getLateStethPrice () retornos de vista pública (int) {
(,int price,,,) = priceFeed.latestRoundData();
return price;
}


1. 
A função `latestRundData () `da interface Chainlink Aggregator dá-nos vários dados, incluindo o preço mais recente.

## Lidar com respostas do Oracle: Gerir os dados assim que forem recebidos

Os dados recolhidos dos oráculos vêm frequentemente em formatos brutos que podem não ser imediatamente adequados às nossas necessidades. É vital processar estes dados corretamente dentro dos nossos contratos inteligentes:



1. 
Formatação de Dados

1. 
Digamos que o oráculo devolva o preço do Ethereum em USD mas multiplicado por 10^8 para garantir que não há decimais (comum nas configurações do oracle). Para obter o preço real, precisa formatar os dados:


Função de solidez getFormatteDethPrice () retornos de vista 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 contabilizar a possibilidade de o oráculo não conseguir buscar dados:


Função de solidez SafeGetLateStethPrice () retornos de vista pública (int) {
(,int price,,uint256 timestamp,) = priceFeed.latestRoundData();
require(timestamp > 0, “Failed to fetch data from the oracle”);
return price;
}


1. 
Aqui, a função `latestRundData () `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 declaração `requisito`.
O seu código completo deve ficar assim:

Solidity
//Identificador de licença SPDX: MIT

solidez do pragma ^0.8.21;

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


contrato OracleIntegratedContract {AggregatorV3Interface interno PriceFeed;

//Visibilidade do construtor removida
construtor (endereço _PriceFeed) {
    priceFeed = AggregatorV3Interface(_priceFeed);
}

função getLateStethPrice () retornos de vista pública (int) {
    (,int price,,,) = priceFeed.latestRoundData();
    return price;
}

função getFormatteDethPrice () retornos de vista pública (int) {
    int rawPrice = getLatestEthPrice();
    return rawPrice / 10**8;
}

função safeGetLateStethPrice () retornos de vista pública (int) {
    (,int price,,uint256 timestamp,) = priceFeed.latestRoundData();
    require(timestamp > 0, "Failed to fetch data from the oracle");
    return price;
}

}
```

No final desta lição, deverá ter um contrato inteligente integrado à oracle básico elaborado no Remix. Este contrato busca o preço mais recente do Ethereum e lida com os dados devolvidos. Nas nossas próximas aulas, vamos implementar este contrato e aprofundar ainda mais as melhores práticas e nuances.

Isenção de responsabilidade
* O investimento em criptomoedas envolve grandes riscos. Prossiga com cautela. O curso não se destina a servir de orientação para investimentos.
* O curso foi criado pelo autor que entrou para o Gate Learn. As opiniões compartilhadas pelo autor não representam o Gate Learn.
Catálogo
Lição 3

Construir um Contrato Simples Integrado com a Oracle

Agora que temos o nosso Remix IDE configurado e as bibliotecas Chainlink necessárias importadas, vamos criar um contrato inteligente básico que se integra a um oráculo. Isto permitir-nos-á buscar e lidar com dados externos.

Elaboração do Contrato: Noções básicas de integração Oracle




  1. Começando com o básico:
    Vamos começar definindo o nosso contrato, especificando a versão Solidity e importando a biblioteca Chainlink que usaremos: ```Solidity//SPDX-License-identificador: MIT

solidez do pragma ^0.8.21;

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


contrato OracleIntegratedContract {AggregatorV3Interface interno PriceFeed;

//Visibilidade do construtor removida
construtor (endereço _PriceFeed) {
    priceFeed = AggregatorV3Interface(_priceFeed);
}

1. 
Neste segmento, especificamos que o nosso contrato usará um Feed de Preços Chainlink. O construtor pega um endereço para o contrato de alimentação de preços na rede Ethereum.

1. 
Obtendo Dados do Oracle

1. 
Vamos estender o nosso contrato para buscar o preço mais recente do Ethereum:


Função de solidez getLateStethPrice () retornos de vista pública (int) {
(,int price,,,) = priceFeed.latestRoundData();
return price;
}


1. 
A função `latestRundData () `da interface Chainlink Aggregator dá-nos vários dados, incluindo o preço mais recente.

## Lidar com respostas do Oracle: Gerir os dados assim que forem recebidos

Os dados recolhidos dos oráculos vêm frequentemente em formatos brutos que podem não ser imediatamente adequados às nossas necessidades. É vital processar estes dados corretamente dentro dos nossos contratos inteligentes:



1. 
Formatação de Dados

1. 
Digamos que o oráculo devolva o preço do Ethereum em USD mas multiplicado por 10^8 para garantir que não há decimais (comum nas configurações do oracle). Para obter o preço real, precisa formatar os dados:


Função de solidez getFormatteDethPrice () retornos de vista 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 contabilizar a possibilidade de o oráculo não conseguir buscar dados:


Função de solidez SafeGetLateStethPrice () retornos de vista pública (int) {
(,int price,,uint256 timestamp,) = priceFeed.latestRoundData();
require(timestamp > 0, “Failed to fetch data from the oracle”);
return price;
}


1. 
Aqui, a função `latestRundData () `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 declaração `requisito`.
O seu código completo deve ficar assim:

Solidity
//Identificador de licença SPDX: MIT

solidez do pragma ^0.8.21;

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


contrato OracleIntegratedContract {AggregatorV3Interface interno PriceFeed;

//Visibilidade do construtor removida
construtor (endereço _PriceFeed) {
    priceFeed = AggregatorV3Interface(_priceFeed);
}

função getLateStethPrice () retornos de vista pública (int) {
    (,int price,,,) = priceFeed.latestRoundData();
    return price;
}

função getFormatteDethPrice () retornos de vista pública (int) {
    int rawPrice = getLatestEthPrice();
    return rawPrice / 10**8;
}

função safeGetLateStethPrice () retornos de vista pública (int) {
    (,int price,,uint256 timestamp,) = priceFeed.latestRoundData();
    require(timestamp > 0, "Failed to fetch data from the oracle");
    return price;
}

}
```

No final desta lição, deverá ter um contrato inteligente integrado à oracle básico elaborado no Remix. Este contrato busca o preço mais recente do Ethereum e lida com os dados devolvidos. Nas nossas próximas aulas, vamos implementar este contrato e aprofundar ainda mais as melhores práticas e nuances.

Isenção de responsabilidade
* O investimento em criptomoedas envolve grandes riscos. Prossiga com cautela. O curso não se destina a servir de orientação para investimentos.
* O curso foi criado pelo autor que entrou para o Gate Learn. As opiniões compartilhadas pelo autor não representam o Gate Learn.