Máquina de oráculos Chainlink: um sistema que conecta contratos inteligentes ao mundo fora da blockchain

No campo de blockchain, as oracles são sistemas que fornecem com precisão dados do mundo real externo para contratos inteligentes. As oracles funcionam essencialmente como middleware importante que preenche a lacuna entre a blockchain e as informações do mundo real, sustentando o ecossistema de aplicações descentralizadas (DApps) e infraestrutura essencial.

O que são as oracles: sistemas de mediação de informações na blockchain

Quando um contrato inteligente é executado, muitos deles necessitam de acesso a dados externos. Por exemplo, ao construir um contrato inteligente de derivativos de petróleo bruto na rede Ethereum, é necessário obter dados de quantidade de petróleo negociada em uma data específica. No entanto, como os contratos inteligentes são limitados ao ambiente on-chain, eles não podem acessar diretamente essas informações off-chain. É aqui que as oracles entram em ação.

Especificamente, o contrato inteligente descreve uma solicitação de dados necessária no log de eventos. Depois, um processo que opera fora da cadeia monitora esse log de eventos, analisa o conteúdo da solicitação, obtém os dados necessários através de APIs externas, transmite uma transação para enviar esses dados para a cadeia e executa a função de callback do contrato inteligente. Assim, o contrato inteligente consegue acessar informações externas confiáveis.

Posição de mercado do Chainlink e o token LINK

Na área de oracles descentralizadas na blockchain, o Chainlink detém a maior fatia de mercado. O papel do projeto Chainlink é fornecer dados gerados no mundo real para a blockchain de forma segura e confiável. O projeto construiu um ecossistema virtuoso centrado no token LINK, através de mecanismos de incentivo econômico.

Dados atuais do mercado de tokens LINK (21 de janeiro de 2026):

  • Preço atual: $12.25
  • Variação em 24h: -2.14%
  • Volume de negociação em 24h: $4.32M
  • Valor de mercado circulante: $8.68B
  • Participação de mercado: 0.38%

A oracle do Chainlink é acionada por transferências do token LINK. Este token é um contrato inteligente baseado em ERC677 que funciona na rede Ethereum. As funções das oracles baseadas em LINK se enquadram no modelo típico de solicitação/resposta.

Inovação trazida pelo padrão ERC677

transferAndCall: filosofia de design

O problema fundamental das oracles é que os usuários precisam pagar pelo serviço ao provedor (oracle). Contudo, o padrão ERC20 padrão oferece apenas uma função de transferência simples, não permitindo realizar uma solicitação de serviço ao mesmo tempo em que se faz a transferência.

Para resolver isso, o próprio Chainlink propôs o padrão ERC677. Este padrão adiciona o método transferAndCall ao ERC20 tradicional, permitindo realizar uma transferência de tokens e uma solicitação de serviço em uma única transação. Quando o usuário executa transferAndCall, além do processo normal de transferência ERC20, o endereço receptor é verificado para determinar se é um contrato (não uma conta externa controlada pelo usuário). Se for um contrato, automaticamente é chamada a função onTokenTransfer desse contrato.

Essa arquitetura integra pagamento e chamada de função, permitindo uma implementação eficiente da lógica de negócios das oracles.

Estrutura de múltiplas camadas para validação de segurança

Antes de usar o serviço de oracle, o usuário deve verificar se a oracle é confiável. O Chainlink foi projetado para permitir que qualquer pessoa participe como provedor de serviço oracle, aumentando a transparência e a verificabilidade do sistema, e, assim, sua confiabilidade.

Fluxo de processamento de solicitações on-chain

Mecanismo de aceitação de solicitações pelo contrato Oracle

Ao pagar a taxa usando transferAndCall e solicitar o serviço de oracle, o endereço de destino da solicitação será o endereço do contrato oracle. No método onTokenTransfer do contrato Oracle, várias verificações em etapas são realizadas:

Primeiro, verifica-se se a transferência de tokens veio do contrato LINK (usando o modificador onlyLINK), confirmando se msg.sender corresponde ao endereço do contrato LINK. Depois, verifica-se se o payload de dados (_data) não excede o limite de tamanho. Além disso, verifica-se se o _data começa com o seletor de função “oracleRequest”.

Se todas as verificações forem aprovadas, o contrato Oracle atual faz uma delegatecall para executar o método oracleRequest.

Geração e registro do requestId

Dentro do método oracleRequest, as seguintes etapas são realizadas sequencialmente:

