Como oráculos de preço DeFi agregam e publicam preços
Entenda a agregação de observações, os gatilhos de heartbeat e desvio, as unidades e a checagem de dados antigos, além dos limites das verificações de sequenciador L2.
Neste guiaO oráculo publica uma referência, não um preço executável
Resumo breve
Um oráculo de preço leva uma referência externa a um contrato inteligente. Em um modelo push comum, várias observações offchain são reunidas em um relatório assinado, publicado onchain e lido pelo protocolo. Desvio e heartbeat influenciam o momento da publicação; o consumidor também precisa verificar decimals, unidade de cotação, `updatedAt` e, em algumas L2, o estado do sequenciador. Esses controles reduzem riscos específicos, mas não provam que o preço seja verdadeiro, recente o bastante para todo uso ou seguro para cada transação.
O oráculo publica uma referência, não um preço executável
O oráculo conecta informações externas à blockchain ao código executado onchain. Um protocolo de empréstimo pode ler um feed para avaliar garantias; um contrato de derivativo pode usar uma referência para liquidação ou limite de risco. O contrato lê o valor publicado no estado da rede, mas não consulta todos os livros de ofertas externos para escolher o preço justo.
“Preço” pode significar um par ativo/moeda de cotação, uma taxa de resgate definida pelo protocolo ou outra medida. Não é automaticamente o preço pelo qual uma posição grande seria vendida. Veja o guia de impacto de preço e slippage em swaps DEX e a comparação entre mark price e última negociação. Este guia trata de feeds push comuns em EVM, não de uma regra universal de DeFi.
Como observações viram uma resposta onchain
No Offchain Reporting da Chainlink, nós oracle trocam observações offchain e chegam a um relatório. Um quorum o assina; um transmissor o envia em uma transação; o agregador verifica as assinaturas e expõe resposta, ID da rodada e timestamp. A documentação de Offchain Reporting descreve a publicação da mediana das observações nesse desenho.
O contrato consumidor geralmente não refaz toda a agregação; chama latestRoundData() no endereço proxy do feed. O agregador por trás do proxy pode mudar. Confira a rede e o feed corretos no guia EVM e na referência da API. Muitos nós não garantem fontes independentes; vários operadores podem usar as mesmas exchanges ou provedores.

