How does blockchain really work? I built an app to show you
medium.freecodecamp.org
medium.freecodecamp.org
Also, tiny nitpick, but `bc` is a common unix command, so maybe a different shortname would be better.
But hey since it is a decade later now, and iphones no longer show pictures of an address book for your contact list, maybe we can also drop the -coin and -currency monikers and call it distributed hash chain accounting networks!
There is a known quantity of hashes.
Any explanation would be greatly appreciated!
So, once you want to send money to someone else's wallet, you answer the riddle of the script (in P2PKH's case, by signing something and proving you own the public key) allowing you to do whatever you want to that Input. A key thing is that if someone pays you 3BTC and someone else pays you 2BTC, then you have 5BTC in combined inputs. To pay someone else 4BTC, you use both those Inputs and make two new ones: 4BTC P2PKH to someone else's public key, and 1BTC back to your own "change address", which is just an Input that you can reuse again.
A wallet broadcasts transactions into the network, where they float around until a miner takes those transactions, puts N of them into a block, then, as part of that block, they can use an extra magical coinbase Input which gives them 12.5BTC out of thin air (originally 50BTC, halves every so often) which they can lock under any script they want.
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.
This is the best explanation I've seen so far: https://bitcoin.stackexchange.com/questions/10050/how-balanc...
https://twitter.com/LIL_ICEBUNNY/status/887667332562202624/v...
Do we have Blockchain tutorials timeline akin to https://wiki.haskell.org/Monad_tutorials_timeline ?
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.
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.
The chain that is longest (by difficulty) is by definition a log of everything that happened. Transactions that are not part of that chain are just candidates, nothing less nothing more.
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.
I think in practice, they would ignore such a rewrite of history.
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.
Today orphan blocks aren't exactly rare there're several a month where two different pools will announce new blocks within a couple seconds of each other and one gets abandoned because it was the later one or because the other block had a new block mined from it faster.
But that's an inevitability. New block discovery only takes longer over time, and block propagation will only get more complicated as you add more users to chain.
How to know Bitcoin better? The best approach is the same as with everything else: reverse engineer and recreate a small coin in your language of choice (chain using hashes plus a simple proof of work using N leading 0s). Remember Satoshi's genius was in assembling pieces in a way nobody thought of, you just need to copy a small version of that. It's not that difficult.
For me the most interesting aspect is smart contracts [1]. That's the one underutilized element of the system that is quite versatile.
[0]: https://en.m.wikipedia.org/wiki/Byzantine_fault_tolerance#By...
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.