O requestId é gerado combinando o endereço do solicitante (usuário) e o nonce enviado por ele, usando uma função hash para garantir sua unicidade. O sistema verifica se esse requestId já existe na mapeamento de compromissos (commitment), garantindo que não haja duplicatas.

Se aprovado, um expiration é definido e uma entrada é registrada na mapeamento de compromisso contendo _payment, _callbackAddress, _callbackFunctionId e expiration. A etapa mais importante é a emissão do evento OracleRequest, que inclui os dados de solicitação codificados em formato CBOR (Concise Binary Object Representation), um formato binário leve e eficiente que representa JSON.

Mecanismo de resposta dos nós off-chain

Validação e execução do fulfillOracleRequest

Nós Chainlink operando off-chain monitoram o evento OracleRequest. Ao detectá-lo, realizam várias validações antes de retornar os dados para a blockchain.

Primeiro, verificam se o msg.sender da chamada é o proprietário do contrato ou um nó autorizado (usando o modificador onlyAuthorizedNode). Depois, verificam se o requestId fornecido existe na mapeamento de compromisso e se os valores _payment, _callbackAddress, _callbackFunctionId e expiration correspondem aos registros anteriores (usando isValidRequest).

Se passar, o valor de tokens disponíveis para pagamento é acumulado em drawableTokens, e o requestId é removido do compromisso. Por fim, verifica-se se há gás suficiente (MINIMUM_CONSUMER_GAS_LIMIT) para executar a função de callback do contrato original que solicitou a resposta.

Se todas as validações forem concluídas, a função de callback do contrato do solicitante é chamada formalmente usando call, enviando os dados obtidos.

Padrões de implementação de funções de callback

A partir do evento OracleRequest, é possível obter o ID da função de callback (ex: 6A9705B4) e a assinatura correspondente (ex: chainlinkCallback(bytes32,int256)). No contrato consumidor que recebe os dados, uma função de validação como validateChainlinkCallback deve ser implementada.

Essa função verifica se o requestId fornecido em pendingRequests realmente existe e se veio de um oracle válido. Se passar, o evento ChainlinkFulfilled é emitido, e os dados de resposta podem ser processados adicionalmente. O mapeamento de respostas é atualizado, e, no caso de oráculos de preço, o valor de currentPrice é atualizado com a nova cotação, acionando o procedimento de atualização de preço correspondente.

Padrões de implementação de oráculos de preços

Interface Aggregator e feed de preços

O procedimento acima descreve o processo completo de um serviço de oracle universal. Por outro lado, o oráculo de preços fornecido pelo Chainlink oferece um padrão de implementação mais simplificado.

Para cada par de negociação (ETH/USD, BTC/USD, etc.), há um feed de preços separado (Aggregator ou sua versão proxy, AggregatorProxy). Essa interface fornece alguns métodos de consulta padronizados:

Principais métodos de consulta:

  • decimals() - número de casas decimais do dado de preço retornado (normalmente 8 ou 18)
  • description() - nome do par de negociação (ex: ETH/USD)
  • version() - identifica a versão do aggregator ou proxy
  • getRoundData(_roundId) - obtém dados de preço para uma rodada específica
  • latestRoundData() - obtém os dados mais recentes de preço

Melhores práticas de implementação

Na maioria dos cenários de desenvolvimento de aplicativos, o contrato só precisa ler o preço mais recente, usando o método latestRoundData(). A resposta inclui o preço atualizado.

Além disso, muitas aplicações usam o preço em dólares americanos (USD) como unidade de exibição. Nesse caso, o padrão de precisão do par USD é fixado em 8 dígitos, geralmente dispensando ajustes de precisão. Mesmo que pares de tokens diferentes tenham precisões distintas, é possível verificar usando decimals() para ajustar adequadamente.

Assim, o oráculo Chainlink não se limita a atuar como um intermediário de dados, mas fornece uma base financeira prática e confiável na blockchain, através de padrões avançados como oráculos de preços.

ETH1,03%
BTC0,8%
Ver original
Esta página pode conter conteúdos de terceiros, que são fornecidos apenas para fins informativos (sem representações/garantias) e não devem ser considerados como uma aprovação dos seus pontos de vista pela Gate, nem como aconselhamento financeiro ou profissional. Consulte a Declaração de exoneração de responsabilidade para obter mais informações.
  • Recompensa
  • Comentar
  • Republicar
  • Partilhar
Comentar
0/400
Nenhum comentário
  • Fixar

Negocie cripto em qualquer lugar e a qualquer hora
qrCode
Digitalizar para transferir a aplicação Gate
Novidades
Português (Portugal)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)