Blockchain oracle

A blockchain oracle is a third-party service for smart contracts. Oracles provide trusted information based on the outside-world sources to the on-blockchain smart contracts. An oracle typically encapsulates the real-world complexity outside of the blockchain, since the on-chain critical errors are hard to fix. For example, in a contract to automatically purchase bitcoins at a predetermined price, the fulfillment condition is based on the current exchange rate for the bitcoin; off-chain oracle constantly monitor the price to provide the triggering condition to the contract.

Examples
Kustov and Selanteva list the following types of oracles:
 * a program, external to the blockchain that can provide, for example, sports results for betting or traffic camera information for ticketing the offenders;
 * a unit oracle that is built-in into a physical sensor (for example, the same traffic camera);
 * an entry oracle executes the code that is actually stored on-chain and provides the result (say, the bitcoin price matching the condition) as an input to the contract;
 * an exit oracle handles the results of the smart contract (for example, paying a fee) by manipulating a real-world device (say, opening he door). It code can also be stored on-chain;
 * an oracle agreement is an aggregator of many oracles to determine the condition when the real-world oracles disagree.

Concerns
If an oracle relies on a single source of truth (centralized), that can lead to issues: the data source can be hacked in a man-in-the-middle attack, or altered by its owner, in order to sway smart contracts. Decentralized oracles (consensus oracles) increase the reliability of the information provided to smart contracts by querying multiple data sources, thus distributing trust between participants. However, this does not achieve trustlessness, since oracles are not part of the main blockchain consensus, and thus not part of the security mechanisms of public blockchains.