区块链技术demo实操教程:从零写一个最小可运行区块链

区块链技术demo实操教程:从零写一个最小可运行区块链

很多人一提区块链就觉得特别高大上,什么分布式账本、共识机制、密码学哈希,听着头都大。其实想搞懂区块链,最快的办法不是看十篇科普文,而是自己动手写一个demo。一个最简单的区块链demo,代码量可能不到一百行,但写完之后你会发现,那些概念一下子就落地了。

区块链技术demo实操教程:从零写一个最小可运行区块链

区块链demo的核心原理其实很简单

抛开各种复杂概念,区块链本质上就是一条由区块连成的链。每个区块里装着三样东西:数据本身、上一个区块的哈希值、还有自己的哈希值。因为每个区块都记着前一个区块的哈希,所以它们像锁链一样环环相扣。谁要是偷偷改了历史数据,那个区块的哈希就变了,后面所有区块对不上号,整个链条立刻暴露问题。

这就是区块链防篡改的底层逻辑,听起来玄乎,其实就是哈希函数的一个特性:输入哪怕改一个字,输出都会面目全非。

用Python写一个最简版demo

下面是一个能直接跑起来的极简代码,只用Python标准库:

先定义区块类。每个区块包含索引、时间戳、数据、上一个区块的哈希和自己算出来的哈希。算哈希用hashlib里的sha256,把区块的所有字段拼成字符串再加密就行。

然后定义区块链类。初始化的时候要创建一个创世区块,也就是链条上的第一个区块,它的前一哈希是空的,因为它是老祖宗。之后每新增一个区块,就把链上最后一个区块的哈希填进新块的previous_hash字段,再算出新块自己的哈希,追加到链尾。

跑起来之后,往链里加几个区块,打印出来看,你会清楚看到每个块都牵着上一个块的手。这时候你手动篡改中间某个区块的数据,再打印一遍,链条的完整性就断了。

光有链还不够,加个工作量证明更像真的

上面的demo证明了链式结构,但缺了比特币的灵魂:挖矿。所谓工作量证明,就是要求新区块的哈希必须以若干个零开头,比如以四个零开头。因为哈希没法反推,矿工只能不断换一个叫nonce的随机数,暴力尝试,直到算出符合要求的哈希。

给demo加个mine方法,循环递增nonce重新算哈希,直到满足条件。这样一来,伪造一个区块的成本就上去了:你改了历史数据,还得把后面所有区块全部重新挖一遍,而诚实节点的链一直在增长,你根本追不上。这也是为什么demo里挖矿难度可以自己调,零越多越难挖。

这个demo能帮你理解什么

第一,理解哈希指针。区块链的不可篡改性不是靠谁监管,而是靠数学结构天然保证的。

第二,理解挖矿的意义。挖矿不是白费电,它是在给记账权设置成本,让攻击变得不划算。

第三,理解去中心化。demo里的链跑在你自己电脑上,但同样的逻辑复制到成千上万台机器上,每台都存一份完整账本,谁说了都不算,只有最长的那条合法链说了算,这就是共识的雏形。

想继续深入可以往哪走

跑通最简demo之后,升级方向很明确。第一个方向是加交易模型,把区块里的数据换成转账记录,引入余额校验,防止有人凭空造钱。第二个方向是加Merkle树,把一堆交易哈希层层合并成一个根哈希,方便快速验证某笔交易是否在区块里。第三个方向是做点对点网络,用socket或者现成的P2P库让多个节点互相同步区块,模拟真实节点的广播和竞争出块。

如果你偏爱现成工具,不想从零写,也可以直接用Hyperledger Fabric的测试网络跑一个联盟链demo,或者用以太坊的本地开发环境Hardhat写一个智能合约demo,发一个自己的代币玩玩。路线不同,但底层数据结构和你手写的那条链是一回事。

写在最后

区块链没那么神秘,一条哈希串起来的链,加一层让作恶变贵的共识规则,仅此而已。花一个下午亲手敲一个demo,比读一个月理论文章收获都大。建议你别直接复制粘贴代码,哪怕照着思路自己敲一遍,中途踩几个坑,那些坑恰恰是你真正学会的地方。等你理解了最小demo,再去看以太坊、智能合约这些进阶内容,路会顺很多。