The internet makes it possible for people located throughout the world to access shared information remotely. However, while certain information may be available to anyone, anywhere, the information itself is often stored on a single server or a number of proximate servers. The servers are directly related to one another and are controlled by one sole entity. This is a simple form of a centralized system. There are more advanced forms, but the common thread is that each centralized system is controlled by a sole entity and has at least one single point of failure. The positives of centralized systems (mainly simplicity and speed) have generally outweighed the negatives, resulting in the overwhelming majority of systems being centralized. However, centralized systems have a corollary — decentralized systems. Decentralized systems are powered by a set of independent and unrelated devices located throughout the world. The devices all run a custom application, communicating with each other over an application-specific protocol, and work together as a collective to achieve a shared objective. Unlike their centralized counterparts, a sole entity does not control all the devices. To the contrary, it is possible, and perhaps ideal, for there to be as many controlling entities as there are devices, with each entity controlling only one device. Devices may enter and leave the collective at will, at which point the system reallocates responsibilities within the collective. This fluidity, combined with with a large device set and a diverse control structure, allows for systems that, short of a total internet blackout, have no single point of failure. Decentralized systems can support new types of applications that their centralized counterparts cannot, as well as many types of applications that have traditionally been centralized. Applications supported by decentralized systems are called decentralized applications, and they benefit from no central ownership and no single point of failure. While this is theoretically significant, on a more pragmatic level, decentralized applications are becoming increasingly ubiquitous. At this time, decentralized applications have hundreds of millions of users, and over the last four years, the number of decentralized applications has grown exponentially. Furthermore, the diversity of decentralized applications has expanded tremendously, branching well beyond peer-to-peer file sharing and pure-play cryptocurrencies. Examples of decentralized applications that serve an expanded set of use cases include Augur (forecasting), Golem (supercomputing), Status (communication), 0x (token exchange), Nebulas (search), Civic (identity), and hundreds more.