SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
07.12.2024

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

  1. Verificação de dados: O Provable garante que os dados recebidos sejam confiáveis, verificando a fonte.
  2. Múltiplas fontes de dados: Você pode obter dados de uma variedade de APIs.
  3. 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

  1. Declaração do Contrato: O contrato OraclePrecoEther herda a biblioteca usingProvable, permitindo realizar chamadas de API prováveis.
  2. Variável de Estado: precoEther armazena o preço do Ether em USD extraído da API.
  3. Eventos: Emitimos eventos para notificar quando uma nova consulta é feita e quando o preço é atualizado.
  4. Construtor: O contrato chama a função atualizarPreco no momento da implantação para obter dados em tempo real.
  5. 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.
  6. 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

  1. Implemente o contrato em uma rede de teste.
  2. Certifique-se de que você possui Ether suficiente no saldo do contrato.
  3. Chame a função atualizarPreco para iniciar uma atualização de preço.
  4. 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!

Did you like this article? Rate it from 1 to 5:

Thank you for voting!