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