Aula 130: Integrando Oráculos Chainlink
Nesta aula, vamos explorar como integrar oráculos Chainlink em seus contratos inteligentes. Chainlink é uma rede de oráculos descentralizada que permite que contratos inteligentes acessem dados fora da cadeia de maneira segura. Isso é particularmente útil para aplicativos que requerem dados do mundo real, como feeds de preços ou geração de números aleatórios.
O que é um Oráculo?
Um oráculo é um serviço de terceiros que fornece dados externos para contratos inteligentes. Como as blockchains não podem acessar informações externas diretamente, os oráculos atuam como intermediários, trazendo dados fora da cadeia para a blockchain de forma segura e sem confiança.
Começando com Chainlink
Para começar a usar os oráculos Chainlink, você precisará:
- Um conhecimento básico sobre Solidity e desenvolvimento de contratos inteligentes.
- Um ambiente de desenvolvimento Ethereum (por exemplo, Truffle, Hardhat ou Remix).
- Uma conta na Infura ou Alchemy para acesso aos nós Ethereum (se você estiver usando um ambiente de desenvolvimento que exija isso).
Instalar os Contratos Chainlink
Primeiro, você precisa instalar os contratos Chainlink. Se você estiver usando Hardhat ou Truffle, adicione o Chainlink ao seu projeto:
npm install @chainlink/contracts
Exemplo: Contrato Simples de Feed de Preços
Neste exemplo, vamos criar um contrato inteligente simples que recupera o preço mais recente do ETH usando o oráculo de Feed de Preços da Chainlink.
Passo 1: Criar o Contrato Inteligente
Crie um novo arquivo chamado PriceFeed.sol
e adicione o seguinte código:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";
contract PriceFeed {
AggregatorV3Interface internal priceFeed;
/**
* Rede: Ethereum
* Endereço: O endereço do contrato de feed de preços ETH/USD na mainnet Ethereum
*/
constructor() {
priceFeed = AggregatorV3Interface(0x5f4eC3Df9Cbd43714fe2740f5e3616155c5B8419);
}
/**
* Retorna o preço mais recente
*/
function getLatestPrice() public view returns (int) {
(
,
int price,
,
,
) = priceFeed.latestRoundData();
return price;
}
}
Passo 2: Implantar o Contrato
Dependendo do ambiente de desenvolvimento que você está usando, siga os passos relevantes para implantar seu contrato. Aqui está um breve exemplo usando Hardhat:
- Crie um script de implantação no diretório
scripts
, por exemplo,deploy.js
:
async function main() {
const PriceFeed = await ethers.getContractFactory("PriceFeed");
const priceFeed = await PriceFeed.deploy();
await priceFeed.deployed();
console.log("PriceFeed implantado em:", priceFeed.address);
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});
- Implante seu contrato na rede Ethereum. Certifique-se de configurar o arquivo
hardhat.config.js
do Hardhat com um provedor de rede apropriado.
npx hardhat run scripts/deploy.js --network <nome_da_rede>
Passo 3: Interagindo com o Contrato
Você pode interagir com seu contrato implantado usando um script ou console. Aqui está um exemplo de script para recuperar o preço mais recente do ETH:
const { ethers } = require("hardhat");
async function main() {
const priceFeedAddress = "<endereço_do_contrato_implantado>";
const PriceFeed = await ethers.getContractFactory("PriceFeed");
const priceFeed = PriceFeed.attach(priceFeedAddress);
const latestPrice = await priceFeed.getLatestPrice();
console.log("Preço mais recente do ETH: ", latestPrice.toString());
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});
Conclusão
Nesta aula, aprendemos como integrar oráculos Chainlink em um contrato inteligente para recuperar dados em tempo real, especificamente o preço do ETH. A Chainlink oferece uma maneira segura de acessar feeds de dados externos, que podem ser utilizados em várias aplicações descentralizadas (dApps).
À medida que você continuar a construir sobre esse conhecimento, pode explorar casos de uso mais avançados para oráculos, como geração de números aleatórios, dados climáticos e muito mais!