Lição 3

Construindo um contrato simples integrado ao Oracle

Agora que temos 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. Isso nos permitirá buscar e manipular 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 nosso contrato, especificando a versão do Solidity e importando a biblioteca Chainlink que usaremos:
    ```
    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 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.

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

Construindo um contrato simples integrado ao Oracle

Agora que temos 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. Isso nos permitirá buscar e manipular 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 nosso contrato, especificando a versão do Solidity e importando a biblioteca Chainlink que usaremos:
    ```
    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 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.

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.
It seems that you are attempting to access our services from a Restricted Location where Gate is unable to provide services. We apologize for any inconvenience this may cause. Currently, the Restricted Locations include but not limited to: the United States of America, Canada, Cambodia, Thailand, Cuba, Iran, North Korea and so on. For more information regarding the Restricted Locations, please refer to the User Agreement. Should you have any other questions, please contact our Customer Support Team.