レッスン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.

免責事項
* 暗号資産投資には重大なリスクが伴います。注意して進めてください。このコースは投資アドバイスを目的としたものではありません。
※ このコースはGate Learnに参加しているメンバーが作成したものです。作成者が共有した意見はGate Learnを代表するものではありません。
カタログ
レッスン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.

免責事項
* 暗号資産投資には重大なリスクが伴います。注意して進めてください。このコースは投資アドバイスを目的としたものではありません。
※ このコースはGate Learnに参加しているメンバーが作成したものです。作成者が共有した意見はGate Learnを代表するものではありません。