Heartbeat e desvio definem gatilhos de publicação
Muitos feeds push combinam limite de desvio e heartbeat. Uma variação percentual definida desde a resposta publicada anterior pode acionar um relatório; o heartbeat pode pedir uma atualização após certo tempo mesmo sem grande oscilação. O diretório atual de Data Feeds e a página de endereços dos feeds mostram parâmetros por ativo, rede e feed.
São condições específicas do feed, não uma promessa geral de atualização a cada N segundos. Uma mudança pequena pode não ultrapassar o limite, e um relatório solicitado ainda precisa ser coletado, transmitido e incluído em um bloco. Portanto, heartbeat não garante horário exato de chegada nem impede que o preço fique antigo. O protocolo deve definir uma idade máxima adequada ao ativo e ao uso.
Interprete answer, decimals e unidade de cotação
latestRoundData() retorna ID da rodada, answer, startedAt, updatedAt e answeredInRound; a referência da API marca o último campo como obsoleto. answer é um inteiro de ponto fixo, não necessariamente um valor legível em dólares. Leia decimals() e a descrição do feed escolhido. Se um feed BTC/USD hipotético retornar 6,725,000,000,000 com 8 casas, isso equivale a US$ 67.250 por BTC.
Os decimals do feed são diferentes dos decimals do token. Uma quantidade ERC-20 pode usar 18 casas, enquanto a resposta de preço usa 8; ajuste cada valor à própria unidade antes de multiplicar. BTC/USD significa dólares por bitcoin; USD/BTC inverte a unidade. Para derivar outro par, ajuste os dois feeds e divida na ordem certa. O exemplo de denominação de preços deriva BTC/EUR de BTC/USD e EUR/USD.
Checar dados antigos é uma regra da aplicação
updatedAt registra quando a rodada mais recente foi atualizada. O consumidor pode compará-lo com o timestamp do bloco atual e rejeitar uma resposta mais antiga que a idade máxima definida pela aplicação. Conforme o feed, pode verificar também um horário diferente de zero, uma resposta positiva para um ativo de preço positivo e limites plausíveis. Um limite estreito demais pode rejeitar um movimento legítimo.
Considere um mercado de empréstimo hipotético com quatro unidades de garantia e fator de 75%. A última resposta 200,000,000,000 com 8 decimals significa US$ 2.000 por unidade; o teto de empréstimo é 4 × US$ 2.000 × 75% = US$ 6.000. Se o mercado cair para US$ 1.820, a queda é de 9%. Com premissas de desvio de 10% e heartbeat de 60 minutos, talvez nenhum relatório novo tenha sido pedido; pelo preço menor, o teto é US$ 5.460.
Se a aplicação rejeita preços com mais de cinco minutos e a rodada tem vinte minutos, pode bloquear novos empréstimos em vez de usar US$ 2.000. A checagem não atualiza o feed; muda as ações permitidas quando o dado ultrapassa a idade aceita. Empréstimo, saque, liquidação e pagamento podem exigir respostas diferentes, pois parar tudo também pode causar dano. Os números e gatilhos são hipotéticos, não configurações atuais nem recomendações.
A checagem do sequenciador L2 trata de outra interrupção
Em muitas L2, usuários enviam transações por um sequenciador. Durante uma queda ou recuperação, transações podem atrasar, o uso normal pode ser interrompido e ordens pendentes podem executar após uma mudança do mercado. Uma resposta de preço que parece atual não prova que a rota de execução estava disponível nem que todos puderam agir ao mesmo tempo.
A Chainlink documenta um feed separado de disponibilidade do sequenciador L2: answer == 0 significa ativo e answer == 1, parado. startedAt registra a mudança de estado; o exemplo do consumidor verifica o status e aguarda um período de carência definido pela aplicação após a recuperação antes de ler o preço. Confira endereço e comportamento na guia L2 Sequencer Uptime Feeds. A carência não garante preço atualizado nem conclusão das transações pendentes.
Esses controles não garantem um resultado correto ou justo
Quorum, mediana, desvio, heartbeat, limite de idade e estado do sequenciador respondem a perguntas limitadas. Não garantem liquidez, identificação correta do ativo, independência de provedores ou preço executável para determinado tamanho. Um timestamp recente pode acompanhar valor errado ou manipulado; um valor antigo pode continuar próximo do mercado em período calmo.
Nenhum gatilho elimina saltos de preço, congestionamento ou bugs de escala, seleção de par, atualização e liquidação. As orientações para selecionar Data Feeds de qualidade recomendam avaliar liquidez e dependências e lidar com dados antigos, atrasados, ausentes ou inesperados. Continuam existindo riscos de contrato, governança, bridge, garantia e liquidação. O preço oracle de uma stablecoin também não garante resgate ao par; veja o guia de depeg.
Siga todo o caminho do preço antes de confiar nele
Identifique a rede, o proxy do feed, o par de ativos, a moeda de cotação, os decimals de answer e o endereço do contrato. Confirme que a descrição corresponde ao ativo e não copie endereço de outra rede. Se necessário, analise o modelo de fontes e o histórico de atualizações. A Chainlink informa que agregadores podem variar entre redes; código e configuração importam.
Depois acompanhe o uso da resposta: conversão de unidades, verificação de updatedAt, idade máxima e reação a valor inválido. Na L2, verifique feed de disponibilidade, horário de recuperação, carência e transações atrasadas. Analise cenários de preço antigo e de queda/recuperação no contrato real. Para distinguir campos, consulte mark price e última negociação.
Perguntas frequentes
Q1Heartbeat garante que o preço nunca será mais antigo que esse intervalo?
Não. É um gatilho temporal no desenho do feed, não uma garantia de publicação e inclusão no bloco em horário exato nem de correspondência com o mercado ao vivo. Confira updatedAt e defina uma política adequada.
Q2Um feed oracle de mediana ainda pode estar errado?
Sim. A mediana pode limitar alguns valores extremos, mas não corrige problema de fonte compartilhada, mercado pouco líquido, par errado ou falha na lógica do consumidor.
Q3O feed de uptime do sequenciador L2 equivale à checagem de preço antigo?
Não. O feed de uptime informa estado e momento da mudança; a checagem de idade compara updatedAt do preço com o horário atual. A aplicação pode precisar dos dois e de um período de carência.
Fontes e leituras adicionais
Relatar um problema
Vamos preparar um e-mail com o link deste artigo. Mark só receberá o relato depois que você enviar
Verificação rápida
Terminou o guia? Confira o que aprendeu com 3 perguntas
Pergunta 01
Um feed BTC/USD com 8 decimals retorna `6,725,000,000,000`. Qual é o preço escalado?
Escolha uma resposta para ver a explicação