The past few years have seen growing interest in decentralized systems owing to their improved censorship-resistance, fault tolerance, and auditability compared to their centralized counterparts. For example, ideas popularized in decentralized protocols like Bitcoin and Ethereum have seen widespread adoption and publicity. However, the benefits of these systems often come at the expense of privacy and scalability: to ensure the correctness of computations, decentralized systems like Ethereum require that parties publish their entire computational state, which is then checked by re-executing the computation. From the privacy perspective, this reveals which computation was performed, the data that was input to the computation, and the identity of the involved users. From the scalability perspective, re-execution means that the cost of expensive computations is borne by every party in the system, as opposed to just the party invoking the computation.
In this dissertation, we show how to overcome these shortcomings and obtain decentralized systems that achieve strong privacy and scalability properties. We do so by providing new constructions and applications of a powerful cryptographic primitive: zero-knowledge succinct non-interactive argument systems, or zkSNARKs. We design new methodologies for constructing zkSNARKs that have lower deployment overhead and improved efficiency compared to the prior state-of-the-art. Finally, we go on to construct a system for decentralized private computation that takes advantage of these advances to make all transactions indistinguishable, thus ensuring privacy (transactions reveal no information about the computation) and scalability (transactions can be verified in time independent of the computation).