7 months ago, when I first embarked on the journey of creating a new blockchain, I was inspired by the thought of changing the internet -- of being on the front lines of innovation, developing bleeding-edge technology, and pushing the boundaries of how we interact. I was deeply intrigued by blockchain technology and it's ability to change the world for the better, to make the internet into the decentralized and uncontrolled networking system that it was meant to be.
I noticed a few gaps in the blockchain community at the time, for example: all cryptocurrencies/blockchains fit into a maximum of 2 of the following categories:
- More than just internet money
A blockchain that was both fast and anonymous was meant to be a currency, an anonymous blockchain that was more than just internet money was not fast, etc. As an engineer, I thought to myself, "why not combine all three?". If we're going to build a decentralized internet, we can't settle for something that doesn't satisfy all of the things we do on the internet today: shop, use web apps, and manage banking accounts (hopefully securely). This led me to creating Elixium (@ElixiumNetwork, /r/elixium): a fast, anonymous, and scriptable blockchain network.
Here are a few thing I learned in the process:
1. Distributed Computing is Hard
- Calculate costs based on the computational complexity of a line of code.
This allows miners/nodes on the network who are running the code of the contract to charge a small fee to the developer of the contract for running the code (similar to how hosting services charge money to host your website, or how AWS charges for usage of their servers).
This also solved the issue of infinite loops: eventually the funder of the contract would run out of funds to run it, and the contract execution would stop (even if there was an infinite loop)
2. Networking is really cool
I used to take the convenience of HTTP for granted, but after writing a communication protocol on top of TCP that fit the specific needs of the Elixium network, I realized how crucial it is to understand the way that internet communication works. The tentatively-named Ghost protocol is built on top of TCP and uses an SRP protocol layer to establish a handshake between peers, allowing for end-to-end encryption.
Writing a communication protocol isn't actually too hard - you all should give it a try!
3. Nothing is set in stone
Since blockchain is such a new field of technology, there really aren't that many standards set in place, as you might expect there to be if you come from a web development background. In web development, there's usually one or two different ways of accomplishing a goal that have been standardized, and those standards are relatively easy to spot, e.g. using bcrypt for password authentication, or using Ajax to make XHR requests, or manipulating DOM elements.
In the world of blockchain, it's a lot more open. At first, this felt weird, because I was used to knowing what the "right" way of doing something was, and if I couldn't find the "right" way, it felt weird to me. Slowly I realized that there is no tried and true way of doing many blockchain related things, like which hashing algorithms to use, the proper way to set up a consensus algorithm, or even how to store data! This allows you to be really creative in the way you solve problems, and although it first felt taboo, it's actually really liberating.
Oh, and by the way, Elixium is open source and looking for contributors, so hop on GitHub and help us make a better internet!