“What is a blockchain, and what problems does it solve?”
This is the question I’ve been confronted with for the past few months; it came up whenever I told friends or family I was working on blockchain apps. In fact, I am still in the phase of understanding this emerging technology, and in the process of refining my delivery of a proper answer. I thought I might as well write down an answer, as a way to systematically think about this question.
The blockchain is “an open, distributed ledger that can record transactions between two parties efficiently and in a verifiable and permanent way.”1
In other words, when you make a transaction, thousands of participants are doing work to verify the results, talk to each other for a consensus, and persist the results to disk. This is all done through cryptography, where participants use each other’s public keys to verify the confirmation.2
Blockchains have these properties in common:
Over the years, the blockchain has evolved from currency-only Bitcoin era to a smart contract era with Ethereum. Not only can you store money in it, you can define a contract to handle settlements based on written rules.
Imagine you are playing Warcraft, and for a little while you are having a hard time obtaining some rare weapons. You don’t just go around questioning if Blizzard is giving you a hard time; you believe they have better things to do; it’s bit too risky for a big game corp to rig the game and put their name in jeopardy.
Now imagine Warcraft is run by a small workshop, Shadyclub. If you are having a hard time getting a legendary artifact, you will probably start questioning: is the chance of getting that rare item really that 2% as Shadyclub claims? Are they stopping me from getting great things so I’ll crack and pay for that lucky charm for $9.99? After all, they haven’t built up their credit as a small workshop, and they do have the incentives to grab some money and run away.
However, if that game is run on blockchain, anyone can go verify if it’s honest. At its core, the decentralized property of blockchains makes it different than the way we process, store, and transmit data — anything running on the blockchain is transparent and verifiable. So when you publish a game, you can’t just add ten thousand gold to your account, because that line of backdoor code is visible to anyone. If this is a gambling game and you claim the odd is 1:4, anyone can go to your code and verify if it’s true.
Lending from the transparency, it is easy to warrant trust on the blockchain. More importantly, it is made possible for small teams to warrant trust to a group of players.
Low transaction fees is a cliché advantage of the blockchain. When you transfer some ether to another wallet, the fees3 are around 38¢ as of writing of this post. With possible infrastructures that offer higher TPS (transactions per second), the prospective fees of transactions will only go down.
A common fiat money transfer and payment solution is Stripe. It is an industry standard for many websites accepting payments, and the fees go as much as 2.9% + 30¢. Plus 1% for international credit cards. Plus another 1% for currency conversion. Plus fees the banks impose on customers for currency conversion (2.5-5% for my Canadian credit cards). Plus any conversion rate difference from Mastercard or Visa (around 1.5%). You don’t need a comparison to know which is more cost-efficient.
Another advantage in transaction system is, Ethereum is not plagued by the precision issue of traditional bank accounts. Normally, any transaction in US Dollars is precise to 0.01 unit. It is good enough. Ethereum supports 10e-18 precisions — 17 zeroes. With this precision, business models relying on microtransactions4 may be made possible. Business models of, say, donation based readership where I have 100 articles read by 1,200 people monthly. You can ask people to set aside $1 each month to support the authors of articles they read, and that $1 is divisible into a few thousand shares.
It is not (yet) easy for anyone to adopt blockchain transactions. For the current setup with Ethereum, a new user has to:
The overall experience is confusing and inconsistent. No single party has yet controlled all of the steps above and wrapped them in a user-friendly fashion. Hopefully a better solution is put forward soon.
Any calculation on the Ethereum network asks for “gas,” a small amount of money you pay the thousands of nodes to do work.
Although it is much cheaper to make money transfers on the blockchain than on a fiat-money network, it is still too much of a cost for anything that’s deemed free in the real world. Imagine an idle game that costs you a dime each time you click a button — it’s not easy to get a huge audience. To make matters worse, the money you pay is not taken by the developer; it pays the thousands of nodes in the network to do the calculation so that the majority can reach a consensus on the computation results. Therefore, the developer cannot axe that cost for you.
On the bright side, there already are endeavors to solve the issue. Among them, Loom aims to eliminate most fees by running low security level transactions off of main net for better throughput rates. I am expecting more solutions to come in the near future.
Currently, you can add, substract, multiply and devide in Solidity, Ethereum’s programming environment. There is no built-in
Float types, let alone
Double for you to use. Anything more than that you have to write yourself. Want
pow(base, power) where parameter
power can be a float? Good luck with that!
And even if you cracked the theoretical coding problem, you still have precision to think about, since results of each division is rounded down to the nearest integer. Then there’s cost to run — do multiplication 100 times and the gas fees will skyrocket. The game will be too costly to attract enough audience and will have a hard time taking off.
Since code is law on the blockchain, it is not easy to update a game for a new economy, a new feature, or some fine-tunes of the economic parameters.
For example, when I decide that players level too quickly in my game and I want to change that, I may need to change EXP gain rate. Fortunately this is done by issues a transaction and alter a variable within the contract. The catch is, you need to have a forward looking vision and expect some fine-tunes at the beginning of the design process. You may need to plug in a “master EXP gain ratio” and use it to change EXP gain rate in the future.
Many other things are not easily changed. If I want fire, water and grass properties on players’ weapons, there’s no easy way to do that — the scope of change is larger than a few variables; it’s about some new functions. For that, a new contract has to be issued. I would need to migrate user data from the old contract to the new one as necessary — another costly move on the blockchain. After all, you are asking each and every node on the network to set aside some precious disk space and write new data for you. They would also have to talk to each other and reach a consensus. It’s a chore, both economically and physically.
It goes without saying that everything you do, you handle with extra care. It is 100 times more so on the blockchain.
You can trust transactions all you want within the blockchain network, but you can’t escape connecting to the outside. You don’t just say “I want to buy a coffee for 0.008 Ethers” and expect that get done automatically — you still need a barista verifying that transaction, and you acknowledging the receipt of the coffee physically.
For a more thorough explanation on public and private key pair encryptions, I recommend this video. In a nutshell, messages encrypted with my private key (hidden from public, hence the name) can be decrypted with my public key. I publicly announce my private key. If you can decrypt a message with my public key, it’s proof the message came from me and nobody else. ↩
The fees are variable and in high times, it spiked up to a few US dollars in January 2018. But that only lasted for about a week. ↩
I was going for “nanotransactions” since microtransactions is overused for those $0.99 diamonds your kids buy on their iPhones. ↩