  Blockchain has evolved into a platform for decentralized applications, with
beneficial properties like high integrity, transparency, and resilience against
censorship and tampering. However, blockchains are closed-world systems which
do not have access to external state. To overcome this limitation, oracles have
been introduced in various forms and for different purposes. However so far
common oracle best practices have not been dissected, classified, and studied
in their fundamental aspects. In this paper, we address this gap by studying
foundational blockchain oracle patterns in two foundational dimensions
characterising the oracles: (i) the data flow direction, i.e., inbound and
outbound data flow, from the viewpoint of the blockchain; and (ii) the
initiator of the data flow, i.e., whether it is push or pull-based
communication. We provide a structured description of the four patterns in
detail, and discuss an implementation of these patterns based on use cases. On
this basis we conduct a quantitative analysis, which results in the insight
that the four different patterns are characterized by distinct performance and
costs profiles.
