用Python实现一个简易区块链,才发现这东西没那么神秘
区块链这个词听上去特别高大上,什么分布式、不可篡改、共识机制,一堆术语砸过来。我刚开始也觉得很玄乎,觉得这东西离普通人很远。后来我用Python试着写了写,发现核心逻辑其实很简单。
你可以把区块链想象成一本特殊的账本。这本账本的每一页就叫一个“区块”。每个区块里记录了一些数据,比如转账信息。更关键的是,每个区块都带着上一页的“指纹”和当前页自己的“指纹”。这个指纹就是哈希值,一串固定长度的数字字母混合码。
一旦有人想改动前一页的数据,那一页的指纹就会变。下一页还指着旧的指纹,对不上。整条链就断了。这就是不可篡改的原理,不是靠什么神秘力量,纯粹靠数学。
我用Python写了三个主要部分。先写一个区块类,它包含索引、时间戳、数据、前一个区块的哈希,还有自己的哈希。每个区块在创建时都要计算自己的哈希。计算哈希用到了Python标准库里的hashlib。代码只有几行,像下面这样。
import hashlib
hash = hashlib.sha256((str(index) + str(timestamp) + str(data) + str(previous_hash)).encode()).hexdigest()
然后写一个区块链类,用来管理整个链条。这个类里有一个列表,专门存放区块。第一个区块叫创世区块,它没有前一个区块,我们就随便给一个哈希值。然后定义一个添加区块的方法。添加区块时,先找到列表中最后一个区块的哈希,把它当成新区块的前一个哈希。
为了让链更靠谱,我开始加一个工作量证明。其实就是让每个区块的哈希值必须满足一个条件,比如哈希值的前四位必须是0。如果不满足,就让区块里的一个随机数递增,重新计算哈希,直到找到符合条件的值。这个过程在比特币里叫挖矿。我的电脑慢,只要求前四位为0,已经要算几百万次了。
写完后我跑了一遍。先创建创世区块,然后添加三个新数据块。打印出每个区块的信息,包括哈希值和前一个哈希。手动改一下第一个区块里的数据,再验证整条链。系统立刻报验证失败。那一刻确实有成就感,感觉这东西没那么遥远。
整个项目代码不到100行。没用任何第三方库,全是Python自带的。hashlib、time、json这几个就够。你可以轻松做出一个能在自己电脑上运行的微型区块链。去掉那些金融包装和营销话术,底层的技术逻辑就是哈希链表加上一点点计算游戏。
把区块链的代码从头写一遍,你会明白一件事。这个技术在工程上很有价值,但不神秘。它就是一个按特定规则维护的数据库。很多人不敢碰,是觉得太高端。其实只要你学过Python基础,知道什么是类、什么是字典,你就能搭起来。
做完这个小项目后,再去看那些区块链的白皮书,感觉就不一样了。你心里有底了。他们讲的那些共识协议、分叉、51%攻击,你都能抓到实质。这个领域的水很深,但水底的石头,你用Python已经摸过一块了。