Lição: 254: Oraclize/Serviço de Oracle Provável
No mundo das blockchains, especialmente dentro dos contratos inteligentes do Ethereum, a integração de dados do mundo real é um desafio. Contratos inteligentes são robustos, mas isolados; eles não conseguem acessar fontes de dados externas por conta própria. É aí que o serviço de oráculo Oraclize (atualmente conhecido como Provable) entra em cena. Esta lição irá te apresentar ao Provable, sua funcionalidade e como utilizá-lo dentro dos seus contratos inteligentes em Solidity.
O que é o Provable?
Provable é um serviço de oráculo descentralizado que permite que contratos inteligentes busquem dados do mundo real a partir de várias APIs. Isso permite que os desenvolvedores construam dApps mais interativos e úteis, integrando dados off-chain à sua lógica on-chain.
Principais Características do Provable
- Verificação de dados: O Provable garante que os dados recebidos sejam confiáveis, verificando a fonte.
- Múltiplas fontes de dados: Você pode obter dados de uma variedade de APIs.
- Taxas baixas e serviço rápido: O Provable foi projetado para fornecer soluções econômicas para a recuperação de dados.
Como Usar o Provable
Para usar o Provable nos seus contratos inteligentes, você primeiro precisa instalar as bibliotecas necessárias. Você pode fazer isso via npm ou diretamente no seu Remix IDE usando uma declaração de importação.
Passo 1: Importar a Biblioteca do Provable
Você deve importar a biblioteca Provable no seu contrato inteligente em Solidity:
pragma solidity ^0.8.0;
import "https://github.com/provable-things/ethapi/blob/master/provableAPI.sol";
Passo 2: Criar Seu Contrato Usando Provable
Abaixo está um exemplo simples de como configurar um contrato inteligente que usa o Provable para buscar o preço atual do Ether em USD.
pragma solidity ^0.8.0;
import "https://github.com/provable-things/ethapi/blob/master/provableAPI.sol";
contract OraclePrecoEther is usingProvable {
string public precoEther;
event LogNovaConsultaProvable(string descricao);
event LogPrecoAtualizado(string preco);
constructor() {
atualizarPreco();
}
function atualizarPreco() public payable {
if (provable_getPrice("URL") > address(this).balance) {
emit LogNovaConsultaProvable("Fundos insuficientes para a consulta.");
return;
}
emit LogNovaConsultaProvable("Consulta Provable foi enviada, aguardando a resposta...");
provable_query("URL", "json(https://api.coindesk.com/v1/bpi/currentprice/ETH.json).bpi.USD.rate");
}
function __callback(bytes32 myid, string memory resultado) public override {
require(msg.sender == provable_cbAddress());
precoEther = resultado;
emit LogPrecoAtualizado(resultado);
}
}
Explicação do Código
- Declaração do Contrato: O contrato
OraclePrecoEther
herda a bibliotecausingProvable
, permitindo realizar chamadas de API prováveis. - Variável de Estado:
precoEther
armazena o preço do Ether em USD extraído da API. - Eventos: Emitimos eventos para notificar quando uma nova consulta é feita e quando o preço é atualizado.
- Construtor: O contrato chama a função
atualizarPreco
no momento da implantação para obter dados em tempo real. - Função atualizarPreco: Esta função inicia a requisição para uma API externa que fornece o preço do Ether. Ela verifica se o contrato tem saldo de Ether suficiente para fazer a chamada da API.
- Função __callback: Esta função é chamada pelo Provable com o resultado da chamada da API. Ela verifica se o remetente da mensagem é o contrato Provable, atualiza o
precoEther
e emite um evento.
Como Implantar e Testar
- Implemente o contrato em uma rede de teste.
- Certifique-se de que você possui Ether suficiente no saldo do contrato.
- Chame a função
atualizarPreco
para iniciar uma atualização de preço. - Verifique os logs para ver o novo preço quando for atualizado via o evento
LogPrecoAtualizado
.
Conclusão
Nesta lição, aprendemos sobre o serviço de oráculo Provable, sua integração nos contratos inteligentes em Solidity e como buscar dados em tempo real a partir de uma API externa. Com oráculos como o Provable, os desenvolvedores podem desbloquear todo o potencial dos contratos inteligentes ao integrar perfeitamente dados off-chain.
Lembre-se, enquanto o uso de oráculos aprimora as capacidades das suas dApps, sempre considere os riscos potenciais e implemente medidas de segurança apropriadas ao lidar com dados externos. Boa codificação!