Source: https://patrickmn.com/security/why-blockchain-is-so-hard-to-understand/
One of the biggest problem with blockchain (“crypto”) seems to be that nobody really understands it. We’ve all heard the explanation that you have blocks, and transactions go into blocks, and they’re signed with signatures, and then somebody mines it and then somehow there’s a new kind of money…? My friend says so, anyway.
I DONT UNDERSTAND BITCOINpic.twitter.com/nqZLI9eHHX
— Coolman Coffeedan (@coolcoffeedan) January 3, 2018
Why can’t anyone give a clear explanation of what it is?
Blockchain is difficult to understand because it isn’t one thing, but rather pieces of knowledge from a wide variety of subjects across many different disciplines–not only computer science, but economics, finance, and politics as well–that go by the name “blockchain”.
To demonstrate this, I (with help from others) compiled a (non-Merkle) tree of the subjects one needs to grasp, at least superficially, to (begin to) fully “understand blockchain”:
- Computer Science
- Algorithms
- Tree and graph traversals
- Optimizations
- Rate-limiting / backoff
- Scheduling
- Serialization
- Compilers
- Lambda calculus
- Parsers
- Turing machines and Turing completeness
- Virtual machines
- Computational Complexity
- Halting problem
- Solvability
- Data Structures
- Bloom filters
- Databases
- Key-value stores
- Tries, radix trees, and hash (Merkle) Patricia tries
- Distributed Systems
- Byzantine generals problem
- Consensus
- Adversarial consensus
- Byzantine fault tolerant consensus
- Liveness and other properties
- Distributed databases
- Sharding
- Sharding in adversarial settings
- Peer-to-peer
- Peer-to-peer in adversarial settings
- Formal methods
- Correctness proofs
- Information security
- Anonymity
- Correlation of metadata
- Minimal/selective disclosure of personal information
- Tumblers
- Fuzzing
- Operational security (OPSEC)
- Hardware wallets
- Passwords and passphrases
- Risk analysis
- Threat modeling
- Anonymity
- Programming languages
- C / C++ (Bitcoin)
- Go (Ethereum)
- JavaScript (web3)
- Solidity (Ethereum)
- Programming paradigms
- Functional programming
- Imperative programming
- Object-oriented programming
- Algorithms
- Cryptography
- Knowing which primitives to use and when
- Knowing enough not to implement your own crypto
- Symmetric ciphers
- Asymmetric
- Public/private key
- Elliptic curves
- Hash functions
- Collisions
- Preimages
- Stretching
- Secure Multi-party Computation
- Signature schemes
- BIP32 wallets
- Multisig
- Schnorr
- Shamir secret sharing
- Ring signatures
- Pedersen commitments
- zk-SNARKS
- Implications of quantum algorithms
- Oracles
- Economics
- Behavioral Economics
- Fiscal Policy
- Game Theory
- Incentives
- Monetary Policy
- Finance
- Bearer assets
- Collateral
- Compression
- Custody
- Debt
- Derivatives
- Double-entry accounting
- Escrow
- Fixed income
- Fungibility
- Futures
- Hedging
- Market manipulation
- Netting
- Pegging
- Securities
- Settlement Finality
- Shorts
- Swaps
- Mathematics
- Graph Theory
- Information Theory
- Entropy
- Randomness
- Number Theory
- Probability Theory
- Statistics
- Politics
- Geopolitics
- National cryptography suites
- Regulations
- Export controls / Wassenaar Arrangement
- Sanctions
- Tax systems
- Geopolitics
Blockchain understanding lies between the Dunning-Kruger effect and Imposter Syndrome: If you think you understand it, you don’t. If you think you don’t because there are still parts you don’t get, you probably understand it better than most.
Thanks to Amber Baldet for helping to compile this list.
Think something should be added? Let me know.