computation that the Bitcoin scripting language supports, it does not nearly support
everything. The main category that is missing is loops. This is done to avoid infinite
loops during transaction verification; theoretically it is a surmountable obstacle for
script programmers, since any loop can be simulated by simply repeating the
underlying code many times with an if statement, but it does lead to scripts that are
very space-inefficient. For example, implementing an alternative elliptic curve signature
algorithm would likely require 256 repeated multiplication rounds all individually
included in the code.
Value-blindness - there is no way for a UTXO script to provide fine-grained control
over the amount that can be withdrawn. For example, one powerful use case of an
oracle contract would be a hedging contract, where A and B put in $1000 worth of BTC
and after 30 days the script sends $1000 worth of BTC to A and the rest to B. This
would require an oracle to determine the value of 1 BTC in USD, but even then it is a
massive improvement in terms of trust and infrastructure requirement over the fully
centralized solutions that are available now. However, because UTXO are all-or-
nothing, the only way to achieve this is through the very inefficient hack of having many
UTXO of varying denominations (eg. one UTXO of 2 for every k up to 30) and having O
pick which UTXO to send to A and which to B.
Lack of state - a UTXO can either be spent or unspent ↗ ; there is no opportunity for
multi-stage contracts or scripts which keep any other internal state beyond that. This
makes it hard to make multi-stage options contracts, decentralized exchange offers or
two-stage cryptographic commitment protocols (necessary for secure computational
bounties). It also means that UTXO can only be used to build simple, one-off contracts
and not more complex "stateful" contracts such as decentralized organizations, and
makes meta-protocols difficult to implement. Binary state combined with value-
blindness also mean that another important application, withdrawal limits, is
impossible.
Blockchain-blindness - UTXO are blind to blockchain data such as the nonce, the
timestamp and previous block hash. This severely limits applications in gambling, and
several other categories, by depriving the scripting language of a potentially valuable
source of randomness.
Thus, we see three approaches to building advanced applications on top of
cryptocurrency: building a new blockchain, using scripting on top of Bitcoin, and building a
meta-protocol on top of Bitcoin. Building a new blockchain allows for unlimited freedom in
k
building a feature set, but at the cost of development time, bootstrapping effort and
security. Using scripting is easy to implement and standardize, but is very limited in its
capabilities, and meta-protocols, while easy, suffer from faults in scalability. With
Ethereum, we intend to build an alternative framework that provides even larger gains in
ease of development as well as even stronger light client properties, while at the same
time allowing applications to share an economic environment and blockchain security.
Ethereum
The intent of Ethereum is to create an alternative protocol for building decentralized
applications, providing a different set of tradeoffs that we believe will be very useful for a
large class of decentralized applications, with particular emphasis on situations where
rapid development time, security for small and rarely used applications, and the ability of
different applications to very efficiently interact, are important. Ethereum does this by
building what is essentially the ultimate abstract foundational layer: a blockchain with a
built-in Turing-complete programming language, allowing anyone to write smart contracts
and decentralized applications where they can create their own arbitrary rules for
ownership, transaction formats and state transition functions. A bare-bones version of
Namecoin can be written in two lines of code, and other protocols like currencies and
reputation systems can be built in under twenty. Smart contracts, cryptographic "boxes"
that contain value and only unlock it if certain conditions are met, can also be built on top
of the platform, with vastly more power than that offered by Bitcoin scripting because of
the added powers of Turing-completeness, value-awareness, blockchain-awareness and
state.
Philosophy
The design behind Ethereum is intended to follow the following principles:
1. Simplicity: the Ethereum protocol should be as simple as possible, even at the cost of
some data storage or time inefficiency. An average programmer should ideally be
able to follow and implement the entire specification, so as to fully realize the
unprecedented democratizing potential that cryptocurrency brings and further the
vision of Ethereum as a protocol that is open to all. Any optimization which adds
complexity should not be included unless that optimization provides very substantial
fn. 3
fn. 4