It’s been exactly three years since I published an article on my blog about how innovations in the world of cryptocurrencies could bring about a fundamental change in the way people treat each other. In short, if people’s private money and assets were to some extent transparent in society, it would gradually solve most of our problems, which result from the age-old interpersonal struggle for resources.
In today’s article, I would like to focus on the architecture of a system that meets the requirements for a society-wide clearing system I am currently developing. For starters, you need a small technical digression into the world of cryptocurrencies.
The hashing algorithm as a proof that certain things are just the way they are recorded – with a high degree of certainty
In the IT world, and especially in the field of cryptocurrencies, the so-called “hashing algorithm” has become a key concept. Its most commonly used version, the so-called SHA256, is an algorithm which takes a short text – or even a few terabyte file – as input, and generates a 64-character string representing this input, which looks something like this:
For example, the SHA256 hash for the string “Peter” is:
However, the SHA256 hash for “Peter1” is:
As you can see, the two values returned by the algorithm are completely different and in no way dependent. The hash function works as the so-called “avalanche”. A single new/changed bit in the input string causes a dramatic change in the output and the outputs are completely independent even though they might have originated from similar data (inputs). The implementation of SHA256 is uniform in the IT world: when somebody tells you that they calculated the SHA256 hash of any given input, the results should be identical even on a completely different operating system or programming language. This is because the calculation algorithm is the same everywhere.
SHA256 hashing has another important property: if you give someone the result, such as ea72c79594296e45b8c2a296644d988581f58cfac6601d122ed0a8bd7c02e8bf, and you don’t tell them the string is a hash of “Peter”, they have no way of finding out. The only way they can use is to rely on the presumption that the input text is not too long and only alphanumeric characters are used in it, and then test it – for example by using the letter “a”, then adding “b” to it to form “ab”, and calling the SHA256 function every time on such inputs, and comparing the output with the hash you provided. And repeat this until they chance upon a sequence of characters that renders the same result as the hash you originally provided. In other words, if you were to calculate a hash for:
“account_from”:”SK11 1100 0000 0000 2644 5963”,
“account_to”: ”SK15 1100 0000 0000 2677 5968”,
(This example is completely fabricated, including the non-existent account numbers)
The value would be: 7b4f22193ad7675da45be8d5e22f042b36cdc78c397f92dd572786dca61b326b, and if the person wanted to modify the text by e.g. by changing the amount from 5,000 to 10,000, it would be possible, but it would be very difficult to adjust the rest of the transaction body text to include the new amount of 10,000 (and not 5,000) but not change the hash value of the entire text. Simply put, the data used to feed the algorithm are different, and it would take the person a billion years to change the body of the transaction so that the resulting hash value is the same as the original hash, but containing the new amount he wishes to use.
For example, this feature of the hash function is used to quickly verify whether the text you gave someone, e.g. text from a database of transactions, has changed since you’ve calculated its original hash value. This very act is taken as proof that the data have not changed since you’ve calculated their hash.
Blockchains – the use of hashing on steroids
What I will cover in this article is about 10% of what a blockchain actually is. But, this will suffice to explain the VP architecture.
The blockchain bonanza started relatively shortly after the launch of Bitcoin. Companies were created that specialized in the use of blockchains in various areas of the IT sector; consultants started to use attributes such as Blockchain Specialist in their job descriptions etc. In the end, blockchains did not prevail on a large scale outside the world of Bitcoin and cryptocurrencies. I’ve heard of some applications where it’s important to have information stored forever – for example a particular patient was administered a particular drug etc.
So what are blockchains all about? Cryptocurrencies solve the problem of money in a unique way – the currency does not live in a single centralized system, which would be located somewhere, but it lives practically anywhere where the system is launched – even on a small server that supports its functionality and is connected to the Internet. However, in order to achieve the functionality of a currency without having a single centralized server, you must have something that is present in every little computer where the currency is launched, and is updated with every transaction that takes place on other servers. At the same time, you need to be able to deal with issues such as someone sending an amount from the same account/wallet on two servers at the same time. Add to that the need to reward the operators of the countless small servers where your cryptocurrency lives, among other things. A blockchain is the very thing that those little servers have more or less in common, and it contains the individual transactions in the cryptocurrency. A blockchain consists of blocks. Hence the name “blockchain” – a chain of blocks. The blocks consist of the transactions that took place in the relevant cryptocurrency. The blocks are closed at regular intervals and new ones are created as the number of transactions increases. Closing a block means, among other things, that you calculate a hash from the following (or similar) text:
For example, the hash of the full content of this block containing 900 transactions would be “341cbef34adc7235eee22efde368502f670254b97123fecfcb78ba892e7250b0”. Subsequently, this value would be used to create the next block in the previous_block_hash field. This way, the blocks intertwine and form an imaginary chain. Each block – except the very first one – has a previous_block_hash field with the hash value of the previous block. In the case of the very first block in a blockchain, a value of the text type such as “GenesisBlock” is used, which is an expression that characterizes the nature of the zero block – it doesn’t matter what value is used, but the value will affect all subsequent values. The value makes no difference to the algorithm and for humans a hash value is just a hash value.
As stated above, I won’t go into depth about blockchains in this article: on the one hand, some details about the operation of e.g. Bitcoin are not entirely clear to me, and on the other hand, it is unnecessary for the purposes of what I want to say.
Money in centralized systems – such as banking – lives in huge databases where the bank stores a list of clients and tables with the clients’ accounts and the relevant amounts on these accounts. Then there is the table of transactions, which contains the records of what amount of money went to whom and in what currency etc.
A conference was held I believe in Prague where the top brass of the banking world wondered if blockchains had any use in the banking world. The output was negative: a blockchain is a specific technology that solves the problems that resemble banking systems at first sight, but in a completely different way.
They failed to come up with a use case where a bank could use blockchains.
Blockchains in the banking system? Only if you need to win the world’s trust
Banks have a specific relationship with their clients. There is an elementary element of trust between them: if a client deposits 100 euros, and another 200 on the second day, he/she can withdraw 300 euros on the third day without any problems. If the banks failed in such a simple operation with the clients’ money, they would quickly lose their reputation and the clients as well. The clients of the banks are therefore sure that the bank does not arbitrarily change their data in order not to lose its reputation.
However, the nature of the solution changes when one wants to build a global banking system, which must be so secure that it can be seamlessly used as a global clearing system for the entire society. Such a system will, by its nature, have many enemies, especially if it is transparent to some extent. The transparency of private money is a concept that has many enemies, and even if it were on a voluntary basis – if successful – there would come a time when it would become a thorn in the side of those who would be bothered by the growing transparency. If it is to be successful, it needs to have mechanisms in place to prove that the data in it are intact and “as entered”, and that no one changed them for the benefit or disadvantage of anyone else.
And this is where blockchains step in with the tools to explain every single value in the system. In other words, all important transactions in the system must enter the blockchain in some way.
Each newly created block in the blockchain must be immediately copied from the system to some other third-party system. I haven’t done a detailed research yet, but in principle it should be a service similar to this. A system where I can enter a new transaction that fits into the operator’s blockchain, but I can’t modify the past data that I have already entered. It is even technically impossible due to the nature of the system.
By setting all transactions in stone of the system blocks, which are sealed immediately after closing and sent to a third-party system whose technical nature prevents the modifications of what has already been sent to it, it will be possible to prove whether all pieces of data in my system were created by a sequence of correct transactions that took place through standard processing paths, or, for example, manipulated by someone logging in directly into the database and manually changing the balance from 5,000 to 10,000. With blockchains, I will be able to prove that the manipulation did not happen, or worse, that it did because someone changed the data. In the Visible Money system, each row in any important table will be linked to the relevant transaction, and thus to the block that changed that row. The checking will be conducted by someone telling you what piece of data to verify. With a simple command, I can list the transactions that have changed the data. If I apply the content of all transactions to the given data object, I should receive an object, which is modified in the same way as the current object.
In the next part of the series on the architecture of VP I will explain how the system data should be divided according to their nature, how they are processed, how the blockchain is accessed and how the operations on the corresponding business objects are performed.