IOTA experienced as a real idiot
and the CAP-Theorem explained for real idiots
IOTA is not your normal everyday bitcoin source code forked blockchain. IOTA is more like that crazy nerd guy from school, really different and you don’t know if he will be a Bill Gates later or just some fat basement dweller. In the world of blockchains IOTA is so different that it isn’t even a blockchain. Wait a second, it is not a blockchain? No. It is a directed acyclic graph. Or in short and not less confusing DAG. We should always bear in mind that we are real idiots and need to find some easy simple terms for what is some geeky nerd phrases to confuse people into thinking this is the next big thing. Does that mean IOTA wants to trick people thinking it is the next big thing? No, it is still the nerdy different guy from school. We don’t know yet if he becomes a Bill Gates or just a fat basement dweller. And don’t get me wrong here, I don’t want to downgrade fat basement dwellers. I love the content they post on 4chan. It is just that I don’t want my new technology made by them, as long as there are also Bill Gates out there.
Ok so what is this directed acyclic graph? A graph is something where nodes point to other nodes. For example if you have these pictures with nodes asking “Will this investment pay for itself within a couple of weeks?”, then one arrow goes to another node, denoted with “yes” and another goes to another node denoted with “no”. These connections are directed, because they go into one direction. By answering the question with “yes” you get directed to the next node which asks you “Is this investment opportunity called something like ‘smart pyramid high yield yes you like program?’” and again you get directed to some other nodes. At the end there is a conclusion node like “yes, you are getting scammed big time”.
The next thing is acyclic. It just means not-cyclic, therefore no connection or let’s call it edge, can direct to a node which you have visited before. Now that we have learned what kind of graph IOTA is, we should remember what a blockchain is.
A blockchain stores everything that has happened in the network in blocks. These blocks are connected to each other in a linear one dimensional way. The next block refers to the current block.
So one could say a blockchain is a directed acyclic graph. But there is one important point, a graph allows for one node to have many edges connecting this node to more than one other node. A block in a blockchain only has a previous and a next block. So one directed edge going in and one going out. Some smart guy might now interrupt and say “wait a sec, how about forks? When Forks happen there are two different blocks pointing to the same block as their last block. Yes, that is true, but in one chain, there is only one reality without the other chain. The forked chain does not exist in the other part.
For DAGs this is different, DAG-based blockchains are not blockchains, but rather DAG-based distributed ledgers. So one might think, that they constantly fork and their blocks don’t just point to one other block. Well, almost. Because not only there is no chain, there is also no block. Blocks are a collection of transactions. The network has to agree on a block and then all transactions in this block are valid and cannot be altered, except the network switches to another forked chain, but for this specific chain, the block cannot be altered. The blocks are the heartbeat of a blockchain, whenever a new block is found, all network nodes agree to this block and start the search for the next block from there. Since IOTA does not have these blocks, we want to know how people agree on valid transactions.
A block contains all transactions and it can be checked very easily if these transactions are valid, meaning there are sufficient funds and it can also be checked easily if the proposer of the block has solved the puzzle correctly. For the proposer it is a very bad idea to forge a block with invalid transactions, because it gets rejected and his work was in vain. So what changes if we abandon the blocks? Not much. Users just push a transaction into the network instead of a block. Instead of a whole block, the network has to validate a single transaction. Ok, so IOTA is just the same but there are no blocks collecting sets of transactions but rather each transaction is validated individually. Well, yes, this part is right, but now comes the next shock. How are these transactions validated? By mining? No, there are no miners in IOTA, the answer is, new transactions validate old transactions. How does this work? If you push a new transaction into the network, you have to validate 2 previous transactions. Validating 2 previous transactions means validating each transaction these transactions validate and also validating everything these point to and so on. This means what in bitcoin are separate entities, transaction emitters and transaction validators are the same in IOTA. This is fucking genius.
In bitcoin it seems quite natural to insert the whole mining concept and I always asked myself, what else can you do? This is the easiest way to incentivize someone to validate transactions. It is a real problem. Someone has to do it, but it is work. If nobody pays for the work, nobody does it. Therefore bitcoin has a free market of pending transactions and miners just pick the ones which yield the most revenue and put them into the next block. Why is it so genius that IOTA abandons this part? Because if you engineer a system and you can leave parts away, then this is great. More than often you only see how you can insert a new piece, to solve a problem, but unfortunately the new piece creates new problems and for these new problems you need new pieces and so on. So let’s go back understanding what this all means. In IOTA we don’t have a latest block everybody has agreed on, but rather some transactions, not being verified at the front of the tangle, so called tips. If you push another transaction you verify 2 transactions, which are tips in your opinion. In your opinion because you don’t know if someone else has also verified these. It might have happened already at a distant node and until this information reaches you some time has passed. The tangle is this network of verified transactions and unverified tips.
In above picture the transactions 1–10 are verified and 11–15 are tips and aren’t verified. Let’s imagine that transaction 14 is invalid and someone wants to double spend with it. Now some other users want to push new transactions, they will realize that 14 is invalid and won’t point to it and pick 2 other txs. 12 and 15 for example. The tangle will grow and grow but tx 14 will never be verified. So this is completely without problems? Well, this was just an easy example. Since there is no global state of the tangle everybody has agreed to, some distant branches of the tangle might evolve independently and grow for some time until they touch each other again. Also there is no guarantee that distant branches will meet each other again. With more time elapsed it becomes more and more likely that they will, but if there are conflicting transactions then it might be never that they come together. This is the big problem of IOTA. There is no global state everyone has agreed to. To solve this issue the IOTA foundation has introduced the coordinator. This is a special node which keeps the whole network together. From time to time it writes down a specific state of the network which serves as a milestone and it is surprisingly called a milestone. Every node can start syncing from there. This in fact is such a piece that brings in new problems and you might introduce new pieces to solve it. Why? Because the coordinator reduces decentralization. It is supposed to bring balance to the network but it can destroy it.
The coordinator is what many people see as very problematic in IOTA. I fully agree. We don’t know if IOTA works without the coordinator. Milestones are important because without them, the size of the ledger would grow to sizes too big to be handled by most nodes. They also reduce time to sync greatly. But the coordinator also decides which separate arms are to drop and which survive. This gives it a lot of power and it is controlled by the founders of IOTA. This is something people in the crypto-space don’t like. What makes crypto so great is the partition tolerance of its networks and the censorship-resistance. Now is a good time to introduce the CAP-Theorem.
This theorem states that a distributed system cannot have all three properties fully deployed at the same time. These properties are consistency (C), availability (A) and partition tolerance (P). Unfortunately you want to have all of the three at the sime time to full extend.
Consistency means that there is no dispute about what is the truth. There is no subjectivity and if there is, it only lasts for a short time and objective truth emerges after some time. For example in bitcoin consistency is very high, because a block is either valid and accepted or invalid and dropped. Is it possible to have even higher consistency? Yes, in bitcoin blocks are not final. Their finality grows with time to “so final that it takes more work than is available on earth to revoke it”, but there are also blockchains which have final blocks just after they are posted. Thus their consistency is even higher. So how about IOTA? Well, low consistency. There is no global state which everybody agrees to. Only after milestones. There is only some part of the network you have seen and this is consistent to you. To others another part might be consistent. If you wait for some minutes or some hours, then everything that has been there one hour ago, might now be consistent to you, but of course there are already new transactions.
The next thing is availability. This mostly means, how available the network is, big surprise here. Will every transaction be handled? If yes, then it is very available. What happens on a huge load of transactions? Do txs end up in a long queue and are eventually dropped forever? If yes, low availability. We see here, that bitcoin has a low availability and IOTA has an enormous availability. There is no limit in IOTA like the block size and the block interval. There is of course an emerging limit if nodes are not able to catch up with all transactions. This limit is not easy to calculate, because it emerges and depends from all factors like bandwidth, network topology and computation power of nodes.
Then there is only partition tolerance remaining. This means, what happens if half of the nodes are cut off? For example because the Great Firewall cuts them off. Does the network come to a halt? Are transactions lost? Is the network able to resume or just continues and the network split is not a real problem? In fact this is very important for crypto stuff. If you just aim for high consistency and high availability you can run a sharded database and you are fine. Only with partition tolerance comes censorship-resistance and decentralization. This is why same people say Ripple is not even a real cryptocurrency. Because the network is run by Ripple Labs. What if Ripple Labs is taken down by US government? This is the end of the Ripple token as well. Another example is NEO, 7 nodes, most of them are in China and some weeks ago, we have seen that one node halting means the whole network halts. For a high partition tolerance your network must be able to work, even if you cut big parts of it. Without coordinator IOTA is quite good in this regard, with coordinator, well it looks worse. Bitcoin in contrast is very good in this regard. It is permissionless and decentralized, the only problem is that mining has become centralized over time and it doesn’t look like this will reverse any time soon. CAP-Theorem is a very nice thing to categorize a new cryptocurrency or crypto-platform. How about ethereum? Well, it has PoW like bitcoin, so quite the same as bitcoin.
What properties are the most important ones? Well this depends on what you want to do. If you want to build a decentralized exchange, then you need consistency like hell. If you have to wait 30 minutes until you know that a transaction is valid, then transactions on your DEX take very long. If you want to connect billions of machines worldwide, which exchange some value and a lot of data, you need a lot of availability. If you want to have a very safe store of value, let’s say digital gold, then you need partition tolerance, to a level that the network can be spawned again after a nuclear war and works. Different demands mean different properties should be favored. For a platform running a DEX, some interoperable PoS blockchain might be most sensible, Cosmos, Dfinity or Polkadot for example, for the Internet-of-Things IOTA makes sense as we have seen and for digital gold bitcoin might be a good fit. Since we have mentioned interoperability here, it should be noted, that IOTA is very hard to make it talk to other blockchains, because there is no global state. There is always a hard time to be sure, that transactions are final, so that the other blockchain can be sure they have happened in IOTA. But this is another big topic.
After I was excited by IOTA’s concept, I tried it out. I tried the wallet, I run a headless node and talked to the community. In the beginning it was a real pain, nothing really worked, it was very hard to start the node and the wallet had a lot of bugs. Running a node is awful. On Ubuntu I didn’t get it to work, it only worked on Antergos (Arch). No automatic neighbor discovery? Wtf. In bitcoin or ethereum, when you start the client, it automatically finds neighbors and connects to them. Most users might not even know that this happens in the background. In IOTA you have to go to a slack channel and find some other nodes to connect to. I didn’t understand why this tedious process is necessary. After some time, I learned that this is to prevent Sybil attacks. A Sybil attack is like bringing 200 friends to a party and blocking the bar until the price for the beer is lowered. Since IOTA is permissionless, someone could just start thousands of nodes, be connected to the network and bring it to a halt, by just freezing the nodes. If there is no automatic neighbor discovery, then it is a lot of work to connect and thus cannot be automated. On the other hand people are incentivized to connect to the same nodes and keep their nodes up. Furtheremore new versions are released, they don’t work anymore, java has to be another version in order to make IRI (IOTA Reference Implementation) work and all such problems you have when working with beta or alpha software. Normally you have these problems when developing such software, running it should work, once you have set it up. But not for IOTA. It is much more work than running a bitcoin or ethereum node. How is using the API and programming with IOTA? It is ok, not super developer friendy, but not really hard. I never understand why they rely on a ternary system, some strange reasons were given here and there, but ok. Only thing that somehow convinced me was that they come from developing chips which use ternary and at some later point they want to sell such kind of chips, which do the PoW for IOTA really fast. IoT devices can have these chips then to save energy when doing PoW. If this is true (I don’t know) then I don’t like it. I think there is a reason why mankind has picked binary. Then there were also some frozen accounts, which hat to be reclaimed, I didn’t have this problem, but it is strange. Some people claim IOTA is not safe and their hashing function is bad. They have designed their own hashing function but after the critique they have changed it. Ok, I don’t know why you do your own hashing function and not use some proven function. The answer given by the IOTA team is that it was necessary in order to have a copy-cat-protection. Ok, this might be true, but still it is strange. Later in december IOTA started to become a big thing. People freaked out completely, cooperation with Microsoft and everything. Later it was said, no, no this is fake news. The IOTA team never said this etc. Still there is a lot of cooperation with big industry. Then the slack channel got too crowded, IOTA moved to discord and the community became more and more like “when moon, lambo now, oh shit IOTA was supposed to hit $10 soon, what is going on?”.
Now IOTA has made a big announcement that “qubic” is coming. What is qubic? We don’t know. We have only seen an inspirational video without any spoken text, just some buzzwords on the bottom and awesome animations. This reminds me of december, when they announced, there will be awesome news soon and then awesome partnerships were announced and (partially) revoked. The new video posted about qubic is something I really don’t like about crypto-space currently. It seems like marketing, teasing and hype are all that matters. They drop the words “oracles”, “smart-contracts” and “outsourced computation”. Ok. How do they do it? Are there whitepapers? What I really like about the crypto-space is that people post their whitepapers and explain how they want to do something and you can think about how hard it is and if it makes sense. But lately people don’t care and it is all about selling the hype. This is accompanied by a David Sønstebø freaking out regularly in discussions, stating that IOTA is superior because it can handle infinite transactions, when in fact it can’t, we just don’t know how much it can handle. The same goes with the argument, IOTA becomes safer and better when it gets bigger. This is iterated very often in the IOTA community and it is only true for the statistical variance of the time a transactions need to be confirmed. But beside that I don’t see why the network becomes faster, when it grows. I think it will be slower, because transactions take longer to be propagated to all nodes. So coming back to my initial lines, I’m skeptical. I see great potential in IOTA, but we just don’t know if it works as intended and the coordinator can be shut off. The features announced by qubic don’t sound like the coordinator will be shut off soon, more like it will be necessary forever. Does all of this mean IOTA is the fat basement dweller pushing the hype wave? No, we just don’t know. Always keep in mind that IOTA is new and there is progress. If progress was as slow as in bitcoin, I would be very suspicous, but maybe the IOTA team delivers and the hype is justified. We will see and I’m excited.
Edit:
I totally forgot one important thing: fees. It is something that often comes up when people talk about IOTA. The discussion mainly revolves between “IOTA does not have fees, it is superior!” and “IOTA has fees you moron!!11one”. So IOTA does not have fees in the sense that you have to pay some currency to send a transaction. Why does bitcoin and so many others have such fees? Because it is necessary as a spam protection. Sometimes this concept is also called “hashcash”. The initial idea of this concept was to allow E-Mails only to be sent if some hashs have been calculated, so that spammers cannot send infinite E-Mails. Since you pay with these hashs, they called it hashcash. Now IOTA does the same. If you send a transaction you have to solve a typical Proof of Work puzzle just as miners do in bitcoin. So yes, you have to pay something to send transactions, if you call this a fee or not, is not relevant in my opinion. If your stance is that fees are only fees if something is paid to someone, then Ripple is also feeless, because you burn XRP. Still there is something great about this concept. Because there is no distinction between senders and miners who get paid by the former, there is no fee runoff. In Bitcoin if there are too many transactions the fee climbs to absurd values and miners actually want this to happen. In IOTA such absurd stuff does not happen, which is clearly an advantage. On the other hand it seems quite unintuitive to force IoT devices to do calculations to send txs. If these devices are remote and run off a battery you don’t want to spend the remaining power of your battery on doing PoW. But I think this serves the ultimate goal to sell some of this ternary PoW chips for IoT devices using IOTA.