In the previous article, we saw that any cash system needs a kind of
bootstrapping to get to an up and running state. Now to create a new digital currency which will likely acquire real value in future, we need something that is scarce by design. Why, you ask? Because otherwise, the digital cash will just be something whose value is based on other currencies, for example the dollar. Take the example of gold, diamonds, and other precious gems, which are used for backing up money, because they are a scarcely available commodity.
In the digital world, one easy way to achieve scarcity is to design the system such that minting money requires solving a difficult computational problem (a puzzle) that takes a considerable amount of time to solve. This solving of puzzles is what is popularly known as
bitcoin mining, which we shall look into deeper in further posts.
The idea that "solutions to computational puzzles could be digital objects with some value" is pretty old. First proposed by cryptographers Dwork and Naor as a potential solution for reducing spam in email systems in 1992. Every time you need to send an email, your computer would need to solve a computational puzzle which will take a while to solve. The recipient will simply ignore the email if the solution of the puzzle is not attached by the sender. This is feasible as you will bear with the time when you have to send few emails, but for a spammer, this is a problem as numerous emails cannot be sent in a short time interval now. For the email spam problem, these puzzles need to have some specific properties to be useful. Some of these properties that immediately pop up are:
- It must be impossible for a spammer to solve one puzzle and attach the solution to every email he sends. How can we ensure this? Again a simple solution - the puzzle should be a function of the email, depending on the sender, the receiver, the contents of the email, and the approximate time at which it is sent.
- The receiver should be able to check the puzzle's solution without repeating the process of solving it as done by the sender.
- Each puzzle must be independent of any other puzzles, so that solving any puzzle must not affect the time taken to solve any other puzzle.
- Since hardware keeps improving and we create faster and faster computers, the recipients must be able to adjust the difficulty (complexity) of the puzzles whose solutions they are to accept.
All these properties can be achieved by
Cryptographic hash functions which we will talk about in later articles, as bitcoin essentially uses the same computational puzzle idea, with minor improvements.
A very important component of bitcoin is the block-chain, which is a ledger (a kind of journal where account activities are recorded) in which all bitcoin transactions are securely recorded. The ideas behind the block-chain were probably first seen in a paper by Haber and Stornetta in 1991. Their proposal was a method for secure timestamping of digital documents and not a digital money scheme, but it gives us a good introduction about block-chains. A lot more is to be known about block-chains, of which the bitcoin related part we will talk in later articles, while for the super curious folks - this is the place you are looking for.
The goal of timestamping a document is to give an approximate idea of when that document came into existence. It also helps to accurately convey the order of creation of all documents. The security property requires that a document’s timestamp cannot be changed once stamped. In Haber and Stornetta's scheme, there's a server hosting the timestamping service. Whenever someone (a client) wants to timestamp a document, it sends the document to this server. The server on receiving the document, signs it (we will talk about signatures in the next post, for now just believe that a signature verifies the originality of any piece of document) along with the current time and a pointer to the most recent document that was signed just before this one, and issues a certificate with this information. Let's take a moment to grasp what this means. A
normal pointer links to a location, or a memory address in the common programming world, but this one here is a special pointer that links to a piece of data instead of a location.
Remember that a normal pointer becomes invalid if the location is no more the same, or the location ceases to exist (those irritating null reference exceptions for example). Similarly, the special pointer here becomes invalid if the data it is pointing to is corrupted in any way, or tampered, or ceases to exist. This is a beautiful and marvelous thing to me! What this means is that each document's certificate ensures the integrity of the contents of the previous document, and if we apply an intuitive chain relationship recursively, it is not hard to see that a certificate at any given point of time guarantees the integrity of the entire history of documents and certificates up to that point of time, which is beautiful.
Now for bitcoin, this kind of a linked structure (chain) can be used for the ledger, where the transaction details will form the contents of the document to be signed. A later paper proposed an efficiency boost to this chain structure where instead of linking the documents individually, we can collect them into blocks, and then link those blocks together (hence the name block-chain). The documents in a block can be traversed in a tree traversing fashion, thus speeding up the whole process.