Chapter 1 区块链初识:数字世界的共享记账本
你有没有过被班长“冤枉”的经历?比如你明明交了10元班费,班长却记成了5元,你百口莫辩?或者班费明细被班长弄丢了,大家不知道钱花在了哪里?今天我们就来认识一个能解决这些问题的“魔法工具”——区块链,它就像一个全班共同记录的共享记账本,让每个人都成为公平的“记账小侦探”! Have you ever been "wronged" by the class monitor? For example, you clearly paid 10 yuan for the class fund, but the monitor recorded it as 5 yuan, and you couldn't explain yourself? Or the class fund details were lost by the monitor, and no one knew where the money was spent? Today we will get to know a "magic tool" that can solve these problems - blockchain, it is like a shared accounting book recorded by the whole class, making everyone a fair "accounting little detective"!
---
1.1 从班费登记本到区块链:为什么需要“大家一起记账”?
1.1.1 传统中心化记账的“三大 bug”
在认识区块链之前,我们先来看看我们最熟悉的记账方式:中心化记账 / Centralized Accounting,也就是由一个人(比如班长、老师、银行)单独保管和记录所有的账目。 这种记账方式在我们生活中非常常见,但它有三个非常明显的问题,我们以班级班费记账为例: 1. 容易丢失 / Easy to Lose:如果班长把班费登记本弄丢了,所有的交费、花销记录就都没了,大家根本不知道班费还剩多少钱,也不知道钱花在了哪里。根据我们班去年做的统计,全年级12个班里,有3个班都出现过班费登记本丢失的情况,占比高达25%! 2. 容易篡改 / Easy to Tamper:如果班长想偷偷给自己加5元班费,或者少记别人交的10元班费,只要他偷偷改一下登记本,其他人根本发现不了。去年我们班就出现过一次争议:小明说自己交了20元班费,但是班长说只记了10元,最后因为没有其他记录,只能不了了之。 3. 不透明 / Not Transparent:只有班长一个人能看到所有的账目,其他同学想知道班费买了什么、花了多少钱,只能问班长,如果班长记错了或者故意隐瞒,其他人根本没法核实。
如果用比喻来理解,中心化记账就像你一个人保管全班所有的糖果:别人不知道你有多少糖,你可以偷偷多吃,也可以说自己丢了,大家都没办法。那有没有一种方法,能让记账更公平、更可靠呢?这就是分布式账本 / Distributed Ledger,也就是区块链的核心形态。
1.1.2 分布式账本:全班一起写的“共享日记”
区块链本质上就是一种分布式账本,它没有唯一的中心记账人,所有参与者都拥有一份一模一样的完整账本,每次有新的交易发生,所有人都一起在自己的账本上记录,最后大家互相核对,确保所有人的账本都是一致的。 我们还是以班级班费为例,如果用区块链来记账,流程是这样的: 1. 全班40个同学,每个人手里都拿一个一样的笔记本,作为自己的“班费区块链账本”; 2. 每次有同学交班费,或者班委买文具、买活动道具花了钱,都会在班里大声说:“我今天交了5元班费!”“我们今天买粉笔花了3元!”; 3. 所有同学一起确认这笔交易是真的(比如确实看到小明交了5元,确实看到班长买了粉笔花了3元),然后每个人都在自己的笔记本上写下这笔记录; 4. 最后大家互相核对,确保每个人的笔记本上的记录都是一模一样的。
这种记账方式完美解决了中心化记账的三个问题:
- 不会丢失:就算有3个同学的笔记本弄丢了,其他37个同学手里都有完整的记录,随便找一个人抄一下就能补回来;
- 不会篡改:如果有一个同学偷偷把自己的笔记本上的“小明交5元”改成“小明交50元”,其他39个同学的笔记本上都记着是5元,一对比就能发现他改了,根本瞒不过去;
- 完全透明:每个人手里都有完整的账目,谁想知道班费花在了哪里,随便找一个人看一下笔记本就知道,根本不需要问班长。
---
1.2 区块链的三大核心特征
通过刚才的班费例子,我们可以总结出区块链的三大核心特征,这些都是区块链最基础、最重要的属性,小侦探们一定要记牢哦!
1.2.1 去中心化 / Decentralization
<术语>去中心化</术语>是区块链最本质的特征,它的意思是区块链没有唯一的控制中心,所有的参与者都是平等的,没有一个人能单独控制整个系统。 还是以班级班费区块链为例:班长不能一个人决定怎么花班费,也不能一个人修改记录,因为所有的记录都需要全班同学一起确认才能生效。就算班长转学了,区块链系统还能正常运行,因为其他39个同学手里都有完整的账本,照样可以一起记账。 对比我们平时用的支付宝、微信支付,它们的记账方式是中心化的:所有的交易记录都存在支付宝或者腾讯的服务器里,如果腾讯的服务器坏了,或者腾讯不想让你用支付宝了,你的钱就可能取不出来。但区块链不一样,它没有中心服务器,就算一半的节点(参与记账的电脑/人)都坏了,剩下的节点还能正常运行,根本不会瘫痪。 > 📌 <侧边栏>小侦探冷知识:比特币是全球最大的区块链应用,它的网络分布在180多个国家和地区,有超过3万个节点(也就是参与记账的电脑),就算某个国家的网络断了,比特币网络照样能正常运行,根本不会受影响。</侧边栏>
1.2.2 公开透明 / Transparency
<术语>公开透明</术语>的意思是区块链上的所有记录都是公开的,任何人都可以查看所有的交易历史,没有任何秘密。 还是以班费区块链为例:每个同学都可以随时查看所有人的账本,知道每一笔钱是怎么来的、花到了哪里,根本不需要向班长申请查看。当然,这里可能会有小朋友问:“那如果我交班费的时候不想让别人知道怎么办?”别担心,区块链可以用加密技术 / Encryption Technology把交易内容隐藏起来,只有交易双方和授权的人才能看到具体内容,其他人只能看到有一笔交易发生了,但不知道具体是什么。这个我们会在后面的章节里详细讲哦! 对比传统的银行记账:你的银行账户里有多少钱、你给谁转了账,只有你和银行知道,其他人根本看不到,这就是中心化记账的不透明。而区块链的公开透明能彻底杜绝“暗箱操作”,比如以后如果学校的奖学金发放用区块链来记录,所有人都能看到谁获得了奖学金、发了多少钱,就不会有人偷偷冒领了。
1.2.3 集体维护 / Collective Maintenance
<术语>集体维护</术语>的意思是区块链的所有数据都由所有参与者共同维护,没有一个人能单独修改或者删除数据。 还是以班费区块链为例:如果有一个同学记错了,把“买粉笔花了3元”记成了“买粉笔花了30元”,其他同学发现后,会一起投票,少数服从多数,把错误的记录纠正过来,所有人都按照正确的记录更新自己的账本。没有人能单独决定修改记录,就算班长想改,也得经过全班一半以上同学的同意才行。 对比中心化记账:如果班长记错了,只有班长自己能改,其他人根本没有发言权。而区块链的集体维护机制,让所有人都能参与监督,确保记录的正确性。
---
1.3 不可篡改性的秘密:魔法指纹与锁链结构
刚才我们讲了区块链的三大特征,其中最让人惊讶的就是不可篡改 / Immutable:一旦记录被写到区块链上,就几乎不可能被修改或者删除。这个特性是怎么实现的呢?我们还要从两个核心技术讲起:哈希函数 / Hash Function(魔法指纹)和链式结构 / Chain Structure(锁链结构)。
1.3.1 哈希函数:给内容生成独一无二的“魔法指纹”
哈希函数是区块链最核心的密码学技术之一,它的作用就像一台“魔法指纹机”:你给它任何内容(一句话、一张图片、一段视频),它都会生成一个固定长度的、独一无二的“数字指纹”,也就是<术语>哈希值 / Hash Value</术语>。 这个指纹有三个非常神奇的特性,小侦探们一定要记牢: 1. 唯一性 / Uniqueness:不同的内容生成的哈希值一定不一样,哪怕你只改了一个字、加了一个标点,哈希值都会完全变化; 2. 不可逆 / Irreversibility:你只能通过内容生成哈希值,没法通过哈希值倒推出原来的内容是什么,就像你没法通过一个人的指纹知道他的长相一样; 3. 固定长度 / Fixed Length:不管原来的内容有多长(哪怕是一整本《红楼梦》),生成的哈希值长度都是一样的,比如比特币用的SHA-256哈希函数,生成的哈希值永远是64位的16进制数。
为了让你更容易理解,我们用一个小学生能算的简单哈希函数来举例:我们规定每个汉字和数字对应一个数字(小=1,明=2,交=3,元=6,班=7,费=8,红=9,2=2,5=5,0=0,其他字符对应0),然后哈希值的计算公式是: $$H = \left( \sum_{i=1}^{n} a_i \times i \right) \mod 10000$$ 其中$H$是计算出来的哈希值,$a_i$是第$i$个字符对应的数字,$n$是字符的总个数,$\mod$是取余数运算(就是除以10000之后剩下的余数,结果永远是0到9999之间的4位数)。
我们举两个例子来算一下:
例子1:计算“小明交5元班费”的哈希值
首先把每个字对应成数字:[1(小), 2(明), 3(交), 5(5
,5,5,0,6,7,8],总共8个字符,n=8。计算累加和:$1\times1 + 2\times2 + 3\times3 + 5\times4 + 5\times5 + 0\times6 + 6\times7 +7\times8 +8\times9 = 1+4+9+20+25+0+42+56+72=229$,除以10000取余数后哈希值为0229。两个内容只差了一个数字,哈希值就从0162变成了0229,完全不一样——这就是哈希函数的唯一性在起作用:只要内容有丝毫改动,生成的指纹就会天差地别。
如果我们再计算“小红交10元班费”的哈希值,字符对应数字为[9,9,1,0,6,7,8],n=7,累加和为$9\times1+9\times2+1\times3+0\times4+6\times5+7\times6+8\times7=9+18+3+0+30+42+56=158$,哈希值为0158。你看,哪怕只是交班费的人从小明变成小红,哈希值也会完全不同,绝对不会重复。
哈希函数的这三个特性,是区块链防篡改的核心基础。如果我们把每一笔交易想象成一个“数字糖果”,哈希函数就是给这个糖果贴上一个独一无二的、撕下来就拼不回去的防伪标签,只要标签和糖果不匹配,就能立刻发现是假货。
1.3.2 链式结构:把区块串成“防拆锁链”
单个区块的哈希值只能保证当前区块的内容没被改,那如果有人偷偷改了某个区块的内容,然后把后面的区块都重写一遍呢?这时候就要用到区块链的第二个防篡改核心:链式结构 / Chain Structure。
区块链的“链”不是真的铁链,而是每个区块的“区块头”里,都会存储上一个区块的哈希值。就像我们班的笔记本,每一页的最上方都会写上上一页的页码:第一页上方写“无上一页”,第二页上方写“第一页页码是1023”,第三页上方写“第二页页码是2345”,以此类推。只要你改了某一页的内容,这一页的页码(也就是哈希值)就会变,下一页写的“上一页页码”就和实际对不上了,再下一页的“上一页页码”也会对不上,整条链从改的那一页开始就全部“断”了。
为了让你更直观地理解,我们画两条链来对比:左边是正常的班费区块链,右边是有人篡改了第二笔交易后的链: ```mermaid graph LR subgraph 正常区块链 / Normal Blockchain A[区块1<br>交易:班主任发50元启动金<br>哈希:1023<br>上一区块哈希:无] --> B[区块2<br>交易:买粉笔3元<br>哈希:2345<br>上一区块哈希:1023] B --> C[区块3<br>交易:小红交10元<br>哈希:3567<br>上一区块哈希:2345] C --> D[区块4<br>交易:买颜料5元<br>哈希:4890<br>上一区块哈希:3567] end
subgraph 篡改后的区块链 / Tampered Blockchain A1[区块1<br>交易:班主任发50元启动金<br>哈希:1023<br>上一区块哈希:无] --> B1[篡改后的区块2<br>交易:买粉笔30元(原为3元)<br>哈希:1893(原为2345)<br>上一区块哈希:1023] B1 --> C1[区块3<br>交易:小红交10元<br>哈希:3567<br>上一区块哈希:2345 ❌不匹配] C1 --> D1[区块4<br>交易:买颜料5元<br>哈希:4890<br>上一区块哈希:3567] end
style A fill:#bbf,stroke:#333,stroke-width:2px style B fill:#9f9,stroke:#333,stroke-width:2px style C fill:#9f9,stroke:#333,stroke-width:2px style D fill:#9f9,stroke:#333,stroke-width:2px style B1 fill:#f66,stroke:#333,stroke-width:2px style C1 fill:#ff9,stroke:#333,stroke-width:2px style D1 fill:#ff9,stroke:#333,stroke-width:2px ```
从图里可以看到,篡改后的区块2的哈希值从2345变成了1893,而区块3里存的“上一区块哈希”还是原来的2345,对不上了;区块4的“上一区块哈希”也和篡改后的区块3的哈希对不上。全班其他39个同学的账本里,区块2的哈希还是2345,区块3和4的上一区块哈希都是匹配的,只要一对比,立刻就能发现坏同学的账本被改了,直接排除他的版本就行。
而且,篡改的成本非常高:如果你想篡改第2个区块的内容,你需要把第2、3、4……直到最后一个区块的哈希全部重新算一遍,而且要在全班一半以上的同学都更新完账本之前完成,不然你一更新,别人就会把你的篡改版本当成错的。如果比特币网络有3万个节点,你要篡改账本,需要控制超过1.5万个节点一起陪你造假,这几乎是不可能完成的任务。
> 📌 <侧边栏>小侦探冷知识:比特币从2009年诞生到现在,已经有超过80万個区块,从来没有被篡改过一笔交易,哪怕是全球最顶尖的黑客,也没法篡改比特币的账本,这就是哈希函数+链式结构的魔力!</侧边栏>
1.3.3 默克尔树:快速验证交易有没有被改
你可能会问:如果一个区块里有100笔交易,我要验证这100笔有没有被改,是不是要算100次哈希值?当然不用,区块链用了一个叫默克尔树 / Merkle Tree的魔法工具,只需要算一次就能验证所有交易。
默克尔树的结构就像我们班的大扫除分组:把100笔交易分成50组,每组的两个交易先算出一个哈希值,得到50个中间哈希;再把这50个中间哈希分成25组,每两个算一个哈希,得到25个更上层的哈希;一直这样分组计算,直到最后得到1个最终的哈希值,也就是默克尔根 / Merkle Root,存在区块头里。
如果要验证某一笔交易有没有被改,只需要把这笔交易和它同组的交易哈希算出来,再和上层的哈希对比,一层一层往上验证,只需要计算几次就能得到结果,不需要把整个区块的所有交易都算一遍,速度非常快。比如我们班有40个同学,要验证某一个同学的班费记录有没有被改,只需要查和他同组的几个人的记录,再往上对比几次,就能确定,不用把全班40个人的记录都看一遍。
---
1.4 区块链的完整工作流程:从交易到上链
现在我们知道了区块链的三大特征、不可篡改性的原理,那从一笔交易发生,到被写到区块链上,完整的流程是什么样的呢?我们 still 用班费区块链来举例: ```mermaid graph TD A[新交易发生:小明交5元班费] --> B[小明向全班广播交易信息] B --> C[全班同学验证交易真实性:确实看到小明交了5元] C --> D{交易是否有效?} D -->|无效| E[拒绝交易,不记录] D -->|有效| F[大家把交易暂时记在“待确认池”里] F --> G[按共识机制选出一个记账人:比如小明最先算出数学题答案] G --> H[记账人把待确认池里的交易打包成一个新区块] H --> I[记账人广播新区块和答案给全班] I --> J[全班验证区块的哈希值、上一个区块哈希、交易是否有效] J -->|验证通过| K[所有人把新区块加到自己的账本末尾] J -->|验证不通过| L[拒绝区块,重新选记账人] K --> M[交易完成,所有人都能看到这笔记录] ```
这个流程里有几个关键点,小侦探们一定要记牢: 1. 交易广播 / Transaction Broadcasting:所有的交易都要先广播给所有参与者,不能偷偷记,不然别人不知道,就不认可; 2. 交易验证 / Transaction Verification:所有人都会验证交易是不是真的,比如是不是真的交了钱,是不是真的有这笔花销,假的交易不会被记录; 3. 打包成块 / Block Packaging:有效的交易会被打包成一个区块,就像把几笔交易写到笔记本的一页里; 4. 共识确认 / Consensus Confirmation:区块要被所有人验证通过,才能加到各自的账本里,少数人说了不算,必须大部分人认可才行。
---
1.5 真实世界的区块链案例:小朋友也能用到的区块链应用
区块链不是只有比特币那种虚拟货币,它在我们的生活中已经有非常多的应用了,很多都是和小朋友息息相关的: 1. 区块链证书 / Blockchain Certificate:现在很多学校已经用区块链给学生发奖状、毕业证了,比如杭州某小学从2022年开始,所有