I recently took more time to do some more research on the project after my piece on Crypto 2.0 Systems and would like to give you some of my impressions of what I think is and might be an issue in regards to the project. Please keep in mind that I might be wrong in some areas, by no means do I claim to know everything about the project. Also please note that the project is still in development so those insights might become invalid with time.
Now, without further ado...
Technical aspects
Namecoin, it is not
For awhile now Ethereum was advertising itself as being able to replace Namecoin. Even in the whitepaper there is a section on that, not to mention t-shirts and what have you. Well, looking at the matter a bit deeper it doesn't look like Namecoin will become obsolete just yet...What is the purpose of Namecoin? To create a decentralized DNS and allow anyone to register their domains on it. The system has a defined and unique state - either a domain is registered, or it is not, there is no ambiguity.
In Ethereum a DNS would be implementing some simple key-value storage. For example, assigning "127.0.0.1" to "foo.com". However, where is the data stored? Well, in Ethereum each account and each contract have their own data storage. There is no centralized data storage, which means custom data can only be stored in this way. This in turn means that there will never be one unique DNS in Ethereum, just a set of DNSs each different for each contract that creates them. Depending on which one you will read from, you may get different results for the same domain. If there will be some canonic DNS contract that everyone will agree to use, the problem is more negligible, but the fact still stands that until that happens there will be little use for such domains.
Create a currency, it might not be that simple...
Many Crypto 2.0 systems are built to deal with any number of currencies. Ethereum lets you do that with their scripting language. You can create a contract to issue and transfer currency easily. However, once you stop and think what is actually required for a currency to function well, the problem is not that simple.
First of all, you need a way to track how much money everyone has. This is simple. Secondly, you need a way to move money from one person to another. This is also simple. Next, the currency needs an issuer, which makes things more complicated.
We could take an approach similar to Ripple when it comes to currency issuers, and that would be the concept of a Gateway. The same currency from two different Gateways is not the same currency, similarly how BTC at MtGox is different from BTC at Bitstamp. This approach would work for any currency, be it fiat or digital. Implementing an option for a Gateway to create any currency in a contract shouldn't be too hard, but we would probably end up with a separate contract for each Gateway. This may complicate some other issues.
Another approach that might work for this could come in a form of Ethereum having awareness of what happens in other currencies. One could create a contract that creates a piece of currency in Ethereum each time a transaction sends money to a given address in say, Bitcoin. This approach would work well if you want to have proof-of-burn currencies, but wouldn't work too well if you would want to redeem the currency back in its original blockchain, unless that system would have some knowledge of the Ethereum blockchain. All in all it could allow for creating a currency without an issuer, but it would be more complicated than the Gateway approach.
So all in all, we would most likely end up having multiple contracts for multiple currencies. Now, to make those currencies more useful, we need to be able to trade them for one another. This probably would be the hardest and most resource-intensive task to be honest. A proper exchange engine needs to store data on users' balances, how much of their funds are frozen in trades, what trades they have issued, details about those trades, be able to sort those trades based on the price, match them in an order of price and date and do so in an effective manner. Now don't get me started on trading multiple currencies in a row to hop between them and get the final currency we want. Also, the engine would more often than not interface with arbitrary two Gateway contracts...
I have personally implemented a trade engine for a Bitcoin exchange, and believe me, it wasn't a code that was short or easy. I doubt creating a feature-complete decentralized exchange in Ethereum will be a straightforward task. It's easy to say that you can create any currency, it's a lot harder to make that currency do everything it needs to do.
Incentives and data bloating...
From what I heard from the Ethereum developers, the software will be running in a strict sandbox. It will not have access to anything outside of the Ethereum blockchain essentially. In order to use data from the outside world, someone will need to put that data into Ethereum explicitly. This is most often discussed in terms of say, price tickers for financial derivatives, but was also mentioned for fetching data from other blockchains and so forth. Since the data could swing an outcome of a contract, it would have to be provided by third parties that have no stake in the outcome.
Now the question is, what incentive would anyone have to be putting that data into the blockchain? If each transaction would cost a fee, they would be losing money with each new data point pushed into the blockchain. Similarly, not everyone might be interested in that data while they would have to store and process it all the time. For small pieces of data like a price ticker, I can see exchanges providing that service at their own cost, or someone running a donation-fuelled ticker. For bigger pieces of data, like info on external transactions, it might be a fee-for-service. At any rate, something like this would have to be kept in mind when discussing such need for data - it won't just magically appear in the blockchain.
I also wonder how data from external blockchains will be included into Ethereum. If we wanted to include data in a trust-less way for say, a transaction happening in Bitcoin, we would need to provide the transaction data, then add the merkle branch and a block header to prove that the transaction is a part of a block, and then perhaps an entire block header chain to show that the blocks are not fake? Alternatively, we could use trusted third parties to only provide informations on confirmed transactions.
All in all, it will certainly be interesting to see what solutions are used for this problem.
Non-technical aspects
Contracts and incentives
What is the incentive of creating a useful service for currencies like Bitcoin? People will want to use your services and you can charge them fees for doing so. What is the incentive of creating useful contracts in Ethereum? If you are from the core Ethereum team, you want to create them to make Ethereum more useful and boost adoption. If you are not, there probably isn't much money to be earned in the long run. If you create a contract that charges a fee, from what I understand it anyone can create a copy of that contract, remove the fee code and use that instead. Any contract you use anyone else can use, so you don't have exclusivity. You probably can expect some bounty for developing some useful code in the system, but I am yet to see any specific details about that. All in all, I think monetizing on creating new, useful contracts in Ethereum might be a problem for the system.
It's all about the interface
If you create the most useful service there is but the only way to communicate with it is through a command line or creating some code, few people will use it. Similarly in Ethereum creating a contract might only be half of the job. The other half would be creating a good user interface for people to be able to use your contract in a meaningful way. I think this aspect is not emphasized enough at this point and may put a lot of people off when they get their first impressions of Ethereum.
DAO hype
Decentralized Autonomous Organizations are an interesting concept promoted by Ethereum. In essence, it will allow groups to organize themselves in any way they see fit and allow for decentralized voting, money management and so forth. I have heard a number of people talk about how useful it will be to organize themselves as a DAO and what have you. Thinking about this, I don't believe DAOs will be the silver bullet to a lot of problems that some people make it out to be.
First of all, lets discuss the good things. Decentralized money management idea is great. It certainly would be useful to decentralized organizations. A decentralized voting system, well, it serves its purpose and as long as there is some good way to interface with it it might be better than running some centralized voting server. I don't see it as that much of an improvement, but there are some die-heart decentralized proponents out there, so they might find it useful.
The main problem with DAOs is their interface to the real world. Since the code is not an enforceable law just yet, DAO has as much impact on a group of people as they let it. Anything that is voted on that has an impact on the external world outside of Ethereum still has to go through the human filter before it takes an effect. If a DAO lets anyone put forward any proposal and let other people vote on it, who cares if 51% of people would vote on what colour to use in a room if the person owning the room wouldn't want to paint it anyway? Similarly, using democratic voting as a means to solve every problem would be as effective as doing a popularity context or going by mob rule. Unless a DAO contract has a code to represent every rule an organization would like to apply in a given context, it might not be as useful as organizing oneself in a more traditional fashion.
Personally, I am yet to see some good examples of what a DAO might be useful for (asides the mentioned money management and decentralized voting). I am guessing like many new ideas it is something worth exploring and iterating over, but it might not be what people thing it is.
Technical lead and presenting Ethereum to the public
I had an occasion to see Vitalik present the concept of Ethereum a few times. It appears that the project wants to put him forward quite often to do this sort of talks. My personal impression of him however, is that while he is technically proficient and may be the most knowledgeable person on Ethereum, he might not be the best person to be doing such presentations.
Vitalik shines when he is talking about and presenting some technical aspects that he knows about - be it talking about Simplified Payment Verification or creating various contracts in Ethereum. However, when it comes to more non-technical concepts, he isn't the best speaker. Similarly, putting him forward to explain Ethereum to mainly non-technical people might be a poor use of him as a resource.
I personally think the Ethereum team might benefit from having a more extrovert person that focuses on explaining Ethereum to non-technical people, and bringing in Vitalik to focus on the technical aspects of what they are developing. Using Vitalik for everything isn't all that optimal.
Nitpicks
Lets name all the denominations
Someone thought it would be a great idea to name all various denominations used in Ethereum. I wonder how many people will be using more than wei and ether, or remember the order those units come in. Coming from a metric background kilos and milis make sense to me and I can easily convert any orders of magnitude between piko and peta. If Ethereum will be pushing for those units to be used, we might end up with nonsense like the imperial system of units:Summary
To sum all up, the Ethereum project isn't as easy as some people would believe. At the same time, I am looking forward to reading any counterpoints the Ethereum team might have to the above points so that I can better understand their project.
Useful links:
EDIT:
After sharing this post with the Ethereum community on Reddit, I got a few responses to my points. Be sure to read them as well.
0 comments: