Come gli oracoli DeFi aggregano e pubblicano i prezzi
Scopri come vengono aggregate le osservazioni, quando heartbeat e deviazione attivano aggiornamenti, come verificare unità e anzianità e cosa non garantiscono i controlli L2.
In questa guidaL’oracolo pubblica un riferimento, non un prezzo eseguibile
Breve sintesi
Un oracolo di prezzo porta un riferimento esterno in uno smart contract. In un comune modello push, più osservazioni offchain confluiscono in un report firmato, pubblicato onchain e letto dal protocollo. Deviazione e heartbeat influenzano il momento dell’aggiornamento; il consumatore deve verificare anche decimali, unità di quotazione, `updatedAt` e, su alcune L2, lo stato del sequencer. Questi controlli riducono rischi specifici ma non dimostrano che il prezzo sia vero, abbastanza recente per ogni uso o sicuro per tutte le transazioni.
L’oracolo pubblica un riferimento, non un prezzo eseguibile
L’oracolo collega informazioni esterne alla blockchain con il codice eseguito onchain. Un protocollo di prestito può leggere un feed per valutare le garanzie; un contratto derivato può usare un riferimento per il regolamento o un limite di rischio. Il contratto legge il dato pubblicato sulla chain, ma non consulta da solo tutti i book esterni per scegliere il prezzo equo.
“Prezzo” può indicare una coppia asset/valuta di quotazione, un tasso di rimborso del protocollo o un’altra misura. Non coincide automaticamente con il prezzo ottenibile vendendo una posizione grande. La guida a impatto e slippage degli swap DEX e il confronto tra mark price e ultimo scambio illustrano altre differenze. Questa guida tratta i comuni feed push EVM, non una regola universale DeFi.
Come le osservazioni diventano una risposta onchain
Nel modello Offchain Reporting di Chainlink, i nodi oracle si scambiano osservazioni offchain e concordano un report. Un quorum lo firma; un transmitter lo invia in una transazione; l’aggregator verifica le firme ed espone risposta, ID del round e timestamp. La documentazione Offchain Reporting descrive la mediana delle osservazioni resa disponibile da quel disegno.
Il consumer di solito non ripete tutta l’aggregazione: chiama latestRoundData() sull’indirizzo proxy del feed. L’aggregator dietro al proxy può cambiare. Controlla la rete e il feed esatti nella guida EVM e nella API reference. Più nodi non implicano fonti indipendenti; possono dipendere dagli stessi exchange o provider.

