In the previous article, we looked at the motivation behind blockchain. In this article, let’s look at the challenges of a decentralized digital financial transaction system.
As we saw in the previous article, in a traditional digital transaction system, there exists a centralized ledger with a trustable party like a bank. This ledger is often a database that contains information about users and their transactions. When a transaction occurs, money is added to or deducted from accounts belonging to the users involved in the transaction. The transaction system also verifies if a user has enough funds in their account to transact.
If we want to decentralize digital transactions, then we will no longer have the luxury of a centralized ledger, which acts as a single source of truth. So, we can’t know if a user is who they are claiming to be and if they have sufficient money in their account to send to another party. These are the challenges a decentralized digital transaction system should address.
In order to understand these challenges in-depth, let’s see how we can decentralize digital transactions.
The split-brain problem in a decentralized system
One way of decentralizing transactions is to give a copy of the ledger of transactions to each user and have every user verify the validity of every transaction before adding it to their ledger so that no one party can control the entire system. But this will result in multiple sources of truth. How do we decide which is true and which isn’t in case of any disparities among ledgers?
Say, I want to send money to an account. I specify the recipient’s identity and the amount and broadcast the transaction to every user. Ideally, all the users should receive the broadcast transaction and update their ledgers accordingly. But let’s say due to a network issue, half of the users didn’t receive the transaction broadcast. Now, there are two different groups of users with two different versions of the ledger. This is called a split-brain problem. Then, how do we decide which one is correct and which one isn’t? How do we get all the users to agree on a ledger, or in more technical terms, how can we establish consensus?
This split-brain problem gives rise to the double-spending problem. When physical money is used, one can make sure that the money spent cannot be spent again. That is, if I pay 1000 rupees in 10 100-rupee notes to purchase a book, there is no way I can spend those 10 100-rupee notes again. This problem, called double-spending, doesn’t exist with physical money. Of course, I can print money but counterfeiting currency is no easy task and is also a punishable crime.
During a split-brain problem though, I can send the same money to two different accounts. Let’s see how it can happen. Assume that I pay 1000 rupees to purchase a book online. Now, this transaction will be broadcast to all the users. Now, as in our previous example, only half the users receive this broadcast. Let’s assume our recipient was one of the users who received the broadcast. As a result, my payment will be confirmed, and the book dispatched.
Immediately after confirmation, I can alter my own ledger (since it is mine) to erase the above transaction and use the same 1000 rupees to make another online purchase. Let’s say this recipient had not received my previous broadcast but received the latest one. Since the recipient is unaware of my previous transaction, my payment will be once again confirmed and the product dispatched. Now, I will have bought two products using the same money or in other words, I would have double-spent.
The order of transactions
The above example also illustrates the importance of the order of transactions. Suppose I send the same 1000 rupees in two different transactions to two different accounts, namely account A and account B, at the same time, and account A receives the transaction to it before it receives the transaction to account B, and account B receives the transaction to it before it receives the transaction to A, then both account A and B are going to accept my transactions. This also allows me to double-spend. So, all ledgers should record the transactions in the same order.
Authenticating users in a decentralized system
Another critical issue with decentralization is authenticating transactions. If I broadcast a transaction, how can other users know I am who I claim to be? What if another user broadcasts a transaction claiming to be me? In a centralized system, of course, we can have the user provide their login credentials to authenticate them. But when the system is decentralized, you can’t store login credentials such as username and password privately since everything in a decentralized system is public and available to everyone.
In summary, achieving consensus among all users regarding the state of the ledger is one of the foremost challenges in a decentralized digital transaction system. All users should have the same view of the system. That is, they should have all the transactions that were ever carried out recorded in the same order in their ledgers. Besides, verifying the authenticity of the users is also a major challenge.
In this article, we discussed the challenges faced by a decentralized digital transaction system. In the upcoming articles, we shall see how blockchain addresses these challenges.