
How does blockchain really work? I built an app to show you - imartin2k
https://medium.freecodecamp.org/how-does-blockchain-really-work-i-built-an-app-to-show-you-6b70cd4caf7d
======
phaemon
A good and interesting explanation. Though, since it doesn't mention
transactions at all, it might leave folk thinking, "So great, I've got a chain
of hashes. How is that in any way a `coin`"? A Part 2 with that concept would
be excellent.

Also, tiny nitpick, but `bc` is a common unix command, so maybe a different
shortname would be better.

~~~
libertymcateer
I actually would very much appreciate that. I was just reading Nakamoto's
whitepaper on Bitcoin [1] and I understand the hashing. However, the coinebase
transaction is still a bit confusing to me. Specifically, to get at precisely
this issue - what does the bitcoin _itself_ consist of? It is just the
summation of the history of transactions to and from an address? Or is there a
numerical value or token that is actually issued during a coinbase
transaction, and, if so, how is it generated? This is not apparent to me. I
understand that during a coinbase transaction, there is a transaction
registered that is issued to the miner and the 'from' address is null - but it
is still not clear to me, other than the _balance_ of that transaction, if
there is an actual token associated with those coins.

Any explanation would be greatly appreciated!

[1] [https://bitcoin.org/bitcoin.pdf](https://bitcoin.org/bitcoin.pdf)

~~~
Doxin
> It is just the summation of the history of transactions to and from an
> address?

It is. Imagine the blockchain as a democratic ledger. As long as most people
agree a certain transaction is valid it then _is_ valid. This allows for
tricks like creating bitcoins out of thin air as long as everyone agrees you
"deserve" those bitcoins. For example if you confirm enough of other peoples
transactions (which you can do because the ledger is public) most everyone
will agree that a transaction from nowhere to an address of your choosing is
valid.

The amount of bitcoins in your possession is just the amount of bitcoins ever
transfered to addresses to which you own the private key, minus the
transactions out of those adresses.

You shouldn't think of bitcoin as a virtual coin. That's a fairly bad
metaphor. It's not some actual thing, It's more like the balance in a ledger.

~~~
libertymcateer
Right, that was my instinct, it is just that the documentation I have seen,
including the O'Reilley bitcoin manual, on the coinbase transaction, glosses
over this point.

This is the best explanation I've seen so far:
[https://bitcoin.stackexchange.com/questions/10050/how-
balanc...](https://bitcoin.stackexchange.com/questions/10050/how-balances-are-
calculated)

------
rebuilder
Why are we now treating "blockchain" as an uncountable concrete noun? I know
it's not a new phenomenon, but it's not getting any less perplexing.

~~~
platz
I am a blockchain

[https://twitter.com/LIL_ICEBUNNY/status/887667332562202624/v...](https://twitter.com/LIL_ICEBUNNY/status/887667332562202624/video/1)

------
hdhzy
Blockchain reminds me of monads... In a way that everyone is writing tutorials
about it but the underlying concepts are quite simple.

Do we have Blockchain tutorials timeline akin to
[https://wiki.haskell.org/Monad_tutorials_timeline](https://wiki.haskell.org/Monad_tutorials_timeline)
?

~~~
atonse
I understand the cryptographic concept of a blockchain but have a bunch of
"real-world scenarios" type questions on how it actually works.

Like for example, it's a chain. I get that. But if there are thousands of
people adding to the chain all the time, how do they coordinate to make sure
they're always adding to the last block?

Because this might happen:

\- I sync and have the latest block

\- I build another block off the latest block (takes 1 second)

\- In that time, I no longer have the latest block.

Do I have to get the newest block again from the "world" and then recompute?

Wouldn't this just be never-ending? And how would this work as more people add
to the chain? Would I constantly be out of sync?

That's the kind of stuff where I'm completely lost and haven't found a good
explanation for it.

~~~
hanbura
This happens fairly frequently.

Whenever you see a new block that forms a longer chain than the chain you
currently know, you throw your work away and use that block as your new
starting point. But you only do that if the new block has a longer chain, not
for a chain of equal length.

So if two miners both mine a new block that follows the same block, one will
be seen first by some miners, the other will be seen first by others. That
gives them different mining power, meaning the chains grow with different
speed. After 1-3 blocks this mining power difference will lead to one of both
chains being longer from everyone's point of view. At that point the longer
chain won, the shorter is forgotten and all work put into it becomes
worthless.

That encourages miners to make sure they use new blocks as fast as possible.
Unless of course you have more mining power than everyone else combined.

~~~
jackhack
>the shorter is forgotten and all work put into it becomes worthless

Then one can commit work to (what is believed to be) the current, longest
chain, only to find later that a branch occurred and the work was lost? As
such it is then incumbent upon the contributor to follow the chain for some
period of time until other work has contriubted to the chain?

So how long is long enough? one contribution? ten? Serious question. How does
one know with certainty that work was accepted by group consensus?

This uncertainty seems to undermine the idea that blockchain is a trustworthy,
predictable, verifiable ledger of activity if the work contributed cannot be
known as reliably preserved at the time it is submitted, only later in review.

I admit I'm fairly ignorant of the details of this, just attempting to
understand. I hope I am misunderstanding something; somebody please steer me
back onto the path.

~~~
JamesLeonis
> So how long is long enough? one contribution? ten? Serious question.

The formal name of this is Proof Of Work (PoC). The idea is to make "mining"
blocks take non-trivial amount of computational work in order to forge another
transaction block. When a miner finds a valid nonce, it announces it to the
rest of the network so others can begin working on that chain.

When I say non-trivial amount of work, it would take my computer (nVidia 1080
@ 20MH/s) ~3.5 _years_ to mine one Ethereum block as of now. Comparatively,
the combined power in the Ethereum network (119.4 TH/s) mines blocks every 24
seconds.

Additionally, the miner that finds the correct nonce that makes a valid block
is rewarded. This incentivizes each miner to keep up to date with the latest
blockchain and abandon lagging branches and work.

> How does one know with certainty that work was accepted by group consensus?

Through these rewards and the large computational work involved in mining new
blocks, the majority of the miners aggressively gravitate to the longest
chain. That means that the longer chain continues to grow longer much faster
than the other branches. It's this aggressive growth combined with the reward
incentives on the longest chain that keeps the whole network honest. Why mine
a block that the network won't reward you for? For the individual miner, it's
in their best interests to always be working on the longest chain.

> This uncertainty seems to undermine the idea that blockchain is a
> trustworthy, predictable, verifiable ledger of activity if the work
> contributed cannot be known as reliably preserved at the time it is
> submitted, only later in review.

This is part of the security of the blockchain. This prevents malicious agents
from pushing "valid" blocks, even if they manage to get all the dots in a row.
The computational work involved in building the next block is vastly outpaced
by the general network; by the time you minted you "attack" block, _many many
many_ new blocks were already minted by the network and they won't accept your
block. This "consensus" keeps these attacks from happening.

However, this still can be attacked. If an agent gained control of the
majority of the network computational power, then they can mine blocks faster
than the honest miners, thus growing the longest chain and thus control
exactly what transactions/blocks are mined. This is referred to as the 51%
attack because they become the Consensus.

But, using my calculations above, I would need somewhere around ~6*10^6 nVidia
1080 cards all working for me to gain majority in the Ethereum network. So I
sleep comfortably at night knowing my ETH is safe.

~~~
jackhack
Superb answers, very helpful! Thank you for taking the time to compose such a
thoughtful response.

------
nonidit
In your explanation you say that "The SHA256 algorithm will calculate a unique
hash, given those inputs.".

Obviously, this can't be the case (since the number of possible hashes is
smaller than the number of inputs). It is just very unlikely, that the same
hash appears twice.

~~~
lambdaxdotx
this is quite the nitpick... for all intents and purposes, sha3_256 will _not_
collide; it's infeasible to the point that it can be said that the resulting
hash is unique. I mean, of course you are technically right, but sometimes all
the details are not worth mentioning when explaining a lot of small parts of a
bigger picture.

------
machiaweliczny
Explanation on 3blue1brown YT channel is best I've found so far

~~~
tbirrell
Link?

~~~
techer
[https://www.youtube.com/watch?v=bBC-
nXj3Ng4](https://www.youtube.com/watch?v=bBC-nXj3Ng4)

------
andrewfromx
Love this stuff but I want to make it even easier to explain to non
programmers. I just registered the domain lowsec.coin and I want to build a
new currency from start to finish in a way kids can grok. Working domain is
[https://higher.team](https://higher.team)

