区块链到底是什么
"区块链"这个词把两个东西塞在了一起:一种数据结构(哈希链),和一套让全网对它达成一致的机制(共识)。这一章我们先把数据结构讲透——它意外地简单,简单到你可以在下面亲手挖一条链、再亲手把它砸烂。理解了"为什么改一格就全红",你就理解了"不可篡改"到底是数学意义上的什么。
先认识哈希:数字世界的封蜡印
一切从哈希函数开始。它接受任意长度的输入,吐出一个固定长度的、看起来随机的指纹。以太坊用的是 keccak-256(输出 32 字节)。它有三个对区块链至关重要的性质:
- 确定性:同样的输入永远得到同样的输出。
- 雪崩效应:输入改动 1 个比特,输出会有大约一半的位翻转,和原来毫无相似之处。
- 抗碰撞 / 单向:无法从指纹反推原文,也几乎不可能构造两段不同输入得到同一指纹。
你在 Gradle 里见过它:依赖的 sha256 校验和、APK 签名里的摘要、Git 的 commit hash,都是同一个思想。哈希就是"内容的唯一身份证":内容变一个字节,身份证就完全换一张。区块链只是把这个你早就在用的工具,拿来当"防伪封条"。
把哈希串成链
现在做一件简单的事:每个区块里除了自己的数据,还记下上一个区块的哈希。就这一下,魔法发生了。
Block N = { data: "一批交易", prevHash: // ← Block N-1 的哈希 nonce: // 一个可调的随机数,用来"挖矿" } Block N.hash = keccak256(data + prevHash + nonce)
因为每个块的哈希都依赖前一个块的哈希,而前一个又依赖它的前一个……哈希就像多米诺一样一路串到创世块。这意味着:你改动历史上任何一个块的任何一个字节,它的哈希立刻变,于是它后面所有块记录的 prevHash 全部对不上,整条链从那一点起彻底断裂、全部作废。这就是"不可篡改"的全部秘密——不是"锁住了不让改",而是"改了立刻被所有人看出来"。
00 开头
玩一下上面这个 Demo,胜过读十段文字:改早期的块,后面全红;改越早,塌得越彻底。"挖矿"在这里被具象化了——它就是不停试 nonce,直到哈希碰巧满足某个难度条件(比如以 00 开头)。想篡改一个旧块,你不仅要重挖它,还要把它之后每一个块都重新挖一遍,才能让链重新自洽。区块越深,重挖代价越天文数字——这就是"确认数越多越安全"的来源。
真实区块里装了什么
教学模型里一个块只有 data,真实的以太坊区块头字段更丰富,但思想一模一样。几个你该认识的:
| 字段 | 作用 |
|---|---|
parentHash | 上一个区块的哈希,就是我们 Demo 里的 prevHash,链之所以成链 |
stateRoot | 整个"世界状态"(所有账户余额、合约存储)的 Merkle 根,一个哈希概括全网状态 |
transactionsRoot | 本块所有交易的 Merkle 根 |
timestamp / number | 时间戳与区块高度(第几块) |
baseFeePerGas | 本块的基础 Gas 价格(EIP-1559,详见第 4 章) |
Merkle 树:一个哈希代表一百万笔交易
一个块可能装几千笔交易,总不能把它们全塞进区块头。解决办法是 Merkle 树:把交易两两哈希、再两两哈希,层层向上收敛成一个根哈希(transactionsRoot)。好处是——想证明"某笔交易确实在这个块里",你不需要下载整个块,只需要一条从叶子到根的哈希路径(几百字节)。这正是手机轻钱包能在不下载全链的情况下验证交易的原理。
Merkle 证明的思路,和你用 DiffUtil 做增量更新、或者 Git 用树对象比较目录快照,是同一种"用哈希指纹快速定位差异"的智慧。你不比对全部内容,只沿着哈希树往下走,不一致的分支才展开细看。
共识:谁有权写下一个块
数据结构解决了"改不动",还剩一个问题:全球几千个节点,该听谁的、按谁排的顺序往账本上追加新块?这就是共识机制。你会听到两个词:
- PoW(工作量证明):比拼算力,谁先算出满足难度的 nonce 谁出块。比特币至今用它,以太坊早期也用。就是我们 Demo 里那个"不停试 nonce"的过程,只是难度极高。
- PoS(权益证明):2022 年"合并"后以太坊改用它。不再拼算力,而是让质押了 32 ETH 的验证者轮流出块;作恶会被没收质押(slashing)。更省电,经济惩罚代替物理算力。
共识的细节可以写一本书,但对开发者来说,你现在只需要记住它保证的结果:全网最终对"哪条链是唯一有效的历史"达成一致。你的交易被打包进某个块、并被后续若干块确认之后,就可以认为它"板上钉钉"了。
"写进区块"不等于"永久确定"。在极短时间内,可能出现两个节点几乎同时出块导致的短暂分叉(reorg),你的交易可能被回滚重排。所以交易所常要求"等 12 个确认"再入账。开发 dApp 时,别在交易刚上链的一瞬间就把它当成终局——留意确认数。
本章小结
- 哈希是内容的唯一指纹:确定、雪崩、单向。区块链把它当防伪封条用。
- 每个块记录前一个块的哈希,串成链;改动任一历史块会让其后全部块失效——这就是不可篡改的机制。
- 挖矿 = 不停试 nonce 直到哈希满足难度;越深的块越难篡改,于是"确认越多越安全"。
- Merkle 树让一个根哈希概括海量交易,支持轻量验证;共识机制(PoW/PoS)决定谁能追加新块。