The contract is very simple; all it is a database inside the Ethereum network that can be
added to, but not modified or removed from. Anyone can register a name with some value,
and that registration then sticks forever. A more sophisticated name registration contract
will also have a "function clause" allowing other contracts to query it, as well as a
mechanism for the "owner" (ie. the first registerer) of a name to change the data or
transfer ownership. One can even add reputation and web-of-trust functionality on top.
Decentralized File Storage
Over the past few years, there have emerged a number of popular online file storage
startups, the most prominent being Dropbox, seeking to allow users to upload a backup of
their hard drive and have the service store the backup and allow the user to access it in
exchange for a monthly fee. However, at this point the file storage market is at times
relatively inefficient; a cursory look at various existing solutions ↗ shows that, particularly
at the "uncanny valley" 20-200 GB level at which neither free quotas nor enterprise-level
discounts kick in, monthly prices for mainstream file storage costs are such that you are
paying for more than the cost of the entire hard drive in a single month. Ethereum
contracts can allow for the development of a decentralized file storage ecosystem, where
individual users can earn small quantities of money by renting out their own hard drives
and unused space can be used to further drive down the costs of file storage.
The key underpinning piece of such a device would be what we have termed the
"decentralized Dropbox contract". This contract works as follows. First, one splits the
desired data up into blocks, encrypting each block for privacy, and builds a Merkle tree out
of it. One then makes a contract with the rule that, every N blocks, the contract would pick
a random index in the Merkle tree (using the previous block hash, accessible from
contract code, as a source of randomness), and give X ether to the first entity to supply a
transaction with a simplified payment verification-like proof of ownership of the block at
that particular index in the tree. When a user wants to re-download their file, they can use
a micropayment channel protocol (eg. pay 1 szabo per 32 kilobytes) to recover the file; the
most fee-efficient approach is for the payer not to publish the transaction until the end,
instead replacing the transaction with a slightly more lucrative one with the same nonce
after every 32 kilobytes.
An important feature of the protocol is that, although it may seem like one is trusting many
random nodes not to decide to forget the file, one can reduce that risk down to near-zero
by splitting the file into many pieces via secret sharing, and watching the contracts to see
each piece is still in some node's possession. If a contract is still paying out money, that
provides a cryptographic proof that someone out there is still storing the file.
Decentralized Autonomous Organizations
The general concept of a "decentralized autonomous organization" is that of a virtual
entity that has a certain set of members or shareholders which, perhaps with a 67%
majority, have the right to spend the entity's funds and modify its code. The members
would collectively decide on how the organization should allocate its funds. Methods for
allocating a DAO's funds could range from bounties, salaries to even more exotic
mechanisms such as an internal currency to reward work. This essentially replicates the
legal trappings of a traditional company or nonprofit but using only cryptographic
blockchain technology for enforcement. So far much of the talk around DAOs has been
around the "capitalist" model of a "decentralized autonomous corporation" (DAC) with
dividend-receiving shareholders and tradable shares; an alternative, perhaps described as
a "decentralized autonomous community", would have all members have an equal share in
the decision making and require 67% of existing members to agree to add or remove a
member. The requirement that one person can only have one membership would then
need to be enforced collectively by the group.
A general outline for how to code a DAO is as follows. The simplest design is simply a
piece of self-modifying code that changes if two thirds of members agree on a change.
Although code is theoretically immutable, one can easily get around this and have de-
facto mutability by having chunks of the code in separate contracts, and having the
address of which contracts to call stored in the modifiable storage. In a simple
implementation of such a DAO contract, there would be three transaction types,
distinguished by the data provided in the transaction:
[0,i,K,V] to register a proposal with index i to change the address at storage
index K to value V
[1,i] to register a vote in favor of proposal i