In this long read, let me tell you why was invented, how cryptocurrencies work, and why this system is the most beautiful in terms of logic in recent years.
I’m not interested in the hype around bitcoin prices and exchanges; is a technology to me. It is a new, strange, and incomprehensible one, but it seems to be changing the world — unlike those “stories” of yours. And, apparently, this technology is here to stay.
I wrote this post as if I were explaining to my parents. I can even send it to my technically challenged friends and am quite sure they would understand every bit of it.
Let me introduce George, who’ll be helping me with that task. If you don’t like him, I’ll just kick him out.
was described in Satoshi Nakamoto’s article “ Bitcoin: A Peer-to-Peer Electronic Cash System.” There, in just eight pages, the author describes the basics of the Bitcoin cryptocurrency on the framework of algorithm.
While emerged in conjunction with bitcoin, one can use the technology independently and even modify it. Anyone with a laptop can create their very own .
is literally a chain of blocks or, in other words, a linked list. In that ledger, every following entry refers to the previous one, and so on, down the chain, until the very first entry. Like carriages in a train, each entry drags the next one. There’s a decent article on ledgers by Nikita Likhachev on TJ, where he explains the same thing to complete beginners, from which I borrowed some of my analogies.
Let me give you an example.
George’s friends keep borrowing money from him. George is kind but rather forgetful. It takes him only a week to forget which of his friends failed to pay him back, and he’s too uncomfortable to ask around. One day, he decided to put a stop to that by making a list of friends who owed him money on a whiteboard at his home.
Now at any given moment, George can consult with his notes and see that Max has already paid off his debt, while Isaac now owes him as much as USD 700. One day George invites Isaac over to his home for a drink. While George was using the bathroom, Isaac erased the “lent Isaac USD 200” line and wrote “Isaac repaid USD 500” instead.
George, who used to trust his list, forgot about the debt and lost USD 700. So he decided to do something about it.
Last year, George took some programming classes where he was taught about hashing. He recalled that any message can be turned into a sequence of symbols — a hash, and that changing any character in that message would produce a completely different hash.
Adding a dot at the end changed the resulting hash beyond recognition, and one could take advantage of that.
So George resorted to common SHA-256 and started hashing every entry with it and then adding the result at the end of the note. Now George could rest assured that his records remained intact, by hashing them again and comparing the hash with that written on the whiteboard in green.
But Isaac is also familiar with SHA-256, and can easily change both the entry and its hash — especially when the hash is written on the whiteboard right next to the entry itself.
So, to be on the safe side, George decided that before hashing the entry, he would supplement it with the previous hash. Therefore, every following entry depends on the previous ones, and to change one of them, one has to re-do the calculations for every following line to the end of the list.
So George got his personal linked list.
But one night, Isaac managed to sneak in, change the entry he was interested in, and update hashes for the rest of the list. It took him several hours, but George was fast asleep and never heard anything. In the morning, George saw the list where every hash was accurate, yet Isaac still managed to deceive him, even if it meant spending a sleepless night. What else can one do to be safe from Isaac-of-the-Night?
George decided to make things more complicated for Isaac. Now, in order to add a new entry to the list, one had to solve some complex problem associated with it, say, a mathematical equation. The received value should be added to the entry prior to hashing it.
George was good at math, but still it took him ten minutes to add each new entry. Despite that, every minute was worth it. For now, should Isaac once again decide to make amendments, he would need to solve a problem that goes with each single entry — dozens of them. This would take some time because each equation associated with a specific entry is unique.
Checking the list, on the contrary, was still as easy as before: one just had to compare the hashes and then simply plug in the answers to mathematical problems. If everything converged, the list remained intact.
In reality, though, it’s more complicated than that: computers are really good at solving equations. Besides, one would need a lot of storage space for the endless number of unique mathematical problems. Therefore, creators came up with a better task: one needs to find the value (nonce) so that the final hash of the entire record begins with 10 zeros. Such a nonce is hard to find, but the result can always be verified just by looking at it..
Now George checked all hashes, specifically making sure that each starts with a specified number of noughts. The cunning Isaac, even equipped with a powerful laptop, would fail to re-calculate every hash so that it would stay in line with the given condition overnight — he wouldn’t have enough time.
This is essentially a homemade . Its security is guaranteed by mathematicians who have proven that those hashes cannot be calculated any faster but by exhaustive search method. Such an enumeration of hashes for each entry is called mining, which we’ll be addressing here in detail.
Our friends really liked the concept of having an immutable ledger of “who owes whom,” for they, too, didn’t want to have it all memorized, like who footed the bill at a bar and how much they still owed — they wanted to have it all written on the wall. Having discussed the idea, they decided they now needed a one list common to everybody.
But who should be entrusted with such important bookkeeping? After all, when it comes to money, trust is essential. No one wants to entrust a stranger with keeping their money. For that very purpose, our ancestors came up with banks they’ve come to trust over time, as those banks were backed by licenses, laws and insurance from the Central Bank.
Among friends, where people trust each other, they can simply elect the most responsible person. But what if strangers are involved? What if the entire city, country, or the world (as with bitcoin) wants to be on that list? That is a situation where no one can be trusted.
So they came up with an alternative approach: everybody keeps a copy of that list. Thus, the perpetrator would not only have to rewrite one copy of the list, but also sneak into every home and rewrite the rest of the copies as well.. This is decentralization.
The disadvantage of this approach is that in order to make new entries, you have to call all the other participants and inform each of them of the latest changes. But if these participants are soulless machines, it becomes less difficult.this ceases to be at any kind of problem.
In a system like this, no trust exists, and hence there’s no possibility of bribery and fraud. Every participant in the system acts based on a common rule: nobody trusts anyone. Everyone only believes the information they have. This is the main law of any decentralized network.
When buying ramen noodles at a convenience store with a debit card, one enters their pin code allowing the store to ask that person’s bank whether they really have USD 35 in their account. In other words, one signs a transaction for USD 35 with their pin code, with the bank either confirming or declining that transaction.
This also applies to checks. Let’s imagine Paul writes a check for USD 100 to cover his school expenses. His signature acts as a key for the school to inquire into his bank account to see whether he has USD 100. Paul’s signature serves as key and the bank either confirms or denies this request.
Our notes on the lines of, “Lent Isaac USD 500” are transactions, too, yet there’s no bank to authorize the initiator of those transactions. So how can we know for sure that Isaac never underhandedly added an entry “Max owes George a gazillion dollars?”
For that purpose, the works by utilizing two different connected keys, a private key and a public key. The IT folks also use them in the same old SSH. Let me briefly explain the workings of this complex yet beautiful mathematics. Say, one generates a pair of long prime numbers on their computer — a public and a private key. The private key is considered super-secret because it can decrypt what is encrypted with the public key. Yet it also works the other way around: if you make your public key known to all your friends, they will be able to encrypt any message with this key that only you can read, since you own the private key. But besides this, the public key has a useful feature: one can use it to check if the data really was encrypted using your private key, without decrypting the data itself. The Code Bookoffers a detailed description of that feature.
So here we are, in a decentralized Internet where no one can be trusted. The transaction is signed with a private key and, together with the public key, is sent to a special storage, a pool of unconfirmed transactions. Thus, any netizen can make sure that it was you who initiated the transaction, not some random person wanting to pay with your money.
This ensures the openness and security of the network. What was used to be the responsibility of banks, is now empowered by the mathematics in the case with .
Your public key is your cripto wallet number. That is, you can start a wallet of any cryptocurrency without even going online.
For average users not willing to figure out how to properly issue and store private keys, online wallet services will come in handy. They make convenient QR codes so you could copy lengthy public keys. Personally, I use Wallet because it has a convenient mobile application and supports two major cryptocurrencies, namely BTC and ETH.
Like with our whiteboard, the essentially consists of only a history of transactions. It does not store the balance of each wallet, otherwise we would have to invent additional security measures.
Ownership of the wallet is confirmed only by the private key. So how do other netizens know that you have enough money to buy something?
Since there’s no account balance to prove that, you are the one responsible of proving your paying capacity. Therefore, a transaction includes not only your signature and how much you want to spend, but also references to previous transactions in which you received the required amount of money. That is, if you want to spend 400 dollars, you run through your entire history of income and expenses, and reference several income records for 100+250+50 dollars in your transaction, thereby proving that you do have this 400 dollars.
Each network member will definitely keep you in check so you couldn’t spend the same income twice, to make sure that you really haven’t spent that 300 dollars that Max gave you last week yet.
In , such incomes attached to the transaction are called inputs, and all recipients of that money are called outputs. It’s a rare occasion that the sum of all inputs is exactly the same as the amount you want to transfer on a given occasion, thus, most often one of the outputs will be you yourself. In other words, a transaction looks like “I received 3 BTC and 2 BTC, I’m going to transfer 4 BTC and return the remaining 1 BTC back to me.”
Peaking a little forward: in addition, you can list a transfer fee for that “change”, so that the miners would be more eager to add it to the blocks, thus offering the miner a few cents through shaving off a bit of your “change”. Mining will be covered further in this article.
One of the beauties of is that the inputs do not have to come from the same wallet; it’s the key that is verified. If you know the private key for every input, then you can easily attach them to your transaction and pay with this money — same as with paying at a supermarket with several cards where you know pin codes for each one of them.
However, if you lose your private key (your hard drive crashes, or your laptop gets stolen), you lose your bitcoins irretrievably: no one will ever be able to use them as inputs for another transaction. This amount will be lost to the entire world, the overall bitcoin economy, forever — same as if you incinerated a bank roll. There is no centralized bank where you can file an application with a copy of your ID, so they could print another roll. To replace to lost bitcoins, a special emission “out of the thin air” is needed.
I already mentioned that transactions are added to a special “pool of unconfirmed transactions”. Why do we need some kind of intermediate entity when we already essentially have signed transactions lined up? Why not add them directly to the ?
Because there’s always a time delays in getting the signal from A to B. The two transactions can go through completely different paths, and the one that was initiated first may reach the recipient later after going the longer way. This is how the double spending occurs, when the same money is sent to two outputs without any of them being the wiser. Yep, this is different from transferring banknotes from hand to hand.
For a decentralized network where no one can be trusted, this problem is especially acute. I mean, how do you know for sure that one transaction definitely arrived before another? Not that you can ask the sender to attach the timestamps. Remember, nobody can be trusted — not even the sender. Besides, it’s inevitable that every computer has a slightly different time settings, and there’s absolutely no way to get them completely synchronized. Not to mention that a copy of the is stored on every computer of the network (known as “nodes”), and every member only trusts their own copy of it.
So how can you tell whether one transaction did come before another?
The answer is simple: there’s no way of telling that. There’s no way of confirming the time of a transaction in a decentralized network. The third important idea of , offered by Mr. Nakamoto in order to solve that problem, oddly enough, is spelled out right in the system’s name — it’s using blocks.
Every node can collect a set of unconfirmed transactions (usually those with the highest transfer fee, so there’s earning potential) from the common pool, until their combined size reaches a specified limit. For Bitcoin, that limit is 1MB per block (it will be increased to 2MB per block after SegWit2x); for Bitcoin Cash, that limit is 8MB.
Having said that, things are more complicated in networks such as Ethereum, where the number of transactions per block depends on the computational complexity of the smart contacts employed. Yet the idea remains essentially unchanged: there’s a certain limit for every block.
The entire is essentially a list of blocks, each one of them referring to the previous one. You can traverse the references backwards, all the way to the very first group of transactions ever made.
The entire is essentially a list of such blocks, where each one refers to the previous one. With it, one can track down the entire transactions history, unwinding the as far back as to the very first record. It is exactly that list that now is hundreds of Gb and that is required that every node had a downloaded copy of (but a computer doesn’t need to have one to simply create transactions and transfer money). It is also downloaded from every nearest node, as if you were downloading a series from some torrents, only with new episodes coming out every 10 minutes.
Having collected a set of unconfirmed transactions from the pool, the node begins to compiles them into the same immutable ledger as we did at the beginning of the post, on the whiteboard at our home. It’s just that the node arranges them in a tree-like structure, by hashing the transactions in pairs, and so on, until only one hash remains — the root of the tree, which gets added in the block. I never figured out why exactly it had to be a tree, but I assume that it’s just faster this way. Find out more from a Wiki article Merkle tree.
Folks from the comment section explained why it has to be a tree. It is done in order to have the option of discarding the spent transactions without breaking the block’s hash. I.e. there are two transactions under the same hash, where one or both of them seized to be needed after being spent in other transactions — one can delete those old transactions without breaking the block’s hash. See Paragraph 7, Reclaiming Disc Space, in Satoshi Nakamoto’s original article.
As your computer already has the latest downloaded, it knows exactly what’s the most recent block in it at the moment. The only thing the node has to do is to reference it in the header of a new block, hash it, and then announce to every other computer in the network, “look, I made a new block, let’s add it to our !”
Other nodes must make sure that the block is compiled by all rights, that no unnecessary transaction was added, and then accept that block as the latest addition to the chain. Now, with every transaction confirmed, the is one block longer and everything is going well, right?
Wrong. Thousands and thousands of nodes are working simultaneously, and as new blocks are created, those nodes will almost simultaneously start informing everyone that it was their block that was created first. We can not rely on the order the blocks arrived because, as explained in the previous chapter, there’s no way of proving beyond doubt which one of them arrived first.
So, in order for a block to be added to the chain, each valid block must contain a solution to a very special mathematical problem that would take a certain amount of time to figure out.
Same as with difficult tests in school, it is very rare that even excellent students turn in their answers at exactly the same time.
To a human being, a difficult task means something along the lines of planning one’s vacation so that the national holidays are added to it, and getting cheap tickets to the seaside; to a computer, a difficult task is adding a nonce to the end of the block so that the SHA-265 hash begins with, say, ten noughts. That’s the very problem the node has to solve in order to add their block as the next in chain in the Bitcoin network. Problems require for adding blocks in other networks may vary.
Thus, we approach the concept of mining, which everyone is so obsessed with in recent years.
Bitcoin mining is not some sacrament. It’s not relating to digging through the depth of Internet in search for new bitcoins. Mining is when thousands of computers around the globe are humming in their basements, sorting through millions of numbers per second, trying to pick up a hash that begins with 10 noughts. To do so, they don’t even need to be online.
Video adapters, with their hundreds parallel cores, solve that task faster than any CPU
Why ten noughts, of all digital combinations? It’s just that, there’s no particular meaning behind it. This is what Satoshi Nakamoto came up with, as that problem is one of those that definitely has a solution, it always does, but that solution cannot be found but through a long monotonous enumeration of options.
The complexity of mining directly depends on the size of the network, that is, its combined power. The task is easier if you create a home and run it on two laptops. For instance, you can specify that the hash should begin with only one nought, or that the sum of even digits is equal to the sum of odd ones.
With the hash beginning with 10 noughts, it would take a typical computer several decades to solve a block. But consolidate a network of thousands of computers and have them guessing numbers, and, given the conditional probability, it takes about 10 minutes on average for someone to find a solution. This is the time necessary for a new block to be added to the chain. Every 8 to 12 minutes the first node to solve the problem has the privilege to broadcast their block, thus avoiding the debate on who was the first in line.
Whoever solves a block, gets a reward of 12.5 BTC (as of 2017); this reward is minted by the system “out of thin air”, and that amount gradually shrinks every four years. Technically, that means that every miner always adds another transaction to their block, namely “mint 12.5 BTC and send them to my wallet.” Whenever you hear, “there’s a hard cap of 21 million bitcoins, 16 of them have already been mined”, those are network-generated awards.
Have a look at a real valid Bitcoin block on one of the specialized websites. There, you can find transactions with inputs and outputs, a hash beginning with as many as 18 noughts, and every type of abovementioned hashes.
Any Only Exists As Long As Its Miners Exist
It is the miners who keep adding the emerging transactions to the . So, when someone tells you that they will “build a for X”, the first question that needs answering is “who — and why — will be mining it. More often than not, the correct answer is, “everyone will, because we pay our coins for mining, and those coins will grow in amount, which is beneficial for miners.” However, that doesn’t apply to any project. For instance, if the Department of Health has their own private for doctors tomorrow (they do want one!), who is to be mining it? Therapists, on their days off?
As planned by the founder, by that time people would have to believe that Bitcoin was real, and mining incentive would be funded with transaction fees. We all see it coming: back in 2012 there were zero fees, and the miners were mining just for the sake of the new blocks awards. Today, a transaction with a zero fee can stay in the pool for several hours, as there’s competition and people are willing to pay for swift performance.
The essence of mining is being able to solve any computational problem. That problem should be simple enough, so that network participants have a stable probability of finding the answer — otherwise it would take forever to confirm a transaction. Imagine having to wait for half an hour at a store register for your bank to confirm your transaction. Nobody would be a client at that bank.
Yet at the same time the problem must be complex enough so that every netizen would not find the solution at once. Because in that case, many blocks for the same transaction get added to the chain, opening a possibility for double spending. Or even worse, the gets split into several branches and nobody can confirm which transaction was confirmed and which one wasn’t anymore.
That’s how it is for Bitcoin, but it hasn’t always been like that. Earlier, when the network was smaller, the complexity was lower, and therefore the probability of single-handedly finding a hash for a new block was higher. But bitcoin wasn’t that expensive back then, either.
No one is mining bitcoins alone anymore. Today the participants unite in special groups called mining pools, with all of them trying to find the correct hash together. If at least one of the group succeeds, the reward gets divided between the participants, depending on their contribution. In that setting, you keep mining and getting your share weekly.
Yet in other networks, solo mining is still possible. Mining Ethereum, with new blocks being added every 10 seconds, was easy until recently. Of course, the reward per block was much lower, but the chances of earning a dollar or two were higher.
That’s right, yet there are some ideas. The mining model I described is the classical one, and is called Proof-of-Work, meaning that Each node works on finding a difficult proof-of-work solving meaningless problems for their block with a pre-set probability.
But some folks out there are beginning to make blockchains with other types of mining. As of today, the second most popular concept is Proof-of-Stake. In this type of mining, the more “coins” a network member has in their account, the more likely they are to add their block to the , like the loudest kid on the block.
You are free to come up with other types of mining. As suggested earlier, that could be searching for the cure for cancer — just figure out how to keep record of each individual contribution. After all, one can announce that they’re in, and then turn off their video adapter and just do nothing. How can one measure and record each participant’s quantitative contribution to the cause of finding cure for cancer? Having sorted that out, go on, make your CancerCoin — and get your granted share of media attention.
Let’s imagine a situation in which, despite all our probability theory, two miners still managed to simultaneously find the correct solution. They start broadcasting two absolutely valid blocks over the network. Those blocks are guaranteed to be different, because even if they miraculously chose the same transactions from the pool, made absolutely identical trees and guessed the same random number (nonce), their hashes were still bound to be different, since everyone adds their own wallet number to the block in order to claim the reward.
Now we have two valid blocks, and once again, the primacy dilemma. How will the network behave in this case?
As the algorithm has it, you simply build on top of the first block you received. Both miners will receive their reward. Others may have received the blocks in a different order, and will be building (and mining) on the block they first received, discarding all other valid versions. Two valid versions exist in the Internet, as a matter of paradox.
This is a regular occurrence, where the probability theory once again proves to be useful. The network functions in such a split state, The tie gets broken as soon as someone solves the next block, making one of the chains longer. The general rule that you always immediately switch to the longest branch available as one and only true branch for the entire network kicks in.
The shorter branch, despite being all-so-correct, gets discarded by every netizen. Transactions from that branch (unless confirmed by some other block) are returned to the pool, where their processing starts anew. The miner loses his reward, as his block no longer exists.
As the network grows, such coincidences go from “very unlikely” to “well, sometimes it happens.” Old-timers recall cases where chains as long as consisting of four blocks were discarded.
Mining rewards can only be used after another 20 confirmed blocks. For Bitcoin, it takes about three hours.Having received bitcoins, one can only use them as inputs in new transactions only after another 1 to 5 confirmed clocks.Rules 1 and 2 are only configured in each client settings, yet there’s nobody there to enforce them. Yet failing to comply with them and trying to cheat the system will eventually get one’s every transaction discarded due to the rule of the longest branch available.
Now that you know everything about mining, the structure, and the longest branch rule, you might have a question whether it is possible to somehow overtake the on purpose by forging the longest chain yourself, thereby confirming your fake transactions.
Say you own the most powerful computer on Earth, that data centres of both Google and Amazon combined are at your disposal while you are trying to produce such a chain that becomes the longest one in the entire network.
You can’t just solve several blocks in the chain, all at once, for each following block in the chain. So you decide to put all your computing power of your data centers to use and solve each of the following blocks of that chain as fast as possible, as the rest of the network members continue working hard on increasing the mainstream . Is it possible to outrace them? Probably yes.
And that probability increases as your processing power gains in proportion to the rest of the network. If your processing power is over 50% in proportion to the rest, you have a 50% probability to build a longer chain, faster than everyone else put together. Theoretically, it is possible to mess with the by solving a longer sequence of blocks. In that case, other transactions of a valid network would be dismissed, and you would be the one to gain all the profits and to initiate a new milestone in the history of the cryptocurrency, namely “the split”. Once, that happened with Ethereum to a bug in its code.
But in reality, no data center is comparable in power with the rest of the world’s computers combined.
An enormous amount of computing power is available due to China’s 1.5 billion ASIC users and India’s 1.5 billion users with mining farms and low-cost electricity. There’s nobody in this world now able to compete with them all on their own, not even Google.
It’s like walking down the street, trying to convince every person in the world that USD 1 now costs EUR 1, and manage to persuade everyone before the media expose you. Having managed to do so, you would bring down the world economy. It’s possible in theory, right? Yet in practice, for some reason, nobody has succeeded so far.
That probability is what keeps the together as well: the more mining participants, the greater the security and trust of the network. Therefore the exchange rates collapses every time another mining farm is raided in China: everyone gets too afraid that somewhere in the world there used to be evil mastermind who had already managed to put together a pull of miners with ~ 49% of combined computing power.
In fact, such situations did occur several times in around 2014, with one of the mining pools temporarily gaining more power than the rest of the network — yet there was no indication to any manipulation back then.
is not some strictly defined set of algorithms. This is a structure for building an immutable (and unforgeable) network among the participants, where nobody can trust no one. If you found yourself thinking “change this and that and the system can be even better” while reading this piece, you’ve figured out , congratulations.
Some folks around the globe also managed to figure it out, and wanted to either improve it or adapt it for some of their specific tasks. Man shall not live by cryptocurrencies alone, although there are quite a few of them today. Here is a short list of some of the ideas and projects that have gained some popularity due to them reinventing the .
Ethereum is the second most popular word (after Bitcoin) one can regularly hear on the news on cripto hype. For the layman, this is just another cryptocurrency and a means of doing the trendiest thing called ICO. The developers of their website, however, describe Ethereum as a “ builder for your specific needs”. Yes, you can do that.
If you dig deeper, there’s much more to Ethereum than just a collection of coins. It is a huge global computing machine where users can run the codes of other people’s programs (smart contacts), receiving a reward for each completed line. And all of this is decentralized, indestructible, and has every guarantee of a .
The subject of Ethereum is such a broad one that one could write an entire entry like this one.
IPFS and Filecoin
IPFS in itself has nothing to do with the ; it is a distributed file storage protocol in which each participant stores only those files that they have already downloaded. Something in between BitTorrent and HTTP. However, one can reference the IPFS files all over Internet through special gateways, or even attach the system them like a regular disk on your computer, because it is FUSE-compatible.
The idea with IPFS is actually very rich, feel free to learn more on their official website, it’s ready-to-use. All you have to figure out is where to apply it. As for me, I immediately had this idea to make an archive of pirated music, having added a streaming service to top it all. Like, Napster 2.0.
But since they don’t pay money for open source, the creators of IPFS launched Filecoin, a cryptocurrency that you can earn by renting space on your HDD. Well, or spend it by renting storage from others. As to me, that was a dead idea (from the technical prospect), yet they managed to earn USD 257 million on ICO. Now the whole team can quit their jobs and go partying for the rest of their lives.
Steemit, Golos, Indorse and others
These are the platforms for posting and reposting content where the authors get remuneration. Something similar to Reddit, where the upvotes are converted to the local cryptocurrency. As with any other cryptocurrency, its value is generated from thin air, yet it is always in demand due to cripto hype and can be converted into real money.
I’ll keep my thoughts about those platforms to myself, not to give “folks from above” an excuse to ban this post. So use your imagination, for the idea is indeed beautiful.
cripto mining hosting service
While cripto mining has been critical to the growth of cripto, it has grown more difficult to mine cryptocurrencies, particularly bitcoin and Ethereum.
This has essentially cut mining revenues and made mining expensive. However, with the emergence of hosted services, it is now possible to mine significant quantities of coins without a big financial commitment.
Minery provides efficient miner hosting services which give enormous mining power for lucrative bitcoin mining. Get started today; our team of experts is available to help you find the perfect equipment, set it up, and get results as soon as possible.
A Place to Share Your Ideas
Medical records, Wikipedia with donations, distributed supercomputer, a-a-and I’ve seen an open elections project based on somewhere. If you happen to come across some interesting project or come up with ideas on your own, please leave them in the comment section right here.
 The Code Book: The Science of Secrecy from Ancient Egypt to Quantum Cryptography, by Simon Singh