Introduction
A Decentralized Oracle Network (DON) is a distributed system run by a set of oracle nodes. It aims to extend the existing smart contract capabilities on a blockchain.
In simpler terms, a Decentralized Oracle Network (DON) allows smart contracts and systems to access off-chain data sources. Its purpose is to enable hybrid smart contracts that use both on-chain and off-chain computations connected to external resources.
A DON has two kinds of functionalities:
- Executables: These are programs that run continuously on a DON, i.e., a pair $\textrm{exec = (logic, init)}$.
- $\textrm{logic}$ is a deterministic program with several designated entry points $(\textrm{logic}_1, \textrm{logic}2, \dots , \textrm{logic}{\ell})$ and
- $\textrm{init}$ is a set of initiators $(\textrm{init}_1, \textrm{init}_2, \dots , \textrm{init}_e)$ that trigger the computations in executables. (See the example)
- Adapters: Adapters are interfaces through which executables run. It can send and receive data from off-DON systems, such as
- blockchains,
- web servers,
- external storages,
- other DONs etc.

Source: https://research.chain.link/whitepaper-v2.pdf?_ga=2.44233827.651393747.1657057238-1524252622.1656311104
An example: Deviation-triggered price feed
Here is an example from the whitepaper [1]. Imagine a situation where a smart contract ($SC$) necessitates up-to-date price-feed information each time a substantial change, e.g., a $1\%$ alteration, occurs in the exchange rate of a pair of assets, like ETH-USD. Let's denote $\mathcal{L}$ as a ledger in this context.
- The executable $\textrm{exec}_{feed}$ is responsible for preserving the latest ETH-USD price in the format$\langle \textrm{NewPrice} : j, r \rangle$ on the ledger $\mathcal{L}$, where $r$ represents the price data and $j$ denotes the update’s index.
- An initiator, denoted as $\textrm{init}_1$, prompts every node $\mathcal{O}_i$ to monitor the ETH-USD price for deviations of at least $1\%$ from the most recently recorded price $r$ with index $j$.
- Upon detecting such a deviation, $\mathcal{O}_i$ records its current view in the form $\langle \textrm{PriceView}: i, j + 1, r_i \rangle$ to $\mathcal{L}$.
- After at least $k$ such $\textrm{PriceView}$ with updated price values for index $j + 1$ created by distinct nodes have accumulated on ledger $\mathcal{L}$, a second initiator $\textrm{init}_2$ activates an entry point $\textrm{logic}_2$ to calculate the median $\rho$ of the first $k$ price-view values and records a new value $\langle\textrm{NewPrice} : j + 1, \rho\rangle$ to ledger $\mathcal{L}$.
- A third initiator $\textrm{init}_3$ monitors for $\textrm{NewPrice}$ entries on $\mathcal{L}$. When a new report$\langle \textrm{NewPrice} : j, r\rangle$ emerges, $\textrm{init}_3$ activates an entry point $\textrm{logic}_3$ that sends $(j, r)$ to $SC$ through an adapter.
Seven key design goals
The whitepaper [1] analyzes Chainlink 2.0 under the following design goals.
- Hybrid smart contracts,
- Abstracting away complexity,
- Scaling,
- Confidentiality,