An oracle may be defined in multiple different ways, according to the context. Within the blockchain context, an oracle is basically a data source that is used as a bridge between smart contracts and other external sources.
More specifically, an oracle is an agent that not only communicates with external data sources but also verifies and authenticates that the data being provided is accurate. Thus, oracles are responsible for providing vital and reliable information to smart contracts, which in turn perform certain tasks.
The importance of oracles relies on the fact that blockchain smart contracts are only able to access the data that is contained within their own digital network. Therefore, oracles are needed as a communication instrument that “translates” real world events (non-deterministic data) to digital values that be recognized by smart contracts (deterministic data).
Blockchain oracles may be classified according to their use case. The most common types are:
In general, a blockchain oracle consists of a third-party data source that is dependent on external permission to work properly, which means they are usually a tool provided by centralized entities. Therefore, most oracles end up sacrificing the decentralized properties of the smart contracts.
Depending on the data provided by the centralized oracles, smart contracts will execute different functions, meaning that oracles have immense power over smart contracts. This is known as the Oracle Problem, which rises as a conflict of trust that centralized third-party oracles bring to trustless smart contracts and blockchain systems.
Although decentralized oracles, such as the consensus oracles, may present a possible solution, there are still many challenges to be overcome, since decentralized oracle networks are quite difficult to implement in a secure, functional, and trustless way.