Heartbeat e deviazione regolano i trigger di pubblicazione
Molti feed push combinano soglia di deviazione e heartbeat. Una variazione percentuale definita dal valore pubblicato in precedenza può attivare un nuovo report; l’heartbeat può richiedere un aggiornamento dopo un intervallo anche senza un grande movimento. La directory Data Feeds corrente e la pagina degli indirizzi riportano parametri per asset, rete e feed.
Sono trigger specifici del feed, non la promessa di aggiornare ogni N secondi. Una variazione piccola può non superare la soglia e il report richiesto deve ancora essere raccolto, trasmesso e incluso in un blocco. L’heartbeat quindi non garantisce un orario d’arrivo esatto né impedisce che il dato diventi obsoleto. Il protocollo deve fissare una propria età massima adatta alla velocità dell’asset e all’uso.
Interpretare answer, decimali e unità di quotazione
latestRoundData() restituisce ID round, answer, startedAt, updatedAt e answeredInRound; la API reference indica che l’ultimo campo è deprecato. answer è un intero in formato fixed-point, non necessariamente un importo in dollari leggibile. Leggi decimals() e la descrizione del feed selezionato. Se un feed BTC/USD ipotetico restituisce 6,725,000,000,000 con 8 decimali, vale 67.250 dollari per BTC.
I decimali del feed non sono quelli del token. Una quantità ERC-20 può avere 18 decimali mentre la risposta prezzo ne ha 8; scala ogni valore secondo la sua unità prima di moltiplicare. BTC/USD significa dollari per bitcoin; USD/BTC inverte l’unità. Per derivare una coppia, scala entrambi i feed e dividi nell’ordine giusto; l’esempio di denominazione ricava BTC/EUR da BTC/USD ed EUR/USD.
Il controllo di obsolescenza è una regola applicativa
updatedAt indica quando è stato aggiornato il round più recente. Il consumer può confrontarlo con il timestamp del blocco corrente e rifiutare valori più vecchi dell’età massima definita dall’applicazione. In base al feed può verificare anche un orario non nullo, un answer positivo per un asset dal prezzo positivo e limiti ragionevoli. Un limite troppo stretto può rifiutare un movimento legittimo.
Immagina un mercato di prestiti ipotetico che accetta quattro unità di garanzia con fattore del 75%. L’ultimo answer è 200,000,000,000 con 8 decimali, cioè $2.000 per unità; il limite di prestito è 4 × $2.000 × 75% = $6.000. Se il mercato scende a $1.820, il calo è del 9%. Con ipotesi di deviazione al 10% e heartbeat a 60 minuti, potrebbe non essere ancora stato richiesto un nuovo report; al prezzo più basso il limite è $5.460.
Se l’applicazione rifiuta prezzi più vecchi di cinque minuti e il round ha venti minuti, può bloccare nuovi prestiti invece di usare $2.000. Il controllo non aggiorna il feed: cambia le operazioni ammesse quando il dato supera l’età consentita. Prestito, prelievo, liquidazione e rimborso possono avere risposte diverse, perché bloccare tutto può creare danni. Numeri e trigger sono ipotetici, non parametri attuali o raccomandazioni.
Il controllo del sequencer L2 riguarda un’altra interruzione
Su molte L2 gli utenti inviano transazioni tramite un sequencer. Durante un guasto o il ripristino, le transazioni possono ritardare, l’uso normale interrompersi e ordini in attesa eseguirsi dopo un cambiamento di mercato. Una risposta di prezzo apparentemente recente non prova che il percorso di esecuzione fosse disponibile o che tutti potessero agire insieme.
Chainlink documenta un feed separato di uptime del sequencer L2: answer == 0 significa attivo e answer == 1 fermo. startedAt registra il cambio di stato; l’esempio consumer lo verifica e attende un periodo di grazia definito dall’applicazione dopo il ripristino prima di leggere il prezzo. Controlla rete e indirizzo nella guida L2 Sequencer Uptime Feeds. La grazia non garantisce prezzo aggiornato o completamento delle transazioni in coda.
Questi controlli non garantiscono un esito corretto o equo
Quorum, mediana, deviazione, heartbeat, limite d’età e stato del sequencer rispondono a domande circoscritte. Non garantiscono liquidità, identità esatta dell’asset, indipendenza dei provider o prezzo eseguibile per una certa quantità. Un timestamp recente può accompagnare un dato sbagliato o manipolato; un dato vecchio può restare vicino al mercato in una fase tranquilla.
Nessun trigger elimina salti di prezzo, congestione o bug in scala, coppia, freschezza e liquidazione. Le indicazioni per selezionare Data Feeds di qualità raccomandano di valutare liquidità e dipendenze e gestire dati obsoleti, ritardati, mancanti o inattesi. Restano rischi di contratto, governance, bridge, garanzia e liquidazione. Il prezzo oracle di una stablecoin non garantisce il rimborso alla pari; leggi la guida al depeg.
Segui l’intero percorso del prezzo prima di fidarti
Identifica chain, proxy del feed, coppia asset, valuta di quotazione, decimali di answer e indirizzo del contratto. Verifica che la descrizione corrisponda all’asset e non copiare indirizzi da un’altra rete. Se serve, esamina modello delle fonti e cronologia degli aggiornamenti. Chainlink segnala che gli aggregator possono differire tra reti: controlla codice e configurazione.
Poi ricostruisci come il contratto usa la risposta: conversione delle unità, controllo updatedAt, età massima e comportamento con valori non validi. Su L2 verifica feed uptime, orario di ripristino, grazia e transazioni ritardate. Valuta sul contratto reale i casi di feed obsoleto e di guasto/ripresa. Per distinguere i campi prezzo, consulta mark price e ultimo scambio.
Domande frequenti
Q1Heartbeat significa che il prezzo non è mai più vecchio di quell’intervallo?
No. È un trigger temporale nel disegno del feed, non una garanzia di pubblicazione e inclusione in blocco a un istante esatto né di corrispondenza con il mercato live. Controlla updatedAt e definisci una policy di freschezza adeguata.
Q2Un feed oracle mediano può essere comunque errato?
Sì. La mediana può attenuare alcuni outlier, ma non corregge un problema di fonte condivisa, un mercato poco liquido, una coppia sbagliata o un errore nel codice consumer.
Q3Il feed uptime del sequencer L2 equivale al controllo del prezzo obsoleto?
No. Il feed uptime riporta stato e orario del cambio; il controllo di freschezza confronta updatedAt del prezzo con l’ora corrente. L’applicazione può aver bisogno di entrambi e di un periodo di grazia.
Fonti e approfondimenti
Segnala un problema
Prepareremo un’e-mail con il link a questo articolo. Mark riceverà la segnalazione solo dopo l’invio
Controllo rapido
Hai finito la guida? Verifica ciò che hai capito con 3 domande
Domanda 01
Un feed BTC/USD restituisce `6,725,000,000,000` con 8 decimali. Qual è il prezzo scalato?
Scegli una risposta per vedere la spiegazione